mirror of
https://github.com/withastro/astro.git
synced 2025-01-06 22:10:10 -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,
|
||||
routes: RouteData[]
|
||||
) {
|
||||
const pageModuleId = facadeModuleId
|
||||
.replace(prefix, '')
|
||||
.replace(ASTRO_PAGE_EXTENSION_POST_PATTERN, '.');
|
||||
let route = routes.find((routeData) => {
|
||||
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;
|
||||
const pageModuleId = facadeModuleId.replace(prefix, '').replace(ASTRO_PAGE_EXTENSION_POST_PATTERN, '.');
|
||||
const route = routes.find((routeData) => routeData.component === pageModuleId);
|
||||
const name = route?.route ?? pageModuleId;
|
||||
return `pages${name.replace(/\/$/, '/index').replaceAll(/[\[\]]/g, '_').replaceAll('...', '---')}.astro.mjs`;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
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…
Reference in a new issue