@openelement/ssg 0.41.0-alpha.1 → 0.41.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openelement/ssg",
3
- "version": "0.41.0-alpha.1",
3
+ "version": "0.41.0-alpha.3",
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.1",
27
- "@openelement/core": "^0.41.0-alpha.1",
28
- "@openelement/content": "^0.41.0-alpha.1"
26
+ "@openelement/protocol": "^0.41.0-alpha.3",
27
+ "@openelement/core": "^0.41.0-alpha.3",
28
+ "@openelement/content": "^0.41.0-alpha.3"
29
29
  }
30
30
  }
@@ -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 process from 'node:process';
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 || process.cwd();
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 || process.cwd();
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL2J1aWxkLXBvc3Rwcm9jZXNzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG9wZW5lbGVtZW50L3NzZyAtIEFkYXB0ZXItYWdub3N0aWMgU1NHIGJ1aWxkIHBvc3QtcHJvY2Vzc2luZy5cbiAqXG4gKiBPcmNoZXN0cmF0ZXMgY2xpZW50LXNjcmlwdCBpbmplY3Rpb24sIGlzbGFuZCBjaHVuay9zdHJhdGVneS9sYXllciBtYXBcbiAqIGNvbnN0cnVjdGlvbiwgYW5kIFNTUiBhcnRpZmFjdCBjbGVhbnVwLiBUaGlzIG1vZHVsZSBoYXMgemVybyBWaXRlXG4gKiBkZXBlbmRlbmN5IGFuZCBvbmx5IHJlYWRzL3dyaXRlcyBmaWxlcy5cbiAqL1xuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyByZWFkZGlyLCB1bmxpbmsgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50TGF5ZXIsIEh5ZHJhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL2ZyYW1ld29yayc7XG5pbXBvcnQgdHlwZSB7IElzbGFuZERlY2wgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvc3NnJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb3JlL2xvZ2dlcic7XG5pbXBvcnQgeyBidWlsZElzbGFuZENodW5rTWFwLCBpbmplY3RDbGllbnRTY3JpcHQgfSBmcm9tICcuL3Bvc3Rwcm9jZXNzLmpzJztcbmltcG9ydCB7IGdlbmVyYXRlSXNsYW5kTWFuaWZlc3RzLCB3cml0ZUlzbGFuZE1hbmlmZXN0cyB9IGZyb20gJy4vaXNsYW5kLW1hbmlmZXN0LmpzJztcblxuY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKCdjb3JlJyk7XG5cbi8qKiBOYXJyb3cgdmlldyBvZiBPcGVuRWxlbWVudEJ1aWxkQ29udGV4dCB1c2VkIGJ5IHRoZSBTU0cgcG9zdC1wcm9jZXNzb3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkQ29udGV4dFZpZXcge1xuICBwaGFzZTM6IHtcbiAgICByb290OiBzdHJpbmc7XG4gICAgb3V0RGlyOiBzdHJpbmc7XG4gICAgYmFzZTogc3RyaW5nO1xuICAgIHVwZ3JhZGVTdHJhdGVneTogSHlkcmF0aW9uU3RyYXRlZ3k7XG4gIH07XG4gIHBoYXNlMToge1xuICAgIGlzbGFuZFRhZ05hbWVzOiBzdHJpbmdbXTtcbiAgICBwYWNrYWdlSXNsYW5kRGVjbHM6IElzbGFuZERlY2xbXTtcbiAgICBpc2xhbmRNZXRhOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPElzbGFuZERlY2w+PjtcbiAgfTtcbn1cblxuLyoqXG4gKiBJbmplY3QgdGhlIGlzbGFuZCBjbGllbnQgc2NyaXB0IGFuZCBnZW5lcmF0ZSBwZXItcGFnZSBpc2xhbmQgbWFuaWZlc3RzLlxuICogTXVzdCBvbmx5IHJ1biBhZnRlciBQaGFzZSAyIChjbGllbnQgaXNsYW5kIGJ1aWxkKSBoYXMgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcG9zdFByb2Nlc3NDbGllbnRJc2xhbmRCdWlsZChcbiAgY3R4OiBCdWlsZENvbnRleHRWaWV3LFxuICBzY3JpcHRTcmM6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gY3R4LnBoYXNlMy5yb290IHx8IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IG91dERpciA9IGN0eC5waGFzZTMub3V0RGlyIHx8ICdkaXN0JztcbiAgY29uc3QgYmFzZSA9IGN0eC5waGFzZTMuYmFzZSB8fCAnLyc7XG4gIGNvbnN0IG91dHB1dERpciA9IGpvaW4ocm9vdCwgb3V0RGlyKTtcblxuICBpbmplY3RDbGllbnRTY3JpcHQob3V0cHV0RGlyLCBzY3JpcHRTcmMpO1xuXG4gIGNvbnN0IGlzbGFuZFRhZ05hbWVzID0gW1xuICAgIC4uLihjdHgucGhhc2UxLmlzbGFuZFRhZ05hbWVzIHx8IFtdKSxcbiAgICAuLi4oY3R4LnBoYXNlMS5wYWNrYWdlSXNsYW5kRGVjbHMgfHwgW10pLm1hcCgoaXNsYW5kKSA9PiBpc2xhbmQudGFnTmFtZSksXG4gIF07XG5cbiAgY29uc3QgY2h1bmtNYXAgPSBidWlsZElzbGFuZENodW5rTWFwKHJvb3QsIG91dERpciwgaXNsYW5kVGFnTmFtZXMsIGJhc2UpO1xuXG4gIGNvbnN0IHN0cmF0ZWd5TWFwID0gT2JqZWN0LmZyb21FbnRyaWVzKFtcbiAgICAuLi5PYmplY3QuZW50cmllcyhjdHgucGhhc2UxLmlzbGFuZE1ldGEgfHwge30pLm1hcCgoW3RhZywgbWV0YV0pID0+IFtcbiAgICAgIHRhZyxcbiAgICAgIG1ldGEuaHlkcmF0ZSB8fCBjdHgucGhhc2UzLnVwZ3JhZGVTdHJhdGVneSB8fCAnaWRsZScsXG4gICAgXSksXG4gICAgLi4uKGN0eC5waGFzZTEucGFja2FnZUlzbGFuZERlY2xzIHx8IFtdKS5tYXAoKGlzbGFuZCkgPT4gW1xuICAgICAgaXNsYW5kLnRhZ05hbWUsXG4gICAgICBpc2xhbmQuaHlkcmF0ZSB8fCBjdHgucGhhc2UzLnVwZ3JhZGVTdHJhdGVneSB8fCAnaWRsZScsXG4gICAgXSksXG4gIF0pIGFzIFJlY29yZDxzdHJpbmcsIEh5ZHJhdGlvblN0cmF0ZWd5PjtcblxuICBjb25zdCBsYXllck1hcCA9IE9iamVjdC5mcm9tRW50cmllcyhbXG4gICAgLi4uT2JqZWN0LmVudHJpZXMoY3R4LnBoYXNlMS5pc2xhbmRNZXRhIHx8IHt9KS5tYXAoKFt0YWcsIG1ldGFdKSA9PiBbXG4gICAgICB0YWcsXG4gICAgICBtZXRhLmh5ZHJhdGUgPT09ICdvbmx5JyB8fCBtZXRhLnNzciA9PT0gZmFsc2UgPyAncHVyZS1pc2xhbmQnIDogJ2RzZC1pbnRlcmFjdGl2ZScsXG4gICAgXSksXG4gICAgLi4uKGN0eC5waGFzZTEucGFja2FnZUlzbGFuZERlY2xzIHx8IFtdKS5tYXAoKGlzbGFuZCkgPT4gW1xuICAgICAgaXNsYW5kLnRhZ05hbWUsXG4gICAgICBpc2xhbmQuaHlkcmF0ZSA9PT0gJ29ubHknIHx8IGlzbGFuZC5zc3IgPT09IGZhbHNlID8gJ3B1cmUtaXNsYW5kJyA6ICdkc2QtaW50ZXJhY3RpdmUnLFxuICAgIF0pLFxuICBdKSBhcyBSZWNvcmQ8c3RyaW5nLCBDb21wb25lbnRMYXllcj47XG5cbiAgY29uc3QgcGFnZU1hbmlmZXN0cyA9IGdlbmVyYXRlSXNsYW5kTWFuaWZlc3RzKG91dHB1dERpciwgY2h1bmtNYXAsIHN0cmF0ZWd5TWFwLCBsYXllck1hcCk7XG4gIGF3YWl0IHdyaXRlSXNsYW5kTWFuaWZlc3RzKG91dHB1dERpciwgcGFnZU1hbmlmZXN0cyk7XG59XG5cbi8qKlxuICogQ2xlYW4gUGhhc2UgMSBTU1IgYXJ0aWZhY3RzIGZyb20gdGhlIHB1YmxpYyBkaXN0IGRpcmVjdG9yeS5cbiAqIFRoZSBTU1IgdmlydHVhbCBlbnRyeSBidW5kbGUgYW5kIGl0cyBzb3VyY2UgbWFwIGFyZSBidWlsZC10aW1lIG9ubHlcbiAqIGFuZCBtdXN0IG5vdCBiZSBkZXBsb3llZCB0byBzdGF0aWMgaG9zdGluZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsZWFuU3NyQXJ0aWZhY3RzKGN0eDogQnVpbGRDb250ZXh0Vmlldyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gY3R4LnBoYXNlMy5yb290IHx8IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IG91dERpciA9IGN0eC5waGFzZTMub3V0RGlyIHx8ICdkaXN0JztcblxuICB0cnkge1xuICAgIGNvbnN0IGFzc2V0c0RpciA9IGpvaW4ocm9vdCwgb3V0RGlyLCAnYXNzZXRzJyk7XG4gICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIoYXNzZXRzRGlyKS5jYXRjaCgoKSA9PiBbXSBhcyBzdHJpbmdbXSk7XG4gICAgY29uc3QgdG9EZWxldGUgPSBlbnRyaWVzLmZpbHRlcihcbiAgICAgIChmKSA9PlxuICAgICAgICBmLnN0YXJ0c1dpdGgoJ192aXJ0dWFsX29wZW4taG9uby1lbnRyeScpIHx8XG4gICAgICAgIChmLnN0YXJ0c1dpdGgoJ3NyYy0nKSAmJiBmLmVuZHNXaXRoKCcuanMnKSAmJiAhZi5pbmNsdWRlcygnY2xpZW50JykpLFxuICAgICk7XG4gICAgZm9yIChjb25zdCBmIG9mIHRvRGVsZXRlKSB7XG4gICAgICBjb25zdCBwID0gam9pbihhc3NldHNEaXIsIGYpO1xuICAgICAgYXdhaXQgdW5saW5rKHApLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIGxvZy5pbmZvKGBDbGVhbmVkIFNTUiBhcnRpZmFjdDogJHtmfWApO1xuICAgIH1cbiAgICBpZiAodG9EZWxldGUubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLmluZm8oYFJlbW92ZWQgJHt0b0RlbGV0ZS5sZW5ndGh9IHVucmVmZXJlbmNlZCBTU1IgYXJ0aWZhY3QocykgZnJvbSBkaXN0L2Fzc2V0cy9gKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vbi1jcml0aWNhbCAtIGFzc2V0cyBkaXIgbWF5IG5vdCBleGlzdCBpbiBzb21lIGNvbmZpZ3NcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Q0FNQyxHQUVELFNBQVMsSUFBSSxRQUFRLFlBQVk7QUFDakMsT0FBTyxhQUFhLGVBQWU7QUFDbkMsU0FBUyxPQUFPLEVBQUUsTUFBTSxRQUFRLG1CQUFtQjtBQUduRCxTQUFTLFlBQVksUUFBUSwyQkFBMkI7QUFDeEQsU0FBUyxtQkFBbUIsRUFBRSxrQkFBa0IsUUFBUSxtQkFBbUI7QUFDM0UsU0FBUyx1QkFBdUIsRUFBRSxvQkFBb0IsUUFBUSx1QkFBdUI7QUFFckYsTUFBTSxNQUFNLGFBQWE7QUFpQnpCOzs7Q0FHQyxHQUNELE9BQU8sZUFBZSw2QkFDcEIsR0FBcUIsRUFDckIsU0FBaUI7RUFFakIsTUFBTSxPQUFP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
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL2J1aWxkLXBvc3Rwcm9jZXNzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG9wZW5lbGVtZW50L3NzZyAtIEFkYXB0ZXItYWdub3N0aWMgU1NHIGJ1aWxkIHBvc3QtcHJvY2Vzc2luZy5cbiAqXG4gKiBPcmNoZXN0cmF0ZXMgY2xpZW50LXNjcmlwdCBpbmplY3Rpb24sIGlzbGFuZCBjaHVuay9zdHJhdGVneS9sYXllciBtYXBcbiAqIGNvbnN0cnVjdGlvbiwgYW5kIFNTUiBhcnRpZmFjdCBjbGVhbnVwLiBUaGlzIG1vZHVsZSBoYXMgemVybyBWaXRlXG4gKiBkZXBlbmRlbmN5IGFuZCBvbmx5IHJlYWRzL3dyaXRlcyBmaWxlcy5cbiAqL1xuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyByZWFkZGlyLCB1bmxpbmsgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50TGF5ZXIsIEh5ZHJhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL2ZyYW1ld29yayc7XG5pbXBvcnQgdHlwZSB7IElzbGFuZERlY2wgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvc3NnJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb3JlL2xvZ2dlcic7XG5pbXBvcnQgeyBidWlsZElzbGFuZENodW5rTWFwLCBpbmplY3RDbGllbnRTY3JpcHQgfSBmcm9tICcuL3Bvc3Rwcm9jZXNzLmpzJztcbmltcG9ydCB7IGdlbmVyYXRlSXNsYW5kTWFuaWZlc3RzLCB3cml0ZUlzbGFuZE1hbmlmZXN0cyB9IGZyb20gJy4vaXNsYW5kLW1hbmlmZXN0LmpzJztcblxuY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKCdjb3JlJyk7XG5cbi8qKiBOYXJyb3cgdmlldyBvZiBPcGVuRWxlbWVudEJ1aWxkQ29udGV4dCB1c2VkIGJ5IHRoZSBTU0cgcG9zdC1wcm9jZXNzb3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkQ29udGV4dFZpZXcge1xuICBwaGFzZTM6IHtcbiAgICByb290OiBzdHJpbmc7XG4gICAgb3V0RGlyOiBzdHJpbmc7XG4gICAgYmFzZTogc3RyaW5nO1xuICAgIHVwZ3JhZGVTdHJhdGVneTogSHlkcmF0aW9uU3RyYXRlZ3k7XG4gIH07XG4gIHBoYXNlMToge1xuICAgIGlzbGFuZFRhZ05hbWVzOiBzdHJpbmdbXTtcbiAgICBwYWNrYWdlSXNsYW5kRGVjbHM6IElzbGFuZERlY2xbXTtcbiAgICBpc2xhbmRNZXRhOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPElzbGFuZERlY2w+PjtcbiAgfTtcbn1cblxuLyoqXG4gKiBJbmplY3QgdGhlIGlzbGFuZCBjbGllbnQgc2NyaXB0IGFuZCBnZW5lcmF0ZSBwZXItcGFnZSBpc2xhbmQgbWFuaWZlc3RzLlxuICogTXVzdCBvbmx5IHJ1biBhZnRlciBQaGFzZSAyIChjbGllbnQgaXNsYW5kIGJ1aWxkKSBoYXMgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcG9zdFByb2Nlc3NDbGllbnRJc2xhbmRCdWlsZChcbiAgY3R4OiBCdWlsZENvbnRleHRWaWV3LFxuICBzY3JpcHRTcmM6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gY3R4LnBoYXNlMy5yb290IHx8IGN3ZCgpO1xuICBjb25zdCBvdXREaXIgPSBjdHgucGhhc2UzLm91dERpciB8fCAnZGlzdCc7XG4gIGNvbnN0IGJhc2UgPSBjdHgucGhhc2UzLmJhc2UgfHwgJy8nO1xuICBjb25zdCBvdXRwdXREaXIgPSBqb2luKHJvb3QsIG91dERpcik7XG5cbiAgaW5qZWN0Q2xpZW50U2NyaXB0KG91dHB1dERpciwgc2NyaXB0U3JjKTtcblxuICBjb25zdCBpc2xhbmRUYWdOYW1lcyA9IFtcbiAgICAuLi4oY3R4LnBoYXNlMS5pc2xhbmRUYWdOYW1lcyB8fCBbXSksXG4gICAgLi4uKGN0eC5waGFzZTEucGFja2FnZUlzbGFuZERlY2xzIHx8IFtdKS5tYXAoKGlzbGFuZCkgPT4gaXNsYW5kLnRhZ05hbWUpLFxuICBdO1xuXG4gIGNvbnN0IGNodW5rTWFwID0gYnVpbGRJc2xhbmRDaHVua01hcChyb290LCBvdXREaXIsIGlzbGFuZFRhZ05hbWVzLCBiYXNlKTtcblxuICBjb25zdCBzdHJhdGVneU1hcCA9IE9iamVjdC5mcm9tRW50cmllcyhbXG4gICAgLi4uT2JqZWN0LmVudHJpZXMoY3R4LnBoYXNlMS5pc2xhbmRNZXRhIHx8IHt9KS5tYXAoKFt0YWcsIG1ldGFdKSA9PiBbXG4gICAgICB0YWcsXG4gICAgICBtZXRhLmh5ZHJhdGUgfHwgY3R4LnBoYXNlMy51cGdyYWRlU3RyYXRlZ3kgfHwgJ2lkbGUnLFxuICAgIF0pLFxuICAgIC4uLihjdHgucGhhc2UxLnBhY2thZ2VJc2xhbmREZWNscyB8fCBbXSkubWFwKChpc2xhbmQpID0+IFtcbiAgICAgIGlzbGFuZC50YWdOYW1lLFxuICAgICAgaXNsYW5kLmh5ZHJhdGUgfHwgY3R4LnBoYXNlMy51cGdyYWRlU3RyYXRlZ3kgfHwgJ2lkbGUnLFxuICAgIF0pLFxuICBdKSBhcyBSZWNvcmQ8c3RyaW5nLCBIeWRyYXRpb25TdHJhdGVneT47XG5cbiAgY29uc3QgbGF5ZXJNYXAgPSBPYmplY3QuZnJvbUVudHJpZXMoW1xuICAgIC4uLk9iamVjdC5lbnRyaWVzKGN0eC5waGFzZTEuaXNsYW5kTWV0YSB8fCB7fSkubWFwKChbdGFnLCBtZXRhXSkgPT4gW1xuICAgICAgdGFnLFxuICAgICAgbWV0YS5oeWRyYXRlID09PSAnb25seScgfHwgbWV0YS5zc3IgPT09IGZhbHNlID8gJ3B1cmUtaXNsYW5kJyA6ICdkc2QtaW50ZXJhY3RpdmUnLFxuICAgIF0pLFxuICAgIC4uLihjdHgucGhhc2UxLnBhY2thZ2VJc2xhbmREZWNscyB8fCBbXSkubWFwKChpc2xhbmQpID0+IFtcbiAgICAgIGlzbGFuZC50YWdOYW1lLFxuICAgICAgaXNsYW5kLmh5ZHJhdGUgPT09ICdvbmx5JyB8fCBpc2xhbmQuc3NyID09PSBmYWxzZSA/ICdwdXJlLWlzbGFuZCcgOiAnZHNkLWludGVyYWN0aXZlJyxcbiAgICBdKSxcbiAgXSkgYXMgUmVjb3JkPHN0cmluZywgQ29tcG9uZW50TGF5ZXI+O1xuXG4gIGNvbnN0IHBhZ2VNYW5pZmVzdHMgPSBnZW5lcmF0ZUlzbGFuZE1hbmlmZXN0cyhvdXRwdXREaXIsIGNodW5rTWFwLCBzdHJhdGVneU1hcCwgbGF5ZXJNYXApO1xuICBhd2FpdCB3cml0ZUlzbGFuZE1hbmlmZXN0cyhvdXRwdXREaXIsIHBhZ2VNYW5pZmVzdHMpO1xufVxuXG4vKipcbiAqIENsZWFuIFBoYXNlIDEgU1NSIGFydGlmYWN0cyBmcm9tIHRoZSBwdWJsaWMgZGlzdCBkaXJlY3RvcnkuXG4gKiBUaGUgU1NSIHZpcnR1YWwgZW50cnkgYnVuZGxlIGFuZCBpdHMgc291cmNlIG1hcCBhcmUgYnVpbGQtdGltZSBvbmx5XG4gKiBhbmQgbXVzdCBub3QgYmUgZGVwbG95ZWQgdG8gc3RhdGljIGhvc3RpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhblNzckFydGlmYWN0cyhjdHg6IEJ1aWxkQ29udGV4dFZpZXcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgcm9vdCA9IGN0eC5waGFzZTMucm9vdCB8fCBjd2QoKTtcbiAgY29uc3Qgb3V0RGlyID0gY3R4LnBoYXNlMy5vdXREaXIgfHwgJ2Rpc3QnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgYXNzZXRzRGlyID0gam9pbihyb290LCBvdXREaXIsICdhc3NldHMnKTtcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihhc3NldHNEaXIpLmNhdGNoKCgpID0+IFtdIGFzIHN0cmluZ1tdKTtcbiAgICBjb25zdCB0b0RlbGV0ZSA9IGVudHJpZXMuZmlsdGVyKFxuICAgICAgKGYpID0+XG4gICAgICAgIGYuc3RhcnRzV2l0aCgnX3ZpcnR1YWxfb3Blbi1ob25vLWVudHJ5JykgfHxcbiAgICAgICAgKGYuc3RhcnRzV2l0aCgnc3JjLScpICYmIGYuZW5kc1dpdGgoJy5qcycpICYmICFmLmluY2x1ZGVzKCdjbGllbnQnKSksXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGYgb2YgdG9EZWxldGUpIHtcbiAgICAgIGNvbnN0IHAgPSBqb2luKGFzc2V0c0RpciwgZik7XG4gICAgICBhd2FpdCB1bmxpbmsocCkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgbG9nLmluZm8oYENsZWFuZWQgU1NSIGFydGlmYWN0OiAke2Z9YCk7XG4gICAgfVxuICAgIGlmICh0b0RlbGV0ZS5sZW5ndGggPiAwKSB7XG4gICAgICBsb2cuaW5mbyhgUmVtb3ZlZCAke3RvRGVsZXRlLmxlbmd0aH0gdW5yZWZlcmVuY2VkIFNTUiBhcnRpZmFjdChzKSBmcm9tIGRpc3QvYXNzZXRzL2ApO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gTm9uLWNyaXRpY2FsIC0gYXNzZXRzIGRpciBtYXkgbm90IGV4aXN0IGluIHNvbWUgY29uZmlnc1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztDQU1DLEdBRUQsU0FBUyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxTQUFTLEdBQUcsUUFBUSxlQUFlO0FBQ25DLFNBQVMsT0FBTyxFQUFFLE1BQU0sUUFBUSxtQkFBbUI7QUFHbkQsU0FBUyxZQUFZLFFBQVEsMkJBQTJCO0FBQ3hELFNBQVMsbUJBQW1CLEVBQUUsa0JBQWtCLFFBQVEsbUJBQW1CO0FBQzNFLFNBQVMsdUJBQXVCLEVBQUUsb0JBQW9CLFFBQVEsdUJBQXVCO0FBRXJGLE1BQU0sTUFBTSxhQUFhO0FBaUJ6Qjs7O0NBR0MsR0FDRCxPQUFPLGVBQWUsNkJBQ3BCLEdBQXFCLEVBQ3JCLFNBQWlCO0VBRWpCLE1BQU0sT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUk7RUFDaEMsTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSTtFQUNwQyxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJO0VBQ2hDLE1BQU0sWUFBWSxLQUFLLE1BQU07RUFFN0IsbUJBQW1CLFdBQVc7RUFFOUIsTUFBTSxpQkFBaUI7T0FDakIsSUFBSSxNQUFNLENBQUMsY0FBYyxJQUFJLEVBQUU7T0FDaEMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBVyxPQUFPLE9BQU87R0FDeEU7RUFFRCxNQUFNLFdBQVcsb0JBQW9CLE1BQU0sUUFBUSxnQkFBZ0I7RUFFbkUsTUFBTSxjQUFjLE9BQU8sV0FBVyxDQUFDO09BQ2xDLE9BQU8sT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBSztRQUNsRTtRQUNBLEtBQUssT0FBTyxJQUFJLElBQUksTUFBTSxDQUFDLGVBQWUsSUFBSTtPQUMvQztPQUNFLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVc7UUFDdkQsT0FBTyxPQUFPO1FBQ2QsT0FBTyxPQUFPLElBQUksSUFBSSxNQUFNLENBQUMsZUFBZSxJQUFJO09BQ2pEO0dBQ0Y7RUFFRCxNQUFNLFdBQVcsT0FBTyxXQUFXLENBQUM7T0FDL0IsT0FBTyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFLO1FBQ2xFO1FBQ0EsS0FBSyxPQUFPLEtBQUssVUFBVSxLQUFLLEdBQUcsS0FBSyxRQUFRLGdCQUFnQjtPQUNqRTtPQUNFLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVc7UUFDdkQsT0FBTyxPQUFPO1FBQ2QsT0FBTyxPQUFPLEtBQUssVUFBVSxPQUFPLEdBQUcsS0FBSyxRQUFRLGdCQUFnQjtPQUNyRTtHQUNGO0VBRUQsTUFBTSxnQkFBZ0Isd0JBQXdCLFdBQVcsVUFBVSxhQUFhO0VBQ2hGLE1BQU0scUJBQXFCLFdBQVc7QUFDeEM7QUFFQTs7OztDQUlDLEdBQ0QsT0FBTyxlQUFlLGtCQUFrQixHQUFxQjtFQUMzRCxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJO0VBQ2hDLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUk7RUFFcEMsSUFBSTtJQUNGLE1BQU0sWUFBWSxLQUFLLE1BQU0sUUFBUTtJQUNyQyxNQUFNLFVBQVUsTUFBTSxRQUFRLFdBQVcsS0FBSyxDQUFDLElBQU0sRUFBRTtJQUN2RCxNQUFNLFdBQVcsUUFBUSxNQUFNLENBQzdCLENBQUMsSUFDQyxFQUFFLFVBQVUsQ0FBQywrQkFDWixFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUU5RCxLQUFLLE1BQU0sS0FBSyxTQUFVO01BQ3hCLE1BQU0sSUFBSSxLQUFLLFdBQVc7TUFDMUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQU87TUFDN0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHO0lBQ3ZDO0lBQ0EsSUFBSSxTQUFTLE1BQU0sR0FBRyxHQUFHO01BQ3ZCLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsTUFBTSxDQUFDLCtDQUErQyxDQUFDO0lBQ3RGO0VBQ0YsRUFBRSxPQUFNO0VBQ04sMERBQTBEO0VBQzVEO0FBQ0YifQ==
package/src/cem-compat.js CHANGED
@@ -124,7 +124,7 @@ export function parseCem(json) {
124
124
  seenTagNames.add(tagName);
125
125
  }
126
126
  }
127
- for (const [j, exported] of (module.exports ?? []).entries()){
127
+ for (const [j, exported] of (module['exports'] ?? []).entries()){
128
128
  if (!exported.declaration) {
129
129
  errors.push({
130
130
  code: 'CEM_EXPORT_NO_DECLARATION',
@@ -223,4 +223,4 @@ function classifyCemDeclaration(manifest, module, declaration) {
223
223
  hydrate
224
224
  };
225
225
  }
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL2NlbS1jb21wYXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBDb21wYXRpYmlsaXR5Q2xhc3NpZmljYXRpb24sXG4gIENvbXBhdGliaWxpdHlUaWVyLFxuICBIeWRyYXRpb25TdHJhdGVneSxcbn0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL2ZyYW1ld29yayc7XG5pbXBvcnQgeyBpc1ZhbGlkVGFnTmFtZSB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb3JlJztcbmltcG9ydCB7IGZvcm1hdEVycm9yIH0gZnJvbSAnQG9wZW5lbGVtZW50L2NvcmUvZXJyb3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBPcGVuRWxlbWVudEV4dGVuc2lvbnMge1xuICBzc3I/OiBib29sZWFuO1xuICBkc2Q/OiBib29sZWFuO1xuICBsYXllcj86IHN0cmluZztcbiAgaHlkcmF0ZT86IEh5ZHJhdGlvblN0cmF0ZWd5O1xuICBtb2R1bGU/OiBzdHJpbmc7XG4gIGV4cG9ydD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENlbUJhc2Uge1xuICBraW5kPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgQ2VtQ3VzdG9tRWxlbWVudCBleHRlbmRzIENlbUJhc2Uge1xuICBraW5kOiAnY3VzdG9tLWVsZW1lbnQnO1xuICB0YWdOYW1lPzogc3RyaW5nO1xuICBzdXBlckNsYXNzPzogeyBuYW1lPzogc3RyaW5nIH07XG4gIG9wZW5FbGVtZW50PzogT3BlbkVsZW1lbnRFeHRlbnNpb25zO1xufVxuXG5pbnRlcmZhY2UgQ2VtTW9kdWxlIHtcbiAga2luZD86IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBkZWNsYXJhdGlvbnM/OiBDZW1CYXNlW107XG4gIGV4cG9ydHM/OiB7IGRlY2xhcmF0aW9uPzogdW5rbm93biB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRWxlbWVudHNNYW5pZmVzdCB7XG4gIHNjaGVtYVZlcnNpb24/OiBzdHJpbmc7XG4gIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBtb2R1bGVzOiBDZW1Nb2R1bGVbXTtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZW1QYXJzZUVycm9yIHtcbiAgY29kZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VtUGFyc2VXYXJuaW5nIHtcbiAgY29kZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VtUGFyc2VSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBtYW5pZmVzdD86IEN1c3RvbUVsZW1lbnRzTWFuaWZlc3Q7XG4gIGVycm9yczogQ2VtUGFyc2VFcnJvcltdO1xuICB3YXJuaW5nczogQ2VtUGFyc2VXYXJuaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VtQ2xhc3NpZmljYXRpb25SZXN1bHQge1xuICBjbGFzc2lmaWNhdGlvbnM6IENvbXBhdGliaWxpdHlDbGFzc2lmaWNhdGlvbltdO1xuICByZWplY3RlZFRhZ3M6IHN0cmluZ1tdO1xuICBzc3JDYXBhYmxlVGFnczogc3RyaW5nW107XG4gIGNsaWVudE9ubHlUYWdzOiBzdHJpbmdbXTtcbiAgZXhwZXJpbWVudGFsRG9tVGFnczogc3RyaW5nW107XG4gIHN0YXRzOiB7XG4gICAgdG90YWxDb21wb25lbnRzOiBudW1iZXI7XG4gICAgc3NyQ2FwYWJsZUNvdW50OiBudW1iZXI7XG4gICAgY2xpZW50T25seUNvdW50OiBudW1iZXI7XG4gICAgcmVqZWN0ZWRDb3VudDogbnVtYmVyO1xuICAgIGV4cGVyaW1lbnRhbERvbUNvdW50OiBudW1iZXI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQ2VtQ3VzdG9tRWxlbWVudChkZWNsYXJhdGlvbjogQ2VtQmFzZSk6IGRlY2xhcmF0aW9uIGlzIENlbUN1c3RvbUVsZW1lbnQge1xuICByZXR1cm4gZGVjbGFyYXRpb24ua2luZCA9PT0gJ2N1c3RvbS1lbGVtZW50Jztcbn1cblxuZnVuY3Rpb24gaXNSZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiB0b0NlbUJhc2VBcnJheSh2YWx1ZTogdW5rbm93bik6IENlbUJhc2VbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB2YWx1ZS5maWx0ZXIoaXNSZWNvcmQpO1xufVxuXG5mdW5jdGlvbiB0b0NlbUV4cG9ydHModmFsdWU6IHVua25vd24pOiB7IGRlY2xhcmF0aW9uPzogdW5rbm93biB9W10gfCB1bmRlZmluZWQge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdmFsdWUuZmlsdGVyKGlzUmVjb3JkKS5tYXAoKGVudHJ5KSA9PiAoeyBkZWNsYXJhdGlvbjogZW50cnkuZGVjbGFyYXRpb24gfSkpO1xufVxuXG5mdW5jdGlvbiB0b0NlbU1vZHVsZSh2YWx1ZTogdW5rbm93bik6IENlbU1vZHVsZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IHR5cGVvZiB2YWx1ZS5raW5kID09PSAnc3RyaW5nJyA/IHZhbHVlLmtpbmQgOiB1bmRlZmluZWQsXG4gICAgcGF0aDogdHlwZW9mIHZhbHVlLnBhdGggPT09ICdzdHJpbmcnID8gdmFsdWUucGF0aCA6ICcnLFxuICAgIGRlY2xhcmF0aW9uczogdG9DZW1CYXNlQXJyYXkodmFsdWUuZGVjbGFyYXRpb25zKSxcbiAgICBleHBvcnRzOiB0b0NlbUV4cG9ydHModmFsdWUuZXhwb3J0cyksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNlbShqc29uOiBzdHJpbmcpOiBDZW1QYXJzZVJlc3VsdCB7XG4gIGNvbnN0IGVycm9yczogQ2VtUGFyc2VFcnJvcltdID0gW107XG4gIGNvbnN0IHdhcm5pbmdzOiBDZW1QYXJzZVdhcm5pbmdbXSA9IFtdO1xuXG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBlcnJvcnMucHVzaCh7XG4gICAgICBjb2RlOiAnQ0VNX1BBUlNFX0VSUk9SJyxcbiAgICAgIG1lc3NhZ2U6IGBJbnZhbGlkIEpTT046ICR7Zm9ybWF0RXJyb3IoZXJyb3IpfWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9ycywgd2FybmluZ3MgfTtcbiAgfVxuXG4gIGlmICghaXNSZWNvcmQocGFyc2VkKSkge1xuICAgIGVycm9ycy5wdXNoKHsgY29kZTogJ0NFTV9JTlZBTElEX1JPT1QnLCBtZXNzYWdlOiAnTWFuaWZlc3Qgcm9vdCBtdXN0IGJlIGFuIG9iamVjdCcgfSk7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9ycywgd2FybmluZ3MgfTtcbiAgfVxuXG4gIGNvbnN0IHJvb3QgPSBwYXJzZWQ7XG4gIGlmICghcm9vdC5zY2hlbWFWZXJzaW9uKSB7XG4gICAgd2FybmluZ3MucHVzaCh7XG4gICAgICBjb2RlOiAnQ0VNX05PX1NDSEVNQV9WRVJTSU9OJyxcbiAgICAgIG1lc3NhZ2U6ICdNaXNzaW5nIHNjaGVtYVZlcnNpb24gZmllbGQsIGFzc3VtaW5nIGxlZ2FjeSBmb3JtYXQnLFxuICAgIH0pO1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheShyb290Lm1vZHVsZXMpKSB7XG4gICAgZXJyb3JzLnB1c2goeyBjb2RlOiAnQ0VNX05PX01PRFVMRVMnLCBtZXNzYWdlOiAnTWFuaWZlc3QgbXVzdCBoYXZlIGEgbW9kdWxlcyBhcnJheScgfSk7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9ycywgd2FybmluZ3MgfTtcbiAgfVxuXG4gIGNvbnN0IG1hbmlmZXN0OiBDdXN0b21FbGVtZW50c01hbmlmZXN0ID0ge1xuICAgIC4uLnJvb3QsXG4gICAgc2NoZW1hVmVyc2lvbjogdHlwZW9mIHJvb3Quc2NoZW1hVmVyc2lvbiA9PT0gJ3N0cmluZycgPyByb290LnNjaGVtYVZlcnNpb24gOiB1bmRlZmluZWQsXG4gICAgcGFja2FnZU5hbWU6IHR5cGVvZiByb290LnBhY2thZ2VOYW1lID09PSAnc3RyaW5nJyA/IHJvb3QucGFja2FnZU5hbWUgOiB1bmRlZmluZWQsXG4gICAgdmVyc2lvbjogdHlwZW9mIHJvb3QudmVyc2lvbiA9PT0gJ3N0cmluZycgPyByb290LnZlcnNpb24gOiB1bmRlZmluZWQsXG4gICAgbW9kdWxlczogcm9vdC5tb2R1bGVzLm1hcCgobW9kdWxlKSA9PlxuICAgICAgdG9DZW1Nb2R1bGUobW9kdWxlKSA/PyB7XG4gICAgICAgIHBhdGg6ICcnLFxuICAgICAgfVxuICAgICksXG4gIH07XG4gIGNvbnN0IHNlZW5UYWdOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFuaWZlc3QubW9kdWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG1vZHVsZSA9IG1hbmlmZXN0Lm1vZHVsZXNbaV07XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IGBtb2R1bGVzWyR7aX1dYDtcblxuICAgIGlmICghbW9kdWxlLmtpbmQpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICBjb2RlOiAnQ0VNX01PRFVMRV9OT19LSU5EJyxcbiAgICAgICAgbWVzc2FnZTogYE1vZHVsZSBhdCBpbmRleCAke2l9IGhhcyBubyBraW5kIGZpZWxkYCxcbiAgICAgICAgcGF0aDogbW9kdWxlUGF0aCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIW1vZHVsZS5wYXRoKSB7XG4gICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdDRU1fTU9EVUxFX05PX1BBVEgnLFxuICAgICAgICBtZXNzYWdlOiBgTW9kdWxlIGF0IGluZGV4ICR7aX0gaGFzIG5vIHBhdGggZmllbGRgLFxuICAgICAgICBwYXRoOiBtb2R1bGVQYXRoLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbaiwgZGVjbGFyYXRpb25dIG9mIChtb2R1bGUuZGVjbGFyYXRpb25zID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICAgIGlmICghaXNDZW1DdXN0b21FbGVtZW50KGRlY2xhcmF0aW9uKSkgY29udGludWU7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvblBhdGggPSBgJHttb2R1bGVQYXRofS5kZWNsYXJhdGlvbnNbJHtqfV1gO1xuICAgICAgY29uc3QgdGFnTmFtZSA9IGRlY2xhcmF0aW9uLnRhZ05hbWU7XG4gICAgICBpZiAoIXRhZ05hbWUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgIGNvZGU6ICdDRU1fQ0VfTk9fVEFHX05BTUUnLFxuICAgICAgICAgIG1lc3NhZ2U6IGBDdXN0b20gZWxlbWVudCBhdCAke2RlY2xhcmF0aW9uUGF0aH0gaGFzIG5vIHRhZ05hbWVgLFxuICAgICAgICAgIHBhdGg6IGRlY2xhcmF0aW9uUGF0aCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkVGFnTmFtZSh0YWdOYW1lKSkge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgY29kZTogJ0NFTV9DRV9JTlZBTElEX1RBR19OQU1FJyxcbiAgICAgICAgICBtZXNzYWdlOiBgSW52YWxpZCB0YWcgbmFtZTogJHt0YWdOYW1lfSAobXVzdCBjb250YWluIGEgaHlwaGVuIGFuZCBtYXRjaCBIVE1MIHNwZWMpYCxcbiAgICAgICAgICBwYXRoOiBkZWNsYXJhdGlvblBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChzZWVuVGFnTmFtZXMuaGFzKHRhZ05hbWUpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICBjb2RlOiAnQ0VNX0NFX0RVUExJQ0FURV9UQUcnLFxuICAgICAgICAgIG1lc3NhZ2U6IGBEdXBsaWNhdGUgdGFnIG5hbWU6ICR7dGFnTmFtZX1gLFxuICAgICAgICAgIHBhdGg6IGRlY2xhcmF0aW9uUGF0aCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWVuVGFnTmFtZXMuYWRkKHRhZ05hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2osIGV4cG9ydGVkXSBvZiAobW9kdWxlLmV4cG9ydHMgPz8gW10pLmVudHJpZXMoKSkge1xuICAgICAgaWYgKCFleHBvcnRlZC5kZWNsYXJhdGlvbikge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgY29kZTogJ0NFTV9FWFBPUlRfTk9fREVDTEFSQVRJT04nLFxuICAgICAgICAgIG1lc3NhZ2U6IGBFeHBvcnQgYXQgJHttb2R1bGVQYXRofS5leHBvcnRzWyR7an1dIGhhcyBubyBkZWNsYXJhdGlvbiByZWZlcmVuY2VgLFxuICAgICAgICAgIHBhdGg6IGAke21vZHVsZVBhdGh9LmV4cG9ydHNbJHtqfV1gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IGVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgbWFuaWZlc3Q6IGVycm9ycy5sZW5ndGggPT09IDAgPyBtYW5pZmVzdCA6IHVuZGVmaW5lZCxcbiAgICBlcnJvcnMsXG4gICAgd2FybmluZ3MsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUNlbU1hbmlmZXN0KG1hbmlmZXN0OiBDdXN0b21FbGVtZW50c01hbmlmZXN0KTogQ2VtQ2xhc3NpZmljYXRpb25SZXN1bHQge1xuICBjb25zdCBjbGFzc2lmaWNhdGlvbnM6IENvbXBhdGliaWxpdHlDbGFzc2lmaWNhdGlvbltdID0gW107XG4gIGNvbnN0IHNlZW5UYWdzID0gbmV3IE1hcDxzdHJpbmcsIENvbXBhdGliaWxpdHlDbGFzc2lmaWNhdGlvbj4oKTtcblxuICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtYW5pZmVzdC5tb2R1bGVzKSB7XG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZGVjbGFyYXRpb25zID8/IFtdKSB7XG4gICAgICBpZiAoIWlzQ2VtQ3VzdG9tRWxlbWVudChkZWNsYXJhdGlvbikgfHwgIWRlY2xhcmF0aW9uLnRhZ05hbWUpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAoc2VlblRhZ3MuaGFzKGRlY2xhcmF0aW9uLnRhZ05hbWUpKSB7XG4gICAgICAgIGNsYXNzaWZpY2F0aW9ucy5wdXNoKHtcbiAgICAgICAgICB0YWdOYW1lOiBkZWNsYXJhdGlvbi50YWdOYW1lLFxuICAgICAgICAgIHRpZXI6ICdyZWplY3RlZCcsXG4gICAgICAgICAgcmVhc29uOiBgRHVwbGljYXRlIHRhZyBuYW1lOiAke2RlY2xhcmF0aW9uLnRhZ05hbWV9YCxcbiAgICAgICAgICBzb3VyY2U6ICdwYWNrYWdlJyxcbiAgICAgICAgICBtb2R1bGVQYXRoOiBtb2R1bGUucGF0aCxcbiAgICAgICAgICBzc3I6IGZhbHNlLFxuICAgICAgICAgIGRzZDogZmFsc2UsXG4gICAgICAgICAgaHlkcmF0ZTogJ2lkbGUnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnlDZW1EZWNsYXJhdGlvbihtYW5pZmVzdCwgbW9kdWxlLCBkZWNsYXJhdGlvbik7XG4gICAgICBjbGFzc2lmaWNhdGlvbnMucHVzaChjbGFzc2lmaWNhdGlvbik7XG4gICAgICBzZWVuVGFncy5zZXQoZGVjbGFyYXRpb24udGFnTmFtZSwgY2xhc3NpZmljYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlamVjdGVkVGFnczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc3NyQ2FwYWJsZVRhZ3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNsaWVudE9ubHlUYWdzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleHBlcmltZW50YWxEb21UYWdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIHBvbnl0YWlsOiBidWNrZXQgbG9va3VwIHJlcGxhY2VzIDQtY2FzZSBzd2l0Y2hcbiAgY29uc3QgYnVja2V0czogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAgIHJlamVjdGVkOiByZWplY3RlZFRhZ3MsXG4gICAgJ3Nzci1jYXBhYmxlJzogc3NyQ2FwYWJsZVRhZ3MsXG4gICAgJ2NsaWVudC1vbmx5JzogY2xpZW50T25seVRhZ3MsXG4gICAgJ2V4cGVyaW1lbnRhbC1kb20nOiBleHBlcmltZW50YWxEb21UYWdzLFxuICB9O1xuXG4gIGZvciAoY29uc3QgY2xhc3NpZmljYXRpb24gb2YgY2xhc3NpZmljYXRpb25zKSB7XG4gICAgYnVja2V0c1tjbGFzc2lmaWNhdGlvbi50aWVyXT8ucHVzaChjbGFzc2lmaWNhdGlvbi50YWdOYW1lKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2xhc3NpZmljYXRpb25zLFxuICAgIHJlamVjdGVkVGFncyxcbiAgICBzc3JDYXBhYmxlVGFncyxcbiAgICBjbGllbnRPbmx5VGFncyxcbiAgICBleHBlcmltZW50YWxEb21UYWdzLFxuICAgIHN0YXRzOiB7XG4gICAgICB0b3RhbENvbXBvbmVudHM6IGNsYXNzaWZpY2F0aW9ucy5sZW5ndGgsXG4gICAgICBzc3JDYXBhYmxlQ291bnQ6IHNzckNhcGFibGVUYWdzLmxlbmd0aCxcbiAgICAgIGNsaWVudE9ubHlDb3VudDogY2xpZW50T25seVRhZ3MubGVuZ3RoLFxuICAgICAgcmVqZWN0ZWRDb3VudDogcmVqZWN0ZWRUYWdzLmxlbmd0aCxcbiAgICAgIGV4cGVyaW1lbnRhbERvbUNvdW50OiBleHBlcmltZW50YWxEb21UYWdzLmxlbmd0aCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2lmeUNlbURlY2xhcmF0aW9uKFxuICBtYW5pZmVzdDogQ3VzdG9tRWxlbWVudHNNYW5pZmVzdCxcbiAgbW9kdWxlOiBDZW1Nb2R1bGUsXG4gIGRlY2xhcmF0aW9uOiBDZW1DdXN0b21FbGVtZW50LFxuKTogQ29tcGF0aWJpbGl0eUNsYXNzaWZpY2F0aW9uIHtcbiAgY29uc3Qgb3BlbkVsZW1lbnQgPSBkZWNsYXJhdGlvbi5vcGVuRWxlbWVudDtcbiAgY29uc3Qgc3NyID0gb3BlbkVsZW1lbnQ/LnNzciA/PyBmYWxzZTtcbiAgY29uc3QgZHNkID0gb3BlbkVsZW1lbnQ/LmRzZCA/PyBmYWxzZTtcbiAgY29uc3QgaHlkcmF0ZSA9IG9wZW5FbGVtZW50Py5oeWRyYXRlID8/ICdpZGxlJztcblxuICBsZXQgdGllcjogQ29tcGF0aWJpbGl0eVRpZXIgPSAnY2xpZW50LW9ubHknO1xuICBsZXQgcmVhc29uID0gbWFuaWZlc3QucGFja2FnZU5hbWVcbiAgICA/IGBDRU0tb25seSBwYWNrYWdlICR7bWFuaWZlc3QucGFja2FnZU5hbWV9IChubyBvcGVuRWxlbWVudCBTU1IgZGVjbGFyYXRpb24pYFxuICAgIDogJ0NFTS1vbmx5IHBhY2thZ2UgKG5vIG9wZW5FbGVtZW50IFNTUiBkZWNsYXJhdGlvbiknO1xuXG4gIGlmIChvcGVuRWxlbWVudD8uc3NyID09PSB0cnVlKSB7XG4gICAgaWYgKG9wZW5FbGVtZW50LmxheWVyKSB7XG4gICAgICB0aWVyID0gJ3Nzci1jYXBhYmxlJztcbiAgICAgIHJlYXNvbiA9IGBzc3I6IHRydWUgd2l0aCBsYXllcjogJHtvcGVuRWxlbWVudC5sYXllcn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aWVyID0gJ2NsaWVudC1vbmx5JztcbiAgICAgIHJlYXNvbiA9ICdzc3I6IHRydWUgYnV0IG5vIGFkYXB0ZXIvbGF5ZXIgZGVjbGFyZWQnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvcGVuRWxlbWVudD8uc3NyID09PSBmYWxzZSkge1xuICAgIHJlYXNvbiA9ICdzc3I6IGZhbHNlIChleHBsaWNpdCBjbGllbnQtb25seSknO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0YWdOYW1lOiBkZWNsYXJhdGlvbi50YWdOYW1lISxcbiAgICB0aWVyLFxuICAgIHJlYXNvbixcbiAgICBzb3VyY2U6ICdwYWNrYWdlJyxcbiAgICBtb2R1bGVQYXRoOiBtb2R1bGUucGF0aCxcbiAgICBzc3IsXG4gICAgZHNkLFxuICAgIGh5ZHJhdGUsXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsU0FBUyxjQUFjLFFBQVEsb0JBQW9CO0FBQ25ELFNBQVMsV0FBVyxRQUFRLDJCQUEyQjtBQXdFdkQsU0FBUyxtQkFBbUIsV0FBb0I7RUFDOUMsT0FBTyxZQUFZLElBQUksS0FBSztBQUM5QjtBQUVBLFNBQVMsU0FBUyxLQUFjO0VBQzlCLE9BQU8sQ0FBQyxDQUFDLFNBQVMsT0FBTyxVQUFVLFlBQVksQ0FBQyxNQUFNLE9BQU8sQ0FBQztBQUNoRTtBQUVBLFNBQVMsZUFBZSxLQUFjO0VBQ3BDLElBQUksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxRQUFRLE9BQU87RUFDbEMsT0FBTyxNQUFNLE1BQU0sQ0FBQztBQUN0QjtBQUVBLFNBQVMsYUFBYSxLQUFjO0VBQ2xDLElBQUksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxRQUFRLE9BQU87RUFDbEMsT0FBTyxNQUFNLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVUsQ0FBQztNQUFFLGFBQWEsTUFBTSxXQUFXO0lBQUMsQ0FBQztBQUNsRjtBQUVBLFNBQVMsWUFBWSxLQUFjO0VBQ2pDLElBQUksQ0FBQyxTQUFTLFFBQVEsT0FBTztFQUM3QixPQUFPO0lBQ0wsTUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLLFdBQVcsTUFBTSxJQUFJLEdBQUc7SUFDcEQsTUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLLFdBQVcsTUFBTSxJQUFJLEdBQUc7SUFDcEQsY0FBYyxlQUFlLE1BQU0sWUFBWTtJQUMvQyxTQUFTLGFBQWEsTUFBTSxPQUFPO0VBQ3JDO0FBQ0Y7QUFFQSxPQUFPLFNBQVMsU0FBUyxJQUFZO0VBQ25DLE1BQU0sU0FBMEIsRUFBRTtFQUNsQyxNQUFNLFdBQThCLEVBQUU7RUFFdEMsSUFBSTtFQUNKLElBQUk7SUFDRixTQUFTLEtBQUssS0FBSyxDQUFDO0VBQ3RCLEVBQUUsT0FBTyxPQUFPO0lBQ2QsT0FBTyxJQUFJLENBQUM7TUFDVixNQUFNO01BQ04sU0FBUyxDQUFDLGNBQWMsRUFBRSxZQUFZLFFBQVE7SUFDaEQ7SUFDQSxPQUFPO01BQUUsU0FBUztNQUFPO01BQVE7SUFBUztFQUM1QztFQUVBLElBQUksQ0FBQyxTQUFTLFNBQVM7SUFDckIsT0FBTyxJQUFJLENBQUM7TUFBRSxNQUFNO01BQW9CLFNBQVM7SUFBa0M7SUFDbkYsT0FBTztNQUFFLFNBQVM7TUFBTztNQUFRO0lBQVM7RUFDNUM7RUFFQSxNQUFNLE9BQU87RUFDYixJQUFJLENBQUMsS0FBSyxhQUFhLEVBQUU7SUFDdkIsU0FBUyxJQUFJLENBQUM7TUFDWixNQUFNO01BQ04sU0FBUztJQUNYO0VBQ0Y7RUFDQSxJQUFJLENBQUMsTUFBTSxPQUFPLENBQUMsS0FBSyxPQUFPLEdBQUc7SUFDaEMsT0FBTyxJQUFJLENBQUM7TUFBRSxNQUFNO01BQWtCLFNBQVM7SUFBcUM7SUFDcEYsT0FBTztNQUFFLFNBQVM7TUFBTztNQUFRO0lBQVM7RUFDNUM7RUFFQSxNQUFNLFdBQW1DO0lBQ3ZDLEdBQUcsSUFBSTtJQUNQLGVBQWUsT0FBTyxLQUFLLGFBQWEsS0FBSyxXQUFXLEtBQUssYUFBYSxHQUFHO0lBQzdFLGFBQWEsT0FBTyxLQUFLLFdBQVcsS0FBSyxXQUFXLEtBQUssV0FBVyxHQUFHO0lBQ3ZFLFNBQVMsT0FBTyxLQUFLLE9BQU8sS0FBSyxXQUFXLEtBQUssT0FBTyxHQUFHO0lBQzNELFNBQVMsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsU0FDekIsWUFBWSxXQUFXO1FBQ3JCLE1BQU07TUFDUjtFQUVKO0VBQ0EsTUFBTSxlQUFlLElBQUk7RUFFekIsSUFBSyxJQUFJLElBQUksR0FBRyxJQUFJLFNBQVMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFLO0lBQ2hELE1BQU0sU0FBUyxTQUFTLE9BQU8sQ0FBQyxFQUFFO0lBQ2xDLE1BQU0sYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUU7TUFDaEIsU0FBUyxJQUFJLENBQUM7UUFDWixNQUFNO1FBQ04sU0FBUyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsa0JBQWtCLENBQUM7UUFDakQsTUFBTTtNQUNSO0lBQ0Y7SUFDQSxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUU7TUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDVixNQUFNO1FBQ04sU0FBUyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsa0JBQWtCLENBQUM7UUFDakQsTUFBTTtNQUNSO0lBQ0Y7SUFFQSxLQUFLLE1BQU0sQ0FBQyxHQUFHLFlBQVksSUFBSSxDQUFDLE9BQU8sWUFBWSxJQUFJLEVBQUUsRUFBRSxPQUFPLEdBQUk7TUFDcEUsSUFBSSxDQUFDLG1CQUFtQixjQUFjO01BQ3RDLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDMUQsTUFBTSxVQUFVLFlBQVksT0FBTztNQUNuQyxJQUFJLENBQUMsU0FBUztRQUNaLE9BQU8sSUFBSSxDQUFDO1VBQ1YsTUFBTTtVQUNOLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsZUFBZSxDQUFDO1VBQzlELE1BQU07UUFDUjtNQUNGLE9BQU8sSUFBSSxDQUFDLGVBQWUsVUFBVTtRQUNuQyxPQUFPLElBQUksQ0FBQztVQUNWLE1BQU07VUFDTixTQUFTLENBQUMsa0JBQWtCLEVBQUUsUUFBUSw0Q0FBNEMsQ0FBQztVQUNuRixNQUFNO1FBQ1I7TUFDRixPQUFPLElBQUksYUFBYSxHQUFHLENBQUMsVUFBVTtRQUNwQyxPQUFPLElBQUksQ0FBQztVQUNWLE1BQU07VUFDTixTQUFTLENBQUMsb0JBQW9CLEVBQUUsU0FBUztVQUN6QyxNQUFNO1FBQ1I7TUFDRixPQUFPO1FBQ0wsYUFBYSxHQUFHLENBQUM7TUFDbkI7SUFDRjtJQUVBLEtBQUssTUFBTSxDQUFDLEdBQUcsU0FBUyxJQUFJLENBQUMsT0FBTyxPQUFPLElBQUksRUFBRSxFQUFFLE9BQU8sR0FBSTtNQUM1RCxJQUFJLENBQUMsU0FBUyxXQUFXLEVBQUU7UUFDekIsT0FBTyxJQUFJLENBQUM7VUFDVixNQUFNO1VBQ04sU0FBUyxDQUFDLFVBQVUsRUFBRSxXQUFXLFNBQVMsRUFBRSxFQUFFLDhCQUE4QixDQUFDO1VBQzdFLE1BQU0sR0FBRyxXQUFXLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQztNQUNGO0lBQ0Y7RUFDRjtFQUVBLE9BQU87SUFDTCxTQUFTLE9BQU8sTUFBTSxLQUFLO0lBQzNCLFVBQVUsT0FBTyxNQUFNLEtBQUssSUFBSSxXQUFXO0lBQzNDO0lBQ0E7RUFDRjtBQUNGO0FBRUEsT0FBTyxTQUFTLG9CQUFvQixRQUFnQztFQUNsRSxNQUFNLGtCQUFpRCxFQUFFO0VBQ3pELE1BQU0sV0FBVyxJQUFJO0VBRXJCLEtBQUssTUFBTSxVQUFVLFNBQVMsT0FBTyxDQUFFO0lBQ3JDLEtBQUssTUFBTSxlQUFlLE9BQU8sWUFBWSxJQUFJLEVBQUUsQ0FBRTtNQUNuRCxJQUFJLENBQUMsbUJBQW1CLGdCQUFnQixDQUFDLFlBQVksT0FBTyxFQUFFO01BRTlELElBQUksU0FBUyxHQUFHLENBQUMsWUFBWSxPQUFPLEdBQUc7UUFDckMsZ0JBQWdCLElBQUksQ0FBQztVQUNuQixTQUFTLFlBQVksT0FBTztVQUM1QixNQUFNO1VBQ04sUUFBUSxDQUFDLG9CQUFvQixFQUFFLFlBQVksT0FBTyxFQUFFO1VBQ3BELFFBQVE7VUFDUixZQUFZLE9BQU8sSUFBSTtVQUN2QixLQUFLO1VBQ0wsS0FBSztVQUNMLFNBQVM7UUFDWDtRQUNBO01BQ0Y7TUFFQSxNQUFNLGlCQUFpQix1QkFBdUIsVUFBVSxRQUFRO01BQ2hFLGdCQUFnQixJQUFJLENBQUM7TUFDckIsU0FBUyxHQUFHLENBQUMsWUFBWSxPQUFPLEVBQUU7SUFDcEM7RUFDRjtFQUVBLE1BQU0sZUFBeUIsRUFBRTtFQUNqQyxNQUFNLGlCQUEyQixFQUFFO0VBQ25DLE1BQU0saUJBQTJCLEVBQUU7RUFDbkMsTUFBTSxzQkFBZ0MsRUFBRTtFQUV4QyxpREFBaUQ7RUFDakQsTUFBTSxVQUFvQztJQUN4QyxVQUFVO0lBQ1YsZUFBZTtJQUNmLGVBQWU7SUFDZixvQkFBb0I7RUFDdEI7RUFFQSxLQUFLLE1BQU0sa0JBQWtCLGdCQUFpQjtJQUM1QyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsRUFBRSxLQUFLLGVBQWUsT0FBTztFQUMzRDtFQUVBLE9BQU87SUFDTDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsT0FBTztNQUNMLGlCQUFpQixnQkFBZ0IsTUFBTTtNQUN2QyxpQkFBaUIsZUFBZSxNQUFNO01BQ3RDLGlCQUFpQixlQUFlLE1BQU07TUFDdEMsZUFBZSxhQUFhLE1BQU07TUFDbEMsc0JBQXNCLG9CQUFvQixNQUFNO0lBQ2xEO0VBQ0Y7QUFDRjtBQUVBLFNBQVMsdUJBQ1AsUUFBZ0MsRUFDaEMsTUFBaUIsRUFDakIsV0FBNkI7RUFFN0IsTUFBTSxjQUFjLFlBQVksV0FBVztFQUMzQyxNQUFNLE1BQU0sYUFBYSxPQUFPO0VBQ2hDLE1BQU0sTUFBTSxhQUFhLE9BQU87RUFDaEMsTUFBTSxVQUFVLGFBQWEsV0FBVztFQUV4QyxJQUFJLE9BQTBCO0VBQzlCLElBQUksU0FBUyxTQUFTLFdBQVcsR0FDN0IsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLFdBQVcsQ0FBQyxpQ0FBaUMsQ0FBQyxHQUMzRTtFQUVKLElBQUksYUFBYSxRQUFRLE1BQU07SUFDN0IsSUFBSSxZQUFZLEtBQUssRUFBRTtNQUNyQixPQUFPO01BQ1AsU0FBUyxDQUFDLHNCQUFzQixFQUFFLFlBQVksS0FBSyxFQUFFO0lBQ3ZELE9BQU87TUFDTCxPQUFPO01BQ1AsU0FBUztJQUNYO0VBQ0YsT0FBTyxJQUFJLGFBQWEsUUFBUSxPQUFPO0lBQ3JDLFNBQVM7RUFDWDtFQUVBLE9BQU87SUFDTCxTQUFTLFlBQVksT0FBTztJQUM1QjtJQUNBO0lBQ0EsUUFBUTtJQUNSLFlBQVksT0FBTyxJQUFJO0lBQ3ZCO0lBQ0E7SUFDQTtFQUNGO0FBQ0YifQ==
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL2NlbS1jb21wYXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBDb21wYXRpYmlsaXR5Q2xhc3NpZmljYXRpb24sXG4gIENvbXBhdGliaWxpdHlUaWVyLFxuICBIeWRyYXRpb25TdHJhdGVneSxcbn0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL2ZyYW1ld29yayc7XG5pbXBvcnQgeyBpc1ZhbGlkVGFnTmFtZSB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb3JlJztcbmltcG9ydCB7IGZvcm1hdEVycm9yIH0gZnJvbSAnQG9wZW5lbGVtZW50L2NvcmUvZXJyb3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBPcGVuRWxlbWVudEV4dGVuc2lvbnMge1xuICBzc3I/OiBib29sZWFuO1xuICBkc2Q/OiBib29sZWFuO1xuICBsYXllcj86IHN0cmluZztcbiAgaHlkcmF0ZT86IEh5ZHJhdGlvblN0cmF0ZWd5O1xuICBtb2R1bGU/OiBzdHJpbmc7XG4gIGV4cG9ydD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENlbUJhc2Uge1xuICBraW5kPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgQ2VtQ3VzdG9tRWxlbWVudCBleHRlbmRzIENlbUJhc2Uge1xuICBraW5kOiAnY3VzdG9tLWVsZW1lbnQnO1xuICB0YWdOYW1lPzogc3RyaW5nO1xuICBzdXBlckNsYXNzPzogeyBuYW1lPzogc3RyaW5nIH07XG4gIG9wZW5FbGVtZW50PzogT3BlbkVsZW1lbnRFeHRlbnNpb25zO1xufVxuXG5pbnRlcmZhY2UgQ2VtTW9kdWxlIHtcbiAga2luZD86IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBkZWNsYXJhdGlvbnM/OiBDZW1CYXNlW107XG4gIGV4cG9ydHM/OiB7IGRlY2xhcmF0aW9uPzogdW5rbm93biB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRWxlbWVudHNNYW5pZmVzdCB7XG4gIHNjaGVtYVZlcnNpb24/OiBzdHJpbmc7XG4gIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBtb2R1bGVzOiBDZW1Nb2R1bGVbXTtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZW1QYXJzZUVycm9yIHtcbiAgY29kZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VtUGFyc2VXYXJuaW5nIHtcbiAgY29kZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VtUGFyc2VSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBtYW5pZmVzdD86IEN1c3RvbUVsZW1lbnRzTWFuaWZlc3Q7XG4gIGVycm9yczogQ2VtUGFyc2VFcnJvcltdO1xuICB3YXJuaW5nczogQ2VtUGFyc2VXYXJuaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VtQ2xhc3NpZmljYXRpb25SZXN1bHQge1xuICBjbGFzc2lmaWNhdGlvbnM6IENvbXBhdGliaWxpdHlDbGFzc2lmaWNhdGlvbltdO1xuICByZWplY3RlZFRhZ3M6IHN0cmluZ1tdO1xuICBzc3JDYXBhYmxlVGFnczogc3RyaW5nW107XG4gIGNsaWVudE9ubHlUYWdzOiBzdHJpbmdbXTtcbiAgZXhwZXJpbWVudGFsRG9tVGFnczogc3RyaW5nW107XG4gIHN0YXRzOiB7XG4gICAgdG90YWxDb21wb25lbnRzOiBudW1iZXI7XG4gICAgc3NyQ2FwYWJsZUNvdW50OiBudW1iZXI7XG4gICAgY2xpZW50T25seUNvdW50OiBudW1iZXI7XG4gICAgcmVqZWN0ZWRDb3VudDogbnVtYmVyO1xuICAgIGV4cGVyaW1lbnRhbERvbUNvdW50OiBudW1iZXI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQ2VtQ3VzdG9tRWxlbWVudChkZWNsYXJhdGlvbjogQ2VtQmFzZSk6IGRlY2xhcmF0aW9uIGlzIENlbUN1c3RvbUVsZW1lbnQge1xuICByZXR1cm4gZGVjbGFyYXRpb24ua2luZCA9PT0gJ2N1c3RvbS1lbGVtZW50Jztcbn1cblxuZnVuY3Rpb24gaXNSZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiB0b0NlbUJhc2VBcnJheSh2YWx1ZTogdW5rbm93bik6IENlbUJhc2VbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB2YWx1ZS5maWx0ZXIoaXNSZWNvcmQpO1xufVxuXG5mdW5jdGlvbiB0b0NlbUV4cG9ydHModmFsdWU6IHVua25vd24pOiB7IGRlY2xhcmF0aW9uPzogdW5rbm93biB9W10gfCB1bmRlZmluZWQge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdmFsdWUuZmlsdGVyKGlzUmVjb3JkKS5tYXAoKGVudHJ5KSA9PiAoeyBkZWNsYXJhdGlvbjogZW50cnkuZGVjbGFyYXRpb24gfSkpO1xufVxuXG5mdW5jdGlvbiB0b0NlbU1vZHVsZSh2YWx1ZTogdW5rbm93bik6IENlbU1vZHVsZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IHR5cGVvZiB2YWx1ZS5raW5kID09PSAnc3RyaW5nJyA/IHZhbHVlLmtpbmQgOiB1bmRlZmluZWQsXG4gICAgcGF0aDogdHlwZW9mIHZhbHVlLnBhdGggPT09ICdzdHJpbmcnID8gdmFsdWUucGF0aCA6ICcnLFxuICAgIGRlY2xhcmF0aW9uczogdG9DZW1CYXNlQXJyYXkodmFsdWUuZGVjbGFyYXRpb25zKSxcbiAgICBleHBvcnRzOiB0b0NlbUV4cG9ydHModmFsdWUuZXhwb3J0cyksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNlbShqc29uOiBzdHJpbmcpOiBDZW1QYXJzZVJlc3VsdCB7XG4gIGNvbnN0IGVycm9yczogQ2VtUGFyc2VFcnJvcltdID0gW107XG4gIGNvbnN0IHdhcm5pbmdzOiBDZW1QYXJzZVdhcm5pbmdbXSA9IFtdO1xuXG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBlcnJvcnMucHVzaCh7XG4gICAgICBjb2RlOiAnQ0VNX1BBUlNFX0VSUk9SJyxcbiAgICAgIG1lc3NhZ2U6IGBJbnZhbGlkIEpTT046ICR7Zm9ybWF0RXJyb3IoZXJyb3IpfWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9ycywgd2FybmluZ3MgfTtcbiAgfVxuXG4gIGlmICghaXNSZWNvcmQocGFyc2VkKSkge1xuICAgIGVycm9ycy5wdXNoKHsgY29kZTogJ0NFTV9JTlZBTElEX1JPT1QnLCBtZXNzYWdlOiAnTWFuaWZlc3Qgcm9vdCBtdXN0IGJlIGFuIG9iamVjdCcgfSk7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9ycywgd2FybmluZ3MgfTtcbiAgfVxuXG4gIGNvbnN0IHJvb3QgPSBwYXJzZWQ7XG4gIGlmICghcm9vdC5zY2hlbWFWZXJzaW9uKSB7XG4gICAgd2FybmluZ3MucHVzaCh7XG4gICAgICBjb2RlOiAnQ0VNX05PX1NDSEVNQV9WRVJTSU9OJyxcbiAgICAgIG1lc3NhZ2U6ICdNaXNzaW5nIHNjaGVtYVZlcnNpb24gZmllbGQsIGFzc3VtaW5nIGxlZ2FjeSBmb3JtYXQnLFxuICAgIH0pO1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheShyb290Lm1vZHVsZXMpKSB7XG4gICAgZXJyb3JzLnB1c2goeyBjb2RlOiAnQ0VNX05PX01PRFVMRVMnLCBtZXNzYWdlOiAnTWFuaWZlc3QgbXVzdCBoYXZlIGEgbW9kdWxlcyBhcnJheScgfSk7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9ycywgd2FybmluZ3MgfTtcbiAgfVxuXG4gIGNvbnN0IG1hbmlmZXN0OiBDdXN0b21FbGVtZW50c01hbmlmZXN0ID0ge1xuICAgIC4uLnJvb3QsXG4gICAgc2NoZW1hVmVyc2lvbjogdHlwZW9mIHJvb3Quc2NoZW1hVmVyc2lvbiA9PT0gJ3N0cmluZycgPyByb290LnNjaGVtYVZlcnNpb24gOiB1bmRlZmluZWQsXG4gICAgcGFja2FnZU5hbWU6IHR5cGVvZiByb290LnBhY2thZ2VOYW1lID09PSAnc3RyaW5nJyA/IHJvb3QucGFja2FnZU5hbWUgOiB1bmRlZmluZWQsXG4gICAgdmVyc2lvbjogdHlwZW9mIHJvb3QudmVyc2lvbiA9PT0gJ3N0cmluZycgPyByb290LnZlcnNpb24gOiB1bmRlZmluZWQsXG4gICAgbW9kdWxlczogcm9vdC5tb2R1bGVzLm1hcCgobW9kdWxlKSA9PlxuICAgICAgdG9DZW1Nb2R1bGUobW9kdWxlKSA/PyB7XG4gICAgICAgIHBhdGg6ICcnLFxuICAgICAgfVxuICAgICksXG4gIH07XG4gIGNvbnN0IHNlZW5UYWdOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFuaWZlc3QubW9kdWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG1vZHVsZSA9IG1hbmlmZXN0Lm1vZHVsZXNbaV07XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IGBtb2R1bGVzWyR7aX1dYDtcblxuICAgIGlmICghbW9kdWxlLmtpbmQpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICBjb2RlOiAnQ0VNX01PRFVMRV9OT19LSU5EJyxcbiAgICAgICAgbWVzc2FnZTogYE1vZHVsZSBhdCBpbmRleCAke2l9IGhhcyBubyBraW5kIGZpZWxkYCxcbiAgICAgICAgcGF0aDogbW9kdWxlUGF0aCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIW1vZHVsZS5wYXRoKSB7XG4gICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdDRU1fTU9EVUxFX05PX1BBVEgnLFxuICAgICAgICBtZXNzYWdlOiBgTW9kdWxlIGF0IGluZGV4ICR7aX0gaGFzIG5vIHBhdGggZmllbGRgLFxuICAgICAgICBwYXRoOiBtb2R1bGVQYXRoLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbaiwgZGVjbGFyYXRpb25dIG9mIChtb2R1bGUuZGVjbGFyYXRpb25zID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICAgIGlmICghaXNDZW1DdXN0b21FbGVtZW50KGRlY2xhcmF0aW9uKSkgY29udGludWU7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvblBhdGggPSBgJHttb2R1bGVQYXRofS5kZWNsYXJhdGlvbnNbJHtqfV1gO1xuICAgICAgY29uc3QgdGFnTmFtZSA9IGRlY2xhcmF0aW9uLnRhZ05hbWU7XG4gICAgICBpZiAoIXRhZ05hbWUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgIGNvZGU6ICdDRU1fQ0VfTk9fVEFHX05BTUUnLFxuICAgICAgICAgIG1lc3NhZ2U6IGBDdXN0b20gZWxlbWVudCBhdCAke2RlY2xhcmF0aW9uUGF0aH0gaGFzIG5vIHRhZ05hbWVgLFxuICAgICAgICAgIHBhdGg6IGRlY2xhcmF0aW9uUGF0aCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkVGFnTmFtZSh0YWdOYW1lKSkge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgY29kZTogJ0NFTV9DRV9JTlZBTElEX1RBR19OQU1FJyxcbiAgICAgICAgICBtZXNzYWdlOiBgSW52YWxpZCB0YWcgbmFtZTogJHt0YWdOYW1lfSAobXVzdCBjb250YWluIGEgaHlwaGVuIGFuZCBtYXRjaCBIVE1MIHNwZWMpYCxcbiAgICAgICAgICBwYXRoOiBkZWNsYXJhdGlvblBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChzZWVuVGFnTmFtZXMuaGFzKHRhZ05hbWUpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICBjb2RlOiAnQ0VNX0NFX0RVUExJQ0FURV9UQUcnLFxuICAgICAgICAgIG1lc3NhZ2U6IGBEdXBsaWNhdGUgdGFnIG5hbWU6ICR7dGFnTmFtZX1gLFxuICAgICAgICAgIHBhdGg6IGRlY2xhcmF0aW9uUGF0aCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWVuVGFnTmFtZXMuYWRkKHRhZ05hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2osIGV4cG9ydGVkXSBvZiAobW9kdWxlWydleHBvcnRzJ10gPz8gW10pLmVudHJpZXMoKSkge1xuICAgICAgaWYgKCFleHBvcnRlZC5kZWNsYXJhdGlvbikge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgY29kZTogJ0NFTV9FWFBPUlRfTk9fREVDTEFSQVRJT04nLFxuICAgICAgICAgIG1lc3NhZ2U6IGBFeHBvcnQgYXQgJHttb2R1bGVQYXRofS5leHBvcnRzWyR7an1dIGhhcyBubyBkZWNsYXJhdGlvbiByZWZlcmVuY2VgLFxuICAgICAgICAgIHBhdGg6IGAke21vZHVsZVBhdGh9LmV4cG9ydHNbJHtqfV1gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IGVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgbWFuaWZlc3Q6IGVycm9ycy5sZW5ndGggPT09IDAgPyBtYW5pZmVzdCA6IHVuZGVmaW5lZCxcbiAgICBlcnJvcnMsXG4gICAgd2FybmluZ3MsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUNlbU1hbmlmZXN0KG1hbmlmZXN0OiBDdXN0b21FbGVtZW50c01hbmlmZXN0KTogQ2VtQ2xhc3NpZmljYXRpb25SZXN1bHQge1xuICBjb25zdCBjbGFzc2lmaWNhdGlvbnM6IENvbXBhdGliaWxpdHlDbGFzc2lmaWNhdGlvbltdID0gW107XG4gIGNvbnN0IHNlZW5UYWdzID0gbmV3IE1hcDxzdHJpbmcsIENvbXBhdGliaWxpdHlDbGFzc2lmaWNhdGlvbj4oKTtcblxuICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtYW5pZmVzdC5tb2R1bGVzKSB7XG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZGVjbGFyYXRpb25zID8/IFtdKSB7XG4gICAgICBpZiAoIWlzQ2VtQ3VzdG9tRWxlbWVudChkZWNsYXJhdGlvbikgfHwgIWRlY2xhcmF0aW9uLnRhZ05hbWUpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAoc2VlblRhZ3MuaGFzKGRlY2xhcmF0aW9uLnRhZ05hbWUpKSB7XG4gICAgICAgIGNsYXNzaWZpY2F0aW9ucy5wdXNoKHtcbiAgICAgICAgICB0YWdOYW1lOiBkZWNsYXJhdGlvbi50YWdOYW1lLFxuICAgICAgICAgIHRpZXI6ICdyZWplY3RlZCcsXG4gICAgICAgICAgcmVhc29uOiBgRHVwbGljYXRlIHRhZyBuYW1lOiAke2RlY2xhcmF0aW9uLnRhZ05hbWV9YCxcbiAgICAgICAgICBzb3VyY2U6ICdwYWNrYWdlJyxcbiAgICAgICAgICBtb2R1bGVQYXRoOiBtb2R1bGUucGF0aCxcbiAgICAgICAgICBzc3I6IGZhbHNlLFxuICAgICAgICAgIGRzZDogZmFsc2UsXG4gICAgICAgICAgaHlkcmF0ZTogJ2lkbGUnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnlDZW1EZWNsYXJhdGlvbihtYW5pZmVzdCwgbW9kdWxlLCBkZWNsYXJhdGlvbik7XG4gICAgICBjbGFzc2lmaWNhdGlvbnMucHVzaChjbGFzc2lmaWNhdGlvbik7XG4gICAgICBzZWVuVGFncy5zZXQoZGVjbGFyYXRpb24udGFnTmFtZSwgY2xhc3NpZmljYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlamVjdGVkVGFnczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc3NyQ2FwYWJsZVRhZ3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNsaWVudE9ubHlUYWdzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleHBlcmltZW50YWxEb21UYWdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIHBvbnl0YWlsOiBidWNrZXQgbG9va3VwIHJlcGxhY2VzIDQtY2FzZSBzd2l0Y2hcbiAgY29uc3QgYnVja2V0czogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAgIHJlamVjdGVkOiByZWplY3RlZFRhZ3MsXG4gICAgJ3Nzci1jYXBhYmxlJzogc3NyQ2FwYWJsZVRhZ3MsXG4gICAgJ2NsaWVudC1vbmx5JzogY2xpZW50T25seVRhZ3MsXG4gICAgJ2V4cGVyaW1lbnRhbC1kb20nOiBleHBlcmltZW50YWxEb21UYWdzLFxuICB9O1xuXG4gIGZvciAoY29uc3QgY2xhc3NpZmljYXRpb24gb2YgY2xhc3NpZmljYXRpb25zKSB7XG4gICAgYnVja2V0c1tjbGFzc2lmaWNhdGlvbi50aWVyXT8ucHVzaChjbGFzc2lmaWNhdGlvbi50YWdOYW1lKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2xhc3NpZmljYXRpb25zLFxuICAgIHJlamVjdGVkVGFncyxcbiAgICBzc3JDYXBhYmxlVGFncyxcbiAgICBjbGllbnRPbmx5VGFncyxcbiAgICBleHBlcmltZW50YWxEb21UYWdzLFxuICAgIHN0YXRzOiB7XG4gICAgICB0b3RhbENvbXBvbmVudHM6IGNsYXNzaWZpY2F0aW9ucy5sZW5ndGgsXG4gICAgICBzc3JDYXBhYmxlQ291bnQ6IHNzckNhcGFibGVUYWdzLmxlbmd0aCxcbiAgICAgIGNsaWVudE9ubHlDb3VudDogY2xpZW50T25seVRhZ3MubGVuZ3RoLFxuICAgICAgcmVqZWN0ZWRDb3VudDogcmVqZWN0ZWRUYWdzLmxlbmd0aCxcbiAgICAgIGV4cGVyaW1lbnRhbERvbUNvdW50OiBleHBlcmltZW50YWxEb21UYWdzLmxlbmd0aCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2lmeUNlbURlY2xhcmF0aW9uKFxuICBtYW5pZmVzdDogQ3VzdG9tRWxlbWVudHNNYW5pZmVzdCxcbiAgbW9kdWxlOiBDZW1Nb2R1bGUsXG4gIGRlY2xhcmF0aW9uOiBDZW1DdXN0b21FbGVtZW50LFxuKTogQ29tcGF0aWJpbGl0eUNsYXNzaWZpY2F0aW9uIHtcbiAgY29uc3Qgb3BlbkVsZW1lbnQgPSBkZWNsYXJhdGlvbi5vcGVuRWxlbWVudDtcbiAgY29uc3Qgc3NyID0gb3BlbkVsZW1lbnQ/LnNzciA/PyBmYWxzZTtcbiAgY29uc3QgZHNkID0gb3BlbkVsZW1lbnQ/LmRzZCA/PyBmYWxzZTtcbiAgY29uc3QgaHlkcmF0ZSA9IG9wZW5FbGVtZW50Py5oeWRyYXRlID8/ICdpZGxlJztcblxuICBsZXQgdGllcjogQ29tcGF0aWJpbGl0eVRpZXIgPSAnY2xpZW50LW9ubHknO1xuICBsZXQgcmVhc29uID0gbWFuaWZlc3QucGFja2FnZU5hbWVcbiAgICA/IGBDRU0tb25seSBwYWNrYWdlICR7bWFuaWZlc3QucGFja2FnZU5hbWV9IChubyBvcGVuRWxlbWVudCBTU1IgZGVjbGFyYXRpb24pYFxuICAgIDogJ0NFTS1vbmx5IHBhY2thZ2UgKG5vIG9wZW5FbGVtZW50IFNTUiBkZWNsYXJhdGlvbiknO1xuXG4gIGlmIChvcGVuRWxlbWVudD8uc3NyID09PSB0cnVlKSB7XG4gICAgaWYgKG9wZW5FbGVtZW50LmxheWVyKSB7XG4gICAgICB0aWVyID0gJ3Nzci1jYXBhYmxlJztcbiAgICAgIHJlYXNvbiA9IGBzc3I6IHRydWUgd2l0aCBsYXllcjogJHtvcGVuRWxlbWVudC5sYXllcn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aWVyID0gJ2NsaWVudC1vbmx5JztcbiAgICAgIHJlYXNvbiA9ICdzc3I6IHRydWUgYnV0IG5vIGFkYXB0ZXIvbGF5ZXIgZGVjbGFyZWQnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvcGVuRWxlbWVudD8uc3NyID09PSBmYWxzZSkge1xuICAgIHJlYXNvbiA9ICdzc3I6IGZhbHNlIChleHBsaWNpdCBjbGllbnQtb25seSknO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0YWdOYW1lOiBkZWNsYXJhdGlvbi50YWdOYW1lISxcbiAgICB0aWVyLFxuICAgIHJlYXNvbixcbiAgICBzb3VyY2U6ICdwYWNrYWdlJyxcbiAgICBtb2R1bGVQYXRoOiBtb2R1bGUucGF0aCxcbiAgICBzc3IsXG4gICAgZHNkLFxuICAgIGh5ZHJhdGUsXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsU0FBUyxjQUFjLFFBQVEsb0JBQW9CO0FBQ25ELFNBQVMsV0FBVyxRQUFRLDJCQUEyQjtBQXdFdkQsU0FBUyxtQkFBbUIsV0FBb0I7RUFDOUMsT0FBTyxZQUFZLElBQUksS0FBSztBQUM5QjtBQUVBLFNBQVMsU0FBUyxLQUFjO0VBQzlCLE9BQU8sQ0FBQyxDQUFDLFNBQVMsT0FBTyxVQUFVLFlBQVksQ0FBQyxNQUFNLE9BQU8sQ0FBQztBQUNoRTtBQUVBLFNBQVMsZUFBZSxLQUFjO0VBQ3BDLElBQUksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxRQUFRLE9BQU87RUFDbEMsT0FBTyxNQUFNLE1BQU0sQ0FBQztBQUN0QjtBQUVBLFNBQVMsYUFBYSxLQUFjO0VBQ2xDLElBQUksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxRQUFRLE9BQU87RUFDbEMsT0FBTyxNQUFNLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVUsQ0FBQztNQUFFLGFBQWEsTUFBTSxXQUFXO0lBQUMsQ0FBQztBQUNsRjtBQUVBLFNBQVMsWUFBWSxLQUFjO0VBQ2pDLElBQUksQ0FBQyxTQUFTLFFBQVEsT0FBTztFQUM3QixPQUFP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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, RouteDecl, SpeculationRulesOptions, SsgIslandDeclForReport, SsgPageInput, SsgPageOutput, SsgRenderEvidence, SsgRenderOptions, SsrAdmissionPlan, SsrBundle } from '@openelement/protocol/ssg';
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG9wZW5lbGVtZW50L3NzZyAtIEFkYXB0ZXItYWdub3N0aWMgU1NHIGVuZ2luZS5cbiAqXG4gKiBQcm92aWRlcyBwYXJhbGxlbCBTU0cgcmVuZGVyaW5nLCBlbnRyeSBjb2RlIGdlbmVyYXRpb24sIHJvdXRlIHNjYW5uaW5nLFxuICogaXNsYW5kIG1hbmlmZXN0IGdlbmVyYXRpb24sIGFuZCBIVE1MIHBvc3QtcHJvY2Vzc2luZy5cbiAqXG4gKiBUaGlzIGVuZ2luZSBkZXBlbmRzIG9uIHByb3RvY29sLCBjb3JlLCByb3V0ZXIsIGFuZCBjb250ZW50IOKAlCBuZXZlciBvblxuICogVml0ZSBvciBhZGFwdGVyLXZpdGUuIEJ1aWxkIGFkYXB0ZXJzIChlLmcuIGFkYXB0ZXItdml0ZSkgZGVsZWdhdGUgU1NHXG4gKiBvcmNoZXN0cmF0aW9uIHRvIHRoaXMgcGFja2FnZS5cbiAqXG4gKiBBcmNoaXRlY3R1cmU6XG4gKiAgIC0gU2VxdWVudGlhbCByZW5kZXJpbmcgKGJhc2VsaW5lKTogcmVuZGVyIHBhZ2VzIG9uZSBhdCBhIHRpbWVcbiAqICAgLSBQYXJhbGxlbCByZW5kZXJpbmcgKHBvb2wtYmFzZWQpOiByZW5kZXIgcGFnZXMgd2l0aCBjb25jdXJyZW5jeSBsaW1pdFxuICpcbiAqIEBtb2R1bGUgQG9wZW5lbGVtZW50L3NzZ1xuICovXG5cbmV4cG9ydCB0eXBlIHtcbiAgQXBpUm91dGVEZWNsLFxuICBBcHBTaGVsbERlY2wsXG4gIEFwcFNoZWxsUGxhbixcbiAgQ2xpZW50SXNsYW5kRW50cnksXG4gIENvcnNPcmlnaW5Db25maWcsXG4gIENzcENvbmZpZyxcbiAgRG9jdW1lbnRDb25maWcsXG4gIEVudHJ5RGVzY3JpcHRvcixcbiAgRXh0ZXJuYWxNYW5pZmVzdCxcbiAgSW1wb3J0RGVjbCxcbiAgSXNsYW5kRGVjbCxcbiAgTWlkZGxld2FyZURlY2wsXG4gIE1pZGRsZXdhcmVTY29wZURlY2wsXG4gIFBhZ2VSb3V0ZURlY2wsXG4gIFBhcmFsbGVsUmVuZGVyT3B0aW9ucyxcbiAgUGFyYWxsZWxSZW5kZXJQYWdlT3V0cHV0LFxuICBQYXJhbGxlbFJlbmRlclJlc3VsdCxcbiAgUmVuZGVyZXJEZWNsLFxuICBSZXNvbHZlZEFwcFNoZWxsLFxuICBSb3V0ZURlY2wsXG4gIFNwZWN1bGF0aW9uUnVsZXNPcHRpb25zLFxuICBTc2dJc2xhbmREZWNsRm9yUmVwb3J0LFxuICBTc2dQYWdlSW5wdXQsXG4gIFNzZ1BhZ2VPdXRwdXQsXG4gIFNzZ1JlbmRlckV2aWRlbmNlLFxuICBTc2dSZW5kZXJPcHRpb25zLFxuICBTc3JBZG1pc3Npb25QbGFuLFxuICBTc3JCdW5kbGUsXG59IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9zc2cnO1xuZXhwb3J0IHsgcmVzb2x2ZUR5bmFtaWNSb3V0ZVBhdGgsIHNzZ1JlbmRlciB9IGZyb20gJy4vc3NnLXJlbmRlci5qcyc7XG5cbmV4cG9ydCB7XG4gIGJ1aWxkSXNsYW5kQ2h1bmtNYXAsXG4gIGJ1aWxkU3BlY3VsYXRpb25SdWxlc0pzb24sXG4gIGluamVjdENsaWVudFNjcmlwdCxcbiAgaW5qZWN0Q3NwTWV0YSxcbiAgaW5qZWN0RHNkUG9seWZpbGwsXG4gIGluamVjdFNwZWN1bGF0aW9uUnVsZXMsXG4gIGluamVjdFZpZXdUcmFuc2l0aW9uTWV0YSxcbiAgaW5zZXJ0QWZ0ZXJIZWFkLFxufSBmcm9tICcuL3Bvc3Rwcm9jZXNzLmpzJztcblxuZXhwb3J0IHsgY2xlYW5Tc3JBcnRpZmFjdHMsIHBvc3RQcm9jZXNzQ2xpZW50SXNsYW5kQnVpbGQgfSBmcm9tICcuL2J1aWxkLXBvc3Rwcm9jZXNzLmpzJztcbmV4cG9ydCB0eXBlIHsgQnVpbGRDb250ZXh0VmlldyB9IGZyb20gJy4vYnVpbGQtcG9zdHByb2Nlc3MuanMnO1xuXG5leHBvcnQgeyBnZW5lcmF0ZVNzclBvbHlmaWxsQmFubmVyIH0gZnJvbSAnLi9zc3ItcG9seWZpbGxzLmpzJztcbmV4cG9ydCB7XG4gIGJ1aWxkRmFsbGJhY2tNYW5pZmVzdCxcbiAgY29tcGxldGVFeHRlcm5hbFNwZWNpZmllcnMsXG4gIGV4dHJhY3RFeHRlcm5hbFNwZWNpZmllcnMsXG4gIHJlc29sdmVFeHRlcm5hbE1hbmlmZXN0LFxuICByZXNvbHZlUGFja2FnZUV4cG9ydHMsXG4gIHdhbGtFeHBvcnRzLFxufSBmcm9tICcuL2V4dGVybmFsLXJlc29sdmVyLmpzJztcblxuZXhwb3J0IHtcbiAgZGV0ZWN0QW5kQ2xhc3NpZnlDZW1QYWNrYWdlcyxcbiAgZmlsZVRvVGFnTmFtZSxcbiAgc2NhbkNlbU1hbmlmZXN0cyxcbiAgc2NhbklzbGFuZE1ldGEsXG4gIHNjYW5Jc2xhbmRzLFxuICBzY2FuUGFja2FnZU1hbmlmZXN0cyxcbiAgc2NhblJvdXRlcyxcbn0gZnJvbSAnLi9yb3V0ZS1zY2FubmVyLmpzJztcblxuZXhwb3J0IHsgZ2VuZXJhdGVSb3V0ZVR5cGVzIH0gZnJvbSAnLi9yb3V0ZS10eXBlLWdlbmVyYXRvci5qcyc7XG5cbmV4cG9ydCB7IGJ1aWxkRW50cnlEZXNjcmlwdG9yLCBidWlsZFNzckFkbWlzc2lvblBsYW4gfSBmcm9tICcuL2VudHJ5LXJlbmRlcmVyLmpzJztcblxuZXhwb3J0IHsgZ2VuZXJhdGVIb25vRW50cnlDb2RlLCByZW5kZXJFbnRyeSB9IGZyb20gJy4vZW50cnktcmVuZGVyZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBIb25vRW50cnlPcHRpb25zIH0gZnJvbSAnLi9lbnRyeS1yZW5kZXJlci5qcyc7XG5cbmV4cG9ydCB7XG4gIGV4dHJhY3RDdXN0b21FbGVtZW50VGFncyxcbiAgZ2VuZXJhdGVJc2xhbmRNYW5pZmVzdHMsXG4gIHdyaXRlSXNsYW5kTWFuaWZlc3RzLFxufSBmcm9tICcuL2lzbGFuZC1tYW5pZmVzdC5qcyc7XG5cbmV4cG9ydCB7IHN0YWJsZUhhc2ggfSBmcm9tICcuL3NzZy1oZWxwZXJzLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgSXNsYW5kTGF5ZXJNYXAsXG4gIElzbGFuZE1hbmlmZXN0RW50cnksXG4gIElzbGFuZFN0cmF0ZWd5TWFwLFxuICBQYWdlSXNsYW5kTWFuaWZlc3QsXG59IGZyb20gJy4vaXNsYW5kLW1hbmlmZXN0LmpzJztcblxuZXhwb3J0IHsgZ2VuZXJhdGVDbGllbnRFbnRyeSwgdmFsaWRhdGVDbGllbnRJc2xhbmRFbnRyeSB9IGZyb20gJy4vZW50cnktZ2VuZXJhdG9ycy5qcyc7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztDQWVDLEdBZ0NELFNBQVMsdUJBQXVCLEVBQUUsU0FBUyxRQUFRLGtCQUFrQjtBQUVyRSxTQUNFLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QixlQUFlLFFBQ1YsbUJBQW1CO0FBRTFCLFNBQVMsaUJBQWlCLEVBQUUsNEJBQTRCLFFBQVEseUJBQXlCO0FBR3pGLFNBQVMseUJBQXlCLFFBQVEscUJBQXFCO0FBQy9ELFNBQ0UscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQixXQUFXLFFBQ04seUJBQXlCO0FBRWhDLFNBQ0UsNEJBQTRCLEVBQzVCLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsVUFBVSxRQUNMLHFCQUFxQjtBQUU1QixTQUFTLGtCQUFrQixRQUFRLDRCQUE0QjtBQUUvRCxTQUFTLG9CQUFvQixFQUFFLHFCQUFxQixRQUFRLHNCQUFzQjtBQUVsRixTQUFTLHFCQUFxQixFQUFFLFdBQVcsUUFBUSxzQkFBc0I7QUFHekUsU0FDRSx3QkFBd0IsRUFDeEIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixRQUNmLHVCQUF1QjtBQUU5QixTQUFTLFVBQVUsUUFBUSxtQkFBbUI7QUFROUMsU0FBUyxtQkFBbUIsRUFBRSx5QkFBeUIsUUFBUSx3QkFBd0IifQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG9wZW5lbGVtZW50L3NzZyAtIEFkYXB0ZXItYWdub3N0aWMgU1NHIGVuZ2luZS5cbiAqXG4gKiBQcm92aWRlcyBwYXJhbGxlbCBTU0cgcmVuZGVyaW5nLCBlbnRyeSBjb2RlIGdlbmVyYXRpb24sIHJvdXRlIHNjYW5uaW5nLFxuICogaXNsYW5kIG1hbmlmZXN0IGdlbmVyYXRpb24sIGFuZCBIVE1MIHBvc3QtcHJvY2Vzc2luZy5cbiAqXG4gKiBUaGlzIGVuZ2luZSBkZXBlbmRzIG9uIHByb3RvY29sLCBjb3JlLCByb3V0ZXIsIGFuZCBjb250ZW50IOKAlCBuZXZlciBvblxuICogVml0ZSBvciBhZGFwdGVyLXZpdGUuIEJ1aWxkIGFkYXB0ZXJzIChlLmcuIGFkYXB0ZXItdml0ZSkgZGVsZWdhdGUgU1NHXG4gKiBvcmNoZXN0cmF0aW9uIHRvIHRoaXMgcGFja2FnZS5cbiAqXG4gKiBBcmNoaXRlY3R1cmU6XG4gKiAgIC0gU2VxdWVudGlhbCByZW5kZXJpbmcgKGJhc2VsaW5lKTogcmVuZGVyIHBhZ2VzIG9uZSBhdCBhIHRpbWVcbiAqICAgLSBQYXJhbGxlbCByZW5kZXJpbmcgKHBvb2wtYmFzZWQpOiByZW5kZXIgcGFnZXMgd2l0aCBjb25jdXJyZW5jeSBsaW1pdFxuICpcbiAqIEBtb2R1bGUgQG9wZW5lbGVtZW50L3NzZ1xuICovXG5cbmV4cG9ydCB0eXBlIHtcbiAgQXBpUm91dGVEZWNsLFxuICBBcHBTaGVsbERlY2wsXG4gIEFwcFNoZWxsUGxhbixcbiAgQ2xpZW50SXNsYW5kRW50cnksXG4gIENvcnNPcmlnaW5Db25maWcsXG4gIENzcENvbmZpZyxcbiAgRG9jdW1lbnRDb25maWcsXG4gIEVudHJ5RGVzY3JpcHRvcixcbiAgRXh0ZXJuYWxNYW5pZmVzdCxcbiAgSW1wb3J0RGVjbCxcbiAgSXNsYW5kRGVjbCxcbiAgTWlkZGxld2FyZURlY2wsXG4gIE1pZGRsZXdhcmVTY29wZURlY2wsXG4gIFBhZ2VSb3V0ZURlY2wsXG4gIFBhcmFsbGVsUmVuZGVyT3B0aW9ucyxcbiAgUGFyYWxsZWxSZW5kZXJQYWdlT3V0cHV0LFxuICBQYXJhbGxlbFJlbmRlclJlc3VsdCxcbiAgUmVuZGVyZXJEZWNsLFxuICBSZXNvbHZlZEFwcFNoZWxsLFxuICBTcGVjdWxhdGlvblJ1bGVzT3B0aW9ucyxcbiAgU3NnUGFnZUlucHV0LFxuICBTc2dQYWdlT3V0cHV0LFxuICBTc2dSZW5kZXJFdmlkZW5jZSxcbiAgU3NnUmVuZGVyT3B0aW9ucyxcbiAgU3NyQWRtaXNzaW9uUGxhbixcbiAgU3NyQnVuZGxlLFxufSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvc3NnJztcbmV4cG9ydCB7IHJlc29sdmVEeW5hbWljUm91dGVQYXRoLCBzc2dSZW5kZXIgfSBmcm9tICcuL3NzZy1yZW5kZXIuanMnO1xuXG5leHBvcnQge1xuICBidWlsZElzbGFuZENodW5rTWFwLFxuICBidWlsZFNwZWN1bGF0aW9uUnVsZXNKc29uLFxuICBpbmplY3RDbGllbnRTY3JpcHQsXG4gIGluamVjdENzcE1ldGEsXG4gIGluamVjdERzZFBvbHlmaWxsLFxuICBpbmplY3RTcGVjdWxhdGlvblJ1bGVzLFxuICBpbmplY3RWaWV3VHJhbnNpdGlvbk1ldGEsXG4gIGluc2VydEFmdGVySGVhZCxcbn0gZnJvbSAnLi9wb3N0cHJvY2Vzcy5qcyc7XG5cbmV4cG9ydCB7IGNsZWFuU3NyQXJ0aWZhY3RzLCBwb3N0UHJvY2Vzc0NsaWVudElzbGFuZEJ1aWxkIH0gZnJvbSAnLi9idWlsZC1wb3N0cHJvY2Vzcy5qcyc7XG5leHBvcnQgdHlwZSB7IEJ1aWxkQ29udGV4dFZpZXcgfSBmcm9tICcuL2J1aWxkLXBvc3Rwcm9jZXNzLmpzJztcblxuZXhwb3J0IHsgZ2VuZXJhdGVTc3JQb2x5ZmlsbEJhbm5lciB9IGZyb20gJy4vc3NyLXBvbHlmaWxscy5qcyc7XG5leHBvcnQge1xuICBidWlsZEZhbGxiYWNrTWFuaWZlc3QsXG4gIGNvbXBsZXRlRXh0ZXJuYWxTcGVjaWZpZXJzLFxuICBleHRyYWN0RXh0ZXJuYWxTcGVjaWZpZXJzLFxuICByZXNvbHZlRXh0ZXJuYWxNYW5pZmVzdCxcbiAgcmVzb2x2ZVBhY2thZ2VFeHBvcnRzLFxuICB3YWxrRXhwb3J0cyxcbn0gZnJvbSAnLi9leHRlcm5hbC1yZXNvbHZlci5qcyc7XG5cbmV4cG9ydCB7XG4gIGRldGVjdEFuZENsYXNzaWZ5Q2VtUGFja2FnZXMsXG4gIGZpbGVUb1RhZ05hbWUsXG4gIHNjYW5DZW1NYW5pZmVzdHMsXG4gIHNjYW5Jc2xhbmRNZXRhLFxuICBzY2FuSXNsYW5kcyxcbiAgc2NhblBhY2thZ2VNYW5pZmVzdHMsXG4gIHNjYW5Sb3V0ZXMsXG59IGZyb20gJy4vcm91dGUtc2Nhbm5lci5qcyc7XG5cbmV4cG9ydCB7IGdlbmVyYXRlUm91dGVUeXBlcyB9IGZyb20gJy4vcm91dGUtdHlwZS1nZW5lcmF0b3IuanMnO1xuXG5leHBvcnQgeyBidWlsZEVudHJ5RGVzY3JpcHRvciwgYnVpbGRTc3JBZG1pc3Npb25QbGFuIH0gZnJvbSAnLi9lbnRyeS1yZW5kZXJlci5qcyc7XG5cbmV4cG9ydCB7IGdlbmVyYXRlSG9ub0VudHJ5Q29kZSwgcmVuZGVyRW50cnkgfSBmcm9tICcuL2VudHJ5LXJlbmRlcmVyLmpzJztcbmV4cG9ydCB0eXBlIHsgSG9ub0VudHJ5T3B0aW9ucyB9IGZyb20gJy4vZW50cnktcmVuZGVyZXIuanMnO1xuXG5leHBvcnQge1xuICBleHRyYWN0Q3VzdG9tRWxlbWVudFRhZ3MsXG4gIGdlbmVyYXRlSXNsYW5kTWFuaWZlc3RzLFxuICB3cml0ZUlzbGFuZE1hbmlmZXN0cyxcbn0gZnJvbSAnLi9pc2xhbmQtbWFuaWZlc3QuanMnO1xuXG5leHBvcnQgeyBzdGFibGVIYXNoIH0gZnJvbSAnLi9zc2ctaGVscGVycy5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIElzbGFuZExheWVyTWFwLFxuICBJc2xhbmRNYW5pZmVzdEVudHJ5LFxuICBJc2xhbmRTdHJhdGVneU1hcCxcbiAgUGFnZUlzbGFuZE1hbmlmZXN0LFxufSBmcm9tICcuL2lzbGFuZC1tYW5pZmVzdC5qcyc7XG5cbmV4cG9ydCB7IGdlbmVyYXRlQ2xpZW50RW50cnksIHZhbGlkYXRlQ2xpZW50SXNsYW5kRW50cnkgfSBmcm9tICcuL2VudHJ5LWdlbmVyYXRvcnMuanMnO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Q0FlQyxHQThCRCxTQUFTLHVCQUF1QixFQUFFLFNBQVMsUUFBUSxrQkFBa0I7QUFFckUsU0FDRSxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsZUFBZSxRQUNWLG1CQUFtQjtBQUUxQixTQUFTLGlCQUFpQixFQUFFLDRCQUE0QixRQUFRLHlCQUF5QjtBQUd6RixTQUFTLHlCQUF5QixRQUFRLHFCQUFxQjtBQUMvRCxTQUNFLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsV0FBVyxRQUNOLHlCQUF5QjtBQUVoQyxTQUNFLDRCQUE0QixFQUM1QixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLFVBQVUsUUFDTCxxQkFBcUI7QUFFNUIsU0FBUyxrQkFBa0IsUUFBUSw0QkFBNEI7QUFFL0QsU0FBUyxvQkFBb0IsRUFBRSxxQkFBcUIsUUFBUSxzQkFBc0I7QUFFbEYsU0FBUyxxQkFBcUIsRUFBRSxXQUFXLFFBQVEsc0JBQXNCO0FBR3pFLFNBQ0Usd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixvQkFBb0IsUUFDZix1QkFBdUI7QUFFOUIsU0FBUyxVQUFVLFFBQVEsbUJBQW1CO0FBUTlDLFNBQVMsbUJBQW1CLEVBQUUseUJBQXlCLFFBQVEsd0JBQXdCIn0=
@@ -1,25 +1,49 @@
1
1
  /**
2
- * @openelement/ssg - Dynamic route expansion
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 { collectPageOutput, resolveDynamicRoutePath } from './ssg-helpers.js';
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, pageDiagnostics) {
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
- const output = await renderRoute(route.path, {
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9zc2cvc3JjL3NzZy1keW5hbWljLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG9wZW5lbGVtZW50L3NzZyAtIER5bmFtaWMgcm91dGUgZXhwYW5zaW9uXG4gKlxuICogSGFuZGxlcyBkeW5hbWljIHJvdXRlIHJlbmRlcmluZyB1c2luZyBnZXRTdGF0aWNQYXRocygpICsgcmVuZGVyUm91dGUoKVxuICogZnJvbSB0aGUgU1NSIGJ1bmRsZS5cbiAqL1xuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IG1rZGlyU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHR5cGUgeyBTc2dQYWdlT3V0cHV0LCBTc2dSZW5kZXJPcHRpb25zIH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL3NzZyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9sb2dnZXInO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3IgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9lcnJvcnMnO1xuaW1wb3J0IHsgY29sbGVjdFBhZ2VPdXRwdXQsIHR5cGUgUGFnZURpYWdub3N0aWMsIHJlc29sdmVEeW5hbWljUm91dGVQYXRoIH0gZnJvbSAnLi9zc2ctaGVscGVycy5qcyc7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcignc3NnJyk7XG5cbmludGVyZmFjZSBSb3V0ZUluZm9JdGVtIHtcbiAgcGF0aDogc3RyaW5nO1xuICB0YWdOYW1lOiBzdHJpbmc7XG4gIGlzRHluYW1pYzogYm9vbGVhbjtcbiAgcGFyYW1OYW1lczogc3RyaW5nW107XG4gIHJldmFsaWRhdGU/OiBudW1iZXI7XG4gIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogRXhwYW5kIGR5bmFtaWMgcm91dGVzIGJ5IGNhbGxpbmcgZ2V0U3RhdGljUGF0aHMoKSBhbmQgcmVuZGVyUm91dGUoKVxuICogZm9yIGVhY2ggcGFyYW1ldGVyIHNldC5cbiAqXG4gKiBSZXR1cm5zIGEgbWFwIG9mIHN0YXRpYyBwYXRoIHBhcmFtcyBrZXllZCBieSByb3V0ZSBwYXRoLCB3aGljaCBpc1xuICogY29uc3VtZWQgbGF0ZXIgd2hlbiBidWlsZGluZyB0aGUgSVNSIG1hbmlmZXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kRHluYW1pY1JvdXRlcyhcbiAgZHluYW1pY1JvdXRlczogUm91dGVJbmZvSXRlbVtdLFxuICByZW5kZXJSb3V0ZTpcbiAgICB8ICgocGF0aDogc3RyaW5nLCBvcHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8U3NnUGFnZU91dHB1dD4pXG4gICAgfCB1bmRlZmluZWQsXG4gIGdldFN0YXRpY1BhdGhzOlxuICAgIHwgKChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8QXJyYXk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4+KVxuICAgIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBTc2dSZW5kZXJPcHRpb25zLFxuICByb290OiBzdHJpbmcsXG4gIG91dERpcjogc3RyaW5nLFxuICBwYWdlRGlhZ25vc3RpY3M6IFBhZ2VEaWFnbm9zdGljW10sXG4pOiBQcm9taXNlPE1hcDxzdHJpbmcsIEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+Pj4ge1xuICBjb25zdCBzdGF0aWNQYXRoUGFyYW1zQnlSb3V0ZSA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pj4oKTtcblxuICBpZiAoZHluYW1pY1JvdXRlcy5sZW5ndGggPiAwICYmIHJlbmRlclJvdXRlICYmIGdldFN0YXRpY1BhdGhzKSB7XG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiBkeW5hbWljUm91dGVzKSB7XG4gICAgICBjb25zdCBwYXJhbU5hbWVzID0gcm91dGUucGFyYW1OYW1lcztcbiAgICAgIGxldCBwYXJhbXNMaXN0OiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyYW1zTGlzdCA9IGF3YWl0IGdldFN0YXRpY1BhdGhzKHJvdXRlLnBhdGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cud2FybihcbiAgICAgICAgICBgRmFpbGVkIHRvIGdldCBzdGF0aWMgcGF0aHMgZm9yICR7cm91dGUucGF0aH06ICR7Zm9ybWF0RXJyb3IoZSl9YCxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzdGF0aWNQYXRoUGFyYW1zQnlSb3V0ZS5zZXQocm91dGUucGF0aCwgcGFyYW1zTGlzdCk7XG5cbiAgICAgIGlmIChwYXJhbXNMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBsb2cuaW5mbyhgRHluYW1pYyByb3V0ZSAke3JvdXRlLnBhdGh9IGhhcyBubyBzdGF0aWMgcGF0aHMgLSBza2lwcGluZ2ApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBwYXJhbXMgb2YgcGFyYW1zTGlzdCkge1xuICAgICAgICBsZXQgcmVzb2x2ZWRQYXRoOiBzdHJpbmc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZUR5bmFtaWNSb3V0ZVBhdGgoXG4gICAgICAgICAgICByb3V0ZS5wYXRoLFxuICAgICAgICAgICAgcGFyYW1OYW1lcyxcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLndhcm4oXG4gICAgICAgICAgICBgU2tpcHBpbmcgdW5zYWZlIGR5bmFtaWMgcm91dGUgJHtyb3V0ZS5wYXRofTogJHtmb3JtYXRFcnJvcihlKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJlbmRlclJvdXRlKHJvdXRlLnBhdGgsIHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLmh0bWw/LnRpdGxlLFxuICAgICAgICAgICAgbGFuZzogb3B0aW9ucy5odG1sPy5sYW5nLFxuICAgICAgICAgICAgaGVhZEV4dHJhczogb3B0aW9ucy5oZWFkRXh0cmFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGh0bWwgPSBjb2xsZWN0UGFnZU91dHB1dChyZXNvbHZlZFBhdGgsIG91dHB1dCwgcGFnZURpYWdub3N0aWNzKTtcblxuICAgICAgICAgIGNvbnN0IG91dHB1dERpciA9IGpvaW4ocm9vdCwgb3V0RGlyKTtcbiAgICAgICAgICBjb25zdCBwYWdlRGlyID0gam9pbihvdXRwdXREaXIsIHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgbWtkaXJTeW5jKHBhZ2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIHdyaXRlRmlsZVN5bmMoam9pbihwYWdlRGlyLCAnaW5kZXguaHRtbCcpLCBodG1sLCAndXRmLTgnKTtcbiAgICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICAgIGBEeW5hbWljIHJvdXRlOiAke3Jlc29sdmVkUGF0aH0gLT4gJHtyZXNvbHZlZFBhdGh9L2luZGV4Lmh0bWxgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cud2FybihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gcmVuZGVyIGR5bmFtaWMgcm91dGUgJHtyZXNvbHZlZFBhdGh9OiAke2Zvcm1hdEVycm9yKGUpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0aWNQYXRoUGFyYW1zQnlSb3V0ZTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Q0FLQyxHQUVELFNBQVMsSUFBSSxRQUFRLFlBQVk7QUFDakMsU0FBUyxTQUFTLEVBQUUsYUFBYSxRQUFRLFVBQVU7QUFFbkQsU0FBUyxZQUFZLFFBQVEsMkJBQTJCO0FBQ3hELFNBQVMsV0FBVyxRQUFRLDJCQUEyQjtBQUN2RCxTQUFTLGlCQUFpQixFQUF1Qix1QkFBdUIsUUFBUSxtQkFBbUI7QUFFbkcsTUFBTSxNQUFNLGFBQWE7QUFXekI7Ozs7OztDQU1DLEdBQ0QsT0FBTyxlQUFlLG9CQUNwQixhQUE4QixFQUM5QixXQUVhLEVBQ2IsY0FFYSxFQUNiLE9BQXlCLEVBQ3pCLElBQVksRUFDWixNQUFjLEVBQ2QsZUFBaUM7RUFFakMsTUFBTSwwQkFBMEIsSUFBSTtFQUVwQyxJQUFJLGNBQWMsTUFBTSxHQUFHLEtBQUssZUFBZSxnQkFBZ0I7SUFDN0QsS0FBSyxNQUFNLFNBQVMsY0FBZTtNQUNqQyxNQUFNLGFBQWEsTUFBTSxVQUFVO01BQ25DLElBQUk7TUFFSixJQUFJO1FBQ0YsYUFBYSxNQUFNLGVBQWUsTUFBTSxJQUFJO01BQzlDLEVBQUUsT0FBTyxHQUFHO1FBQ1YsSUFBSSxJQUFJLENBQ04sQ0FBQywrQkFBK0IsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsWUFBWSxJQUFJO1FBRW5FO01BQ0Y7TUFDQSx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFO01BRXhDLElBQUksV0FBVyxNQUFNLEtBQUssR0FBRztRQUMzQixJQUFJLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxNQUFNLElBQUksQ0FBQywrQkFBK0IsQ0FBQztRQUNyRTtNQUNGO01BRUEsS0FBSyxNQUFNLFVBQVUsV0FBWTtRQUMvQixJQUFJO1FBQ0osSUFBSTtVQUNGLGVBQWUsd0JBQ2IsTUFBTSxJQUFJLEVBQ1YsWUFDQTtRQUVKLEVBQUUsT0FBTyxHQUFHO1VBQ1YsSUFBSSxJQUFJLENBQ04sQ0FBQyw4QkFBOEIsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsWUFBWSxJQUFJO1VBRWxFO1FBQ0Y7UUFFQSxJQUFJO1VBQ0YsTUFBTSxTQUFTLE1BQU0sWUFBWSxNQUFNLElBQUksRUFBRTtZQUMzQztZQUNBLE9BQU8sUUFBUSxJQUFJLEVBQUU7WUFDckIsTUFBTSxRQUFRLElBQUksRUFBRTtZQUNwQixZQUFZLFFBQVEsVUFBVTtVQUNoQztVQUNBLE1BQU0sT0FBTyxrQkFBa0IsY0FBYyxRQUFRO1VBRXJELE1BQU0sWUFBWSxLQUFLLE1BQU07VUFDN0IsTUFBTSxVQUFVLEtBQUssV0FBVztVQUNoQyxVQUFVLFNBQVM7WUFBRSxXQUFXO1VBQUs7VUFDckMsY0FBYyxLQUFLLFNBQVMsZUFBZSxNQUFNO1VBQ2pELElBQUksSUFBSSxDQUNOLENBQUMsZUFBZSxFQUFFLGFBQWEsSUFBSSxFQUFFLGFBQWEsV0FBVyxDQUFDO1FBRWxFLEVBQUUsT0FBTyxHQUFHO1VBQ1YsSUFBSSxJQUFJLENBQ04sQ0FBQywrQkFBK0IsRUFBRSxhQUFhLEVBQUUsRUFBRSxZQUFZLElBQUk7UUFFdkU7TUFDRjtJQUNGO0VBQ0Y7RUFFQSxPQUFPO0FBQ1QifQ==
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+O1xuICAgICAgaWYgKCFyb3V0ZS5pc0R5bmFtaWMpIHtcbiAgICAgICAgcGFyYW1zTGlzdCA9IFt7fV07XG4gICAgICB9IGVsc2UgaWYgKGdldFN0YXRpY1BhdGhzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGFyYW1zTGlzdCA9IGF3YWl0IGdldFN0YXRpY1BhdGhzKHJvdXRlLnBhdGgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBsb2cud2FybihgaTE4bjogZ2V0U3RhdGljUGF0aHMgZmFpbGVkIGZvciAke3JvdXRlLnBhdGh9LCBza2lwcGluZ2ApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXNMaXN0Lmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgIGZvciAoY29uc3QgcGFyYW1zIG9mIHBhcmFtc0xpc3QpIHtcbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aDogc3RyaW5nO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHJlc29sdmVEeW5hbWljUm91dGVQYXRoKHJvdXRlLnBhdGgsIHJvdXRlLnBhcmFtTmFtZXMsIHBhcmFtcyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cud2FybihgaTE4bjogc2tpcHBpbmcgdW5zYWZlIGR5bmFtaWMgcm91dGUgJHtyb3V0ZS5wYXRofTogJHtmb3JtYXRFcnJvcihlKX1gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhdGhTZWdtZW50ID0gcmVzb2x2ZWRQYXRoLnNwbGl0KCcvJylbMV0gfHwgJyc7XG4gICAgICAgIGlmIChsb2NhbGVzLmluY2x1ZGVzKHBhdGhTZWdtZW50KSkgY29udGludWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3cml0ZVJlbmRlcmVkUGFnZShcbiAgICAgICAgICAgIHJvdXRlLnBhdGgsXG4gICAgICAgICAgICByZXNvbHZlZFBhdGgsXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICByZW5kZXJSb3V0ZSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgb3V0RGlyLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cud2FybihgaTE4bjogZmFpbGVkIGZvciBsb2NhbGUgJHtsb2NhbGV9IG9uICR7cmVzb2x2ZWRQYXRofTogJHtmb3JtYXRFcnJvcihlKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztDQUtDLEdBRUQsU0FBUyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxTQUFTLFNBQVMsRUFBRSxhQUFhLFFBQVEsVUFBVTtBQUVuRCxTQUFTLFlBQVksUUFBUSwyQkFBMkI7QUFDeEQsU0FBUyxXQUFXLFFBQVEsMkJBQTJCO0FBQ3ZELFNBQVMsdUJBQXVCLFFBQVEsbUJBQW1CO0FBRTNELE1BQU0sTUFBTSxhQUFhO0FBbUJ6QixTQUFTLFNBQVMsTUFBOEI7RUFDOUMsT0FBTyxPQUFPLFdBQVcsV0FBVyxTQUFTLE9BQU8sSUFBSTtBQUMxRDtBQUVBLGVBQWUsa0JBQ2IsU0FBaUIsRUFDakIsWUFBb0IsRUFDcEIsTUFBOEIsRUFDOUIsV0FBdUMsRUFDdkMsT0FBeUIsRUFDekIsSUFBWSxFQUNaLE1BQWMsRUFDZCxNQUFlO0VBRWYsTUFBTSxhQUFhLFNBQVMsTUFBTSxTQUFTLE1BQU0sYUFBYSxPQUFPLENBQUMsT0FBTyxNQUFNO0VBRW5GLE1BQU0sYUFBc0M7SUFDMUM7SUFDQSxPQUFPLFFBQVEsSUFBSSxFQUFFO0lBQ3JCLFlBQVksUUFBUSxVQUFVO0VBQ2hDO0VBQ0EsSUFBSSxRQUFRO0lBQ1YsV0FBVyxNQUFNLEdBQUc7SUFDcEIsV0FBVyxJQUFJLEdBQUc7RUFDcEIsT0FBTztJQUNMLFdBQVcsSUFBSSxHQUFHLFFBQVEsSUFBSSxFQUFFO0VBQ2xDO0VBRUEsTUFBTSxTQUFTLE1BQU0sWUFBWSxXQUFXO0VBQzVDLE1BQU0sT0FBTyxTQUFTO0VBRXRCLE1BQU0sVUFBVSxLQUFLLE1BQU0sUUFBUTtFQUNuQyxVQUFVLFNBQVM7SUFBRSxXQUFXO0VBQUs7RUFDckMsY0FBYyxLQUFLLFNBQVMsZUFBZSxNQUFNO0VBRWpELElBQUksSUFBSSxDQUNOLFNBQ0ksQ0FBQyxNQUFNLEVBQUUsV0FBVyxXQUFXLENBQUMsR0FDaEMsQ0FBQyxlQUFlLEVBQUUsYUFBYSxJQUFJLEVBQUUsYUFBYSxXQUFXLENBQUM7QUFFdEU7QUFFQTs7Ozs7O0NBTUMsR0FDRCxPQUFPLGVBQWUsb0JBQ3BCLGFBQThCLEVBQzlCLFdBQTBCLEVBQzFCLGNBQWdDLEVBQ2hDLE9BQXlCLEVBQ3pCLElBQVksRUFDWixNQUFjO0VBRWQsTUFBTSwwQkFBMEIsSUFBSTtFQUVwQyxJQUFJLGNBQWMsTUFBTSxHQUFHLEtBQUssZUFBZSxnQkFBZ0I7SUFDN0QsS0FBSyxNQUFNLFNBQVMsY0FBZTtNQUNqQyxJQUFJO01BQ0osSUFBSTtRQUNGLGFBQWEsTUFBTSxlQUFlLE1BQU0sSUFBSTtNQUM5QyxFQUFFLE9BQU8sR0FBRztRQUNWLElBQUksSUFBSSxDQUFDLENBQUMsK0JBQStCLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLFlBQVksSUFBSTtRQUMxRTtNQUNGO01BQ0Esd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRTtNQUV4QyxJQUFJLFdBQVcsTUFBTSxLQUFLLEdBQUc7UUFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUM7UUFDckU7TUFDRjtNQUVBLEtBQUssTUFBTSxVQUFVLFdBQVk7UUFDL0IsSUFBSTtRQUNKLElBQUk7VUFDRixlQUFlLHdCQUF3QixNQUFNLElBQUksRUFBRSxNQUFNLFVBQVUsRUFBRTtRQUN2RSxFQUFFLE9BQU8sR0FBRztVQUNWLElBQUksSUFBSSxDQUFDLENBQUMsOEJBQThCLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLFlBQVksSUFBSTtVQUN6RTtRQUNGO1FBRUEsSUFBSTtVQUNGLE1BQU0sa0JBQ0osTUFBTSxJQUFJLEVBQ1YsY0FDQSxRQUNBLGFBQ0EsU0FDQSxNQUNBO1FBRUosRUFBRSxPQUFPLEdBQUc7VUFDVixJQUFJLElBQUksQ0FBQyxDQUFDLCtCQUErQixFQUFFLGFBQWEsRUFBRSxFQUFFLFlBQVksSUFBSTtRQUM5RTtNQUNGO0lBQ0Y7RUFDRjtFQUVBLE9BQU87QUFDVDtBQUVBOzs7OztDQUtDLEdBQ0QsT0FBTyxlQUFlLGtCQUNwQixRQUEyQixFQUMzQixXQUEwQixFQUMxQixTQUEwQixFQUMxQixjQUFnQyxFQUNoQyxPQUF5QixFQUN6QixJQUFZLEVBQ1osTUFBYztFQUVkLE1BQU0sV0FBVyxTQUFTLFdBQVcsSUFBSTtFQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWE7RUFFL0IsTUFBTSxVQUFvQixTQUFTLE9BQU8sSUFBSSxFQUFFO0VBQ2hELElBQUksUUFBUSxNQUFNLElBQUksR0FBRztFQUV6QixJQUFJLElBQUksQ0FBQyxDQUFDLDZCQUE2QixFQUFFLFFBQVEsSUFBSSxDQUFDLE9BQU87RUFDN0QsS0FBSyxNQUFNLFVBQVUsUUFBUztJQUM1QixLQUFLLE1BQU0sU0FBUyxVQUFXO01BQzdCLElBQUk7TUFDSixJQUFJLENBQUMsTUFBTSxTQUFTLEVBQUU7UUFDcEIsYUFBYTtVQUFDLENBQUM7U0FBRTtNQUNuQixPQUFPLElBQUksZ0JBQWdCO1FBQ3pCLElBQUk7VUFDRixhQUFhLE1BQU0sZUFBZSxNQUFNLElBQUk7UUFDOUMsRUFBRSxPQUFNO1VBQ04sSUFBSSxJQUFJLENBQUMsQ0FBQyxnQ0FBZ0MsRUFBRSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUM7VUFDbEU7UUFDRjtNQUNGLE9BQU87UUFDTDtNQUNGO01BQ0EsSUFBSSxXQUFXLE1BQU0sS0FBSyxHQUFHO01BRTdCLEtBQUssTUFBTSxVQUFVLFdBQVk7UUFDL0IsSUFBSTtRQUNKLElBQUk7VUFDRixlQUFlLHdCQUF3QixNQUFNLElBQUksRUFBRSxNQUFNLFVBQVUsRUFBRTtRQUN2RSxFQUFFLE9BQU8sR0FBRztVQUNWLElBQUksSUFBSSxDQUFDLENBQUMsb0NBQW9DLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLFlBQVksSUFBSTtVQUMvRTtRQUNGO1FBRUEsTUFBTSxjQUFjLGFBQWEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUk7UUFDbEQsSUFBSSxRQUFRLFFBQVEsQ0FBQyxjQUFjO1FBRW5DLElBQUk7VUFDRixNQUFNLGtCQUNKLE1BQU0sSUFBSSxFQUNWLGNBQ0EsUUFDQSxhQUNBLFNBQ0EsTUFDQSxRQUNBO1FBRUosRUFBRSxPQUFPLEdBQUc7VUFDVixJQUFJLElBQUksQ0FBQyxDQUFDLHdCQUF3QixFQUFFLE9BQU8sSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLFlBQVksSUFBSTtRQUNwRjtNQUNGO0lBQ0Y7RUFDRjtBQUNGIn0=
@@ -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 === '..' || /[\\/]/.test(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-i18n.ts)
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 process from 'node:process';
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 || process.cwd();
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, pageDiagnostics);
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, pageDiagnostics);
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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