Skip to content

Commit

Permalink
fix(#7397): update astro page entryname logic
Browse files Browse the repository at this point in the history
  • Loading branch information
natemoo-re committed Jun 15, 2023
1 parent 556fd69 commit 2bc803f
Showing 1 changed file with 18 additions and 19 deletions.
37 changes: 18 additions & 19 deletions packages/astro/src/core/build/static-build.ts
Expand Up @@ -30,7 +30,7 @@ import {
} from './plugins/plugin-pages.js';
import { RESOLVED_RENDERERS_MODULE_ID } from './plugins/plugin-renderers.js';
import { SSR_VIRTUAL_MODULE_ID } from './plugins/plugin-ssr.js';
import type { PageBuildData, StaticBuildOptions } from './types';
import type { AllPagesData, PageBuildData, StaticBuildOptions } from './types';
import { getTimeStat } from './util.js';

export async function viteBuild(opts: StaticBuildOptions) {
Expand Down Expand Up @@ -143,7 +143,7 @@ async function ssrBuild(
input: Set<string>,
container: AstroBuildPluginContainer
) {
const { settings, viteConfig } = opts;
const { allPages, settings, viteConfig } = opts;
const ssr = isServerLikeOutput(settings.config);
const out = ssr ? opts.buildConfig.server : getOutDirWithinCwd(settings.config.outDir);

Expand Down Expand Up @@ -175,7 +175,7 @@ async function ssrBuild(
...viteConfig.build?.rollupOptions?.output,
entryFileNames(chunkInfo) {
if (chunkInfo.facadeModuleId?.startsWith(ASTRO_PAGE_RESOLVED_MODULE_ID)) {
return makeAstroPageEntryPointFileName(chunkInfo.facadeModuleId);
return makeAstroPageEntryPointFileName(chunkInfo.facadeModuleId, allPages);
} else if (
// checks if the path of the module we have middleware, e.g. middleware.js / middleware/index.js
chunkInfo.moduleIds.find((m) => m.includes('middleware')) !== undefined &&
Expand Down Expand Up @@ -418,27 +418,26 @@ async function ssrMoveAssets(opts: StaticBuildOptions) {
}

/**
* This function takes as input the virtual module name of an astro page and transform
* to generate an `.mjs` file:
* This function takes the virtual module name of any page entrypoint and
* transforms it to generate a final `.mjs` output file.
*
* Input: `@astro-page:src/pages/index@_@astro`
*
* Output: `pages/index.astro.mjs`
* Input: `@astro-page:../node_modules/my-dep/injected.astro@_@astro`
* Output: `pages/injected.mjs`
*
* 1. We remove the module id prefix, `@astro-page:`
* 2. We remove `src/`
* 3. We replace square brackets with underscore, for example `[slug]`
* 4. At last, we replace the extension pattern with a simple dot
* 5. We append the `.mjs` string, so the file will always be a JS file
* 1. We clean the `facadeModuleId` by removing the `@astro-page:` prefix and `@_@astro` suffix
* 2. We find the matching route pattern in the manifest (or fallback to the cleaned module id)
* 3. We replace square brackets with underscore (`[slug]` => `_slug_`) and `...` with `` (`[...slug]` => `_---slug_`).
* 4. We append the `.mjs` extension, so the file will always be an ESM module
*
* @param facadeModuleId
* @param facadeModuleId string
* @param pages AllPagesData
*/
function makeAstroPageEntryPointFileName(facadeModuleId: string) {
return `${facadeModuleId
function makeAstroPageEntryPointFileName(facadeModuleId: string, pages: AllPagesData) {
const pageModuleId = `${facadeModuleId
.replace(ASTRO_PAGE_RESOLVED_MODULE_ID, '')
.replace('src/', '')
.replaceAll('[', '_')
.replaceAll(']', '_')
// this must be last
.replace(ASTRO_PAGE_EXTENSION_POST_PATTERN, '.')}.mjs`;
.replace(ASTRO_PAGE_EXTENSION_POST_PATTERN, '.')}`;
const name = pages[pageModuleId]?.route?.route ?? pageModuleId;
return `pages${name.replaceAll('[', '_').replaceAll(']', '_').replaceAll('...', '---')}.mjs`;
}

0 comments on commit 2bc803f

Please sign in to comment.