@openelement/ssg 0.41.0-alpha.1 → 0.41.0-alpha.2
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 +4 -4
- package/src/build-postprocess.js +4 -4
- package/src/index.d.ts +1 -1
- package/src/index.js +1 -1
- package/src/ssg-dynamic.js +80 -21
- package/src/ssg-helpers.js +2 -18
- package/src/ssg-render.js +7 -15
- package/src/ssg-i18n.js +0 -78
- package/src/ssg-report.js +0 -172
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openelement/ssg",
|
|
3
|
-
"version": "0.41.0-alpha.
|
|
3
|
+
"version": "0.41.0-alpha.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./src/index.js",
|
|
6
6
|
"types": "./src/index.d.ts",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"deno"
|
|
24
24
|
],
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@openelement/protocol": "^0.41.0-alpha.
|
|
27
|
-
"@openelement/core": "^0.41.0-alpha.
|
|
28
|
-
"@openelement/content": "^0.41.0-alpha.
|
|
26
|
+
"@openelement/protocol": "^0.41.0-alpha.2",
|
|
27
|
+
"@openelement/core": "^0.41.0-alpha.2",
|
|
28
|
+
"@openelement/content": "^0.41.0-alpha.2"
|
|
29
29
|
}
|
|
30
30
|
}
|
package/src/build-postprocess.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* construction, and SSR artifact cleanup. This module has zero Vite
|
|
6
6
|
* dependency and only reads/writes files.
|
|
7
7
|
*/ import { join } from 'node:path';
|
|
8
|
-
import
|
|
8
|
+
import { cwd } from 'node:process';
|
|
9
9
|
import { readdir, unlink } from 'node:fs/promises';
|
|
10
10
|
import { createLogger } from '@openelement/core/logger';
|
|
11
11
|
import { buildIslandChunkMap, injectClientScript } from './postprocess.js';
|
|
@@ -15,7 +15,7 @@ const log = createLogger('core');
|
|
|
15
15
|
* Inject the island client script and generate per-page island manifests.
|
|
16
16
|
* Must only run after Phase 2 (client island build) has completed.
|
|
17
17
|
*/ export async function postProcessClientIslandBuild(ctx, scriptSrc) {
|
|
18
|
-
const root = ctx.phase3.root ||
|
|
18
|
+
const root = ctx.phase3.root || cwd();
|
|
19
19
|
const outDir = ctx.phase3.outDir || 'dist';
|
|
20
20
|
const base = ctx.phase3.base || '/';
|
|
21
21
|
const outputDir = join(root, outDir);
|
|
@@ -53,7 +53,7 @@ const log = createLogger('core');
|
|
|
53
53
|
* The SSR virtual entry bundle and its source map are build-time only
|
|
54
54
|
* and must not be deployed to static hosting.
|
|
55
55
|
*/ export async function cleanSsrArtifacts(ctx) {
|
|
56
|
-
const root = ctx.phase3.root ||
|
|
56
|
+
const root = ctx.phase3.root || cwd();
|
|
57
57
|
const outDir = ctx.phase3.outDir || 'dist';
|
|
58
58
|
try {
|
|
59
59
|
const assetsDir = join(root, outDir, 'assets');
|
|
@@ -71,4 +71,4 @@ const log = createLogger('core');
|
|
|
71
71
|
// Non-critical - assets dir may not exist in some configs
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL2J1aWxkLXBvc3Rwcm9jZXNzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG9wZW5lbGVtZW50L3NzZyAtIEFkYXB0ZXItYWdub3N0aWMgU1NHIGJ1aWxkIHBvc3QtcHJvY2Vzc2luZy5cbiAqXG4gKiBPcmNoZXN0cmF0ZXMgY2xpZW50LXNjcmlwdCBpbmplY3Rpb24sIGlzbGFuZCBjaHVuay9zdHJhdGVneS9sYXllciBtYXBcbiAqIGNvbnN0cnVjdGlvbiwgYW5kIFNTUiBhcnRpZmFjdCBjbGVhbnVwLiBUaGlzIG1vZHVsZSBoYXMgemVybyBWaXRlXG4gKiBkZXBlbmRlbmN5IGFuZCBvbmx5IHJlYWRzL3dyaXRlcyBmaWxlcy5cbiAqL1xuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyByZWFkZGlyLCB1bmxpbmsgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50TGF5ZXIsIEh5ZHJhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL2ZyYW1ld29yayc7XG5pbXBvcnQgdHlwZSB7IElzbGFuZERlY2wgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvc3NnJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb3JlL2xvZ2dlcic7XG5pbXBvcnQgeyBidWlsZElzbGFuZENodW5rTWFwLCBpbmplY3RDbGllbnRTY3JpcHQgfSBmcm9tICcuL3Bvc3Rwcm9jZXNzLmpzJztcbmltcG9ydCB7IGdlbmVyYXRlSXNsYW5kTWFuaWZlc3RzLCB3cml0ZUlzbGFuZE1hbmlmZXN0cyB9IGZyb20gJy4vaXNsYW5kLW1hbmlmZXN0LmpzJztcblxuY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKCdjb3JlJyk7XG5cbi8qKiBOYXJyb3cgdmlldyBvZiBPcGVuRWxlbWVudEJ1aWxkQ29udGV4dCB1c2VkIGJ5IHRoZSBTU0cgcG9zdC1wcm9jZXNzb3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkQ29udGV4dFZpZXcge1xuICBwaGFzZTM6IHtcbiAgICByb290OiBzdHJpbmc7XG4gICAgb3V0RGlyOiBzdHJpbmc7XG4gICAgYmFzZTogc3RyaW5nO1xuICAgIHVwZ3JhZGVTdHJhdGVneTogSHlkcmF0aW9uU3RyYXRlZ3k7XG4gIH07XG4gIHBoYXNlMToge1xuICAgIGlzbGFuZFRhZ05hbWVzOiBzdHJpbmdbXTtcbiAgICBwYWNrYWdlSXNsYW5kRGVjbHM6IElzbGFuZERlY2xbXTtcbiAgICBpc2xhbmRNZXRhOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPElzbGFuZERlY2w+PjtcbiAgfTtcbn1cblxuLyoqXG4gKiBJbmplY3QgdGhlIGlzbGFuZCBjbGllbnQgc2NyaXB0IGFuZCBnZW5lcmF0ZSBwZXItcGFnZSBpc2xhbmQgbWFuaWZlc3RzLlxuICogTXVzdCBvbmx5IHJ1biBhZnRlciBQaGFzZSAyIChjbGllbnQgaXNsYW5kIGJ1aWxkKSBoYXMgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcG9zdFByb2Nlc3NDbGllbnRJc2xhbmRCdWlsZChcbiAgY3R4OiBCdWlsZENvbnRleHRWaWV3LFxuICBzY3JpcHRTcmM6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gY3R4LnBoYXNlMy5yb290IHx8IGN3ZCgpO1xuICBjb25zdCBvdXREaXIgPSBjdHgucGhhc2UzLm91dERpciB8fCAnZGlzdCc7XG4gIGNvbnN0IGJhc2UgPSBjdHgucGhhc2UzLmJhc2UgfHwgJy8nO1xuICBjb25zdCBvdXRwdXREaXIgPSBqb2luKHJvb3QsIG91dERpcik7XG5cbiAgaW5qZWN0Q2xpZW50U2NyaXB0KG91dHB1dERpciwgc2NyaXB0U3JjKTtcblxuICBjb25zdCBpc2xhbmRUYWdOYW1lcyA9IFtcbiAgICAuLi4oY3R4LnBoYXNlMS5pc2xhbmRUYWdOYW1lcyB8fCBbXSksXG4gICAgLi4uKGN0eC5waGFzZTEucGFja2FnZUlzbGFuZERlY2xzIHx8IFtdKS5tYXAoKGlzbGFuZCkgPT4gaXNsYW5kLnRhZ05hbWUpLFxuICBdO1xuXG4gIGNvbnN0IGNodW5rTWFwID0gYnVpbGRJc2xhbmRDaHVua01hcChyb290LCBvdXREaXIsIGlzbGFuZFRhZ05hbWVzLCBiYXNlKTtcblxuICBjb25zdCBzdHJhdGVneU1hcCA9IE9iamVjdC5mcm9tRW50cmllcyhbXG4gICAgLi4uT2JqZWN0LmVudHJpZXMoY3R4LnBoYXNlMS5pc2xhbmRNZXRhIHx8IHt9KS5tYXAoKFt0YWcsIG1ldGFdKSA9PiBbXG4gICAgICB0YWcsXG4gICAgICBtZXRhLmh5ZHJhdGUgfHwgY3R4LnBoYXNlMy51cGdyYWRlU3RyYXRlZ3kgfHwgJ2lkbGUnLFxuICAgIF0pLFxuICAgIC4uLihjdHgucGhhc2UxLnBhY2thZ2VJc2xhbmREZWNscyB8fCBbXSkubWFwKChpc2xhbmQpID0+IFtcbiAgICAgIGlzbGFuZC50YWdOYW1lLFxuICAgICAgaXNsYW5kLmh5ZHJhdGUgfHwgY3R4LnBoYXNlMy51cGdyYWRlU3RyYXRlZ3kgfHwgJ2lkbGUnLFxuICAgIF0pLFxuICBdKSBhcyBSZWNvcmQ8c3RyaW5nLCBIeWRyYXRpb25TdHJhdGVneT47XG5cbiAgY29uc3QgbGF5ZXJNYXAgPSBPYmplY3QuZnJvbUVudHJpZXMoW1xuICAgIC4uLk9iamVjdC5lbnRyaWVzKGN0eC5waGFzZTEuaXNsYW5kTWV0YSB8fCB7fSkubWFwKChbdGFnLCBtZXRhXSkgPT4gW1xuICAgICAgdGFnLFxuICAgICAgbWV0YS5oeWRyYXRlID09PSAnb25seScgfHwgbWV0YS5zc3IgPT09IGZhbHNlID8gJ3B1cmUtaXNsYW5kJyA6ICdkc2QtaW50ZXJhY3RpdmUnLFxuICAgIF0pLFxuICAgIC4uLihjdHgucGhhc2UxLnBhY2thZ2VJc2xhbmREZWNscyB8fCBbXSkubWFwKChpc2xhbmQpID0+IFtcbiAgICAgIGlzbGFuZC50YWdOYW1lLFxuICAgICAgaXNsYW5kLmh5ZHJhdGUgPT09ICdvbmx5JyB8fCBpc2xhbmQuc3NyID09PSBmYWxzZSA/ICdwdXJlLWlzbGFuZCcgOiAnZHNkLWludGVyYWN0aXZlJyxcbiAgICBdKSxcbiAgXSkgYXMgUmVjb3JkPHN0cmluZywgQ29tcG9uZW50TGF5ZXI+O1xuXG4gIGNvbnN0IHBhZ2VNYW5pZmVzdHMgPSBnZW5lcmF0ZUlzbGFuZE1hbmlmZXN0cyhvdXRwdXREaXIsIGNodW5rTWFwLCBzdHJhdGVneU1hcCwgbGF5ZXJNYXApO1xuICBhd2FpdCB3cml0ZUlzbGFuZE1hbmlmZXN0cyhvdXRwdXREaXIsIHBhZ2VNYW5pZmVzdHMpO1xufVxuXG4vKipcbiAqIENsZWFuIFBoYXNlIDEgU1NSIGFydGlmYWN0cyBmcm9tIHRoZSBwdWJsaWMgZGlzdCBkaXJlY3RvcnkuXG4gKiBUaGUgU1NSIHZpcnR1YWwgZW50cnkgYnVuZGxlIGFuZCBpdHMgc291cmNlIG1hcCBhcmUgYnVpbGQtdGltZSBvbmx5XG4gKiBhbmQgbXVzdCBub3QgYmUgZGVwbG95ZWQgdG8gc3RhdGljIGhvc3RpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhblNzckFydGlmYWN0cyhjdHg6IEJ1aWxkQ29udGV4dFZpZXcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgcm9vdCA9IGN0eC5waGFzZTMucm9vdCB8fCBjd2QoKTtcbiAgY29uc3Qgb3V0RGlyID0gY3R4LnBoYXNlMy5vdXREaXIgfHwgJ2Rpc3QnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgYXNzZXRzRGlyID0gam9pbihyb290LCBvdXREaXIsICdhc3NldHMnKTtcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihhc3NldHNEaXIpLmNhdGNoKCgpID0+IFtdIGFzIHN0cmluZ1tdKTtcbiAgICBjb25zdCB0b0RlbGV0ZSA9IGVudHJpZXMuZmlsdGVyKFxuICAgICAgKGYpID0+XG4gICAgICAgIGYuc3RhcnRzV2l0aCgnX3ZpcnR1YWxfb3Blbi1ob25vLWVudHJ5JykgfHxcbiAgICAgICAgKGYuc3RhcnRzV2l0aCgnc3JjLScpICYmIGYuZW5kc1dpdGgoJy5qcycpICYmICFmLmluY2x1ZGVzKCdjbGllbnQnKSksXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGYgb2YgdG9EZWxldGUpIHtcbiAgICAgIGNvbnN0IHAgPSBqb2luKGFzc2V0c0RpciwgZik7XG4gICAgICBhd2FpdCB1bmxpbmsocCkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgbG9nLmluZm8oYENsZWFuZWQgU1NSIGFydGlmYWN0OiAke2Z9YCk7XG4gICAgfVxuICAgIGlmICh0b0RlbGV0ZS5sZW5ndGggPiAwKSB7XG4gICAgICBsb2cuaW5mbyhgUmVtb3ZlZCAke3RvRGVsZXRlLmxlbmd0aH0gdW5yZWZlcmVuY2VkIFNTUiBhcnRpZmFjdChzKSBmcm9tIGRpc3QvYXNzZXRzL2ApO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gTm9uLWNyaXRpY2FsIC0gYXNzZXRzIGRpciBtYXkgbm90IGV4aXN0IGluIHNvbWUgY29uZmlnc1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztDQU1DLEdBRUQsU0FBUyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxTQUFTLEdBQUcsUUFBUSxlQUFlO0FBQ25DLFNBQVMsT0FBTyxFQUFFLE1BQU0sUUFBUSxtQkFBbUI7QUFHbkQsU0FBUyxZQUFZLFFBQVEsMkJBQTJCO0FBQ3hELFNBQVMsbUJBQW1CLEVBQUUsa0JBQWtCLFFBQVEsbUJBQW1CO0FBQzNFLFNBQVMsdUJBQXVCLEVBQUUsb0JBQW9CLFFBQVEsdUJBQXVCO0FBRXJGLE1BQU0sTUFBTSxhQUFhO0FBaUJ6Qjs7O0NBR0MsR0FDRCxPQUFPLGVBQWUsNkJBQ3BCLEdBQXFCLEVBQ3JCLFNBQWlCO0VBRWpCLE1BQU0sT0FBTyxJQUFJLE1BQU0s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
|
package/src/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* - Parallel rendering (pool-based): render pages with concurrency limit
|
|
14
14
|
*
|
|
15
15
|
* @module @openelement/ssg
|
|
16
|
-
*/ export type { ApiRouteDecl, AppShellDecl, AppShellPlan, ClientIslandEntry, CorsOriginConfig, CspConfig, DocumentConfig, EntryDescriptor, ExternalManifest, ImportDecl, IslandDecl, MiddlewareDecl, MiddlewareScopeDecl, PageRouteDecl, ParallelRenderOptions, ParallelRenderPageOutput, ParallelRenderResult, RendererDecl, ResolvedAppShell,
|
|
16
|
+
*/ export type { ApiRouteDecl, AppShellDecl, AppShellPlan, ClientIslandEntry, CorsOriginConfig, CspConfig, DocumentConfig, EntryDescriptor, ExternalManifest, ImportDecl, IslandDecl, MiddlewareDecl, MiddlewareScopeDecl, PageRouteDecl, ParallelRenderOptions, ParallelRenderPageOutput, ParallelRenderResult, RendererDecl, ResolvedAppShell, SpeculationRulesOptions, SsgPageInput, SsgPageOutput, SsgRenderEvidence, SsgRenderOptions, SsrAdmissionPlan, SsrBundle } from '@openelement/protocol/ssg';
|
|
17
17
|
export { resolveDynamicRoutePath, ssgRender } from "./ssg-render.js";
|
|
18
18
|
export { buildIslandChunkMap, buildSpeculationRulesJson, injectClientScript, injectCspMeta, injectDsdPolyfill, injectSpeculationRules, injectViewTransitionMeta, insertAfterHead } from "./postprocess.js";
|
|
19
19
|
export { cleanSsrArtifacts, postProcessClientIslandBuild } from "./build-postprocess.js";
|
package/src/index.js
CHANGED
|
@@ -25,4 +25,4 @@ export { generateHonoEntryCode, renderEntry } from './entry-renderer.js';
|
|
|
25
25
|
export { extractCustomElementTags, generateIslandManifests, writeIslandManifests } from './island-manifest.js';
|
|
26
26
|
export { stableHash } from './ssg-helpers.js';
|
|
27
27
|
export { generateClientEntry, validateClientIslandEntry } from './entry-generators.js';
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG9wZW5lbGVtZW50L3NzZyAtIEFkYXB0ZXItYWdub3N0aWMgU1NHIGVuZ2luZS5cbiAqXG4gKiBQcm92aWRlcyBwYXJhbGxlbCBTU0cgcmVuZGVyaW5nLCBlbnRyeSBjb2RlIGdlbmVyYXRpb24sIHJvdXRlIHNjYW5uaW5nLFxuICogaXNsYW5kIG1hbmlmZXN0IGdlbmVyYXRpb24sIGFuZCBIVE1MIHBvc3QtcHJvY2Vzc2luZy5cbiAqXG4gKiBUaGlzIGVuZ2luZSBkZXBlbmRzIG9uIHByb3RvY29sLCBjb3JlLCByb3V0ZXIsIGFuZCBjb250ZW50IOKAlCBuZXZlciBvblxuICogVml0ZSBvciBhZGFwdGVyLXZpdGUuIEJ1aWxkIGFkYXB0ZXJzIChlLmcuIGFkYXB0ZXItdml0ZSkgZGVsZWdhdGUgU1NHXG4gKiBvcmNoZXN0cmF0aW9uIHRvIHRoaXMgcGFja2FnZS5cbiAqXG4gKiBBcmNoaXRlY3R1cmU6XG4gKiAgIC0gU2VxdWVudGlhbCByZW5kZXJpbmcgKGJhc2VsaW5lKTogcmVuZGVyIHBhZ2VzIG9uZSBhdCBhIHRpbWVcbiAqICAgLSBQYXJhbGxlbCByZW5kZXJpbmcgKHBvb2wtYmFzZWQpOiByZW5kZXIgcGFnZXMgd2l0aCBjb25jdXJyZW5jeSBsaW1pdFxuICpcbiAqIEBtb2R1bGUgQG9wZW5lbGVtZW50L3NzZ1xuICovXG5cbmV4cG9ydCB0eXBlIHtcbiAgQXBpUm91dGVEZWNsLFxuICBBcHBTaGVsbERlY2wsXG4gIEFwcFNoZWxsUGxhbixcbiAgQ2xpZW50SXNsYW5kRW50cnksXG4gIENvcnNPcmlnaW5Db25maWcsXG4gIENzcENvbmZpZyxcbiAgRG9jdW1lbnRDb25maWcsXG4gIEVudHJ5RGVzY3JpcHRvcixcbiAgRXh0ZXJuYWxNYW5pZmVzdCxcbiAgSW1wb3J0RGVjbCxcbiAgSXNsYW5kRGVjbCxcbiAgTWlkZGxld2FyZURlY2wsXG4gIE1pZGRsZXdhcmVTY29wZURlY2wsXG4gIFBhZ2VSb3V0ZURlY2wsXG4gIFBhcmFsbGVsUmVuZGVyT3B0aW9ucyxcbiAgUGFyYWxsZWxSZW5kZXJQYWdlT3V0cHV0LFxuICBQYXJhbGxlbFJlbmRlclJlc3VsdCxcbiAgUmVuZGVyZXJEZWNsLFxuICBSZXNvbHZlZEFwcFNoZWxsLFxuICBTcGVjdWxhdGlvblJ1bGVzT3B0aW9ucyxcbiAgU3NnUGFnZUlucHV0LFxuICBTc2dQYWdlT3V0cHV0LFxuICBTc2dSZW5kZXJFdmlkZW5jZSxcbiAgU3NnUmVuZGVyT3B0aW9ucyxcbiAgU3NyQWRtaXNzaW9uUGxhbixcbiAgU3NyQnVuZGxlLFxufSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvc3NnJztcbmV4cG9ydCB7IHJlc29sdmVEeW5hbWljUm91dGVQYXRoLCBzc2dSZW5kZXIgfSBmcm9tICcuL3NzZy1yZW5kZXIuanMnO1xuXG5leHBvcnQge1xuICBidWlsZElzbGFuZENodW5rTWFwLFxuICBidWlsZFNwZWN1bGF0aW9uUnVsZXNKc29uLFxuICBpbmplY3RDbGllbnRTY3JpcHQsXG4gIGluamVjdENzcE1ldGEsXG4gIGluamVjdERzZFBvbHlmaWxsLFxuICBpbmplY3RTcGVjdWxhdGlvblJ1bGVzLFxuICBpbmplY3RWaWV3VHJhbnNpdGlvbk1ldGEsXG4gIGluc2VydEFmdGVySGVhZCxcbn0gZnJvbSAnLi9wb3N0cHJvY2Vzcy5qcyc7XG5cbmV4cG9ydCB7IGNsZWFuU3NyQXJ0aWZhY3RzLCBwb3N0UHJvY2Vzc0NsaWVudElzbGFuZEJ1aWxkIH0gZnJvbSAnLi9idWlsZC1wb3N0cHJvY2Vzcy5qcyc7XG5leHBvcnQgdHlwZSB7IEJ1aWxkQ29udGV4dFZpZXcgfSBmcm9tICcuL2J1aWxkLXBvc3Rwcm9jZXNzLmpzJztcblxuZXhwb3J0IHsgZ2VuZXJhdGVTc3JQb2x5ZmlsbEJhbm5lciB9IGZyb20gJy4vc3NyLXBvbHlmaWxscy5qcyc7XG5leHBvcnQge1xuICBidWlsZEZhbGxiYWNrTWFuaWZlc3QsXG4gIGNvbXBsZXRlRXh0ZXJuYWxTcGVjaWZpZXJzLFxuICBleHRyYWN0RXh0ZXJuYWxTcGVjaWZpZXJzLFxuICByZXNvbHZlRXh0ZXJuYWxNYW5pZmVzdCxcbiAgcmVzb2x2ZVBhY2thZ2VFeHBvcnRzLFxuICB3YWxrRXhwb3J0cyxcbn0gZnJvbSAnLi9leHRlcm5hbC1yZXNvbHZlci5qcyc7XG5cbmV4cG9ydCB7XG4gIGRldGVjdEFuZENsYXNzaWZ5Q2VtUGFja2FnZXMsXG4gIGZpbGVUb1RhZ05hbWUsXG4gIHNjYW5DZW1NYW5pZmVzdHMsXG4gIHNjYW5Jc2xhbmRNZXRhLFxuICBzY2FuSXNsYW5kcyxcbiAgc2NhblBhY2thZ2VNYW5pZmVzdHMsXG4gIHNjYW5Sb3V0ZXMsXG59IGZyb20gJy4vcm91dGUtc2Nhbm5lci5qcyc7XG5cbmV4cG9ydCB7IGdlbmVyYXRlUm91dGVUeXBlcyB9IGZyb20gJy4vcm91dGUtdHlwZS1nZW5lcmF0b3IuanMnO1xuXG5leHBvcnQgeyBidWlsZEVudHJ5RGVzY3JpcHRvciwgYnVpbGRTc3JBZG1pc3Npb25QbGFuIH0gZnJvbSAnLi9lbnRyeS1yZW5kZXJlci5qcyc7XG5cbmV4cG9ydCB7IGdlbmVyYXRlSG9ub0VudHJ5Q29kZSwgcmVuZGVyRW50cnkgfSBmcm9tICcuL2VudHJ5LXJlbmRlcmVyLmpzJztcbmV4cG9ydCB0eXBlIHsgSG9ub0VudHJ5T3B0aW9ucyB9IGZyb20gJy4vZW50cnktcmVuZGVyZXIuanMnO1xuXG5leHBvcnQge1xuICBleHRyYWN0Q3VzdG9tRWxlbWVudFRhZ3MsXG4gIGdlbmVyYXRlSXNsYW5kTWFuaWZlc3RzLFxuICB3cml0ZUlzbGFuZE1hbmlmZXN0cyxcbn0gZnJvbSAnLi9pc2xhbmQtbWFuaWZlc3QuanMnO1xuXG5leHBvcnQgeyBzdGFibGVIYXNoIH0gZnJvbSAnLi9zc2ctaGVscGVycy5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIElzbGFuZExheWVyTWFwLFxuICBJc2xhbmRNYW5pZmVzdEVudHJ5LFxuICBJc2xhbmRTdHJhdGVneU1hcCxcbiAgUGFnZUlzbGFuZE1hbmlmZXN0LFxufSBmcm9tICcuL2lzbGFuZC1tYW5pZmVzdC5qcyc7XG5cbmV4cG9ydCB7IGdlbmVyYXRlQ2xpZW50RW50cnksIHZhbGlkYXRlQ2xpZW50SXNsYW5kRW50cnkgfSBmcm9tICcuL2VudHJ5LWdlbmVyYXRvcnMuanMnO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Q0FlQyxHQThCRCxTQUFTLHVCQUF1QixFQUFFLFNBQVMsUUFBUSxrQkFBa0I7QUFFckUsU0FDRSxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsZUFBZSxRQUNWLG1CQUFtQjtBQUUxQixTQUFTLGlCQUFpQixFQUFFLDRCQUE0QixRQUFRLHlCQUF5QjtBQUd6RixTQUFTLHlCQUF5QixRQUFRLHFCQUFxQjtBQUMvRCxTQUNFLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsV0FBVyxRQUNOLHlCQUF5QjtBQUVoQyxTQUNFLDRCQUE0QixFQUM1QixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLFVBQVUsUUFDTCxxQkFBcUI7QUFFNUIsU0FBUyxrQkFBa0IsUUFBUSw0QkFBNEI7QUFFL0QsU0FBUyxvQkFBb0IsRUFBRSxxQkFBcUIsUUFBUSxzQkFBc0I7QUFFbEYsU0FBUyxxQkFBcUIsRUFBRSxXQUFXLFFBQVEsc0JBQXNCO0FBR3pFLFNBQ0Usd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixvQkFBb0IsUUFDZix1QkFBdUI7QUFFOUIsU0FBUyxVQUFVLFFBQVEsbUJBQW1CO0FBUTlDLFNBQVMsbUJBQW1CLEVBQUUseUJBQXlCLFFBQVEsd0JBQXdCIn0=
|
package/src/ssg-dynamic.js
CHANGED
|
@@ -1,25 +1,49 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @openelement/ssg -
|
|
2
|
+
* @openelement/ssg - Route expansion
|
|
3
3
|
*
|
|
4
4
|
* Handles dynamic route rendering using getStaticPaths() + renderRoute()
|
|
5
|
-
* from the SSR bundle.
|
|
5
|
+
* from the SSR bundle, and i18n locale expansion.
|
|
6
6
|
*/ import { join } from 'node:path';
|
|
7
7
|
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
8
8
|
import { createLogger } from '@openelement/core/logger';
|
|
9
9
|
import { formatError } from '@openelement/core/errors';
|
|
10
|
-
import {
|
|
10
|
+
import { resolveDynamicRoutePath } from './ssg-helpers.js';
|
|
11
11
|
const log = createLogger('ssg');
|
|
12
|
+
function pageHtml(output) {
|
|
13
|
+
return typeof output === 'string' ? output : output.html;
|
|
14
|
+
}
|
|
15
|
+
async function writeRenderedPage(routePath, resolvedPath, params, renderRoute, options, root, outDir, locale) {
|
|
16
|
+
const targetPath = locale ? '/' + locale + '/' + resolvedPath.replace(/^\//, '') : resolvedPath;
|
|
17
|
+
const renderOpts = {
|
|
18
|
+
params,
|
|
19
|
+
title: options.html?.title,
|
|
20
|
+
headExtras: options.headExtras
|
|
21
|
+
};
|
|
22
|
+
if (locale) {
|
|
23
|
+
renderOpts.locale = locale;
|
|
24
|
+
renderOpts.lang = locale;
|
|
25
|
+
} else {
|
|
26
|
+
renderOpts.lang = options.html?.lang;
|
|
27
|
+
}
|
|
28
|
+
const output = await renderRoute(routePath, renderOpts);
|
|
29
|
+
const html = pageHtml(output);
|
|
30
|
+
const pageDir = join(root, outDir, targetPath);
|
|
31
|
+
mkdirSync(pageDir, {
|
|
32
|
+
recursive: true
|
|
33
|
+
});
|
|
34
|
+
writeFileSync(join(pageDir, 'index.html'), html, 'utf-8');
|
|
35
|
+
log.info(locale ? `i18n: ${targetPath}/index.html` : `Dynamic route: ${resolvedPath} -> ${resolvedPath}/index.html`);
|
|
36
|
+
}
|
|
12
37
|
/**
|
|
13
38
|
* Expand dynamic routes by calling getStaticPaths() and renderRoute()
|
|
14
39
|
* for each parameter set.
|
|
15
40
|
*
|
|
16
41
|
* Returns a map of static path params keyed by route path, which is
|
|
17
42
|
* consumed later when building the ISR manifest.
|
|
18
|
-
*/ export async function expandDynamicRoutes(dynamicRoutes, renderRoute, getStaticPaths, options, root, outDir
|
|
43
|
+
*/ export async function expandDynamicRoutes(dynamicRoutes, renderRoute, getStaticPaths, options, root, outDir) {
|
|
19
44
|
const staticPathParamsByRoute = new Map();
|
|
20
45
|
if (dynamicRoutes.length > 0 && renderRoute && getStaticPaths) {
|
|
21
46
|
for (const route of dynamicRoutes){
|
|
22
|
-
const paramNames = route.paramNames;
|
|
23
47
|
let paramsList;
|
|
24
48
|
try {
|
|
25
49
|
paramsList = await getStaticPaths(route.path);
|
|
@@ -35,26 +59,13 @@ const log = createLogger('ssg');
|
|
|
35
59
|
for (const params of paramsList){
|
|
36
60
|
let resolvedPath;
|
|
37
61
|
try {
|
|
38
|
-
resolvedPath = resolveDynamicRoutePath(route.path, paramNames, params);
|
|
62
|
+
resolvedPath = resolveDynamicRoutePath(route.path, route.paramNames, params);
|
|
39
63
|
} catch (e) {
|
|
40
64
|
log.warn(`Skipping unsafe dynamic route ${route.path}: ${formatError(e)}`);
|
|
41
65
|
continue;
|
|
42
66
|
}
|
|
43
67
|
try {
|
|
44
|
-
|
|
45
|
-
params,
|
|
46
|
-
title: options.html?.title,
|
|
47
|
-
lang: options.html?.lang,
|
|
48
|
-
headExtras: options.headExtras
|
|
49
|
-
});
|
|
50
|
-
const html = collectPageOutput(resolvedPath, output, pageDiagnostics);
|
|
51
|
-
const outputDir = join(root, outDir);
|
|
52
|
-
const pageDir = join(outputDir, resolvedPath);
|
|
53
|
-
mkdirSync(pageDir, {
|
|
54
|
-
recursive: true
|
|
55
|
-
});
|
|
56
|
-
writeFileSync(join(pageDir, 'index.html'), html, 'utf-8');
|
|
57
|
-
log.info(`Dynamic route: ${resolvedPath} -> ${resolvedPath}/index.html`);
|
|
68
|
+
await writeRenderedPage(route.path, resolvedPath, params, renderRoute, options, root, outDir);
|
|
58
69
|
} catch (e) {
|
|
59
70
|
log.warn(`Failed to render dynamic route ${resolvedPath}: ${formatError(e)}`);
|
|
60
71
|
}
|
|
@@ -63,4 +74,52 @@ const log = createLogger('ssg');
|
|
|
63
74
|
}
|
|
64
75
|
return staticPathParamsByRoute;
|
|
65
76
|
}
|
|
66
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Expand rendered pages for each locale when i18n is configured.
|
|
79
|
+
*
|
|
80
|
+
* For each locale and each route, re-renders the route with the locale
|
|
81
|
+
* parameter and writes output under /{locale}/{path}/index.html.
|
|
82
|
+
*/ export async function expandI18nLocales(evidence, renderRoute, routeInfo, getStaticPaths, options, root, outDir) {
|
|
83
|
+
const i18nOpts = evidence.i18nOptions || null;
|
|
84
|
+
if (!i18nOpts || !renderRoute) return;
|
|
85
|
+
const locales = i18nOpts.locales || [];
|
|
86
|
+
if (locales.length <= 1) return;
|
|
87
|
+
log.info(`i18n: expanding for locales: ${locales.join(', ')}`);
|
|
88
|
+
for (const locale of locales){
|
|
89
|
+
for (const route of routeInfo){
|
|
90
|
+
let paramsList;
|
|
91
|
+
if (!route.isDynamic) {
|
|
92
|
+
paramsList = [
|
|
93
|
+
{}
|
|
94
|
+
];
|
|
95
|
+
} else if (getStaticPaths) {
|
|
96
|
+
try {
|
|
97
|
+
paramsList = await getStaticPaths(route.path);
|
|
98
|
+
} catch {
|
|
99
|
+
log.warn(`i18n: getStaticPaths failed for ${route.path}, skipping`);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
} else {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (paramsList.length === 0) continue;
|
|
106
|
+
for (const params of paramsList){
|
|
107
|
+
let resolvedPath;
|
|
108
|
+
try {
|
|
109
|
+
resolvedPath = resolveDynamicRoutePath(route.path, route.paramNames, params);
|
|
110
|
+
} catch (e) {
|
|
111
|
+
log.warn(`i18n: skipping unsafe dynamic route ${route.path}: ${formatError(e)}`);
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const pathSegment = resolvedPath.split('/')[1] || '';
|
|
115
|
+
if (locales.includes(pathSegment)) continue;
|
|
116
|
+
try {
|
|
117
|
+
await writeRenderedPage(route.path, resolvedPath, params, renderRoute, options, root, outDir, locale);
|
|
118
|
+
} catch (e) {
|
|
119
|
+
log.warn(`i18n: failed for locale ${locale} on ${resolvedPath}: ${formatError(e)}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL3NzZy1keW5hbWljLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG9wZW5lbGVtZW50L3NzZyAtIFJvdXRlIGV4cGFuc2lvblxuICpcbiAqIEhhbmRsZXMgZHluYW1pYyByb3V0ZSByZW5kZXJpbmcgdXNpbmcgZ2V0U3RhdGljUGF0aHMoKSArIHJlbmRlclJvdXRlKClcbiAqIGZyb20gdGhlIFNTUiBidW5kbGUsIGFuZCBpMThuIGxvY2FsZSBleHBhbnNpb24uXG4gKi9cblxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBta2RpclN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB0eXBlIHsgU3NnUGFnZU91dHB1dCwgU3NnUmVuZGVyRXZpZGVuY2UsIFNzZ1JlbmRlck9wdGlvbnMgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvc3NnJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb3JlL2xvZ2dlcic7XG5pbXBvcnQgeyBmb3JtYXRFcnJvciB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb3JlL2Vycm9ycyc7XG5pbXBvcnQgeyByZXNvbHZlRHluYW1pY1JvdXRlUGF0aCB9IGZyb20gJy4vc3NnLWhlbHBlcnMuanMnO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ3NzZycpO1xuXG5pbnRlcmZhY2UgUm91dGVJbmZvSXRlbSB7XG4gIHBhdGg6IHN0cmluZztcbiAgdGFnTmFtZTogc3RyaW5nO1xuICBpc0R5bmFtaWM6IGJvb2xlYW47XG4gIHBhcmFtTmFtZXM6IHN0cmluZ1tdO1xuICByZXZhbGlkYXRlPzogbnVtYmVyO1xuICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG50eXBlIFJlbmRlclJvdXRlRm4gPVxuICB8ICgocGF0aDogc3RyaW5nLCBvcHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8U3NnUGFnZU91dHB1dD4pXG4gIHwgdW5kZWZpbmVkO1xuXG50eXBlIEdldFN0YXRpY1BhdGhzRm4gPVxuICB8ICgocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+PilcbiAgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIHBhZ2VIdG1sKG91dHB1dDogU3NnUGFnZU91dHB1dCB8IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnc3RyaW5nJyA/IG91dHB1dCA6IG91dHB1dC5odG1sO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZVJlbmRlcmVkUGFnZShcbiAgcm91dGVQYXRoOiBzdHJpbmcsXG4gIHJlc29sdmVkUGF0aDogc3RyaW5nLFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIHJlbmRlclJvdXRlOiBOb25OdWxsYWJsZTxSZW5kZXJSb3V0ZUZuPixcbiAgb3B0aW9uczogU3NnUmVuZGVyT3B0aW9ucyxcbiAgcm9vdDogc3RyaW5nLFxuICBvdXREaXI6IHN0cmluZyxcbiAgbG9jYWxlPzogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRhcmdldFBhdGggPSBsb2NhbGUgPyAnLycgKyBsb2NhbGUgKyAnLycgKyByZXNvbHZlZFBhdGgucmVwbGFjZSgvXlxcLy8sICcnKSA6IHJlc29sdmVkUGF0aDtcblxuICBjb25zdCByZW5kZXJPcHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBwYXJhbXMsXG4gICAgdGl0bGU6IG9wdGlvbnMuaHRtbD8udGl0bGUsXG4gICAgaGVhZEV4dHJhczogb3B0aW9ucy5oZWFkRXh0cmFzLFxuICB9O1xuICBpZiAobG9jYWxlKSB7XG4gICAgcmVuZGVyT3B0cy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcmVuZGVyT3B0cy5sYW5nID0gbG9jYWxlO1xuICB9IGVsc2Uge1xuICAgIHJlbmRlck9wdHMubGFuZyA9IG9wdGlvbnMuaHRtbD8ubGFuZztcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJlbmRlclJvdXRlKHJvdXRlUGF0aCwgcmVuZGVyT3B0cyk7XG4gIGNvbnN0IGh0bWwgPSBwYWdlSHRtbChvdXRwdXQpO1xuXG4gIGNvbnN0IHBhZ2VEaXIgPSBqb2luKHJvb3QsIG91dERpciwgdGFyZ2V0UGF0aCk7XG4gIG1rZGlyU3luYyhwYWdlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhqb2luKHBhZ2VEaXIsICdpbmRleC5odG1sJyksIGh0bWwsICd1dGYtOCcpO1xuXG4gIGxvZy5pbmZvKFxuICAgIGxvY2FsZVxuICAgICAgPyBgaTE4bjogJHt0YXJnZXRQYXRofS9pbmRleC5odG1sYFxuICAgICAgOiBgRHluYW1pYyByb3V0ZTogJHtyZXNvbHZlZFBhdGh9IC0+ICR7cmVzb2x2ZWRQYXRofS9pbmRleC5odG1sYCxcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHBhbmQgZHluYW1pYyByb3V0ZXMgYnkgY2FsbGluZyBnZXRTdGF0aWNQYXRocygpIGFuZCByZW5kZXJSb3V0ZSgpXG4gKiBmb3IgZWFjaCBwYXJhbWV0ZXIgc2V0LlxuICpcbiAqIFJldHVybnMgYSBtYXAgb2Ygc3RhdGljIHBhdGggcGFyYW1zIGtleWVkIGJ5IHJvdXRlIHBhdGgsIHdoaWNoIGlzXG4gKiBjb25zdW1lZCBsYXRlciB3aGVuIGJ1aWxkaW5nIHRoZSBJU1IgbWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmREeW5hbWljUm91dGVzKFxuICBkeW5hbWljUm91dGVzOiBSb3V0ZUluZm9JdGVtW10sXG4gIHJlbmRlclJvdXRlOiBSZW5kZXJSb3V0ZUZuLFxuICBnZXRTdGF0aWNQYXRoczogR2V0U3RhdGljUGF0aHNGbixcbiAgb3B0aW9uczogU3NnUmVuZGVyT3B0aW9ucyxcbiAgcm9vdDogc3RyaW5nLFxuICBvdXREaXI6IHN0cmluZyxcbik6IFByb21pc2U8TWFwPHN0cmluZywgQXJyYXk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4+PiB7XG4gIGNvbnN0IHN0YXRpY1BhdGhQYXJhbXNCeVJvdXRlID0gbmV3IE1hcDxzdHJpbmcsIEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+PigpO1xuXG4gIGlmIChkeW5hbWljUm91dGVzLmxlbmd0aCA+IDAgJiYgcmVuZGVyUm91dGUgJiYgZ2V0U3RhdGljUGF0aHMpIHtcbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIGR5bmFtaWNSb3V0ZXMpIHtcbiAgICAgIGxldCBwYXJhbXNMaXN0OiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcmFtc0xpc3QgPSBhd2FpdCBnZXRTdGF0aWNQYXRocyhyb3V0ZS5wYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLndhcm4oYEZhaWxlZCB0byBnZXQgc3RhdGljIHBhdGhzIGZvciAke3JvdXRlLnBhdGh9OiAke2Zvcm1hdEVycm9yKGUpfWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHN0YXRpY1BhdGhQYXJhbXNCeVJvdXRlLnNldChyb3V0ZS5wYXRoLCBwYXJhbXNMaXN0KTtcblxuICAgICAgaWYgKHBhcmFtc0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGxvZy5pbmZvKGBEeW5hbWljIHJvdXRlICR7cm91dGUucGF0aH0gaGFzIG5vIHN0YXRpYyBwYXRocyAtIHNraXBwaW5nYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHBhcmFtcyBvZiBwYXJhbXNMaXN0KSB7XG4gICAgICAgIGxldCByZXNvbHZlZFBhdGg6IHN0cmluZztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlRHluYW1pY1JvdXRlUGF0aChyb3V0ZS5wYXRoLCByb3V0ZS5wYXJhbU5hbWVzLCBwYXJhbXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLndhcm4oYFNraXBwaW5nIHVuc2FmZSBkeW5hbWljIHJvdXRlICR7cm91dGUucGF0aH06ICR7Zm9ybWF0RXJyb3IoZSl9YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdyaXRlUmVuZGVyZWRQYWdlKFxuICAgICAgICAgICAgcm91dGUucGF0aCxcbiAgICAgICAgICAgIHJlc29sdmVkUGF0aCxcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHJlbmRlclJvdXRlLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBvdXREaXIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy53YXJuKGBGYWlsZWQgdG8gcmVuZGVyIGR5bmFtaWMgcm91dGUgJHtyZXNvbHZlZFBhdGh9OiAke2Zvcm1hdEVycm9yKGUpfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRpY1BhdGhQYXJhbXNCeVJvdXRlO1xufVxuXG4vKipcbiAqIEV4cGFuZCByZW5kZXJlZCBwYWdlcyBmb3IgZWFjaCBsb2NhbGUgd2hlbiBpMThuIGlzIGNvbmZpZ3VyZWQuXG4gKlxuICogRm9yIGVhY2ggbG9jYWxlIGFuZCBlYWNoIHJvdXRlLCByZS1yZW5kZXJzIHRoZSByb3V0ZSB3aXRoIHRoZSBsb2NhbGVcbiAqIHBhcmFtZXRlciBhbmQgd3JpdGVzIG91dHB1dCB1bmRlciAve2xvY2FsZX0ve3BhdGh9L2luZGV4Lmh0bWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRJMThuTG9jYWxlcyhcbiAgZXZpZGVuY2U6IFNzZ1JlbmRlckV2aWRlbmNlLFxuICByZW5kZXJSb3V0ZTogUmVuZGVyUm91dGVGbixcbiAgcm91dGVJbmZvOiBSb3V0ZUluZm9JdGVtW10sXG4gIGdldFN0YXRpY1BhdGhzOiBHZXRTdGF0aWNQYXRoc0ZuLFxuICBvcHRpb25zOiBTc2dSZW5kZXJPcHRpb25zLFxuICByb290OiBzdHJpbmcsXG4gIG91dERpcjogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGkxOG5PcHRzID0gZXZpZGVuY2UuaTE4bk9wdGlvbnMgfHwgbnVsbDtcbiAgaWYgKCFpMThuT3B0cyB8fCAhcmVuZGVyUm91dGUpIHJldHVybjtcblxuICBjb25zdCBsb2NhbGVzOiBzdHJpbmdbXSA9IGkxOG5PcHRzLmxvY2FsZXMgfHwgW107XG4gIGlmIChsb2NhbGVzLmxlbmd0aCA8PSAxKSByZXR1cm47XG5cbiAgbG9nLmluZm8oYGkxOG46IGV4cGFuZGluZyBmb3IgbG9jYWxlczogJHtsb2NhbGVzLmpvaW4oJywgJyl9YCk7XG4gIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlSW5mbykge1xuICAgICAgbGV0IHBhcmFtc0xpc3Q6IEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICAgICAgaWYgKCFyb3V0ZS5pc0R5bmFtaWMpIHtcbiAgICAgICAgcGFyYW1zTGlzdCA9IFt7fV07XG4gICAgICB9IGVsc2UgaWYgKGdldFN0YXRpY1BhdGhzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGFyYW1zTGlzdCA9IGF3YWl0IGdldFN0YXRpY1BhdGhzKHJvdXRlLnBhdGgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBsb2cud2FybihgaTE4bjogZ2V0U3RhdGljUGF0aHMgZmFpbGVkIGZvciAke3JvdXRlLnBhdGh9LCBza2lwcGluZ2ApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXNMaXN0Lmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgIGZvciAoY29uc3QgcGFyYW1zIG9mIHBhcmFtc0xpc3QpIHtcbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aDogc3RyaW5nO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHJlc29sdmVEeW5hbWljUm91dGVQYXRoKHJvdXRlLnBhdGgsIHJvdXRlLnBhcmFtTmFtZXMsIHBhcmFtcyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cud2FybihgaTE4bjogc2tpcHBpbmcgdW5zYWZlIGR5bmFtaWMgcm91dGUgJHtyb3V0ZS5wYXRofTogJHtmb3JtYXRFcnJvcihlKX1gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhdGhTZWdtZW50ID0gcmVzb2x2ZWRQYXRoLnNwbGl0KCcvJylbMV0gfHwgJyc7XG4gICAgICAgIGlmIChsb2NhbGVzLmluY2x1ZGVzKHBhdGhTZWdtZW50KSkgY29udGludWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3cml0ZVJlbmRlcmVkUGFnZShcbiAgICAgICAgICAgIHJvdXRlLnBhdGgsXG4gICAgICAgICAgICByZXNvbHZlZFBhdGgsXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICByZW5kZXJSb3V0ZSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgb3V0RGlyLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cud2FybihgaTE4bjogZmFpbGVkIGZvciBsb2NhbGUgJHtsb2NhbGV9IG9uICR7cmVzb2x2ZWRQYXRofTogJHtmb3JtYXRFcnJvcihlKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAg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
|
package/src/ssg-helpers.js
CHANGED
|
@@ -38,7 +38,7 @@ import { createIsrCacheKey } from '@openelement/core/isr';
|
|
|
38
38
|
throw new Error(`Missing value for route parameter "${name}" in ${routePath}`);
|
|
39
39
|
}
|
|
40
40
|
const value = String(raw);
|
|
41
|
-
if (value === '.' || value === '..' || /[
|
|
41
|
+
if (value === '.' || value === '..' || /[\\/\0]/.test(value)) {
|
|
42
42
|
throw new Error(`Unsafe value for route parameter "${name}" in ${routePath}: ${value}`);
|
|
43
43
|
}
|
|
44
44
|
// Encode spaces and other URL-unsafe chars, but preserve @ for scoped packages.
|
|
@@ -77,20 +77,4 @@ export function buildIsrManifestEntries(routeInfo, staticPathParamsByRoute) {
|
|
|
77
77
|
}
|
|
78
78
|
return entries;
|
|
79
79
|
}
|
|
80
|
-
|
|
81
|
-
* Collect per-page render diagnostics (backward-compat with string output).
|
|
82
|
-
* Returns the rendered HTML string.
|
|
83
|
-
*/ export function collectPageOutput(routePath, output, pageDiagnostics) {
|
|
84
|
-
const html = typeof output === 'string' ? output : output.html;
|
|
85
|
-
if (typeof output !== 'string') {
|
|
86
|
-
pageDiagnostics.push({
|
|
87
|
-
path: routePath,
|
|
88
|
-
errors: output.errors,
|
|
89
|
-
hydrationHints: output.hydrationHints,
|
|
90
|
-
componentCount: output.componentCount,
|
|
91
|
-
renderTimeMs: output.renderTimeMs
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
return html;
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL3NzZy1oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG9wZW5lbGVtZW50L3NzZyAtIFNTRyBoZWxwZXIgdXRpbGl0aWVzXG4gKlxuICogUHVyZSB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBTU0cgcmVuZGVyIHBpcGVsaW5lLlxuICogVGhpcyBtb2R1bGUgc2l0cyBhdCB0aGUgYm90dG9tIG9mIHRoZSBkZXBlbmRlbmN5IGdyYXBoLlxuICovXG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcmVhZGRpclN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB0eXBlIHsgSHlkcmF0aW9uSGludCwgUmVuZGVyRXJyb3IgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvcmVuZGVyJztcbmltcG9ydCB0eXBlIHsgSXNyTWFuaWZlc3RFbnRyeSB9IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9mcmFtZXdvcmsnO1xuaW1wb3J0IHsgY3JlYXRlSXNyQ2FjaGVLZXkgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9pc3InO1xuXG4vLyDilIDilIDilIAgUGF0aCAvIFVSTCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogUmVjdXJzaXZlbHkgZmluZCBhbGwgLmh0bWwgZmlsZXMgdW5kZXIgYSBkaXJlY3RvcnkuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEh0bWxGaWxlcyhkaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0czogc3RyaW5nW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyaWVzID0gcmVhZGRpclN5bmMoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4oZGlyLCBlbnRyeS5uYW1lKTtcbiAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCguLi5maW5kSHRtbEZpbGVzKGZ1bGxQYXRoKSk7XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy5odG1sJykpIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKGZ1bGxQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIERpcmVjdG9yeSBtYXkgbm90IGV4aXN0IHlldFxuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vLyDilIDilIDilIAgUm91dGUgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBSZXNvbHZlIGEgZHluYW1pYyByb3V0ZSBwYXRoIGJ5IHN1YnN0aXR1dGluZyBwYXJhbSB2YWx1ZXMuXG4gKiBWYWxpZGF0ZXMgcGFyYW0gdmFsdWVzIHRvIHByZXZlbnQgcGF0aCB0cmF2ZXJzYWwgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVEeW5hbWljUm91dGVQYXRoKFxuICByb3V0ZVBhdGg6IHN0cmluZyxcbiAgcGFyYW1OYW1lczogc3RyaW5nW10sXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IHN0cmluZyB7XG4gIGxldCByZXNvbHZlZFBhdGggPSByb3V0ZVBhdGg7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBwYXJhbU5hbWVzKSB7XG4gICAgY29uc3QgcmF3ID0gcGFyYW1zW25hbWVdO1xuICAgIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09IG51bGwgfHwgcmF3ID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWlzc2luZyB2YWx1ZSBmb3Igcm91dGUgcGFyYW1ldGVyIFwiJHtuYW1lfVwiIGluICR7cm91dGVQYXRofWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gU3RyaW5nKHJhdyk7XG4gICAgaWYgKFxuICAgICAgdmFsdWUgPT09ICcuJyB8fFxuICAgICAgdmFsdWUgPT09ICcuLicgfHxcbiAgICAgIC9bXFxcXC9dLy50ZXN0KHZhbHVlKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5zYWZlIHZhbHVlIGZvciByb3V0ZSBwYXJhbWV0ZXIgXCIke25hbWV9XCIgaW4gJHtyb3V0ZVBhdGh9OiAke3ZhbHVlfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVuY29kZSBzcGFjZXMgYW5kIG90aGVyIFVSTC11bnNhZmUgY2hhcnMsIGJ1dCBwcmVzZXJ2ZSBAIGZvciBzY29wZWQgcGFja2FnZXMuXG4gICAgLy8gRnVsbCBlbmNvZGVVUklDb21wb25lbnQgd291bGQgZW5jb2RlIEAgLT4gJTQwLCBicmVha2luZyBmaWxlLXRvLVVSTCBtYXRjaGluZy5cbiAgICBjb25zdCBzYWZlVmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8gL2csICclMjAnKTtcbiAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlZFBhdGgucmVwbGFjZShgOiR7bmFtZX1gLCBzYWZlVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXNvbHZlZFBhdGg7XG59XG5cbi8vIOKUgOKUgOKUgCBIYXNoIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogU3RhYmxlIFNIQS0yNTYgaGFzaCBmb3IgU1NHLWdlbmVyYXRlZCBhc3NldCBuYW1lcy5cbiAqIFJldHVybnMgYSBkZXRlcm1pbmlzdGljIGxvd2VyY2FzZSBoZXggc3RyaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhYmxlSGFzaChzdHI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgY29uc3QgZGlnZXN0ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBlbmNvZGVyLmVuY29kZShzdHIpKTtcbiAgcmV0dXJuIEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoZGlnZXN0KSlcbiAgICAubWFwKChiKSA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKVxuICAgIC5qb2luKCcnKTtcbn1cblxuLy8g4pSA4pSA4pSAIElTUiBtYW5pZmVzdCBidWlsZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJc3JNYW5pZmVzdEVudHJpZXMoXG4gIHJvdXRlSW5mbzogQXJyYXk8e1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBpc0R5bmFtaWM6IGJvb2xlYW47XG4gICAgcmV2YWxpZGF0ZT86IG51bWJlcjtcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9PixcbiAgc3RhdGljUGF0aFBhcmFtc0J5Um91dGU6IE1hcDxzdHJpbmcsIEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+Pixcbik6IElzck1hbmlmZXN0RW50cnlbXSB7XG4gIGNvbnN0IGVudHJpZXM6IElzck1hbmlmZXN0RW50cnlbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlSW5mbykge1xuICAgIGNvbnN0IHJldmFsaWRhdGUgPSB0eXBlb2Ygcm91dGUucmV2YWxpZGF0ZSA9PT0gJ251bWJlcicgJiYgcm91dGUucmV2YWxpZGF0ZSA+IDBcbiAgICAgID8gcm91dGUucmV2YWxpZGF0ZVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgaWYgKCFyZXZhbGlkYXRlKSBjb250aW51ZTtcblxuICAgIGNvbnN0IHBhcmFtc0xpc3QgPSByb3V0ZS5pc0R5bmFtaWNcbiAgICAgID8gc3RhdGljUGF0aFBhcmFtc0J5Um91dGUuZ2V0KHJvdXRlLnBhdGgpID8/IFtdXG4gICAgICA6IFtyb3V0ZS5wYXJhbXMgPz8ge31dO1xuXG4gICAgZm9yIChjb25zdCBwYXJhbXMgb2YgcGFyYW1zTGlzdCkge1xuICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgcGF0aDogcm91dGUucGF0aCxcbiAgICAgICAgcmV2YWxpZGF0ZSxcbiAgICAgICAgY2FjaGVLZXk6IGNyZWF0ZUlzckNhY2hlS2V5KHJvdXRlLnBhdGgsIHBhcmFtcyksXG4gICAgICAgIHBhcmFtcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cblxuLy8g4pSA4pSA4pSAIFBlci1wYWdlIGRpYWdub3N0aWMgY29sbGVjdG9yIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogUGFnZS1sZXZlbCByZW5kZXIgZGlhZ25vc3RpYyBlbnRyeSB1c2VkIGR1cmluZyBTU0cgcmVuZGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlRGlhZ25vc3RpYyB7XG4gIHBhdGg6IHN0cmluZztcbiAgZXJyb3JzOiBSZW5kZXJFcnJvcltdO1xuICBoeWRyYXRpb25IaW50czogSHlkcmF0aW9uSGludFtdO1xuICBjb21wb25lbnRDb3VudDogbnVtYmVyO1xuICByZW5kZXJUaW1lTXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IHBlci1wYWdlIHJlbmRlciBkaWFnbm9zdGljcyAoYmFja3dhcmQtY29tcGF0IHdpdGggc3RyaW5nIG91dHB1dCkuXG4gKiBSZXR1cm5zIHRoZSByZW5kZXJlZCBIVE1MIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RQYWdlT3V0cHV0KFxuICByb3V0ZVBhdGg6IHN0cmluZyxcbiAgb3V0cHV0OiB7XG4gICAgaHRtbDogc3RyaW5nO1xuICAgIGVycm9yczogUmVuZGVyRXJyb3JbXTtcbiAgICBoeWRyYXRpb25IaW50czogSHlkcmF0aW9uSGludFtdO1xuICAgIGNvbXBvbmVudENvdW50OiBudW1iZXI7XG4gICAgcmVuZGVyVGltZU1zOiBudW1iZXI7XG4gIH0gfCBzdHJpbmcsXG4gIHBhZ2VEaWFnbm9zdGljczogUGFnZURpYWdub3N0aWNbXSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGh0bWwgPSB0eXBlb2Ygb3V0cHV0ID09PSAnc3RyaW5nJyA/IG91dHB1dCA6IG91dHB1dC5odG1sO1xuICBpZiAodHlwZW9mIG91dHB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICBwYWdlRGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICBwYXRoOiByb3V0ZVBhdGgsXG4gICAgICBlcnJvcnM6IG91dHB1dC5lcnJvcnMsXG4gICAgICBoeWRyYXRpb25IaW50czogb3V0cHV0Lmh5ZHJhdGlvbkhpbnRzLFxuICAgICAgY29tcG9uZW50Q291bnQ6IG91dHB1dC5jb21wb25lbnRDb3VudCxcbiAgICAgIHJlbmRlclRpbWVNczogb3V0cHV0LnJlbmRlclRpbWVNcyxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gaHRtbDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFB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
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL3NzZy1oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG9wZW5lbGVtZW50L3NzZyAtIFNTRyBoZWxwZXIgdXRpbGl0aWVzXG4gKlxuICogUHVyZSB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBTU0cgcmVuZGVyIHBpcGVsaW5lLlxuICogVGhpcyBtb2R1bGUgc2l0cyBhdCB0aGUgYm90dG9tIG9mIHRoZSBkZXBlbmRlbmN5IGdyYXBoLlxuICovXG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcmVhZGRpclN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB0eXBlIHsgSXNyTWFuaWZlc3RFbnRyeSB9IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9mcmFtZXdvcmsnO1xuaW1wb3J0IHsgY3JlYXRlSXNyQ2FjaGVLZXkgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9pc3InO1xuXG4vLyDilIDilIDilIAgUGF0aCAvIFVSTCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogUmVjdXJzaXZlbHkgZmluZCBhbGwgLmh0bWwgZmlsZXMgdW5kZXIgYSBkaXJlY3RvcnkuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEh0bWxGaWxlcyhkaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0czogc3RyaW5nW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyaWVzID0gcmVhZGRpclN5bmMoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4oZGlyLCBlbnRyeS5uYW1lKTtcbiAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCguLi5maW5kSHRtbEZpbGVzKGZ1bGxQYXRoKSk7XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy5odG1sJykpIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKGZ1bGxQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIERpcmVjdG9yeSBtYXkgbm90IGV4aXN0IHlldFxuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vLyDilIDilIDilIAgUm91dGUgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBSZXNvbHZlIGEgZHluYW1pYyByb3V0ZSBwYXRoIGJ5IHN1YnN0aXR1dGluZyBwYXJhbSB2YWx1ZXMuXG4gKiBWYWxpZGF0ZXMgcGFyYW0gdmFsdWVzIHRvIHByZXZlbnQgcGF0aCB0cmF2ZXJzYWwgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVEeW5hbWljUm91dGVQYXRoKFxuICByb3V0ZVBhdGg6IHN0cmluZyxcbiAgcGFyYW1OYW1lczogc3RyaW5nW10sXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IHN0cmluZyB7XG4gIGxldCByZXNvbHZlZFBhdGggPSByb3V0ZVBhdGg7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBwYXJhbU5hbWVzKSB7XG4gICAgY29uc3QgcmF3ID0gcGFyYW1zW25hbWVdO1xuICAgIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09IG51bGwgfHwgcmF3ID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWlzc2luZyB2YWx1ZSBmb3Igcm91dGUgcGFyYW1ldGVyIFwiJHtuYW1lfVwiIGluICR7cm91dGVQYXRofWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gU3RyaW5nKHJhdyk7XG4gICAgaWYgKFxuICAgICAgdmFsdWUgPT09ICcuJyB8fFxuICAgICAgdmFsdWUgPT09ICcuLicgfHxcbiAgICAgIC9bXFxcXC9cXDBdLy50ZXN0KHZhbHVlKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5zYWZlIHZhbHVlIGZvciByb3V0ZSBwYXJhbWV0ZXIgXCIke25hbWV9XCIgaW4gJHtyb3V0ZVBhdGh9OiAke3ZhbHVlfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVuY29kZSBzcGFjZXMgYW5kIG90aGVyIFVSTC11bnNhZmUgY2hhcnMsIGJ1dCBwcmVzZXJ2ZSBAIGZvciBzY29wZWQgcGFja2FnZXMuXG4gICAgLy8gRnVsbCBlbmNvZGVVUklDb21wb25lbnQgd291bGQgZW5jb2RlIEAgLT4gJTQwLCBicmVha2luZyBmaWxlLXRvLVVSTCBtYXRjaGluZy5cbiAgICBjb25zdCBzYWZlVmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8gL2csICclMjAnKTtcbiAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlZFBhdGgucmVwbGFjZShgOiR7bmFtZX1gLCBzYWZlVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXNvbHZlZFBhdGg7XG59XG5cbi8vIOKUgOKUgOKUgCBIYXNoIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogU3RhYmxlIFNIQS0yNTYgaGFzaCBmb3IgU1NHLWdlbmVyYXRlZCBhc3NldCBuYW1lcy5cbiAqIFJldHVybnMgYSBkZXRlcm1pbmlzdGljIGxvd2VyY2FzZSBoZXggc3RyaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhYmxlSGFzaChzdHI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgY29uc3QgZGlnZXN0ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBlbmNvZGVyLmVuY29kZShzdHIpKTtcbiAgcmV0dXJuIEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoZGlnZXN0KSlcbiAgICAubWFwKChiKSA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKVxuICAgIC5qb2luKCcnKTtcbn1cblxuLy8g4pSA4pSA4pSAIElTUiBtYW5pZmVzdCBidWlsZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJc3JNYW5pZmVzdEVudHJpZXMoXG4gIHJvdXRlSW5mbzogQXJyYXk8e1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBpc0R5bmFtaWM6IGJvb2xlYW47XG4gICAgcmV2YWxpZGF0ZT86IG51bWJlcjtcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9PixcbiAgc3RhdGljUGF0aFBhcmFtc0J5Um91dGU6IE1hcDxzdHJpbmcsIEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+Pixcbik6IElzck1hbmlmZXN0RW50cnlbXSB7XG4gIGNvbnN0IGVudHJpZXM6IElzck1hbmlmZXN0RW50cnlbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlSW5mbykge1xuICAgIGNvbnN0IHJldmFsaWRhdGUgPSB0eXBlb2Ygcm91dGUucmV2YWxpZGF0ZSA9PT0gJ251bWJlcicgJiYgcm91dGUucmV2YWxpZGF0ZSA+IDBcbiAgICAgID8gcm91dGUucmV2YWxpZGF0ZVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgaWYgKCFyZXZhbGlkYXRlKSBjb250aW51ZTtcblxuICAgIGNvbnN0IHBhcmFtc0xpc3QgPSByb3V0ZS5pc0R5bmFtaWNcbiAgICAgID8gc3RhdGljUGF0aFBhcmFtc0J5Um91dGUuZ2V0KHJvdXRlLnBhdGgpID8/IFtdXG4gICAgICA6IFtyb3V0ZS5wYXJhbXMgPz8ge31dO1xuXG4gICAgZm9yIChjb25zdCBwYXJhbXMgb2YgcGFyYW1zTGlzdCkge1xuICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgcGF0aDogcm91dGUucGF0aCxcbiAgICAgICAgcmV2YWxpZGF0ZSxcbiAgICAgICAgY2FjaGVLZXk6IGNyZWF0ZUlzckNhY2hlS2V5KHJvdXRlLnBhdGgsIHBhcmFtcyksXG4gICAgICAgIHBhcmFtcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Q0FLQyxHQUVELFNBQVMsSUFBSSxRQUFRLFlBQVk7QUFDakMsU0FBUyxXQUFXLFFBQVEsVUFBVTtBQUV0QyxTQUFTLGlCQUFpQixRQUFRLHdCQUF3QjtBQUUxRCxrRUFBa0U7QUFFbEUsd0RBQXdELEdBQ3hELE9BQU8sU0FBUyxjQUFjLEdBQVc7RUFDdkMsTUFBTSxVQUFvQixFQUFFO0VBQzVCLElBQUk7SUFDRixNQUFNLFVBQVUsWUFBWSxLQUFLO01BQUUsZUFBZTtJQUFLO0lBQ3ZELEtBQUssTUFBTSxTQUFTLFFBQVM7TUFDM0IsTUFBTSxXQUFXLEtBQUssS0FBSyxNQUFNLElBQUk7TUFDckMsSUFBSSxNQUFNLFdBQVcsSUFBSTtRQUN2QixRQUFRLElBQUksSUFBSSxjQUFjO01BQ2hDLE9BQU8sSUFBSSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtRQUN2QyxRQUFRLElBQUksQ0FBQztNQUNmO0lBQ0Y7RUFDRixFQUFFLE9BQU07RUFDTiw4QkFBOEI7RUFDaEM7RUFDQSxPQUFPO0FBQ1Q7QUFFQSxrRUFBa0U7QUFFbEU7OztDQUdDLEdBQ0QsT0FBTyxTQUFTLHdCQUNkLFNBQWlCLEVBQ2pCLFVBQW9CLEVBQ3BCLE1BQThCO0VBRTlCLElBQUksZUFBZTtFQUNuQixLQUFLLE1BQU0sUUFBUSxXQUFZO0lBQzdCLE1BQU0sTUFBTSxNQUFNLENBQUMsS0FBSztJQUN4QixJQUFJLFFBQVEsYUFBYSxRQUFRLFFBQVEsUUFBUSxJQUFJO01BQ25ELE1BQU0sSUFBSSxNQUNSLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxLQUFLLEVBQUUsV0FBVztJQUVqRTtJQUVBLE1BQU0sUUFBUSxPQUFPO0lBQ3JCLElBQ0UsVUFBVSxPQUNWLFVBQVUsUUFDVixVQUFVLElBQUksQ0FBQyxRQUNmO01BQ0EsTUFBTSxJQUFJLE1BQ1IsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPO0lBRTFFO0lBRUEsZ0ZBQWdGO0lBQ2hGLGdGQUFnRjtJQUNoRixNQUFNLFlBQVksTUFBTSxPQUFPLENBQUMsTUFBTTtJQUN0QyxlQUFlLGFBQWEsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRTtFQUNsRDtFQUNBLE9BQU87QUFDVDtBQUVBLGtFQUFrRTtBQUVsRTs7O0NBR0MsR0FDRCxPQUFPLGVBQWUsV0FBVyxHQUFXO0VBQzFDLE1BQU0sVUFBVSxJQUFJO0VBQ3BCLE1BQU0sU0FBUyxNQUFNLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLFFBQVEsTUFBTSxDQUFDO0VBQ3BFLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxXQUFXLFNBQzlCLEdBQUcsQ0FBQyxDQUFDLElBQU0sRUFBRSxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsR0FBRyxNQUN0QyxJQUFJLENBQUM7QUFDVjtBQUVBLGtFQUFrRTtBQUVsRSxPQUFPLFNBQVMsd0JBQ2QsU0FLRSxFQUNGLHVCQUFtRTtFQUVuRSxNQUFNLFVBQThCLEVBQUU7RUFDdEMsS0FBSyxNQUFNLFNBQVMsVUFBVztJQUM3QixNQUFNLGFBQWEsT0FBTyxNQUFNLFVBQVUsS0FBSyxZQUFZLE1BQU0sVUFBVSxHQUFHLElBQzFFLE1BQU0sVUFBVSxHQUNoQjtJQUNKLElBQUksQ0FBQyxZQUFZO0lBRWpCLE1BQU0sYUFBYSxNQUFNLFNBQVMsR0FDOUIsd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLEdBQzdDO01BQUMsTUFBTSxNQUFNLElBQUksQ0FBQztLQUFFO0lBRXhCLEtBQUssTUFBTSxVQUFVLFdBQVk7TUFDL0IsUUFBUSxJQUFJLENBQUM7UUFDWCxNQUFNLE1BQU0sSUFBSTtRQUNoQjtRQUNBLFVBQVUsa0JBQWtCLE1BQU0sSUFBSSxFQUFFO1FBQ3hDO01BQ0Y7SUFDRjtFQUNGO0VBQ0EsT0FBTztBQUNUIn0=
|
package/src/ssg-render.js
CHANGED
|
@@ -9,33 +9,28 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Thin orchestrator that imports focused sub-modules for:
|
|
11
11
|
* - Dynamic route expansion (ssg-dynamic.ts)
|
|
12
|
-
* - i18n locale expansion (ssg-
|
|
13
|
-
* - DSD report assembly (ssg-report.ts)
|
|
12
|
+
* - i18n locale expansion (ssg-dynamic.ts)
|
|
14
13
|
* - Utility helpers (ssg-helpers.ts)
|
|
15
14
|
*/ import { join } from 'node:path';
|
|
16
|
-
import
|
|
15
|
+
import { cwd } from 'node:process';
|
|
17
16
|
import { existsSync, mkdirSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
18
17
|
import { createLogger } from '@openelement/core/logger';
|
|
19
|
-
import { expandDynamicRoutes } from './ssg-dynamic.js';
|
|
20
|
-
import { expandI18nLocales } from './ssg-i18n.js';
|
|
21
|
-
import { assembleDsdReport, writeDsdReport } from './ssg-report.js';
|
|
18
|
+
import { expandDynamicRoutes, expandI18nLocales } from './ssg-dynamic.js';
|
|
22
19
|
import { buildIsrManifestEntries, findHtmlFiles } from './ssg-helpers.js';
|
|
23
20
|
import { writeJson } from '@openelement/content/write-json';
|
|
24
21
|
const log = createLogger('ssg');
|
|
25
22
|
// ─── Core render pipeline ──────────────────────────────────────
|
|
26
23
|
export async function ssgRender(module, options, evidence = {}) {
|
|
27
|
-
const root = options.root ||
|
|
24
|
+
const root = options.root || cwd();
|
|
28
25
|
const outDir = options.outDir || 'dist';
|
|
29
26
|
const basePath = options.base || '/';
|
|
30
|
-
// ── Report collection (v0.15.3: dsd-report.json) ──────────────
|
|
31
|
-
const pageDiagnostics = [];
|
|
32
27
|
// ── Dynamic route expansion via bundle.getStaticPaths() ──────
|
|
33
28
|
const routeInfo = module.routeInfo ?? [];
|
|
34
29
|
const renderRoute = module.renderRoute;
|
|
35
30
|
const getStaticPaths = module.getStaticPaths;
|
|
36
31
|
const dynamicRoutes = routeInfo.filter((r)=>r.isDynamic);
|
|
37
32
|
log.info(`Routes: ${routeInfo.length} total` + (dynamicRoutes.length > 0 ? ` (${dynamicRoutes.length} dynamic: ${dynamicRoutes.map((r)=>r.path).join(', ')})` : ''));
|
|
38
|
-
const staticPathParamsByRoute = await expandDynamicRoutes(dynamicRoutes, renderRoute, getStaticPaths, options, root, outDir
|
|
33
|
+
const staticPathParamsByRoute = await expandDynamicRoutes(dynamicRoutes, renderRoute, getStaticPaths, options, root, outDir);
|
|
39
34
|
// ── Main SSG via Hono's toSSG() ────────────────────────────
|
|
40
35
|
const { toSSG } = await import('hono/ssg');
|
|
41
36
|
const nodeFs = await import('node:fs/promises');
|
|
@@ -114,7 +109,7 @@ export async function ssgRender(module, options, evidence = {}) {
|
|
|
114
109
|
}
|
|
115
110
|
log.info(`Static site generated -> ${outputDir}`);
|
|
116
111
|
// ── i18n locale expansion (if ctx available) ────────────────
|
|
117
|
-
await expandI18nLocales(evidence, renderRoute, routeInfo, getStaticPaths, options, root, outDir
|
|
112
|
+
await expandI18nLocales(evidence, renderRoute, routeInfo, getStaticPaths, options, root, outDir);
|
|
118
113
|
// ── Post-processing modules ─────────────────────────────────
|
|
119
114
|
const { buildIslandChunkMap, injectCspMeta, injectDsdPolyfill, injectViewTransitionMeta, injectSpeculationRules, buildSpeculationRulesJson } = await import('./postprocess.js');
|
|
120
115
|
const islandTagNames = options.islandTagNames || [];
|
|
@@ -153,10 +148,7 @@ export async function ssgRender(module, options, evidence = {}) {
|
|
|
153
148
|
} catch {
|
|
154
149
|
log.debug('Sitemap generation skipped or failed');
|
|
155
150
|
}
|
|
156
|
-
// ── dsd-report.json (v0.15.3) ──────────────────────────────────
|
|
157
|
-
const report = assembleDsdReport(pageDiagnostics, evidence);
|
|
158
|
-
writeDsdReport(outputDir, report);
|
|
159
151
|
}
|
|
160
152
|
// Re-export resolveDynamicRoutePath for consumers who import from ssg-render.ts
|
|
161
153
|
export { resolveDynamicRoutePath } from './ssg-helpers.js';
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL3NzZy1yZW5kZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBhZGFwdGVyLXZpdGUgaW50ZXJuYWwgU1NHIHJlbmRlciBwaXBlbGluZSAoQURSIDAwMjIpLlxuICpcbiAqIFNoYXJlZCBTU0cgcmVuZGVyaW5nIGxvZ2ljIHVzZWQgYnkgYm90aDpcbiAqICAgLSBidWlsZC1zc2cudHMgKFZpdGUgaW5saW5lIG1vZGUsIGNhbGxlZCBmcm9tIGNsb3NlQnVuZGxlKVxuICogICAtIHNzZy50cyAoc3RhbmRhbG9uZSBDTEksIGxvYWRzIFNTUiBidW5kbGUgdmlhIGltcG9ydG1hcClcbiAqXG4gKiBUaGlzIG1vZHVsZSBoYXMgemVybyBWaXRlIGRlcGVuZGVuY3kgLSBpdCBvbmx5IG5lZWRzIHRoZSBTU1IgYnVuZGxlIG1vZHVsZS5cbiAqXG4gKiBUaGluIG9yY2hlc3RyYXRvciB0aGF0IGltcG9ydHMgZm9jdXNlZCBzdWItbW9kdWxlcyBmb3I6XG4gKiAgIC0gRHluYW1pYyByb3V0ZSBleHBhbnNpb24gKHNzZy1keW5hbWljLnRzKVxuICogICAtIGkxOG4gbG9jYWxlIGV4cGFuc2lvbiAoc3NnLWkxOG4udHMpXG4gKiAgIC0gRFNEIHJlcG9ydCBhc3NlbWJseSAoc3NnLXJlcG9ydC50cylcbiAqICAgLSBVdGlsaXR5IGhlbHBlcnMgKHNzZy1oZWxwZXJzLnRzKVxuICovXG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcmVuYW1lU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFNzZ1BhZ2VPdXRwdXQsXG4gIFNzZ1JlbmRlckV2aWRlbmNlLFxuICBTc2dSZW5kZXJPcHRpb25zLFxuICBTc3JCdW5kbGUsXG59IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9zc2cnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQG9wZW5lbGVtZW50L2NvcmUvbG9nZ2VyJztcbmltcG9ydCB7IGV4cGFuZER5bmFtaWNSb3V0ZXMgfSBmcm9tICcuL3NzZy1keW5hbWljLmpzJztcbmltcG9ydCB7IGV4cGFuZEkxOG5Mb2NhbGVzIH0gZnJvbSAnLi9zc2ctaTE4bi5qcyc7XG5pbXBvcnQgeyBhc3NlbWJsZURzZFJlcG9ydCwgd3JpdGVEc2RSZXBvcnQgfSBmcm9tICcuL3NzZy1yZXBvcnQuanMnO1xuaW1wb3J0IHsgYnVpbGRJc3JNYW5pZmVzdEVudHJpZXMsIGZpbmRIdG1sRmlsZXMsIHR5cGUgUGFnZURpYWdub3N0aWMgfSBmcm9tICcuL3NzZy1oZWxwZXJzLmpzJztcbmltcG9ydCB7IHdyaXRlSnNvbiB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb250ZW50L3dyaXRlLWpzb24nO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ3NzZycpO1xuXG4vLyDilIDilIDilIAgQ29yZSByZW5kZXIgcGlwZWxpbmUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzc2dSZW5kZXIoXG4gIG1vZHVsZTogU3NyQnVuZGxlLFxuICBvcHRpb25zOiBTc2dSZW5kZXJPcHRpb25zLFxuICBldmlkZW5jZTogU3NnUmVuZGVyRXZpZGVuY2UgPSB7fSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gb3B0aW9ucy5yb290IHx8IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IG91dERpciA9IG9wdGlvbnMub3V0RGlyIHx8ICdkaXN0JztcbiAgY29uc3QgYmFzZVBhdGggPSBvcHRpb25zLmJhc2UgfHwgJy8nO1xuXG4gIC8vIOKUgOKUgCBSZXBvcnQgY29sbGVjdGlvbiAodjAuMTUuMzogZHNkLXJlcG9ydC5qc29uKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3QgcGFnZURpYWdub3N0aWNzOiBQYWdlRGlhZ25vc3RpY1tdID0gW107XG5cbiAgLy8g4pSA4pSAIER5bmFtaWMgcm91dGUgZXhwYW5zaW9uIHZpYSBidW5kbGUuZ2V0U3RhdGljUGF0aHMoKSDilIDilIDilIDilIDilIDilIBcbiAgY29uc3Qgcm91dGVJbmZvID0gKG1vZHVsZS5yb3V0ZUluZm8gPz8gW10pIGFzIEFycmF5PHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgdGFnTmFtZTogc3RyaW5nO1xuICAgIGlzRHluYW1pYzogYm9vbGVhbjtcbiAgICBwYXJhbU5hbWVzOiBzdHJpbmdbXTtcbiAgICByZXZhbGlkYXRlPzogbnVtYmVyO1xuICB9PjtcbiAgY29uc3QgcmVuZGVyUm91dGUgPSBtb2R1bGUucmVuZGVyUm91dGUgYXNcbiAgICB8ICgocGF0aDogc3RyaW5nLCBvcHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8U3NnUGFnZU91dHB1dD4pXG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGdldFN0YXRpY1BhdGhzID0gbW9kdWxlLmdldFN0YXRpY1BhdGhzIGFzXG4gICAgfCAoKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTxBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pj4pXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZHluYW1pY1JvdXRlcyA9IHJvdXRlSW5mby5maWx0ZXIoKHIpID0+IHIuaXNEeW5hbWljKTtcbiAgbG9nLmluZm8oXG4gICAgYFJvdXRlczogJHtyb3V0ZUluZm8ubGVuZ3RofSB0b3RhbGAgK1xuICAgICAgKGR5bmFtaWNSb3V0ZXMubGVuZ3RoID4gMFxuICAgICAgICA/IGAgKCR7ZHluYW1pY1JvdXRlcy5sZW5ndGh9IGR5bmFtaWM6ICR7ZHluYW1pY1JvdXRlcy5tYXAoKHIpID0+IHIucGF0aCkuam9pbignLCAnKX0pYFxuICAgICAgICA6ICcnKSxcbiAgKTtcblxuICBjb25zdCBzdGF0aWNQYXRoUGFyYW1zQnlSb3V0ZSA9IGF3YWl0IGV4cGFuZER5bmFtaWNSb3V0ZXMoXG4gICAgZHluYW1pY1JvdXRlcyxcbiAgICByZW5kZXJSb3V0ZSxcbiAgICBnZXRTdGF0aWNQYXRocyxcbiAgICBvcHRpb25zLFxuICAgIHJvb3QsXG4gICAgb3V0RGlyLFxuICAgIHBhZ2VEaWFnbm9zdGljcyxcbiAgKTtcblxuICAvLyDilIDilIAgTWFpbiBTU0cgdmlhIEhvbm8ncyB0b1NTRygpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCB7IHRvU1NHIH0gPSBhd2FpdCBpbXBvcnQoJ2hvbm8vc3NnJyk7XG4gIGNvbnN0IG5vZGVGcyA9IGF3YWl0IGltcG9ydCgnbm9kZTpmcy9wcm9taXNlcycpO1xuICBjb25zdCBub2RlUGF0aCA9IGF3YWl0IGltcG9ydCgnbm9kZTpwYXRoJyk7XG5cbiAgY29uc3QgZnNNb2R1bGUgPSB7XG4gICAgd3JpdGVGaWxlOiBhc3luYyAocGF0aDogc3RyaW5nLCBkYXRhOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PiB7XG4gICAgICBjb25zdCBkaXIgPSBub2RlUGF0aC5kaXJuYW1lKHBhdGgpO1xuICAgICAgYXdhaXQgbm9kZUZzLm1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgYXdhaXQgbm9kZUZzLndyaXRlRmlsZShwYXRoLCBkYXRhKTtcbiAgICB9LFxuICAgIG1rZGlyOiBhc3luYyAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICBhd2FpdCBub2RlRnMubWtkaXIocGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSkuY2F0Y2goKCkgPT4ge30pO1xuICAgIH0sXG4gICAgaXNEaXJlY3Rvcnk6IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgbm9kZUZzLnN0YXQocGF0aCkpLmlzRGlyZWN0b3J5KCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gam9pbihyb290LCBvdXREaXIpO1xuICBjb25zdCBhcHAgPSBtb2R1bGUuZGVmYXVsdCBhc1xuICAgIHwgeyBmZXRjaDogKHJlcTogUmVxdWVzdCwgLi4uYXJnczogdW5rbm93bltdKSA9PiBQcm9taXNlPFJlc3BvbnNlPiB9XG4gICAgfCB1bmRlZmluZWQ7XG4gIGlmICghYXBwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1NTUiBidW5kbGUgbG9hZGVkIGJ1dCBubyBIb25vIGFwcCBmb3VuZCAobm8gZGVmYXVsdCBleHBvcnQpJyxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdG9TU0coYXBwIGFzIG5ldmVyLCBmc01vZHVsZSwgeyBkaXI6IG91dHB1dERpciB9KTtcblxuICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB0aHJvdyByZXN1bHQuZXJyb3I7XG5cbiAgY29uc3QgaXNyUm91dGVzID0gYnVpbGRJc3JNYW5pZmVzdEVudHJpZXMocm91dGVJbmZvLCBzdGF0aWNQYXRoUGFyYW1zQnlSb3V0ZSk7XG4gIGlmIChpc3JSb3V0ZXMubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlRmlsZVN5bmMoXG4gICAgICBqb2luKG91dHB1dERpciwgJ2lzci1tYW5pZmVzdC5qc29uJyksXG4gICAgICB3cml0ZUpzb24oaXNyUm91dGVzKSxcbiAgICAgICd1dGYtOCcsXG4gICAgKTtcbiAgICBsb2cuaW5mbyhcbiAgICAgIGBJU1IgbWFuaWZlc3QgLT4gJHtqb2luKG91dHB1dERpciwgJ2lzci1tYW5pZmVzdC5qc29uJyl9ICgke2lzclJvdXRlcy5sZW5ndGh9IHJvdXRlKHMpKWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQb3N0LXByb2Nlc3Npbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLy8gUmVuYW1lIDQwNC9pbmRleC5odG1sIC0+IDQwNC5odG1sIGZvciBHaXRIdWIgUGFnZXNcbiAgY29uc3QgXzQwNERpciA9IGpvaW4ob3V0cHV0RGlyLCAnNDA0Jyk7XG4gIGNvbnN0IF80MDRIdG1sID0gam9pbihvdXRwdXREaXIsICc0MDQuaHRtbCcpO1xuICBjb25zdCBfNDA0SW5kZXggPSBqb2luKF80MDREaXIsICdpbmRleC5odG1sJyk7XG4gIGlmIChleGlzdHNTeW5jKF80MDRJbmRleCkpIHtcbiAgICBpZiAoZXhpc3RzU3luYyhfNDA0SHRtbCkpIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICAnNDA0Lmh0bWwgYWxyZWFkeSBleGlzdHMgaW4gb3V0cHV0IGRpciAtIHJlbW92aW5nIGJlZm9yZSByZW5hbWUnLFxuICAgICAgKTtcbiAgICAgIHJtU3luYyhfNDA0SHRtbCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgcmVuYW1lU3luYyhfNDA0SW5kZXgsIF80MDRIdG1sKTtcbiAgICBpZiAoZXhpc3RzU3luYyhfNDA0RGlyKSkge1xuICAgICAgcm1TeW5jKF80MDREaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgbG9nLmluZm8oJzQwNCBwYWdlIC0+IGRpc3QvNDA0Lmh0bWwgKEdpdEh1YiBQYWdlcyknKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgZmxhdCBIVE1MIGZpbGVzIHRvIGNsZWFuIFVSTHM6IGFib3V0Lmh0bWwgLT4gYWJvdXQvaW5kZXguaHRtbFxuICBjb25zdCBhbGxIdG1sRmlsZXMgPSBmaW5kSHRtbEZpbGVzKG91dHB1dERpcik7XG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgYWxsSHRtbEZpbGVzKSB7XG4gICAgY29uc3QgcmVsID0gbm9kZVBhdGgucmVsYXRpdmUob3V0cHV0RGlyLCBmaWxlUGF0aCk7XG4gICAgaWYgKHJlbC5lbmRzV2l0aCgnaW5kZXguaHRtbCcpIHx8IHJlbCA9PT0gJzQwNC5odG1sJykgY29udGludWU7XG4gICAgY29uc3QgYmFzZU5hbWUgPSByZWwucmVwbGFjZSgvXFwuaHRtbCQvLCAnJyk7XG4gICAgY29uc3QgdXJsQmFzZU5hbWUgPSBiYXNlTmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgY29uc3QgZGlyUGF0aCA9IGpvaW4ob3V0cHV0RGlyLCBiYXNlTmFtZSk7XG4gICAgY29uc3QgaW5kZXhQYXRoID0gam9pbihkaXJQYXRoLCAnaW5kZXguaHRtbCcpO1xuICAgIGlmIChleGlzdHNTeW5jKGRpclBhdGgpKSBjb250aW51ZTtcbiAgICBta2RpclN5bmMoZGlyUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgcmVuYW1lU3luYyhmaWxlUGF0aCwgaW5kZXhQYXRoKTtcbiAgICBsb2cuaW5mbyhgQ2xlYW4gVVJMOiAvJHt1cmxCYXNlTmFtZX0gLT4gJHt1cmxCYXNlTmFtZX0vaW5kZXguaHRtbGApO1xuICB9XG5cbiAgbG9nLmluZm8oYFN0YXRpYyBzaXRlIGdlbmVyYXRlZCAtPiAke291dHB1dERpcn1gKTtcblxuICAvLyDilIDilIAgaTE4biBsb2NhbGUgZXhwYW5zaW9uIChpZiBjdHggYXZhaWxhYmxlKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgYXdhaXQgZXhwYW5kSTE4bkxvY2FsZXMoXG4gICAgZXZpZGVuY2UsXG4gICAgcmVuZGVyUm91dGUsXG4gICAgcm91dGVJbmZvLFxuICAgIGdldFN0YXRpY1BhdGhzLFxuICAgIG9wdGlvbnMsXG4gICAgcm9vdCxcbiAgICBvdXREaXIsXG4gICAgcGFnZURpYWdub3N0aWNzLFxuICApO1xuXG4gIC8vIOKUgOKUgCBQb3N0LXByb2Nlc3NpbmcgbW9kdWxlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3Qge1xuICAgIGJ1aWxkSXNsYW5kQ2h1bmtNYXAsXG4gICAgaW5qZWN0Q3NwTWV0YSxcbiAgICBpbmplY3REc2RQb2x5ZmlsbCxcbiAgICBpbmplY3RWaWV3VHJhbnNpdGlvbk1ldGEsXG4gICAgaW5qZWN0U3BlY3VsYXRpb25SdWxlcyxcbiAgICBidWlsZFNwZWN1bGF0aW9uUnVsZXNKc29uLFxuICB9ID0gYXdhaXQgaW1wb3J0KCcuL3Bvc3Rwcm9jZXNzLmpzJyk7XG5cbiAgY29uc3QgaXNsYW5kVGFnTmFtZXMgPSBvcHRpb25zLmlzbGFuZFRhZ05hbWVzIHx8IFtdO1xuICBjb25zdCBfaXNsYW5kQ2h1bmtNYXAgPSBidWlsZElzbGFuZENodW5rTWFwKFxuICAgIHJvb3QsXG4gICAgb3V0RGlyLFxuICAgIGlzbGFuZFRhZ05hbWVzLFxuICAgIGJhc2VQYXRoLFxuICApO1xuXG4gIGlmIChvcHRpb25zLnZpZXdUcmFuc2l0aW9uICE9PSBmYWxzZSkge1xuICAgIGluamVjdFZpZXdUcmFuc2l0aW9uTWV0YShvdXRwdXREaXIpO1xuICAgIGxvZy5pbmZvKCdWaWV3IFRyYW5zaXRpb25zIG1ldGEgdGFnIGluamVjdGVkJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5zcGVjdWxhdGlvbikge1xuICAgIGNvbnN0IHNwZWNPcHRzID0gdHlwZW9mIG9wdGlvbnMuc3BlY3VsYXRpb24gPT09ICdib29sZWFuJ1xuICAgICAgPyB7fVxuICAgICAgOiAob3B0aW9ucy5zcGVjdWxhdGlvbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgY29uc3QgcnVsZXNKc29uID0gYnVpbGRTcGVjdWxhdGlvblJ1bGVzSnNvbihcbiAgICAgIHNwZWNPcHRzLFxuICAgICAgcm91dGVJbmZvLm1hcCgocikgPT4gKHsgcGF0aDogci5wYXRoLCB0eXBlOiAncGFnZScgYXMgY29uc3QgfSkpLFxuICAgICk7XG4gICAgaWYgKHJ1bGVzSnNvbikge1xuICAgICAgaW5qZWN0U3BlY3VsYXRpb25SdWxlcyhvdXRwdXREaXIsIHJ1bGVzSnNvbik7XG4gICAgICBsb2cuaW5mbygnU3BlY3VsYXRpb24gUnVsZXMgaW5qZWN0ZWQnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjc3BQb2xpY3kgPSBvcHRpb25zLm1pZGRsZXdhcmU/LmNzcD8ucG9saWN5O1xuICBpZiAoY3NwUG9saWN5KSB7XG4gICAgaW5qZWN0Q3NwTWV0YShcbiAgICAgIG91dHB1dERpcixcbiAgICAgIGNzcFBvbGljeSxcbiAgICAgIG9wdGlvbnMubWlkZGxld2FyZT8uY3NwPy5yZXBvcnRPbmx5IHx8IGZhbHNlLFxuICAgICAgb3B0aW9ucy5taWRkbGV3YXJlPy5jc3A/Lm5vbmNlIHx8IGZhbHNlLFxuICAgICk7XG4gICAgbG9nLmluZm8oJ0NTUCBtZXRhIHRhZyBpbmplY3RlZCcpO1xuICB9XG5cbiAgaW5qZWN0RHNkUG9seWZpbGwob3V0cHV0RGlyKTtcbiAgbG9nLmluZm8oJ0RTRCBwb2x5ZmlsbCBpbmplY3RlZCcpO1xuXG4gIC8vIOKUgOKUgCBTaXRlbWFwICh2aWEgY3R4KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgYXdhaXQgZXZpZGVuY2Uub25QcmludEJ1aWxkTWFuaWZlc3Q/Lih7XG4gICAgcm9vdCxcbiAgICBvdXREaXIsXG4gICAgcGhhc2U6IDMsXG4gICAgaGVhZEV4dHJhczogb3B0aW9ucy5oZWFkRXh0cmFzLFxuICB9KTtcblxuICB0cnkge1xuICAgIGF3YWl0IGV2aWRlbmNlLm9uR2VuZXJhdGVTaXRlbWFwPy4oam9pbihyb290LCBvdXREaXIpKTtcbiAgfSBjYXRjaCB7XG4gICAgbG9nLmRlYnVnKCdTaXRlbWFwIGdlbmVyYXRpb24gc2tpcHBlZCBvciBmYWlsZWQnKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBkc2QtcmVwb3J0Lmpzb24gKHYwLjE1LjMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCByZXBvcnQgPSBhc3NlbWJsZURzZFJlcG9ydChwYWdlRGlhZ25vc3RpY3MsIGV2aWRlbmNlKTtcbiAgd3JpdGVEc2RSZXBvcnQob3V0cHV0RGlyLCByZXBvcnQpO1xufVxuXG4vLyBSZS1leHBvcnQgcmVzb2x2ZUR5bmFtaWNSb3V0ZVBhdGggZm9yIGNvbnN1bWVycyB3aG8gaW1wb3J0IGZyb20gc3NnLXJlbmRlci50c1xuZXhwb3J0IHsgcmVzb2x2ZUR5bmFtaWNSb3V0ZVBhdGggfSBmcm9tICcuL3NzZy1oZWxwZXJzLmpzJztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Q0FjQyxHQUVELFNBQVMsSUFBSSxRQUFRLFlBQVk7QUFDakMsT0FBTyxhQUFhLGVBQWU7QUFDbkMsU0FBUyxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsYUFBYSxRQUFRLFVBQVU7QUFPbkYsU0FBUyxZQUFZLFFBQVEsMkJBQTJCO0FBQ3hELFNBQVMsbUJBQW1CLFFBQVEsbUJBQW1CO0FBQ3ZELFNBQVMsaUJBQWlCLFFBQVEsZ0JBQWdCO0FBQ2xELFNBQVMsaUJBQWlCLEVBQUUsY0FBYyxRQUFRLGtCQUFrQjtBQUNwRSxTQUFTLHVCQUF1QixF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
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL3NzZy1yZW5kZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBhZGFwdGVyLXZpdGUgaW50ZXJuYWwgU1NHIHJlbmRlciBwaXBlbGluZSAoQURSIDAwMjIpLlxuICpcbiAqIFNoYXJlZCBTU0cgcmVuZGVyaW5nIGxvZ2ljIHVzZWQgYnkgYm90aDpcbiAqICAgLSBidWlsZC1zc2cudHMgKFZpdGUgaW5saW5lIG1vZGUsIGNhbGxlZCBmcm9tIGNsb3NlQnVuZGxlKVxuICogICAtIHNzZy50cyAoc3RhbmRhbG9uZSBDTEksIGxvYWRzIFNTUiBidW5kbGUgdmlhIGltcG9ydG1hcClcbiAqXG4gKiBUaGlzIG1vZHVsZSBoYXMgemVybyBWaXRlIGRlcGVuZGVuY3kgLSBpdCBvbmx5IG5lZWRzIHRoZSBTU1IgYnVuZGxlIG1vZHVsZS5cbiAqXG4gKiBUaGluIG9yY2hlc3RyYXRvciB0aGF0IGltcG9ydHMgZm9jdXNlZCBzdWItbW9kdWxlcyBmb3I6XG4gKiAgIC0gRHluYW1pYyByb3V0ZSBleHBhbnNpb24gKHNzZy1keW5hbWljLnRzKVxuICogICAtIGkxOG4gbG9jYWxlIGV4cGFuc2lvbiAoc3NnLWR5bmFtaWMudHMpXG4gKiAgIC0gVXRpbGl0eSBoZWxwZXJzIChzc2ctaGVscGVycy50cylcbiAqL1xuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJlbmFtZVN5bmMsIHJtU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHR5cGUge1xuICBTc2dQYWdlT3V0cHV0LFxuICBTc2dSZW5kZXJFdmlkZW5jZSxcbiAgU3NnUmVuZGVyT3B0aW9ucyxcbiAgU3NyQnVuZGxlLFxufSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvc3NnJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb3JlL2xvZ2dlcic7XG5pbXBvcnQgeyBleHBhbmREeW5hbWljUm91dGVzLCBleHBhbmRJMThuTG9jYWxlcyB9IGZyb20gJy4vc3NnLWR5bmFtaWMuanMnO1xuaW1wb3J0IHsgYnVpbGRJc3JNYW5pZmVzdEVudHJpZXMsIGZpbmRIdG1sRmlsZXMgfSBmcm9tICcuL3NzZy1oZWxwZXJzLmpzJztcbmltcG9ydCB7IHdyaXRlSnNvbiB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb250ZW50L3dyaXRlLWpzb24nO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ3NzZycpO1xuXG4vLyDilIDilIDilIAgQ29yZSByZW5kZXIgcGlwZWxpbmUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzc2dSZW5kZXIoXG4gIG1vZHVsZTogU3NyQnVuZGxlLFxuICBvcHRpb25zOiBTc2dSZW5kZXJPcHRpb25zLFxuICBldmlkZW5jZTogU3NnUmVuZGVyRXZpZGVuY2UgPSB7fSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gb3B0aW9ucy5yb290IHx8IGN3ZCgpO1xuICBjb25zdCBvdXREaXIgPSBvcHRpb25zLm91dERpciB8fCAnZGlzdCc7XG4gIGNvbnN0IGJhc2VQYXRoID0gb3B0aW9ucy5iYXNlIHx8ICcvJztcblxuICAvLyDilIDilIAgRHluYW1pYyByb3V0ZSBleHBhbnNpb24gdmlhIGJ1bmRsZS5nZXRTdGF0aWNQYXRocygpIOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCByb3V0ZUluZm8gPSAobW9kdWxlLnJvdXRlSW5mbyA/PyBbXSkgYXMgQXJyYXk8e1xuICAgIHBhdGg6IHN0cmluZztcbiAgICB0YWdOYW1lOiBzdHJpbmc7XG4gICAgaXNEeW5hbWljOiBib29sZWFuO1xuICAgIHBhcmFtTmFtZXM6IHN0cmluZ1tdO1xuICAgIHJldmFsaWRhdGU/OiBudW1iZXI7XG4gIH0+O1xuICBjb25zdCByZW5kZXJSb3V0ZSA9IG1vZHVsZS5yZW5kZXJSb3V0ZSBhc1xuICAgIHwgKChwYXRoOiBzdHJpbmcsIG9wdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUHJvbWlzZTxTc2dQYWdlT3V0cHV0PilcbiAgICB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZ2V0U3RhdGljUGF0aHMgPSBtb2R1bGUuZ2V0U3RhdGljUGF0aHMgYXNcbiAgICB8ICgocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+PilcbiAgICB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBkeW5hbWljUm91dGVzID0gcm91dGVJbmZvLmZpbHRlcigocikgPT4gci5pc0R5bmFtaWMpO1xuICBsb2cuaW5mbyhcbiAgICBgUm91dGVzOiAke3JvdXRlSW5mby5sZW5ndGh9IHRvdGFsYCArXG4gICAgICAoZHluYW1pY1JvdXRlcy5sZW5ndGggPiAwXG4gICAgICAgID8gYCAoJHtkeW5hbWljUm91dGVzLmxlbmd0aH0gZHluYW1pYzogJHtkeW5hbWljUm91dGVzLm1hcCgocikgPT4gci5wYXRoKS5qb2luKCcsICcpfSlgXG4gICAgICAgIDogJycpLFxuICApO1xuXG4gIGNvbnN0IHN0YXRpY1BhdGhQYXJhbXNCeVJvdXRlID0gYXdhaXQgZXhwYW5kRHluYW1pY1JvdXRlcyhcbiAgICBkeW5hbWljUm91dGVzLFxuICAgIHJlbmRlclJvdXRlLFxuICAgIGdldFN0YXRpY1BhdGhzLFxuICAgIG9wdGlvbnMsXG4gICAgcm9vdCxcbiAgICBvdXREaXIsXG4gICk7XG5cbiAgLy8g4pSA4pSAIE1haW4gU1NHIHZpYSBIb25vJ3MgdG9TU0coKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3QgeyB0b1NTRyB9ID0gYXdhaXQgaW1wb3J0KCdob25vL3NzZycpO1xuICBjb25zdCBub2RlRnMgPSBhd2FpdCBpbXBvcnQoJ25vZGU6ZnMvcHJvbWlzZXMnKTtcbiAgY29uc3Qgbm9kZVBhdGggPSBhd2FpdCBpbXBvcnQoJ25vZGU6cGF0aCcpO1xuXG4gIGNvbnN0IGZzTW9kdWxlID0ge1xuICAgIHdyaXRlRmlsZTogYXN5bmMgKHBhdGg6IHN0cmluZywgZGF0YTogc3RyaW5nIHwgVWludDhBcnJheSkgPT4ge1xuICAgICAgY29uc3QgZGlyID0gbm9kZVBhdGguZGlybmFtZShwYXRoKTtcbiAgICAgIGF3YWl0IG5vZGVGcy5ta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIGF3YWl0IG5vZGVGcy53cml0ZUZpbGUocGF0aCwgZGF0YSk7XG4gICAgfSxcbiAgICBta2RpcjogYXN5bmMgKHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgYXdhaXQgbm9kZUZzLm1rZGlyKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgICB9LFxuICAgIGlzRGlyZWN0b3J5OiBhc3luYyAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKGF3YWl0IG5vZGVGcy5zdGF0KHBhdGgpKS5pc0RpcmVjdG9yeSgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IG91dHB1dERpciA9IGpvaW4ocm9vdCwgb3V0RGlyKTtcbiAgY29uc3QgYXBwID0gbW9kdWxlLmRlZmF1bHQgYXNcbiAgICB8IHsgZmV0Y2g6IChyZXE6IFJlcXVlc3QsIC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUHJvbWlzZTxSZXNwb25zZT4gfVxuICAgIHwgdW5kZWZpbmVkO1xuICBpZiAoIWFwcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdTU1IgYnVuZGxlIGxvYWRlZCBidXQgbm8gSG9ubyBhcHAgZm91bmQgKG5vIGRlZmF1bHQgZXhwb3J0KScsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRvU1NHKGFwcCBhcyBuZXZlciwgZnNNb2R1bGUsIHsgZGlyOiBvdXRwdXREaXIgfSk7XG5cbiAgaWYgKCFyZXN1bHQuc3VjY2VzcykgdGhyb3cgcmVzdWx0LmVycm9yO1xuXG4gIGNvbnN0IGlzclJvdXRlcyA9IGJ1aWxkSXNyTWFuaWZlc3RFbnRyaWVzKHJvdXRlSW5mbywgc3RhdGljUGF0aFBhcmFtc0J5Um91dGUpO1xuICBpZiAoaXNyUm91dGVzLmxlbmd0aCA+IDApIHtcbiAgICB3cml0ZUZpbGVTeW5jKFxuICAgICAgam9pbihvdXRwdXREaXIsICdpc3ItbWFuaWZlc3QuanNvbicpLFxuICAgICAgd3JpdGVKc29uKGlzclJvdXRlcyksXG4gICAgICAndXRmLTgnLFxuICAgICk7XG4gICAgbG9nLmluZm8oXG4gICAgICBgSVNSIG1hbmlmZXN0IC0+ICR7am9pbihvdXRwdXREaXIsICdpc3ItbWFuaWZlc3QuanNvbicpfSAoJHtpc3JSb3V0ZXMubGVuZ3RofSByb3V0ZShzKSlgLFxuICAgICk7XG4gIH1cblxuICAvLyDilIDilIAgUG9zdC1wcm9jZXNzaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8vIFJlbmFtZSA0MDQvaW5kZXguaHRtbCAtPiA0MDQuaHRtbCBmb3IgR2l0SHViIFBhZ2VzXG4gIGNvbnN0IF80MDREaXIgPSBqb2luKG91dHB1dERpciwgJzQwNCcpO1xuICBjb25zdCBfNDA0SHRtbCA9IGpvaW4ob3V0cHV0RGlyLCAnNDA0Lmh0bWwnKTtcbiAgY29uc3QgXzQwNEluZGV4ID0gam9pbihfNDA0RGlyLCAnaW5kZXguaHRtbCcpO1xuICBpZiAoZXhpc3RzU3luYyhfNDA0SW5kZXgpKSB7XG4gICAgaWYgKGV4aXN0c1N5bmMoXzQwNEh0bWwpKSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgJzQwNC5odG1sIGFscmVhZHkgZXhpc3RzIGluIG91dHB1dCBkaXIgLSByZW1vdmluZyBiZWZvcmUgcmVuYW1lJyxcbiAgICAgICk7XG4gICAgICBybVN5bmMoXzQwNEh0bWwsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICAgIHJlbmFtZVN5bmMoXzQwNEluZGV4LCBfNDA0SHRtbCk7XG4gICAgaWYgKGV4aXN0c1N5bmMoXzQwNERpcikpIHtcbiAgICAgIHJtU3luYyhfNDA0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICAgIGxvZy5pbmZvKCc0MDQgcGFnZSAtPiBkaXN0LzQwNC5odG1sIChHaXRIdWIgUGFnZXMpJyk7XG4gIH1cblxuICAvLyBDb252ZXJ0IGZsYXQgSFRNTCBmaWxlcyB0byBjbGVhbiBVUkxzOiBhYm91dC5odG1sIC0+IGFib3V0L2luZGV4Lmh0bWxcbiAgY29uc3QgYWxsSHRtbEZpbGVzID0gZmluZEh0bWxGaWxlcyhvdXRwdXREaXIpO1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGFsbEh0bWxGaWxlcykge1xuICAgIGNvbnN0IHJlbCA9IG5vZGVQYXRoLnJlbGF0aXZlKG91dHB1dERpciwgZmlsZVBhdGgpO1xuICAgIGlmIChyZWwuZW5kc1dpdGgoJ2luZGV4Lmh0bWwnKSB8fCByZWwgPT09ICc0MDQuaHRtbCcpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGJhc2VOYW1lID0gcmVsLnJlcGxhY2UoL1xcLmh0bWwkLywgJycpO1xuICAgIGNvbnN0IHVybEJhc2VOYW1lID0gYmFzZU5hbWUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgIGNvbnN0IGRpclBhdGggPSBqb2luKG91dHB1dERpciwgYmFzZU5hbWUpO1xuICAgIGNvbnN0IGluZGV4UGF0aCA9IGpvaW4oZGlyUGF0aCwgJ2luZGV4Lmh0bWwnKTtcbiAgICBpZiAoZXhpc3RzU3luYyhkaXJQYXRoKSkgY29udGludWU7XG4gICAgbWtkaXJTeW5jKGRpclBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHJlbmFtZVN5bmMoZmlsZVBhdGgsIGluZGV4UGF0aCk7XG4gICAgbG9nLmluZm8oYENsZWFuIFVSTDogLyR7dXJsQmFzZU5hbWV9IC0+ICR7dXJsQmFzZU5hbWV9L2luZGV4Lmh0bWxgKTtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTdGF0aWMgc2l0ZSBnZW5lcmF0ZWQgLT4gJHtvdXRwdXREaXJ9YCk7XG5cbiAgLy8g4pSA4pSAIGkxOG4gbG9jYWxlIGV4cGFuc2lvbiAoaWYgY3R4IGF2YWlsYWJsZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGF3YWl0IGV4cGFuZEkxOG5Mb2NhbGVzKFxuICAgIGV2aWRlbmNlLFxuICAgIHJlbmRlclJvdXRlLFxuICAgIHJvdXRlSW5mbyxcbiAgICBnZXRTdGF0aWNQYXRocyxcbiAgICBvcHRpb25zLFxuICAgIHJvb3QsXG4gICAgb3V0RGlyLFxuICApO1xuXG4gIC8vIOKUgOKUgCBQb3N0LXByb2Nlc3NpbmcgbW9kdWxlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3Qge1xuICAgIGJ1aWxkSXNsYW5kQ2h1bmtNYXAsXG4gICAgaW5qZWN0Q3NwTWV0YSxcbiAgICBpbmplY3REc2RQb2x5ZmlsbCxcbiAgICBpbmplY3RWaWV3VHJhbnNpdGlvbk1ldGEsXG4gICAgaW5qZWN0U3BlY3VsYXRpb25SdWxlcyxcbiAgICBidWlsZFNwZWN1bGF0aW9uUnVsZXNKc29uLFxuICB9ID0gYXdhaXQgaW1wb3J0KCcuL3Bvc3Rwcm9jZXNzLmpzJyk7XG5cbiAgY29uc3QgaXNsYW5kVGFnTmFtZXMgPSBvcHRpb25zLmlzbGFuZFRhZ05hbWVzIHx8IFtdO1xuICBjb25zdCBfaXNsYW5kQ2h1bmtNYXAgPSBidWlsZElzbGFuZENodW5rTWFwKFxuICAgIHJvb3QsXG4gICAgb3V0RGlyLFxuICAgIGlzbGFuZFRhZ05hbWVzLFxuICAgIGJhc2VQYXRoLFxuICApO1xuXG4gIGlmIChvcHRpb25zLnZpZXdUcmFuc2l0aW9uICE9PSBmYWxzZSkge1xuICAgIGluamVjdFZpZXdUcmFuc2l0aW9uTWV0YShvdXRwdXREaXIpO1xuICAgIGxvZy5pbmZvKCdWaWV3IFRyYW5zaXRpb25zIG1ldGEgdGFnIGluamVjdGVkJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5zcGVjdWxhdGlvbikge1xuICAgIGNvbnN0IHNwZWNPcHRzID0gdHlwZW9mIG9wdGlvbnMuc3BlY3VsYXRpb24gPT09ICdib29sZWFuJ1xuICAgICAgPyB7fVxuICAgICAgOiAob3B0aW9ucy5zcGVjdWxhdGlvbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgY29uc3QgcnVsZXNKc29uID0gYnVpbGRTcGVjdWxhdGlvblJ1bGVzSnNvbihcbiAgICAgIHNwZWNPcHRzLFxuICAgICAgcm91dGVJbmZvLm1hcCgocikgPT4gKHsgcGF0aDogci5wYXRoLCB0eXBlOiAncGFnZScgYXMgY29uc3QgfSkpLFxuICAgICk7XG4gICAgaWYgKHJ1bGVzSnNvbikge1xuICAgICAgaW5qZWN0U3BlY3VsYXRpb25SdWxlcyhvdXRwdXREaXIsIHJ1bGVzSnNvbik7XG4gICAgICBsb2cuaW5mbygnU3BlY3VsYXRpb24gUnVsZXMgaW5qZWN0ZWQnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjc3BQb2xpY3kgPSBvcHRpb25zLm1pZGRsZXdhcmU/LmNzcD8ucG9saWN5O1xuICBpZiAoY3NwUG9saWN5KSB7XG4gICAgaW5qZWN0Q3NwTWV0YShcbiAgICAgIG91dHB1dERpcixcbiAgICAgIGNzcFBvbGljeSxcbiAgICAgIG9wdGlvbnMubWlkZGxld2FyZT8uY3NwPy5yZXBvcnRPbmx5IHx8IGZhbHNlLFxuICAgICAgb3B0aW9ucy5taWRkbGV3YXJlPy5jc3A/Lm5vbmNlIHx8IGZhbHNlLFxuICAgICk7XG4gICAgbG9nLmluZm8oJ0NTUCBtZXRhIHRhZyBpbmplY3RlZCcpO1xuICB9XG5cbiAgaW5qZWN0RHNkUG9seWZpbGwob3V0cHV0RGlyKTtcbiAgbG9nLmluZm8oJ0RTRCBwb2x5ZmlsbCBpbmplY3RlZCcpO1xuXG4gIC8vIOKUgOKUgCBTaXRlbWFwICh2aWEgY3R4KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgYXdhaXQgZXZpZGVuY2Uub25QcmludEJ1aWxkTWFuaWZlc3Q/Lih7XG4gICAgcm9vdCxcbiAgICBvdXREaXIsXG4gICAgcGhhc2U6IDMsXG4gICAgaGVhZEV4dHJhczogb3B0aW9ucy5oZWFkRXh0cmFzLFxuICB9KTtcblxuICB0cnkge1xuICAgIGF3YWl0IGV2aWRlbmNlLm9uR2VuZXJhdGVTaXRlbWFwPy4oam9pbihyb290LCBvdXREaXIpKTtcbiAgfSBjYXRjaCB7XG4gICAgbG9nLmRlYnVnKCdTaXRlbWFwIGdlbmVyYXRpb24gc2tpcHBlZCBvciBmYWlsZWQnKTtcbiAgfVxufVxuXG4vLyBSZS1leHBvcnQgcmVzb2x2ZUR5bmFtaWNSb3V0ZVBhdGggZm9yIGNvbnN1bWVycyB3aG8gaW1wb3J0IGZyb20gc3NnLXJlbmRlci50c1xuZXhwb3J0IHsgcmVzb2x2ZUR5bmFtaWNSb3V0ZVBhdGggfSBmcm9tICcuL3NzZy1oZWxwZXJzLmpzJztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdz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
|
package/src/ssg-i18n.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @openelement/ssg - i18n locale expansion
|
|
3
|
-
*
|
|
4
|
-
* Expands SSG output for each locale when i18n options are provided.
|
|
5
|
-
* Renders each route for every locale and writes locale-prefixed output.
|
|
6
|
-
*/ import { join } from 'node:path';
|
|
7
|
-
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
8
|
-
import { createLogger } from '@openelement/core/logger';
|
|
9
|
-
import { formatError } from '@openelement/core/errors';
|
|
10
|
-
import { collectPageOutput, resolveDynamicRoutePath } from './ssg-helpers.js';
|
|
11
|
-
const log = createLogger('ssg');
|
|
12
|
-
/**
|
|
13
|
-
* Expand rendered pages for each locale when i18n is configured.
|
|
14
|
-
*
|
|
15
|
-
* For each locale and each route, re-renders the route with the locale
|
|
16
|
-
* parameter and writes output under /{locale}/{path}/index.html.
|
|
17
|
-
*/ export async function expandI18nLocales(evidence, renderRoute, routeInfo, getStaticPaths, options, root, outDir, pageDiagnostics) {
|
|
18
|
-
const i18nOpts = evidence.i18nOptions || null;
|
|
19
|
-
if (!i18nOpts || !renderRoute) return;
|
|
20
|
-
const locales = i18nOpts.locales || [];
|
|
21
|
-
if (locales.length <= 1) return;
|
|
22
|
-
log.info(`i18n: expanding for locales: ${locales.join(', ')}`);
|
|
23
|
-
for (const locale of locales){
|
|
24
|
-
for (const route of routeInfo){
|
|
25
|
-
let paramsList;
|
|
26
|
-
if (!route.isDynamic) {
|
|
27
|
-
paramsList = [
|
|
28
|
-
{}
|
|
29
|
-
];
|
|
30
|
-
} else if (getStaticPaths) {
|
|
31
|
-
try {
|
|
32
|
-
paramsList = await getStaticPaths(route.path);
|
|
33
|
-
} catch {
|
|
34
|
-
log.warn(`i18n: getStaticPaths failed for ${route.path}, skipping`);
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
} else {
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
if (paramsList.length === 0) continue;
|
|
41
|
-
const paramNames = route.paramNames;
|
|
42
|
-
for (const params of paramsList){
|
|
43
|
-
let resolvedPath;
|
|
44
|
-
try {
|
|
45
|
-
resolvedPath = resolveDynamicRoutePath(route.path, paramNames, params);
|
|
46
|
-
} catch (e) {
|
|
47
|
-
log.warn(`i18n: skipping unsafe dynamic route ${route.path}: ${formatError(e)}`);
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
const pathSegment = resolvedPath.split('/')[1] || '';
|
|
51
|
-
if (locales.includes(pathSegment)) {
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
const localePath = '/' + locale + '/' + resolvedPath.replace(/^\//, '');
|
|
55
|
-
try {
|
|
56
|
-
const output = await renderRoute(route.path, {
|
|
57
|
-
params,
|
|
58
|
-
locale,
|
|
59
|
-
title: options.html?.title,
|
|
60
|
-
lang: locale,
|
|
61
|
-
headExtras: options.headExtras
|
|
62
|
-
});
|
|
63
|
-
const html = collectPageOutput(localePath, output, pageDiagnostics);
|
|
64
|
-
const outputDir = join(root, outDir);
|
|
65
|
-
const pageDir = join(outputDir, localePath);
|
|
66
|
-
mkdirSync(pageDir, {
|
|
67
|
-
recursive: true
|
|
68
|
-
});
|
|
69
|
-
writeFileSync(join(pageDir, 'index.html'), html, 'utf-8');
|
|
70
|
-
log.info(`i18n: ${localePath}/index.html`);
|
|
71
|
-
} catch (e) {
|
|
72
|
-
log.warn(`i18n: failed for locale ${locale} on ${resolvedPath}: ${formatError(e)}`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL3NzZy1pMThuLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG9wZW5lbGVtZW50L3NzZyAtIGkxOG4gbG9jYWxlIGV4cGFuc2lvblxuICpcbiAqIEV4cGFuZHMgU1NHIG91dHB1dCBmb3IgZWFjaCBsb2NhbGUgd2hlbiBpMThuIG9wdGlvbnMgYXJlIHByb3ZpZGVkLlxuICogUmVuZGVycyBlYWNoIHJvdXRlIGZvciBldmVyeSBsb2NhbGUgYW5kIHdyaXRlcyBsb2NhbGUtcHJlZml4ZWQgb3V0cHV0LlxuICovXG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgdHlwZSB7IFNzZ1BhZ2VPdXRwdXQsIFNzZ1JlbmRlckV2aWRlbmNlLCBTc2dSZW5kZXJPcHRpb25zIH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL3NzZyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9sb2dnZXInO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3IgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9lcnJvcnMnO1xuaW1wb3J0IHsgY29sbGVjdFBhZ2VPdXRwdXQsIHR5cGUgUGFnZURpYWdub3N0aWMsIHJlc29sdmVEeW5hbWljUm91dGVQYXRoIH0gZnJvbSAnLi9zc2ctaGVscGVycy5qcyc7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcignc3NnJyk7XG5cbmludGVyZmFjZSBSb3V0ZUluZm9JdGVtIHtcbiAgcGF0aDogc3RyaW5nO1xuICB0YWdOYW1lOiBzdHJpbmc7XG4gIGlzRHluYW1pYzogYm9vbGVhbjtcbiAgcGFyYW1OYW1lczogc3RyaW5nW107XG4gIHJldmFsaWRhdGU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRXhwYW5kIHJlbmRlcmVkIHBhZ2VzIGZvciBlYWNoIGxvY2FsZSB3aGVuIGkxOG4gaXMgY29uZmlndXJlZC5cbiAqXG4gKiBGb3IgZWFjaCBsb2NhbGUgYW5kIGVhY2ggcm91dGUsIHJlLXJlbmRlcnMgdGhlIHJvdXRlIHdpdGggdGhlIGxvY2FsZVxuICogcGFyYW1ldGVyIGFuZCB3cml0ZXMgb3V0cHV0IHVuZGVyIC97bG9jYWxlfS97cGF0aH0vaW5kZXguaHRtbC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZEkxOG5Mb2NhbGVzKFxuICBldmlkZW5jZTogU3NnUmVuZGVyRXZpZGVuY2UsXG4gIHJlbmRlclJvdXRlOlxuICAgIHwgKChwYXRoOiBzdHJpbmcsIG9wdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUHJvbWlzZTxTc2dQYWdlT3V0cHV0PilcbiAgICB8IHVuZGVmaW5lZCxcbiAgcm91dGVJbmZvOiBSb3V0ZUluZm9JdGVtW10sXG4gIGdldFN0YXRpY1BhdGhzOlxuICAgIHwgKChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8QXJyYXk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4+KVxuICAgIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBTc2dSZW5kZXJPcHRpb25zLFxuICByb290OiBzdHJpbmcsXG4gIG91dERpcjogc3RyaW5nLFxuICBwYWdlRGlhZ25vc3RpY3M6IFBhZ2VEaWFnbm9zdGljW10sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaTE4bk9wdHMgPSBldmlkZW5jZS5pMThuT3B0aW9ucyB8fCBudWxsO1xuICBpZiAoIWkxOG5PcHRzIHx8ICFyZW5kZXJSb3V0ZSkgcmV0dXJuO1xuXG4gIGNvbnN0IGxvY2FsZXM6IHN0cmluZ1tdID0gaTE4bk9wdHMubG9jYWxlcyB8fCBbXTtcbiAgaWYgKGxvY2FsZXMubGVuZ3RoIDw9IDEpIHJldHVybjtcblxuICBsb2cuaW5mbyhgaTE4bjogZXhwYW5kaW5nIGZvciBsb2NhbGVzOiAke2xvY2FsZXMuam9pbignLCAnKX1gKTtcbiAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVJbmZvKSB7XG4gICAgICBsZXQgcGFyYW1zTGlzdDogQXJyYXk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gICAgICBpZiAoIXJvdXRlLmlzRHluYW1pYykge1xuICAgICAgICBwYXJhbXNMaXN0ID0gW3t9XTtcbiAgICAgIH0gZWxzZSBpZiAoZ2V0U3RhdGljUGF0aHMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJhbXNMaXN0ID0gYXdhaXQgZ2V0U3RhdGljUGF0aHMocm91dGUucGF0aCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgICAgYGkxOG46IGdldFN0YXRpY1BhdGhzIGZhaWxlZCBmb3IgJHtyb3V0ZS5wYXRofSwgc2tpcHBpbmdgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtc0xpc3QubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgcGFyYW1OYW1lcyA9IHJvdXRlLnBhcmFtTmFtZXM7XG4gICAgICBmb3IgKGNvbnN0IHBhcmFtcyBvZiBwYXJhbXNMaXN0KSB7XG4gICAgICAgIGxldCByZXNvbHZlZFBhdGg6IHN0cmluZztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlRHluYW1pY1JvdXRlUGF0aChcbiAgICAgICAgICAgIHJvdXRlLnBhdGgsXG4gICAgICAgICAgICBwYXJhbU5hbWVzLFxuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cud2FybihcbiAgICAgICAgICAgIGBpMThuOiBza2lwcGluZyB1bnNhZmUgZHluYW1pYyByb3V0ZSAke3JvdXRlLnBhdGh9OiAke2Zvcm1hdEVycm9yKGUpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXRoU2VnbWVudCA9IHJlc29sdmVkUGF0aC5zcGxpdCgnLycpWzFdIHx8ICcnO1xuICAgICAgICBpZiAobG9jYWxlcy5pbmNsdWRlcyhwYXRoU2VnbWVudCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb2NhbGVQYXRoID0gJy8nICsgbG9jYWxlICsgJy8nICsgcmVzb2x2ZWRQYXRoLnJlcGxhY2UoL15cXC8vLCAnJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVuZGVyUm91dGUocm91dGUucGF0aCwge1xuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnMuaHRtbD8udGl0bGUsXG4gICAgICAgICAgICBsYW5nOiBsb2NhbGUsXG4gICAgICAgICAgICBoZWFkRXh0cmFzOiBvcHRpb25zLmhlYWRFeHRyYXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgaHRtbCA9IGNvbGxlY3RQYWdlT3V0cHV0KGxvY2FsZVBhdGgsIG91dHB1dCwgcGFnZURpYWdub3N0aWNzKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXREaXIgPSBqb2luKHJvb3QsIG91dERpcik7XG4gICAgICAgICAgY29uc3QgcGFnZURpciA9IGpvaW4ob3V0cHV0RGlyLCBsb2NhbGVQYXRoKTtcbiAgICAgICAgICBta2RpclN5bmMocGFnZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgd3JpdGVGaWxlU3luYyhqb2luKHBhZ2VEaXIsICdpbmRleC5odG1sJyksIGh0bWwsICd1dGYtOCcpO1xuICAgICAgICAgIGxvZy5pbmZvKGBpMThuOiAke2xvY2FsZVBhdGh9L2luZGV4Lmh0bWxgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgICAgYGkxOG46IGZhaWxlZCBmb3IgbG9jYWxlICR7bG9jYWxlfSBvbiAke3Jlc29sdmVkUGF0aH06ICR7Zm9ybWF0RXJyb3IoZSl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0NBS0MsR0FFRCxTQUFTLElBQUksUUFBUSxZQUFZO0FBQ2pDLFNBQVMsU0FBUyxFQUFFLGFBQWEsUUFBUSxVQUFVO0FBRW5ELFNBQVMsWUFBWSxRQUFRLDJCQUEyQjtBQUN4RCxTQUFTLFdBQVcsUUFBUSwyQkFBMkI7QUFDdkQsU0FBUyxpQkFBaUIsRUFBdUIsdUJBQXVCLFFBQVEsbUJBQW1CO0FBRW5HLE1BQU0sTUFBTSxhQUFhO0FBVXpCOzs7OztDQUtDLEdBQ0QsT0FBTyxlQUFlLGtCQUNwQixRQUEyQixFQUMzQixXQUVhLEVBQ2IsU0FBMEIsRUFDMUIsY0FFYSxFQUNiLE9BQXlCLEVBQ3pCLElBQVksRUFDWixNQUFjLEVBQ2QsZUFBaUM7RUFFakMsTUFBTSxXQUFXLFNBQVMsV0FBVyxJQUFJO0VBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYTtFQUUvQixNQUFNLFVBQW9CLFNBQVMsT0FBTyxJQUFJLEVBQUU7RUFDaEQsSUFBSSxRQUFRLE1BQU0sSUFBSSxHQUFHO0VBRXpCLElBQUksSUFBSSxDQUFDLENBQUMsNkJBQTZCLEVBQUUsUUFBUSxJQUFJLENBQUMsT0FBTztFQUM3RCxLQUFLLE1BQU0sVUFBVSxRQUFTO0lBQzVCLEtBQUssTUFBTSxTQUFTLFVBQVc7TUFDN0IsSUFBSTtNQUNKLElBQUksQ0FBQyxNQUFNLFNBQVMsRUFBRTtRQUNwQixhQUFhO1VBQUMsQ0FBQztTQUFFO01BQ25CLE9BQU8sSUFBSSxnQkFBZ0I7UUFDekIsSUFBSTtVQUNGLGFBQWEsTUFBTSxlQUFlLE1BQU0sSUFBSTtRQUM5QyxFQUFFLE9BQU07VUFDTixJQUFJLElBQUksQ0FDTixDQUFDLGdDQUFnQyxFQUFFLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQztVQUUzRDtRQUNGO01BQ0YsT0FBTztRQUNMO01BQ0Y7TUFDQSxJQUFJLFdBQVcsTUFBTSxLQUFLLEdBQUc7TUFFN0IsTUFBTSxhQUFhLE1BQU0sVUFBVTtNQUNuQyxLQUFLLE1BQU0sVUFBVSxXQUFZO1FBQy9CLElBQUk7UUFDSixJQUFJO1VBQ0YsZUFBZSx3QkFDYixNQUFNLElBQUksRUFDVixZQUNBO1FBRUosRUFBRSxPQUFPLEdBQUc7VUFDVixJQUFJLElBQUksQ0FDTixDQUFDLG9DQUFvQyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxZQUFZLElBQUk7VUFFeEU7UUFDRjtRQUNBLE1BQU0sY0FBYyxhQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJO1FBQ2xELElBQUksUUFBUSxRQUFRLENBQUMsY0FBYztVQUNqQztRQUNGO1FBQ0EsTUFBTSxhQUFhLE1BQU0sU0FBUyxNQUFNLGFBQWEsT0FBTyxDQUFDLE9BQU87UUFDcEUsSUFBSTtVQUNGLE1BQU0sU0FBUyxNQUFNLFlBQVksTUFBTSxJQUFJLEVBQUU7WUFDM0M7WUFDQTtZQUNBLE9BQU8sUUFBUSxJQUFJLEVBQUU7WUFDckIsTUFBTTtZQUNOLFlBQVksUUFBUSxVQUFVO1VBQ2hDO1VBQ0EsTUFBTSxPQUFPLGtCQUFrQixZQUFZLFFBQVE7VUFDbkQsTUFBTSxZQUFZLEtBQUssTUFBTTtVQUM3QixNQUFNLFVBQVUsS0FBSyxXQUFXO1VBQ2hDLFVBQVUsU0FBUztZQUFFLFdBQVc7VUFBSztVQUNyQyxjQUFjLEtBQUssU0FBUyxlQUFlLE1BQU07VUFDakQsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxXQUFXLENBQUM7UUFDM0MsRUFBRSxPQUFPLEdBQUc7VUFDVixJQUFJLElBQUksQ0FDTixDQUFDLHdCQUF3QixFQUFFLE9BQU8sSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLFlBQVksSUFBSTtRQUU3RTtNQUNGO0lBQ0Y7RUFDRjtBQUNGIn0=
|
package/src/ssg-report.js
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @openelement/ssg - DSD report assembly
|
|
3
|
-
*
|
|
4
|
-
* Builds the dsd-report.json contents from render diagnostics,
|
|
5
|
-
* hydration strategy summary, manifest decisions, and CEM
|
|
6
|
-
* compatibility classifications.
|
|
7
|
-
*/ import { join } from 'node:path';
|
|
8
|
-
import { writeFileSync } from 'node:fs';
|
|
9
|
-
import { createLogger } from '@openelement/core/logger';
|
|
10
|
-
import { writeJson } from '@openelement/content/write-json';
|
|
11
|
-
const log = createLogger('ssg');
|
|
12
|
-
// ─── Hydration Strategy Summary ────────────────────────────────
|
|
13
|
-
/**
|
|
14
|
-
* Build a summary of hydration strategies used across all components.
|
|
15
|
-
*/ export function buildHydrationStrategySummary(evidence) {
|
|
16
|
-
const summary = {
|
|
17
|
-
load: 0,
|
|
18
|
-
idle: 0,
|
|
19
|
-
visible: 0,
|
|
20
|
-
only: 0,
|
|
21
|
-
clientOnlyExcluded: 0
|
|
22
|
-
};
|
|
23
|
-
const decisions = evidence.admissionDecisions || [];
|
|
24
|
-
const localMeta = evidence.localIslandMeta || {};
|
|
25
|
-
for (const meta of Object.values(localMeta)){
|
|
26
|
-
const strategy = meta.hydrate || 'idle';
|
|
27
|
-
if (strategy in summary) {
|
|
28
|
-
summary[strategy]++;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
for (const decl of evidence.packageIslandDecls || []){
|
|
32
|
-
const strategy = decl.hydrate || 'idle';
|
|
33
|
-
if (strategy in summary) {
|
|
34
|
-
summary[strategy]++;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
summary.clientOnlyExcluded = decisions.filter((d)=>d.renderPath === 'client-only').length;
|
|
38
|
-
return summary;
|
|
39
|
-
}
|
|
40
|
-
// ─── Manifest Decisions Builder (v0.17.2) ───────────────────────
|
|
41
|
-
/**
|
|
42
|
-
* Build manifest-driven render decisions from ctx.
|
|
43
|
-
*
|
|
44
|
-
* For each package island declaration, records how the pipeline resolved
|
|
45
|
-
* manifest flags (ssr, dsd, hydrate) into a concrete render path:
|
|
46
|
-
* - 'ssr+client': component is SSR-rendered + client-upgraded
|
|
47
|
-
* - 'client-only': component is client-only (ssr === false)
|
|
48
|
-
*
|
|
49
|
-
* When ctx or packageIslandDecls is absent, returns an empty array.
|
|
50
|
-
*/ export function buildManifestDecisions(evidence) {
|
|
51
|
-
const decls = evidence.packageIslandDecls;
|
|
52
|
-
const manifests = evidence.packageManifests;
|
|
53
|
-
if (!decls?.length || !manifests?.length) return [];
|
|
54
|
-
// Build a tagName -> packageName lookup from manifests
|
|
55
|
-
const tagNameToPackage = new Map();
|
|
56
|
-
for (const pkg of manifests){
|
|
57
|
-
for (const decl of pkg.declarations){
|
|
58
|
-
tagNameToPackage.set(decl.tagName, pkg.packageName);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return decls.map((island)=>{
|
|
62
|
-
const admission = evidence.admissionDecisions?.find((d)=>d.tagName === island.tagName);
|
|
63
|
-
const ssr = admission?.renderPath === 'ssr+client';
|
|
64
|
-
const dsd = island.dsd !== false; // default: true
|
|
65
|
-
const renderPath = ssr ? 'ssr+client' : 'client-only';
|
|
66
|
-
return {
|
|
67
|
-
tagName: island.tagName,
|
|
68
|
-
packageName: tagNameToPackage.get(island.tagName) || 'unknown',
|
|
69
|
-
ssr,
|
|
70
|
-
dsd,
|
|
71
|
-
hydrate: island.hydrate,
|
|
72
|
-
renderPath,
|
|
73
|
-
reason: admission?.reason,
|
|
74
|
-
source: 'package'
|
|
75
|
-
};
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
// ─── CEM Compatibility Report Builder (v0.18.0) ─────────────────
|
|
79
|
-
/**
|
|
80
|
-
* Build a CEM compatibility report from CEM classifications.
|
|
81
|
-
*
|
|
82
|
-
* Summarizes how the compatibility classifier classified each third-party
|
|
83
|
-
* WC package component into a tier (ssr-capable, client-only, rejected,
|
|
84
|
-
* experimental-dom). Written to dsd-report.json for CI assertion.
|
|
85
|
-
*
|
|
86
|
-
* Returns undefined when no CEM classifications exist.
|
|
87
|
-
*/ export function buildCemCompatibilityReport(classifications) {
|
|
88
|
-
if (!classifications?.length) return undefined;
|
|
89
|
-
const ssrCapableCount = classifications.filter((c)=>c.tier === 'ssr-capable').length;
|
|
90
|
-
const clientOnlyCount = classifications.filter((c)=>c.tier === 'client-only').length;
|
|
91
|
-
const rejectedCount = classifications.filter((c)=>c.tier === 'rejected').length;
|
|
92
|
-
const experimentalDomCount = classifications.filter((c)=>c.tier === 'experimental-dom').length;
|
|
93
|
-
// Order: rejected first (most critical), then ssr-capable, client-only, experimental-dom
|
|
94
|
-
const sortedClassifications = [
|
|
95
|
-
...classifications
|
|
96
|
-
].sort((a, b)=>{
|
|
97
|
-
const tierOrder = {
|
|
98
|
-
rejected: 0,
|
|
99
|
-
'ssr-capable': 1,
|
|
100
|
-
'client-only': 2,
|
|
101
|
-
'experimental-dom': 3
|
|
102
|
-
};
|
|
103
|
-
return (tierOrder[a.tier] ?? 99) - (tierOrder[b.tier] ?? 99);
|
|
104
|
-
});
|
|
105
|
-
const summaryParts = [];
|
|
106
|
-
if (ssrCapableCount > 0) summaryParts.push(`${ssrCapableCount} ssr-capable`);
|
|
107
|
-
if (clientOnlyCount > 0) summaryParts.push(`${clientOnlyCount} client-only`);
|
|
108
|
-
if (rejectedCount > 0) summaryParts.push(`${rejectedCount} rejected`);
|
|
109
|
-
if (experimentalDomCount > 0) summaryParts.push(`${experimentalDomCount} experimental-dom`);
|
|
110
|
-
return {
|
|
111
|
-
totalClassified: classifications.length,
|
|
112
|
-
ssrCapableCount,
|
|
113
|
-
clientOnlyCount,
|
|
114
|
-
rejectedCount,
|
|
115
|
-
experimentalDomCount,
|
|
116
|
-
classifications: sortedClassifications,
|
|
117
|
-
summary: summaryParts.length > 0 ? `CEM: ${summaryParts.join(', ')}` : 'CEM: no components classified'
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
// ─── Report Assembly ────────────────────────────────────────────
|
|
121
|
-
/**
|
|
122
|
-
* Assemble the full dsd-report.json object from page diagnostics and evidence.
|
|
123
|
-
*/ export function assembleDsdReport(pageDiagnostics, evidence) {
|
|
124
|
-
const totalErrors = pageDiagnostics.reduce((sum, p)=>sum + p.errors.length, 0);
|
|
125
|
-
const totalComponents = pageDiagnostics.reduce((sum, p)=>sum + p.componentCount, 0);
|
|
126
|
-
const totalRenderTimeMs = pageDiagnostics.reduce((sum, p)=>sum + p.renderTimeMs, 0);
|
|
127
|
-
const totalTemplateSize = pageDiagnostics.reduce((sum, p)=>sum + p.hydrationHints.length, 0);
|
|
128
|
-
const errorComponentCount = pageDiagnostics.filter((p)=>p.errors.length > 0).length;
|
|
129
|
-
const maxNestingDepth = 0; // Determined from collector, not per-page
|
|
130
|
-
const interactiveCount = pageDiagnostics.reduce((sum, p)=>sum + p.hydrationHints.filter((h)=>h.layer === 'dsd-interactive').length, 0);
|
|
131
|
-
const pureIslandCount = pageDiagnostics.reduce((sum, p)=>sum + p.hydrationHints.filter((h)=>h.layer === 'pure-island').length, 0);
|
|
132
|
-
const totalHints = pageDiagnostics.reduce((sum, p)=>sum + p.hydrationHints.length, 0);
|
|
133
|
-
const strategySummary = buildHydrationStrategySummary(evidence);
|
|
134
|
-
return {
|
|
135
|
-
reportVersion: '1.2.0',
|
|
136
|
-
timestamp: new Date().toISOString(),
|
|
137
|
-
totalPages: pageDiagnostics.length,
|
|
138
|
-
totalErrors,
|
|
139
|
-
renderErrors: pageDiagnostics.map((p)=>({
|
|
140
|
-
path: p.path,
|
|
141
|
-
errors: p.errors,
|
|
142
|
-
hydrationHints: p.hydrationHints,
|
|
143
|
-
componentCount: p.componentCount,
|
|
144
|
-
renderTimeMs: p.renderTimeMs
|
|
145
|
-
})),
|
|
146
|
-
metricsSummary: {
|
|
147
|
-
totalComponents,
|
|
148
|
-
totalRenderTimeMs,
|
|
149
|
-
avgRenderTimeMs: totalComponents > 0 ? Math.round(totalRenderTimeMs / totalComponents * 100) / 100 : 0,
|
|
150
|
-
totalTemplateSize,
|
|
151
|
-
maxNestingDepth,
|
|
152
|
-
errorComponentCount
|
|
153
|
-
},
|
|
154
|
-
hydrationHintSummary: {
|
|
155
|
-
totalHints,
|
|
156
|
-
interactiveCount,
|
|
157
|
-
pureIslandCount
|
|
158
|
-
},
|
|
159
|
-
hydrationStrategySummary: strategySummary,
|
|
160
|
-
manifestDecisions: buildManifestDecisions(evidence),
|
|
161
|
-
admissionDecisions: evidence.admissionDecisions || [],
|
|
162
|
-
cemCompatibility: buildCemCompatibilityReport(evidence.cemClassifications)
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Write the DSD report to the output directory.
|
|
167
|
-
*/ export function writeDsdReport(outputDir, report) {
|
|
168
|
-
const reportPath = join(outputDir, 'dsd-report.json');
|
|
169
|
-
writeFileSync(reportPath, writeJson(report), 'utf-8');
|
|
170
|
-
log.info(`DSD report -> ${reportPath} (${report.totalPages} pages, ${report.totalErrors} errors)`);
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL3NzZy1yZXBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAb3BlbmVsZW1lbnQvc3NnIC0gRFNEIHJlcG9ydCBhc3NlbWJseVxuICpcbiAqIEJ1aWxkcyB0aGUgZHNkLXJlcG9ydC5qc29uIGNvbnRlbnRzIGZyb20gcmVuZGVyIGRpYWdub3N0aWNzLFxuICogaHlkcmF0aW9uIHN0cmF0ZWd5IHN1bW1hcnksIG1hbmlmZXN0IGRlY2lzaW9ucywgYW5kIENFTVxuICogY29tcGF0aWJpbGl0eSBjbGFzc2lmaWNhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9sb2dnZXInO1xuaW1wb3J0IHsgd3JpdGVKc29uIH0gZnJvbSAnQG9wZW5lbGVtZW50L2NvbnRlbnQvd3JpdGUtanNvbic7XG5pbXBvcnQgdHlwZSB7IENlbUNvbXBhdGliaWxpdHlSZXBvcnQgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvbWFuaWZlc3QnO1xuaW1wb3J0IHR5cGUgeyBDb21wYXRpYmlsaXR5Q2xhc3NpZmljYXRpb24gfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvZnJhbWV3b3JrJztcbmltcG9ydCB0eXBlIHtcbiAgRHNkQnVpbGRSZXBvcnQsXG4gIERzZEh5ZHJhdGlvblN0cmF0ZWd5U3VtbWFyeSxcbiAgTWFuaWZlc3REZWNpc2lvbixcbn0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL3JlbmRlcic7XG5pbXBvcnQgdHlwZSB7IFNzZ1JlbmRlckV2aWRlbmNlIH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL3NzZyc7XG5pbXBvcnQgdHlwZSB7IFBhZ2VEaWFnbm9zdGljIH0gZnJvbSAnLi9zc2ctaGVscGVycy5qcyc7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcignc3NnJyk7XG5cbi8vIOKUgOKUgOKUgCBIeWRyYXRpb24gU3RyYXRlZ3kgU3VtbWFyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBCdWlsZCBhIHN1bW1hcnkgb2YgaHlkcmF0aW9uIHN0cmF0ZWdpZXMgdXNlZCBhY3Jvc3MgYWxsIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEh5ZHJhdGlvblN0cmF0ZWd5U3VtbWFyeShcbiAgZXZpZGVuY2U6IFNzZ1JlbmRlckV2aWRlbmNlLFxuKTogRHNkSHlkcmF0aW9uU3RyYXRlZ3lTdW1tYXJ5IHtcbiAgY29uc3Qgc3VtbWFyeTogRHNkSHlkcmF0aW9uU3RyYXRlZ3lTdW1tYXJ5ID0ge1xuICAgIGxvYWQ6IDAsXG4gICAgaWRsZTogMCxcbiAgICB2aXNpYmxlOiAwLFxuICAgIG9ubHk6IDAsXG4gICAgY2xpZW50T25seUV4Y2x1ZGVkOiAwLFxuICB9O1xuICBjb25zdCBkZWNpc2lvbnMgPSBldmlkZW5jZS5hZG1pc3Npb25EZWNpc2lvbnMgfHwgW107XG4gIGNvbnN0IGxvY2FsTWV0YSA9IGV2aWRlbmNlLmxvY2FsSXNsYW5kTWV0YSB8fCB7fTtcblxuICBmb3IgKGNvbnN0IG1ldGEgb2YgT2JqZWN0LnZhbHVlcyhsb2NhbE1ldGEpKSB7XG4gICAgY29uc3Qgc3RyYXRlZ3kgPSBtZXRhLmh5ZHJhdGUgfHwgJ2lkbGUnO1xuICAgIGlmIChzdHJhdGVneSBpbiBzdW1tYXJ5KSB7XG4gICAgICBzdW1tYXJ5W3N0cmF0ZWd5IGFzIGtleW9mIHR5cGVvZiBzdW1tYXJ5XSsrO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGRlY2wgb2YgZXZpZGVuY2UucGFja2FnZUlzbGFuZERlY2xzIHx8IFtdKSB7XG4gICAgY29uc3Qgc3RyYXRlZ3kgPSBkZWNsLmh5ZHJhdGUgfHwgJ2lkbGUnO1xuICAgIGlmIChzdHJhdGVneSBpbiBzdW1tYXJ5KSB7XG4gICAgICBzdW1tYXJ5W3N0cmF0ZWd5IGFzIGtleW9mIHR5cGVvZiBzdW1tYXJ5XSsrO1xuICAgIH1cbiAgfVxuICBzdW1tYXJ5LmNsaWVudE9ubHlFeGNsdWRlZCA9IGRlY2lzaW9ucy5maWx0ZXIoKGQpID0+IGQucmVuZGVyUGF0aCA9PT0gJ2NsaWVudC1vbmx5JykubGVuZ3RoO1xuICByZXR1cm4gc3VtbWFyeTtcbn1cblxuLy8g4pSA4pSA4pSAIE1hbmlmZXN0IERlY2lzaW9ucyBCdWlsZGVyICh2MC4xNy4yKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBCdWlsZCBtYW5pZmVzdC1kcml2ZW4gcmVuZGVyIGRlY2lzaW9ucyBmcm9tIGN0eC5cbiAqXG4gKiBGb3IgZWFjaCBwYWNrYWdlIGlzbGFuZCBkZWNsYXJhdGlvbiwgcmVjb3JkcyBob3cgdGhlIHBpcGVsaW5lIHJlc29sdmVkXG4gKiBtYW5pZmVzdCBmbGFncyAoc3NyLCBkc2QsIGh5ZHJhdGUpIGludG8gYSBjb25jcmV0ZSByZW5kZXIgcGF0aDpcbiAqIC0gJ3NzcitjbGllbnQnOiBjb21wb25lbnQgaXMgU1NSLXJlbmRlcmVkICsgY2xpZW50LXVwZ3JhZGVkXG4gKiAtICdjbGllbnQtb25seSc6IGNvbXBvbmVudCBpcyBjbGllbnQtb25seSAoc3NyID09PSBmYWxzZSlcbiAqXG4gKiBXaGVuIGN0eCBvciBwYWNrYWdlSXNsYW5kRGVjbHMgaXMgYWJzZW50LCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRNYW5pZmVzdERlY2lzaW9ucyhcbiAgZXZpZGVuY2U6IFNzZ1JlbmRlckV2aWRlbmNlLFxuKTogTWFuaWZlc3REZWNpc2lvbltdIHtcbiAgY29uc3QgZGVjbHMgPSBldmlkZW5jZS5wYWNrYWdlSXNsYW5kRGVjbHM7XG4gIGNvbnN0IG1hbmlmZXN0cyA9IGV2aWRlbmNlLnBhY2thZ2VNYW5pZmVzdHM7XG4gIGlmICghZGVjbHM/Lmxlbmd0aCB8fCAhbWFuaWZlc3RzPy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAvLyBCdWlsZCBhIHRhZ05hbWUgLT4gcGFja2FnZU5hbWUgbG9va3VwIGZyb20gbWFuaWZlc3RzXG4gIGNvbnN0IHRhZ05hbWVUb1BhY2thZ2UgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHBrZyBvZiBtYW5pZmVzdHMpIHtcbiAgICBmb3IgKGNvbnN0IGRlY2wgb2YgcGtnLmRlY2xhcmF0aW9ucykge1xuICAgICAgdGFnTmFtZVRvUGFja2FnZS5zZXQoZGVjbC50YWdOYW1lLCBwa2cucGFja2FnZU5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZWNscy5tYXAoKGlzbGFuZCkgPT4ge1xuICAgIGNvbnN0IGFkbWlzc2lvbiA9IGV2aWRlbmNlLmFkbWlzc2lvbkRlY2lzaW9ucz8uZmluZChcbiAgICAgIChkKSA9PiBkLnRhZ05hbWUgPT09IGlzbGFuZC50YWdOYW1lLFxuICAgICk7XG4gICAgY29uc3Qgc3NyID0gYWRtaXNzaW9uPy5yZW5kZXJQYXRoID09PSAnc3NyK2NsaWVudCc7XG4gICAgY29uc3QgZHNkID0gaXNsYW5kLmRzZCAhPT0gZmFsc2U7IC8vIGRlZmF1bHQ6IHRydWVcbiAgICBjb25zdCByZW5kZXJQYXRoOiBNYW5pZmVzdERlY2lzaW9uWydyZW5kZXJQYXRoJ10gPSBzc3IgPyAnc3NyK2NsaWVudCcgOiAnY2xpZW50LW9ubHknO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhZ05hbWU6IGlzbGFuZC50YWdOYW1lLFxuICAgICAgcGFja2FnZU5hbWU6IHRhZ05hbWVUb1BhY2thZ2UuZ2V0KGlzbGFuZC50YWdOYW1lKSB8fCAndW5rbm93bicsXG4gICAgICBzc3IsXG4gICAgICBkc2QsXG4gICAgICBoeWRyYXRlOiBpc2xhbmQuaHlkcmF0ZSxcbiAgICAgIHJlbmRlclBhdGgsXG4gICAgICByZWFzb246IGFkbWlzc2lvbj8ucmVhc29uLFxuICAgICAgc291cmNlOiAncGFja2FnZScsXG4gICAgfTtcbiAgfSk7XG59XG5cbi8vIOKUgOKUgOKUgCBDRU0gQ29tcGF0aWJpbGl0eSBSZXBvcnQgQnVpbGRlciAodjAuMTguMCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQnVpbGQgYSBDRU0gY29tcGF0aWJpbGl0eSByZXBvcnQgZnJvbSBDRU0gY2xhc3NpZmljYXRpb25zLlxuICpcbiAqIFN1bW1hcml6ZXMgaG93IHRoZSBjb21wYXRpYmlsaXR5IGNsYXNzaWZpZXIgY2xhc3NpZmllZCBlYWNoIHRoaXJkLXBhcnR5XG4gKiBXQyBwYWNrYWdlIGNvbXBvbmVudCBpbnRvIGEgdGllciAoc3NyLWNhcGFibGUsIGNsaWVudC1vbmx5LCByZWplY3RlZCxcbiAqIGV4cGVyaW1lbnRhbC1kb20pLiBXcml0dGVuIHRvIGRzZC1yZXBvcnQuanNvbiBmb3IgQ0kgYXNzZXJ0aW9uLlxuICpcbiAqIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gbm8gQ0VNIGNsYXNzaWZpY2F0aW9ucyBleGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2VtQ29tcGF0aWJpbGl0eVJlcG9ydChcbiAgY2xhc3NpZmljYXRpb25zPzogQ29tcGF0aWJpbGl0eUNsYXNzaWZpY2F0aW9uW10sXG4pOiBDZW1Db21wYXRpYmlsaXR5UmVwb3J0IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjbGFzc2lmaWNhdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBzc3JDYXBhYmxlQ291bnQgPSBjbGFzc2lmaWNhdGlvbnMuZmlsdGVyKChjKSA9PiBjLnRpZXIgPT09ICdzc3ItY2FwYWJsZScpLmxlbmd0aDtcbiAgY29uc3QgY2xpZW50T25seUNvdW50ID0gY2xhc3NpZmljYXRpb25zLmZpbHRlcigoYykgPT4gYy50aWVyID09PSAnY2xpZW50LW9ubHknKS5sZW5ndGg7XG4gIGNvbnN0IHJlamVjdGVkQ291bnQgPSBjbGFzc2lmaWNhdGlvbnMuZmlsdGVyKChjKSA9PiBjLnRpZXIgPT09ICdyZWplY3RlZCcpLmxlbmd0aDtcbiAgY29uc3QgZXhwZXJpbWVudGFsRG9tQ291bnQgPSBjbGFzc2lmaWNhdGlvbnMuZmlsdGVyKChjKSA9PiBjLnRpZXIgPT09ICdleHBlcmltZW50YWwtZG9tJykubGVuZ3RoO1xuXG4gIC8vIE9yZGVyOiByZWplY3RlZCBmaXJzdCAobW9zdCBjcml0aWNhbCksIHRoZW4gc3NyLWNhcGFibGUsIGNsaWVudC1vbmx5LCBleHBlcmltZW50YWwtZG9tXG4gIGNvbnN0IHNvcnRlZENsYXNzaWZpY2F0aW9ucyA9IFsuLi5jbGFzc2lmaWNhdGlvbnNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCB0aWVyT3JkZXIgPSB7XG4gICAgICByZWplY3RlZDogMCxcbiAgICAgICdzc3ItY2FwYWJsZSc6IDEsXG4gICAgICAnY2xpZW50LW9ubHknOiAyLFxuICAgICAgJ2V4cGVyaW1lbnRhbC1kb20nOiAzLFxuICAgIH07XG4gICAgcmV0dXJuICh0aWVyT3JkZXJbYS50aWVyXSA/PyA5OSkgLSAodGllck9yZGVyW2IudGllcl0gPz8gOTkpO1xuICB9KTtcblxuICBjb25zdCBzdW1tYXJ5UGFydHM6IHN0cmluZ1tdID0gW107XG4gIGlmIChzc3JDYXBhYmxlQ291bnQgPiAwKSBzdW1tYXJ5UGFydHMucHVzaChgJHtzc3JDYXBhYmxlQ291bnR9IHNzci1jYXBhYmxlYCk7XG4gIGlmIChjbGllbnRPbmx5Q291bnQgPiAwKSBzdW1tYXJ5UGFydHMucHVzaChgJHtjbGllbnRPbmx5Q291bnR9IGNsaWVudC1vbmx5YCk7XG4gIGlmIChyZWplY3RlZENvdW50ID4gMCkgc3VtbWFyeVBhcnRzLnB1c2goYCR7cmVqZWN0ZWRDb3VudH0gcmVqZWN0ZWRgKTtcbiAgaWYgKGV4cGVyaW1lbnRhbERvbUNvdW50ID4gMCkgc3VtbWFyeVBhcnRzLnB1c2goYCR7ZXhwZXJpbWVudGFsRG9tQ291bnR9IGV4cGVyaW1lbnRhbC1kb21gKTtcblxuICByZXR1cm4ge1xuICAgIHRvdGFsQ2xhc3NpZmllZDogY2xhc3NpZmljYXRpb25zLmxlbmd0aCxcbiAgICBzc3JDYXBhYmxlQ291bnQsXG4gICAgY2xpZW50T25seUNvdW50LFxuICAgIHJlamVjdGVkQ291bnQsXG4gICAgZXhwZXJpbWVudGFsRG9tQ291bnQsXG4gICAgY2xhc3NpZmljYXRpb25zOiBzb3J0ZWRDbGFzc2lmaWNhdGlvbnMsXG4gICAgc3VtbWFyeTogc3VtbWFyeVBhcnRzLmxlbmd0aCA+IDBcbiAgICAgID8gYENFTTogJHtzdW1tYXJ5UGFydHMuam9pbignLCAnKX1gXG4gICAgICA6ICdDRU06IG5vIGNvbXBvbmVudHMgY2xhc3NpZmllZCcsXG4gIH07XG59XG5cbi8vIOKUgOKUgOKUgCBSZXBvcnQgQXNzZW1ibHkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQXNzZW1ibGUgdGhlIGZ1bGwgZHNkLXJlcG9ydC5qc29uIG9iamVjdCBmcm9tIHBhZ2UgZGlhZ25vc3RpY3MgYW5kIGV2aWRlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZW1ibGVEc2RSZXBvcnQoXG4gIHBhZ2VEaWFnbm9zdGljczogUGFnZURpYWdub3N0aWNbXSxcbiAgZXZpZGVuY2U6IFNzZ1JlbmRlckV2aWRlbmNlLFxuKTogRHNkQnVpbGRSZXBvcnQge1xuICBjb25zdCB0b3RhbEVycm9ycyA9IHBhZ2VEaWFnbm9zdGljcy5yZWR1Y2UoXG4gICAgKHN1bSwgcCkgPT4gc3VtICsgcC5lcnJvcnMubGVuZ3RoLFxuICAgIDAsXG4gICk7XG4gIGNvbnN0IHRvdGFsQ29tcG9uZW50cyA9IHBhZ2VEaWFnbm9zdGljcy5yZWR1Y2UoXG4gICAgKHN1bSwgcCkgPT4gc3VtICsgcC5jb21wb25lbnRDb3VudCxcbiAgICAwLFxuICApO1xuICBjb25zdCB0b3RhbFJlbmRlclRpbWVNcyA9IHBhZ2VEaWFnbm9zdGljcy5yZWR1Y2UoXG4gICAgKHN1bSwgcCkgPT4gc3VtICsgcC5yZW5kZXJUaW1lTXMsXG4gICAgMCxcbiAgKTtcbiAgY29uc3QgdG90YWxUZW1wbGF0ZVNpemUgPSBwYWdlRGlhZ25vc3RpY3MucmVkdWNlKFxuICAgIChzdW0sIHApID0+IHN1bSArIHAuaHlkcmF0aW9uSGludHMubGVuZ3RoLFxuICAgIDAsXG4gICk7XG4gIGNvbnN0IGVycm9yQ29tcG9uZW50Q291bnQgPSBwYWdlRGlhZ25vc3RpY3MuZmlsdGVyKFxuICAgIChwKSA9PiBwLmVycm9ycy5sZW5ndGggPiAwLFxuICApLmxlbmd0aDtcbiAgY29uc3QgbWF4TmVzdGluZ0RlcHRoID0gMDsgLy8gRGV0ZXJtaW5lZCBmcm9tIGNvbGxlY3Rvciwgbm90IHBlci1wYWdlXG4gIGNvbnN0IGludGVyYWN0aXZlQ291bnQgPSBwYWdlRGlhZ25vc3RpY3MucmVkdWNlKFxuICAgIChzdW0sIHApID0+IHN1bSArIHAuaHlkcmF0aW9uSGludHMuZmlsdGVyKChoKSA9PiBoLmxheWVyID09PSAnZHNkLWludGVyYWN0aXZlJykubGVuZ3RoLFxuICAgIDAsXG4gICk7XG4gIGNvbnN0IHB1cmVJc2xhbmRDb3VudCA9IHBhZ2VEaWFnbm9zdGljcy5yZWR1Y2UoXG4gICAgKHN1bSwgcCkgPT4gc3VtICsgcC5oeWRyYXRpb25IaW50cy5maWx0ZXIoKGgpID0+IGgubGF5ZXIgPT09ICdwdXJlLWlzbGFuZCcpLmxlbmd0aCxcbiAgICAwLFxuICApO1xuICBjb25zdCB0b3RhbEhpbnRzID0gcGFnZURpYWdub3N0aWNzLnJlZHVjZShcbiAgICAoc3VtLCBwKSA9PiBzdW0gKyBwLmh5ZHJhdGlvbkhpbnRzLmxlbmd0aCxcbiAgICAwLFxuICApO1xuICBjb25zdCBzdHJhdGVneVN1bW1hcnkgPSBidWlsZEh5ZHJhdGlvblN0cmF0ZWd5U3VtbWFyeShldmlkZW5jZSk7XG5cbiAgcmV0dXJuIHtcbiAgICByZXBvcnRWZXJzaW9uOiAnMS4yLjAnLFxuICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHRvdGFsUGFnZXM6IHBhZ2VEaWFnbm9zdGljcy5sZW5ndGgsXG4gICAgdG90YWxFcnJvcnMsXG4gICAgcmVuZGVyRXJyb3JzOiBwYWdlRGlhZ25vc3RpY3MubWFwKChwKSA9PiAoe1xuICAgICAgcGF0aDogcC5wYXRoLFxuICAgICAgZXJyb3JzOiBwLmVycm9ycyxcbiAgICAgIGh5ZHJhdGlvbkhpbnRzOiBwLmh5ZHJhdGlvbkhpbnRzLFxuICAgICAgY29tcG9uZW50Q291bnQ6IHAuY29tcG9uZW50Q291bnQsXG4gICAgICByZW5kZXJUaW1lTXM6IHAucmVuZGVyVGltZU1zLFxuICAgIH0pKSxcbiAgICBtZXRyaWNzU3VtbWFyeToge1xuICAgICAgdG90YWxDb21wb25lbnRzLFxuICAgICAgdG90YWxSZW5kZXJUaW1lTXMsXG4gICAgICBhdmdSZW5kZXJUaW1lTXM6IHRvdGFsQ29tcG9uZW50cyA+IDBcbiAgICAgICAgPyBNYXRoLnJvdW5kKHRvdGFsUmVuZGVyVGltZU1zIC8gdG90YWxDb21wb25lbnRzICogMTAwKSAvIDEwMFxuICAgICAgICA6IDAsXG4gICAgICB0b3RhbFRlbXBsYXRlU2l6ZSxcbiAgICAgIG1heE5lc3RpbmdEZXB0aCxcbiAgICAgIGVycm9yQ29tcG9uZW50Q291bnQsXG4gICAgfSxcbiAgICBoeWRyYXRpb25IaW50U3VtbWFyeToge1xuICAgICAgdG90YWxIaW50cyxcbiAgICAgIGludGVyYWN0aXZlQ291bnQsXG4gICAgICBwdXJlSXNsYW5kQ291bnQsXG4gICAgfSxcbiAgICBoeWRyYXRpb25TdHJhdGVneVN1bW1hcnk6IHN0cmF0ZWd5U3VtbWFyeSxcbiAgICBtYW5pZmVzdERlY2lzaW9uczogYnVpbGRNYW5pZmVzdERlY2lzaW9ucyhldmlkZW5jZSksXG4gICAgYWRtaXNzaW9uRGVjaXNpb25zOiBldmlkZW5jZS5hZG1pc3Npb25EZWNpc2lvbnMgfHwgW10sXG4gICAgY2VtQ29tcGF0aWJpbGl0eTogYnVpbGRDZW1Db21wYXRpYmlsaXR5UmVwb3J0KFxuICAgICAgZXZpZGVuY2UuY2VtQ2xhc3NpZmljYXRpb25zLFxuICAgICksXG4gIH07XG59XG5cbi8qKlxuICogV3JpdGUgdGhlIERTRCByZXBvcnQgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURzZFJlcG9ydChcbiAgb3V0cHV0RGlyOiBzdHJpbmcsXG4gIHJlcG9ydDogRHNkQnVpbGRSZXBvcnQsXG4pOiB2b2lkIHtcbiAgY29uc3QgcmVwb3J0UGF0aCA9IGpvaW4ob3V0cHV0RGlyLCAnZHNkLXJlcG9ydC5qc29uJyk7XG4gIHdyaXRlRmlsZVN5bmMocmVwb3J0UGF0aCwgd3JpdGVKc29uKHJlcG9ydCksICd1dGYtOCcpO1xuICBsb2cuaW5mbyhcbiAgICBgRFNEIHJlcG9ydCAtPiAke3JlcG9ydFBhdGh9ICgke3JlcG9ydC50b3RhbFBhZ2VzfSBwYWdlcywgJHtyZXBvcnQudG90YWxFcnJvcnN9IGVycm9ycylgLFxuICApO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Q0FNQyxHQUVELFNBQVMsSUFBSSxRQUFRLFlBQVk7QUFDakMsU0FBUyxhQUFhLFFBQVEsVUFBVTtBQUN4QyxTQUFTLFlBQVksUUFBUSwyQkFBMkI7QUFDeEQsU0FBUyxTQUFTLFFBQVEsa0NBQWtDO0FBVzVELE1BQU0sTUFBTSxhQUFhO0FBRXpCLGtFQUFrRTtBQUVsRTs7Q0FFQyxHQUNELE9BQU8sU0FBUyw4QkFDZCxRQUEyQjtFQUUzQixNQUFN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
|