mirror of
https://github.com/withastro/astro.git
synced 2025-01-20 22:12:38 -05:00
Refactor page filename logic (#7983)
* fix(#7561): refactor astro page filename logic * chore: add changeset
This commit is contained in:
parent
a4a637c8f7
commit
6cd7290d2c
3 changed files with 67 additions and 16 deletions
5
.changeset/early-planets-knock.md
Normal file
5
.changeset/early-planets-knock.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'astro': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fix filename generation for `.astro` pages
|
|
@ -445,22 +445,10 @@ export function makeAstroPageEntryPointFileName(
|
||||||
facadeModuleId: string,
|
facadeModuleId: string,
|
||||||
routes: RouteData[]
|
routes: RouteData[]
|
||||||
) {
|
) {
|
||||||
const pageModuleId = facadeModuleId
|
const pageModuleId = facadeModuleId.replace(prefix, '').replace(ASTRO_PAGE_EXTENSION_POST_PATTERN, '.');
|
||||||
.replace(prefix, '')
|
const route = routes.find((routeData) => routeData.component === pageModuleId);
|
||||||
.replace(ASTRO_PAGE_EXTENSION_POST_PATTERN, '.');
|
const name = route?.route ?? pageModuleId;
|
||||||
let route = routes.find((routeData) => {
|
return `pages${name.replace(/\/$/, '/index').replaceAll(/[\[\]]/g, '_').replaceAll('...', '---')}.astro.mjs`;
|
||||||
return routeData.route === pageModuleId;
|
|
||||||
});
|
|
||||||
let name = pageModuleId;
|
|
||||||
if (route) {
|
|
||||||
name = route.route;
|
|
||||||
}
|
|
||||||
if (name.endsWith('/')) name += 'index';
|
|
||||||
const fileName = `${name.replaceAll('[', '_').replaceAll(']', '_').replaceAll('...', '---')}.mjs`;
|
|
||||||
if (name.startsWith('..')) {
|
|
||||||
return `pages${fileName}`;
|
|
||||||
}
|
|
||||||
return fileName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
58
packages/astro/test/units/build/static-build.test.js
Normal file
58
packages/astro/test/units/build/static-build.test.js
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
import { expect } from 'chai';
|
||||||
|
import { makeAstroPageEntryPointFileName } from '../../../dist/core/build/static-build.js';
|
||||||
|
|
||||||
|
describe('astro/src/core/build', () => {
|
||||||
|
describe('makeAstroPageEntryPointFileName', () => {
|
||||||
|
const routes = [
|
||||||
|
{
|
||||||
|
route: '/',
|
||||||
|
component: 'src/pages/index.astro',
|
||||||
|
pathname: '/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
route: '/injected',
|
||||||
|
component: '../node_modules/my-dep/injected.astro',
|
||||||
|
pathname: '/injected',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
route: '/injected-workspace',
|
||||||
|
component: '../../packages/demo/[...all].astro',
|
||||||
|
pathname: undefined,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
route: '/blog/[year]/[...slug]',
|
||||||
|
component: 'src/pages/blog/[year]/[...slug].astro',
|
||||||
|
pathname: undefined,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
it('handles local pages', async () => {
|
||||||
|
const input = '@astro-page:src/pages/index@_@astro';
|
||||||
|
const output = 'pages/index.astro.mjs';
|
||||||
|
const result = makeAstroPageEntryPointFileName('@astro-page:', input, routes);
|
||||||
|
expect(result).to.equal(output)
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handles dynamic pages', async () => {
|
||||||
|
const input = '@astro-page:src/pages/blog/[year]/[...slug]@_@astro';
|
||||||
|
const output = 'pages/blog/_year_/_---slug_.astro.mjs';
|
||||||
|
const result = makeAstroPageEntryPointFileName('@astro-page:', input, routes);
|
||||||
|
expect(result).to.equal(output)
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handles node_modules pages', async () => {
|
||||||
|
const input = '@astro-page:../node_modules/my-dep/injected@_@astro';
|
||||||
|
const output = 'pages/injected.astro.mjs';
|
||||||
|
const result = makeAstroPageEntryPointFileName('@astro-page:', input, routes);
|
||||||
|
expect(result).to.equal(output)
|
||||||
|
});
|
||||||
|
|
||||||
|
// Fix #7561
|
||||||
|
it('handles local workspace pages', async () => {
|
||||||
|
const input = '@astro-page:../../packages/demo/[...all]@_@astro';
|
||||||
|
const output = 'pages/injected-workspace.astro.mjs';
|
||||||
|
const result = makeAstroPageEntryPointFileName('@astro-page:', input, routes);
|
||||||
|
expect(result).to.equal(output)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
Loading…
Add table
Reference in a new issue