summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.changeset/friendly-garlics-chew.md5
-rw-r--r--packages/astro/src/core/build/plugins/plugin-ssr.ts28
-rw-r--r--packages/astro/test/ssr-dynamic.test.js18
3 files changed, 33 insertions, 18 deletions
diff --git a/.changeset/friendly-garlics-chew.md b/.changeset/friendly-garlics-chew.md
new file mode 100644
index 000000000..cf45ecd77
--- /dev/null
+++ b/.changeset/friendly-garlics-chew.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+Fix routes created by `injectRoute` for SSR
diff --git a/packages/astro/src/core/build/plugins/plugin-ssr.ts b/packages/astro/src/core/build/plugins/plugin-ssr.ts
index ca186a727..d28ba2db0 100644
--- a/packages/astro/src/core/build/plugins/plugin-ssr.ts
+++ b/packages/astro/src/core/build/plugins/plugin-ssr.ts
@@ -151,34 +151,26 @@ function buildManifest(
}
};
- for (const pageData of eachPageData(internals)) {
- if (!pageData.route.prerender) continue;
- if (!pageData.route.pathname) continue;
+ for (const route of opts.manifest.routes) {
+ if (!route.prerender) continue;
+ if (!route.pathname) continue;
- const outFolder = getOutFolder(
- opts.settings.config,
- pageData.route.pathname!,
- pageData.route.type
- );
- const outFile = getOutFile(
- opts.settings.config,
- outFolder,
- pageData.route.pathname!,
- pageData.route.type
- );
+ const outFolder = getOutFolder(opts.settings.config, route.pathname!, route.type);
+ const outFile = getOutFile(opts.settings.config, outFolder, route.pathname!, route.type);
const file = outFile.toString().replace(opts.settings.config.build.client.toString(), '');
routes.push({
file,
links: [],
scripts: [],
styles: [],
- routeData: serializeRouteData(pageData.route, settings.config.trailingSlash),
+ routeData: serializeRouteData(route, settings.config.trailingSlash),
});
staticFiles.push(file);
}
- for (const pageData of eachPageData(internals)) {
- if (pageData.route.prerender) continue;
+ for (const route of opts.manifest.routes) {
+ const pageData = internals.pagesByComponent.get(route.component);
+ if (route.prerender || !pageData) continue;
const scripts: SerializedRouteInfo['scripts'] = [];
if (pageData.hoistedScript) {
const hoistedValue = pageData.hoistedScript.value;
@@ -217,7 +209,7 @@ function buildManifest(
.map(({ stage, content }) => ({ stage, children: content })),
],
styles,
- routeData: serializeRouteData(pageData.route, settings.config.trailingSlash),
+ routeData: serializeRouteData(route, settings.config.trailingSlash),
});
}
diff --git a/packages/astro/test/ssr-dynamic.test.js b/packages/astro/test/ssr-dynamic.test.js
index a75ace7e3..e4bb61b4a 100644
--- a/packages/astro/test/ssr-dynamic.test.js
+++ b/packages/astro/test/ssr-dynamic.test.js
@@ -11,6 +11,19 @@ describe('Dynamic pages in SSR', () => {
fixture = await loadFixture({
root: './fixtures/ssr-dynamic/',
output: 'server',
+ integrations: [
+ {
+ name: 'inject-routes',
+ hooks: {
+ 'astro:config:setup': ({ injectRoute }) => {
+ injectRoute({
+ pattern: '/path-alias/[id]',
+ entryPoint: './src/pages/api/products/[id].js',
+ });
+ },
+ },
+ },
+ ],
adapter: testAdapter(),
});
await fixture.build();
@@ -55,6 +68,11 @@ describe('Dynamic pages in SSR', () => {
expect(json.id).to.equal('33');
});
+ it('Injected route work', async () => {
+ const json = await fetchJSON('/path-alias/33');
+ expect(json.id).to.equal('33');
+ });
+
it('Public assets take priority', async () => {
const favicon = await matchRoute('/favicon.ico');
expect(favicon).to.equal(undefined);