@analogjs/vite-plugin-nitro 2.8.0-beta.9 → 2.8.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/vite-plugin-nitro",
3
- "version": "2.8.0-beta.9",
3
+ "version": "2.8.1-beta.1",
4
4
  "description": "A Vite plugin for adding a nitro API server",
5
5
  "type": "module",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -5,6 +5,7 @@ import { dirname, join } from 'node:path';
5
5
  import { fileURLToPath, pathToFileURL } from 'node:url';
6
6
  import { addPostRenderingHooks } from './hooks/post-rendering-hook.js';
7
7
  import { validateI18nWorkers } from './utils/i18n-workers.js';
8
+ import { createSsrStreamRenderer } from './utils/renderers.js';
8
9
  export async function buildServer(options, nitroConfig = {}, routeSourceFiles, i18nWorkers = false) {
9
10
  if (i18nWorkers && options?.i18n) {
10
11
  validateI18nWorkers(options, nitroConfig);
@@ -37,6 +38,14 @@ export async function buildServer(options, nitroConfig = {}, routeSourceFiles, i
37
38
  ...nitroConfig,
38
39
  });
39
40
  try {
41
+ if (options?.experimental?.streaming) {
42
+ nitro.hooks.hook('prerender:init', (renderer) => {
43
+ renderer.options.virtual = {
44
+ ...renderer.options.virtual,
45
+ '#ANALOG_SSR_RENDERER': createSsrStreamRenderer(true),
46
+ };
47
+ });
48
+ }
40
49
  if (options?.prerender?.postRenderingHooks) {
41
50
  addPostRenderingHooks(nitro, options.prerender.postRenderingHooks);
42
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"build-server.js","sourceRoot":"","sources":["../../../../../packages/vite-plugin-nitro/src/lib/build-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-server.js","sourceRoot":"","sources":["../../../../../packages/vite-plugin-nitro/src/lib/build-server.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import { I18nPrerenderOptions } from '../options.js';
8
8
  *
9
9
  * The default locale's routes are included both with and without the prefix
10
10
  * so that `/about` and `/en/about` both render.
11
+ * Routes that already have a configured locale prefix are kept as-is.
11
12
  *
12
13
  * @param routes - The original routes to expand
13
14
  * @param i18n - The i18n prerender configuration
@@ -6,30 +6,32 @@
6
6
  *
7
7
  * The default locale's routes are included both with and without the prefix
8
8
  * so that `/about` and `/en/about` both render.
9
+ * Routes that already have a configured locale prefix are kept as-is.
9
10
  *
10
11
  * @param routes - The original routes to expand
11
12
  * @param i18n - The i18n prerender configuration
12
13
  * @returns Expanded routes with locale prefixes
13
14
  */
14
15
  export function expandRoutesWithLocales(routes, i18n) {
15
- const expanded = [];
16
+ const expanded = new Set();
16
17
  for (const route of routes) {
17
- // Skip API routes — they don't need locale prefixes
18
- if (route.includes('/_analog/') || route.startsWith('/api/')) {
19
- expanded.push(route);
18
+ // API routes and explicitly localized routes don't need locale prefixes.
19
+ const firstSegment = route.split('/').filter(Boolean)[0];
20
+ if (route.includes('/_analog/') ||
21
+ route.startsWith('/api/') ||
22
+ i18n.locales.includes(firstSegment)) {
23
+ expanded.add(route);
20
24
  continue;
21
25
  }
22
26
  for (const locale of i18n.locales) {
23
27
  const prefix = `/${locale}`;
24
28
  const localizedRoute = route === '/' ? prefix : `${prefix}${route}`;
25
- expanded.push(localizedRoute);
29
+ expanded.add(localizedRoute);
26
30
  }
27
31
  // Keep the unprefixed route for the default locale
28
- if (!expanded.includes(route)) {
29
- expanded.push(route);
30
- }
32
+ expanded.add(route);
31
33
  }
32
- return expanded;
34
+ return [...expanded];
33
35
  }
34
36
  /**
35
37
  * Creates a post-rendering hook that injects the `lang` attribute
@@ -1 +1 @@
1
- {"version":3,"file":"i18n-prerender.js","sourceRoot":"","sources":["../../../../../../packages/vite-plugin-nitro/src/lib/utils/i18n-prerender.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAgB,EAChB,IAA0B;IAE1B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,oDAAoD;QACpD,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,cAAc,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChC,CAAC;QAED,mDAAmD;QACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAA0B;IAE1B,OAAO,KAAK,EAAE,KAAqB,EAAE,EAAE;QACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,iDAAiD;QACjD,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAa,EACb,IAA0B;IAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjC,IAAI,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACxD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC,aAAa,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc;IACtD,kCAAkC;IAClC,IAAI,wCAAwC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC,OAAO,CACjB,0CAA0C,EAC1C,WAAW,MAAM,GAAG,CACrB,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,eAAe,MAAM,GAAG,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"i18n-prerender.js","sourceRoot":"","sources":["../../../../../../packages/vite-plugin-nitro/src/lib/utils/i18n-prerender.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAgB,EAChB,IAA0B;IAE1B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,yEAAyE;QACzE,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,IACE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC3B,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EACnC,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,cAAc,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC;YACpE,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;QAED,mDAAmD;QACnD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAA0B;IAE1B,OAAO,KAAK,EAAE,KAAqB,EAAE,EAAE;QACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,iDAAiD;QACjD,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAa,EACb,IAA0B;IAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjC,IAAI,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACxD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC,aAAa,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc;IACtD,kCAAkC;IAClC,IAAI,wCAAwC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC,OAAO,CACjB,0CAA0C,EAC1C,WAAW,MAAM,GAAG,CACrB,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,eAAe,MAAM,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export declare const ssrRenderer = "\nimport { eventHandler, getResponseHeader } from 'h3';\n// @ts-ignore\nimport renderer from '#analog/ssr';\n// @ts-ignore\nimport template from '#analog/index';\n\nexport default eventHandler(async (event) => {\n const noSSR = getResponseHeader(event, 'x-analog-no-ssr');\n\n if (noSSR === 'true') {\n return template;\n }\n\n const html = await renderer(event.node.req.url, template, {\n req: event.node.req,\n res: event.node.res,\n });\n\n return html;\n});";
2
- export declare const ssrStreamRenderer = "\nimport { eventHandler, getResponseHeader, setResponseHeader } from 'h3';\n// @ts-ignore\nimport renderer from '#analog/ssr';\n// @ts-ignore\nimport template from '#analog/index';\n\nexport default eventHandler(async (event) => {\n const noSSR = getResponseHeader(event, 'x-analog-no-ssr');\n\n if (noSSR === 'true') {\n return template;\n }\n\n // renderer (main.server.ts default export via renderStream) returns a\n // ReadableStream that flushes the head first, then each @defer block as it\n // resolves. Returning the stream from the handler streams it to the client.\n const stream = await renderer(event.node.req.url, template, {\n req: event.node.req,\n res: event.node.res,\n });\n\n setResponseHeader(event, 'content-type', 'text/html;charset=utf-8');\n\n // A `streaming: false` route rule sets this header; renderStream then emits\n // the buffered render() output as a single chunk. Collect it into a string so\n // the response is a normal buffered document (content-length), not chunked.\n const noStreaming = getResponseHeader(event, 'x-analog-no-streaming');\n if (noStreaming === 'true') {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let html = '';\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n html += decoder.decode(value, { stream: true });\n }\n html += decoder.decode();\n return html;\n }\n\n // Let the runtime frame the response (h3 sets chunked TE for the Node preset;\n // HTTP/2 and edge runtimes forbid an explicit Transfer-Encoding header).\n return stream;\n});";
2
+ export declare const ssrStreamRenderer: string;
3
+ export declare function createSsrStreamRenderer(prerender?: boolean): string;
3
4
  export declare const clientRenderer = "\nimport { eventHandler } from 'h3';\n\n// @ts-ignore\nimport template from '#analog/index';\n\nexport default eventHandler(async () => {\n return template;\n});\n";
4
5
  export declare const apiMiddleware = "\nimport { createError, eventHandler, proxyRequest } from 'h3';\nimport { useRuntimeConfig } from '#imports';\n\nexport default eventHandler(async (event) => {\n const prefix = useRuntimeConfig().prefix;\n const apiPrefix = `${prefix}/${useRuntimeConfig().apiPrefix}`;\n\n const url = event.node.req.url || '';\n\n // only match the prefix on a path boundary, otherwise a URL such as\n // '/apihttp://internal-host' would pass startsWith() and be forwarded verbatim\n if (\n url === apiPrefix ||\n url.startsWith(`${apiPrefix}/`) ||\n url.startsWith(`${apiPrefix}?`)\n ) {\n let reqUrl = url.slice(apiPrefix.length);\n if (reqUrl === '' || reqUrl.startsWith('?')) {\n reqUrl = `/${reqUrl}`;\n }\n\n // reject absolute and protocol-relative targets to prevent SSRF\n if (!reqUrl.startsWith('/') || reqUrl.startsWith('//')) {\n throw createError({ statusCode: 400, statusMessage: 'Invalid API route' });\n }\n\n if (\n event.node.req.method === 'GET' &&\n // in the case of XML routes, we want to proxy the request so that nitro gets the correct headers\n // and can render the XML correctly as a static asset\n !event.node.req.url?.endsWith('.xml')\n ) {\n return $fetch(reqUrl, { headers: event.node.req.headers });\n }\n\n return proxyRequest(event, reqUrl, {\n // @ts-ignore\n fetch: $fetch.native,\n });\n }\n});";
@@ -19,7 +19,9 @@ export default eventHandler(async (event) => {
19
19
 
20
20
  return html;
21
21
  });`;
22
- export const ssrStreamRenderer = `
22
+ export const ssrStreamRenderer = createSsrStreamRenderer();
23
+ export function createSsrStreamRenderer(prerender = false) {
24
+ return `
23
25
  import { eventHandler, getResponseHeader, setResponseHeader } from 'h3';
24
26
  // @ts-ignore
25
27
  import renderer from '#analog/ssr';
@@ -33,21 +35,40 @@ export default eventHandler(async (event) => {
33
35
  return template;
34
36
  }
35
37
 
36
- // renderer (main.server.ts default export via renderStream) returns a
37
- // ReadableStream that flushes the head first, then each @defer block as it
38
- // resolves. Returning the stream from the handler streams it to the client.
39
- const stream = await renderer(event.node.req.url, template, {
40
- req: event.node.req,
41
- res: event.node.res,
42
- });
38
+ const noStreaming = ${prerender} || getResponseHeader(event, 'x-analog-no-streaming') === 'true';
39
+ const abort = new AbortController();
40
+ const response = event.node.res;
41
+ const cleanup = () => {
42
+ response.removeListener('close', disconnected);
43
+ response.removeListener('finish', cleanup);
44
+ };
45
+ const disconnected = () => {
46
+ cleanup();
47
+ if (!response.writableEnded) abort.abort();
48
+ };
49
+ response.once('close', disconnected);
50
+ response.once('finish', cleanup);
51
+
52
+ let stream;
53
+ try {
54
+ stream = await renderer(event.node.req.url, template, {
55
+ req: event.node.req,
56
+ res: response,
57
+ streaming: !noStreaming,
58
+ signal: abort.signal,
59
+ renderErrorsAsHtml: true,
60
+ });
61
+ } catch (error) {
62
+ cleanup();
63
+ throw error;
64
+ }
43
65
 
44
66
  setResponseHeader(event, 'content-type', 'text/html;charset=utf-8');
45
67
 
46
68
  // A \`streaming: false\` route rule sets this header; renderStream then emits
47
69
  // the buffered render() output as a single chunk. Collect it into a string so
48
70
  // the response is a normal buffered document (content-length), not chunked.
49
- const noStreaming = getResponseHeader(event, 'x-analog-no-streaming');
50
- if (noStreaming === 'true') {
71
+ if (noStreaming) {
51
72
  const reader = stream.getReader();
52
73
  const decoder = new TextDecoder();
53
74
  let html = '';
@@ -60,10 +81,11 @@ export default eventHandler(async (event) => {
60
81
  return html;
61
82
  }
62
83
 
63
- // Let the runtime frame the response (h3 sets chunked TE for the Node preset;
64
- // HTTP/2 and edge runtimes forbid an explicit Transfer-Encoding header).
84
+ setResponseHeader(event, 'content-encoding', 'identity');
85
+ setResponseHeader(event, 'cache-control', 'no-store, no-transform');
65
86
  return stream;
66
87
  });`;
88
+ }
67
89
  export const clientRenderer = `
68
90
  import { eventHandler } from 'h3';
69
91
 
@@ -1 +1 @@
1
- {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../../../../packages/vite-plugin-nitro/src/lib/utils/renderers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;IAoBvB,CAAC;AAEL,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4C7B,CAAC;AAEL,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;CAS7B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyCzB,CAAC"}
1
+ {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../../../../packages/vite-plugin-nitro/src/lib/utils/renderers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;IAoBvB,CAAC;AAEL,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,EAAE,CAAC;AAE3D,MAAM,UAAU,uBAAuB,CAAC,SAAS,GAAG,KAAK;IACvD,OAAO;;;;;;;;;;;;;;wBAce,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiD7B,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;CAS7B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyCzB,CAAC"}