summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Nate Moore <natemoo-re@users.noreply.github.com> 2023-08-07 10:57:03 -0500
committerGravatar GitHub <noreply@github.com> 2023-08-07 10:57:03 -0500
commit6cd7290d2c8380bdf4d7e36f3296948d10d5bc25 (patch)
tree6faffa5512ca3b8ec3750e7974287cab6d90c2b2
parenta4a637c8f79fbbb8cc451e9155ef7b3b02c6a6d0 (diff)
downloadastro-6cd7290d2c8380bdf4d7e36f3296948d10d5bc25.tar.gz
astro-6cd7290d2c8380bdf4d7e36f3296948d10d5bc25.tar.zst
astro-6cd7290d2c8380bdf4d7e36f3296948d10d5bc25.zip
Refactor page filename logic (#7983)
* fix(#7561): refactor astro page filename logic * chore: add changeset
-rw-r--r--.changeset/early-planets-knock.md5
-rw-r--r--packages/astro/src/core/build/static-build.ts20
-rw-r--r--packages/astro/test/units/build/static-build.test.js58
3 files changed, 67 insertions, 16 deletions
diff --git a/.changeset/early-planets-knock.md b/.changeset/early-planets-knock.md
new file mode 100644
index 000000000..378e2f4b2
--- /dev/null
+++ b/.changeset/early-planets-knock.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+Fix filename generation for `.astro` pages
diff --git a/packages/astro/src/core/build/static-build.ts b/packages/astro/src/core/build/static-build.ts
index 8e3cf8fa8..95027fd5b 100644
--- a/packages/astro/src/core/build/static-build.ts
+++ b/packages/astro/src/core/build/static-build.ts
@@ -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`;
}
/**
diff --git a/packages/astro/test/units/build/static-build.test.js b/packages/astro/test/units/build/static-build.test.js
new file mode 100644
index 000000000..632b1c429
--- /dev/null
+++ b/packages/astro/test/units/build/static-build.test.js
@@ -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)
+ });
+ });
+});