@plumile/site 0.2.3 → 0.2.5
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/README.md +102 -29
- package/lib/esm/node/httpResponse.d.ts +4 -0
- package/lib/esm/node/httpResponse.d.ts.map +1 -0
- package/lib/esm/node/httpResponse.js +29 -0
- package/lib/esm/node/index.d.ts +4 -48
- package/lib/esm/node/index.d.ts.map +1 -1
- package/lib/esm/node/index.js +4 -102
- package/lib/esm/node/renderSiteRequest.d.ts +4 -0
- package/lib/esm/node/renderSiteRequest.d.ts.map +1 -0
- package/lib/esm/node/renderSiteRequest.js +293 -0
- package/lib/esm/node/types.d.ts +106 -0
- package/lib/esm/node/types.d.ts.map +1 -0
- package/lib/esm/node/types.js +2 -0
- package/lib/esm/node/writeStaticSite.d.ts +3 -0
- package/lib/esm/node/writeStaticSite.d.ts.map +1 -0
- package/lib/esm/node/writeStaticSite.js +77 -0
- package/lib/esm/runtime/hydrationPayload.d.ts +8 -0
- package/lib/esm/runtime/hydrationPayload.d.ts.map +1 -0
- package/lib/esm/runtime/hydrationPayload.js +81 -0
- package/lib/esm/runtime/index.d.ts +36 -28
- package/lib/esm/runtime/index.d.ts.map +1 -1
- package/lib/esm/runtime/index.js +92 -78
- package/lib/esm/runtime/scrollRestoration.d.ts +12 -0
- package/lib/esm/runtime/scrollRestoration.d.ts.map +1 -0
- package/lib/esm/runtime/scrollRestoration.js +66 -0
- package/lib/esm/vite/index.d.ts +3 -1
- package/lib/esm/vite/index.d.ts.map +1 -1
- package/lib/esm/vite/index.js +23 -5
- package/lib/esm/vite/resolveSiteAssetsFromViteManifest.d.ts +14 -0
- package/lib/esm/vite/resolveSiteAssetsFromViteManifest.d.ts.map +1 -0
- package/lib/esm/vite/resolveSiteAssetsFromViteManifest.js +81 -0
- package/lib/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/node/httpResponse.d.ts +4 -0
- package/lib/types/node/httpResponse.d.ts.map +1 -0
- package/lib/types/node/index.d.ts +4 -48
- package/lib/types/node/index.d.ts.map +1 -1
- package/lib/types/node/renderSiteRequest.d.ts +4 -0
- package/lib/types/node/renderSiteRequest.d.ts.map +1 -0
- package/lib/types/node/types.d.ts +106 -0
- package/lib/types/node/types.d.ts.map +1 -0
- package/lib/types/node/writeStaticSite.d.ts +3 -0
- package/lib/types/node/writeStaticSite.d.ts.map +1 -0
- package/lib/types/runtime/hydrationPayload.d.ts +8 -0
- package/lib/types/runtime/hydrationPayload.d.ts.map +1 -0
- package/lib/types/runtime/index.d.ts +36 -28
- package/lib/types/runtime/index.d.ts.map +1 -1
- package/lib/types/runtime/scrollRestoration.d.ts +12 -0
- package/lib/types/runtime/scrollRestoration.d.ts.map +1 -0
- package/lib/types/vite/index.d.ts +3 -1
- package/lib/types/vite/index.d.ts.map +1 -1
- package/lib/types/vite/resolveSiteAssetsFromViteManifest.d.ts +14 -0
- package/lib/types/vite/resolveSiteAssetsFromViteManifest.d.ts.map +1 -0
- package/package.json +5 -5
package/lib/esm/vite/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { PluginOption } from 'vite';
|
|
2
|
+
export { resolveSiteAssetsFromViteManifest, type ResolveSiteAssetsOptions, type ViteManifestChunk, } from './resolveSiteAssetsFromViteManifest.js';
|
|
2
3
|
export type PlumileSiteVitePluginOptions = {
|
|
4
|
+
clientEntry: string;
|
|
3
5
|
manifestPath?: string;
|
|
4
6
|
};
|
|
5
|
-
export declare function plumileSiteVitePlugin(options
|
|
7
|
+
export declare function plumileSiteVitePlugin(options: PlumileSiteVitePluginOptions): PluginOption;
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vite/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vite/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,MAAM,CAAC;AACrD,OAAO,EACL,iCAAiC,EACjC,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,GACvB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,MAAM,4BAA4B,GAAG;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAGF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,YAAY,CA8Bd"}
|
package/lib/esm/vite/index.js
CHANGED
|
@@ -1,13 +1,31 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { resolveSiteAssetsFromViteManifest, } from './resolveSiteAssetsFromViteManifest.js';
|
|
2
|
+
export function plumileSiteVitePlugin(options) {
|
|
3
|
+
if (options.clientEntry.trim() === '') {
|
|
4
|
+
throw new Error('plumileSiteVitePlugin requires clientEntry');
|
|
5
|
+
}
|
|
2
6
|
return {
|
|
3
7
|
name: 'plumile-site',
|
|
4
|
-
config() {
|
|
8
|
+
config(config, environment) {
|
|
9
|
+
if (environment.isSsrBuild) {
|
|
10
|
+
return {
|
|
11
|
+
build: {
|
|
12
|
+
copyPublicDir: false,
|
|
13
|
+
manifest: false,
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const configuredInput = config.build?.rollupOptions?.input;
|
|
18
|
+
if (configuredInput != null && configuredInput !== options.clientEntry) {
|
|
19
|
+
throw new Error('Vite Rollup input conflicts with plumileSiteVitePlugin clientEntry');
|
|
20
|
+
}
|
|
5
21
|
return {
|
|
6
|
-
|
|
7
|
-
|
|
22
|
+
build: {
|
|
23
|
+
copyPublicDir: true,
|
|
24
|
+
manifest: options.manifestPath ?? '.vite/manifest.json',
|
|
25
|
+
rollupOptions: { input: options.clientEntry },
|
|
8
26
|
},
|
|
9
27
|
};
|
|
10
28
|
},
|
|
11
29
|
};
|
|
12
30
|
}
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdml0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsaUNBQWlDLEdBR2xDLE1BQU0sd0NBQXdDLENBQUM7QUFRaEQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxPQUFxQztJQUVyQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLGNBQWM7UUFDcEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXO1lBQ3hCLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMzQixPQUFPO29CQUNMLEtBQUssRUFBRTt3QkFDTCxhQUFhLEVBQUUsS0FBSzt3QkFDcEIsUUFBUSxFQUFFLEtBQUs7cUJBQ2hCO2lCQUNtQixDQUFDO1lBQ3pCLENBQUM7WUFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUM7WUFDM0QsSUFBSSxlQUFlLElBQUksSUFBSSxJQUFJLGVBQWUsS0FBSyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0VBQW9FLENBQ3JFLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTztnQkFDTCxLQUFLLEVBQUU7b0JBQ0wsYUFBYSxFQUFFLElBQUk7b0JBQ25CLFFBQVEsRUFBRSxPQUFPLENBQUMsWUFBWSxJQUFJLHFCQUFxQjtvQkFDdkQsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUU7aUJBQzlDO2FBQ21CLENBQUM7UUFDekIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24sIFVzZXJDb25maWcgfSBmcm9tICd2aXRlJztcbmV4cG9ydCB7XG4gIHJlc29sdmVTaXRlQXNzZXRzRnJvbVZpdGVNYW5pZmVzdCxcbiAgdHlwZSBSZXNvbHZlU2l0ZUFzc2V0c09wdGlvbnMsXG4gIHR5cGUgVml0ZU1hbmlmZXN0Q2h1bmssXG59IGZyb20gJy4vcmVzb2x2ZVNpdGVBc3NldHNGcm9tVml0ZU1hbmlmZXN0LmpzJztcblxuZXhwb3J0IHR5cGUgUGx1bWlsZVNpdGVWaXRlUGx1Z2luT3B0aW9ucyA9IHtcbiAgY2xpZW50RW50cnk6IHN0cmluZztcbiAgbWFuaWZlc3RQYXRoPzogc3RyaW5nO1xufTtcblxuLyoqIENvbmZpZ3VyZXMgZGlzdGluY3QgY2xpZW50LW1hbmlmZXN0IGFuZCBTU1Itc2VydmVyIFZpdGUgYnVpbGRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsdW1pbGVTaXRlVml0ZVBsdWdpbihcbiAgb3B0aW9uczogUGx1bWlsZVNpdGVWaXRlUGx1Z2luT3B0aW9ucyxcbik6IFBsdWdpbk9wdGlvbiB7XG4gIGlmIChvcHRpb25zLmNsaWVudEVudHJ5LnRyaW0oKSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BsdW1pbGVTaXRlVml0ZVBsdWdpbiByZXF1aXJlcyBjbGllbnRFbnRyeScpO1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3BsdW1pbGUtc2l0ZScsXG4gICAgY29uZmlnKGNvbmZpZywgZW52aXJvbm1lbnQpIHtcbiAgICAgIGlmIChlbnZpcm9ubWVudC5pc1NzckJ1aWxkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYnVpbGQ6IHtcbiAgICAgICAgICAgIGNvcHlQdWJsaWNEaXI6IGZhbHNlLFxuICAgICAgICAgICAgbWFuaWZlc3Q6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gc2F0aXNmaWVzIFVzZXJDb25maWc7XG4gICAgICB9XG4gICAgICBjb25zdCBjb25maWd1cmVkSW5wdXQgPSBjb25maWcuYnVpbGQ/LnJvbGx1cE9wdGlvbnM/LmlucHV0O1xuICAgICAgaWYgKGNvbmZpZ3VyZWRJbnB1dCAhPSBudWxsICYmIGNvbmZpZ3VyZWRJbnB1dCAhPT0gb3B0aW9ucy5jbGllbnRFbnRyeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1ZpdGUgUm9sbHVwIGlucHV0IGNvbmZsaWN0cyB3aXRoIHBsdW1pbGVTaXRlVml0ZVBsdWdpbiBjbGllbnRFbnRyeScsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBidWlsZDoge1xuICAgICAgICAgIGNvcHlQdWJsaWNEaXI6IHRydWUsXG4gICAgICAgICAgbWFuaWZlc3Q6IG9wdGlvbnMubWFuaWZlc3RQYXRoID8/ICcudml0ZS9tYW5pZmVzdC5qc29uJyxcbiAgICAgICAgICByb2xsdXBPcHRpb25zOiB7IGlucHV0OiBvcHRpb25zLmNsaWVudEVudHJ5IH0sXG4gICAgICAgIH0sXG4gICAgICB9IHNhdGlzZmllcyBVc2VyQ29uZmlnO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SiteResolvedAssets } from '../node/types.js';
|
|
2
|
+
export type ViteManifestChunk = {
|
|
3
|
+
file: string;
|
|
4
|
+
css?: readonly string[];
|
|
5
|
+
imports?: readonly string[];
|
|
6
|
+
isEntry?: boolean;
|
|
7
|
+
isDynamicEntry?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type ResolveSiteAssetsOptions = {
|
|
10
|
+
clientEntry: string;
|
|
11
|
+
routeEntries: readonly string[];
|
|
12
|
+
};
|
|
13
|
+
export declare function resolveSiteAssetsFromViteManifest(manifest: Readonly<Record<string, ViteManifestChunk>>, options: ResolveSiteAssetsOptions): SiteResolvedAssets;
|
|
14
|
+
//# sourceMappingURL=resolveSiteAssetsFromViteManifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveSiteAssetsFromViteManifest.d.ts","sourceRoot":"","sources":["../../../src/vite/resolveSiteAssetsFromViteManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,CAAC;AAGF,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,EACrD,OAAO,EAAE,wBAAwB,GAChC,kBAAkB,CAkDpB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export function resolveSiteAssetsFromViteManifest(manifest, options) {
|
|
2
|
+
if (options.routeEntries.length === 0) {
|
|
3
|
+
throw new Error('Site asset resolution requires at least one route entry');
|
|
4
|
+
}
|
|
5
|
+
requireChunk(manifest, options.clientEntry);
|
|
6
|
+
options.routeEntries.forEach((key) => {
|
|
7
|
+
requireChunk(manifest, key);
|
|
8
|
+
});
|
|
9
|
+
const visited = new Set();
|
|
10
|
+
const visiting = new Set();
|
|
11
|
+
const stylesheets = [];
|
|
12
|
+
const modulePreloads = [];
|
|
13
|
+
const seenStylesheets = new Set();
|
|
14
|
+
const seenPreloads = new Set();
|
|
15
|
+
const visit = (key) => {
|
|
16
|
+
if (visited.has(key) || visiting.has(key))
|
|
17
|
+
return;
|
|
18
|
+
const chunk = requireChunk(manifest, key);
|
|
19
|
+
visiting.add(key);
|
|
20
|
+
visited.add(key);
|
|
21
|
+
const file = toPublicAsset(chunk.file);
|
|
22
|
+
if (key !== options.clientEntry &&
|
|
23
|
+
/\.(?:m?js|cjs)$/i.test(chunk.file) &&
|
|
24
|
+
!seenPreloads.has(file)) {
|
|
25
|
+
seenPreloads.add(file);
|
|
26
|
+
modulePreloads.push(file);
|
|
27
|
+
}
|
|
28
|
+
(chunk.css ?? []).forEach((css) => {
|
|
29
|
+
const publicCss = toPublicAsset(css);
|
|
30
|
+
if (!seenStylesheets.has(publicCss)) {
|
|
31
|
+
seenStylesheets.add(publicCss);
|
|
32
|
+
stylesheets.push(publicCss);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
(chunk.imports ?? []).forEach(visit);
|
|
36
|
+
visiting.delete(key);
|
|
37
|
+
};
|
|
38
|
+
visit(options.clientEntry);
|
|
39
|
+
options.routeEntries.forEach(visit);
|
|
40
|
+
return {
|
|
41
|
+
stylesheets,
|
|
42
|
+
modulePreloads,
|
|
43
|
+
clientEntry: toPublicAsset(requireChunk(manifest, options.clientEntry).file),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function requireChunk(manifest, key) {
|
|
47
|
+
const chunk = manifest[key];
|
|
48
|
+
if (chunk == null) {
|
|
49
|
+
throw new Error(`Missing Vite manifest entry: ${key}`);
|
|
50
|
+
}
|
|
51
|
+
if (typeof chunk !== 'object' ||
|
|
52
|
+
typeof chunk.file !== 'string' ||
|
|
53
|
+
(chunk.css != null &&
|
|
54
|
+
(!Array.isArray(chunk.css) ||
|
|
55
|
+
chunk.css.some((value) => {
|
|
56
|
+
return typeof value !== 'string';
|
|
57
|
+
}))) ||
|
|
58
|
+
(chunk.imports != null &&
|
|
59
|
+
(!Array.isArray(chunk.imports) ||
|
|
60
|
+
chunk.imports.some((value) => {
|
|
61
|
+
return typeof value !== 'string';
|
|
62
|
+
})))) {
|
|
63
|
+
throw new Error(`Malformed Vite manifest entry: ${key}`);
|
|
64
|
+
}
|
|
65
|
+
return chunk;
|
|
66
|
+
}
|
|
67
|
+
function toPublicAsset(value) {
|
|
68
|
+
if (value === '' ||
|
|
69
|
+
value.startsWith('/') ||
|
|
70
|
+
value.includes('\\') ||
|
|
71
|
+
value.includes('?') ||
|
|
72
|
+
value.includes('#') ||
|
|
73
|
+
/^[a-z][a-z\d+.-]*:/i.test(value) ||
|
|
74
|
+
value.split('/').some((segment) => {
|
|
75
|
+
return segment === '..';
|
|
76
|
+
})) {
|
|
77
|
+
throw new Error(`Invalid Vite manifest asset: ${value}`);
|
|
78
|
+
}
|
|
79
|
+
return `/${value}`;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZVNpdGVBc3NldHNGcm9tVml0ZU1hbmlmZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZpdGUvcmVzb2x2ZVNpdGVBc3NldHNGcm9tVml0ZU1hbmlmZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdCQSxNQUFNLFVBQVUsaUNBQWlDLENBQy9DLFFBQXFELEVBQ3JELE9BQWlDO0lBRWpDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFDRCxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ25DLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDbkMsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQztJQUNwQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzFDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFdkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFXLEVBQVEsRUFBRTtRQUNsQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPO1FBQ2xELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7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LENBQUMsS0FBYTtJQUNsQyxJQUNFLEtBQUssS0FBSyxFQUFFO1FBQ1osS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDckIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDcEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDbkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDbkIscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNqQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2hDLE9BQU8sT0FBTyxLQUFLLElBQUksQ0FBQztRQUMxQixDQUFDLENBQUMsRUFDRixDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsT0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNpdGVSZXNvbHZlZEFzc2V0cyB9IGZyb20gJy4uL25vZGUvdHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSBWaXRlTWFuaWZlc3RDaHVuayA9IHtcbiAgZmlsZTogc3RyaW5nO1xuICBjc3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgaW1wb3J0cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICBpc0VudHJ5PzogYm9vbGVhbjtcbiAgaXNEeW5hbWljRW50cnk/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUmVzb2x2ZVNpdGVBc3NldHNPcHRpb25zID0ge1xuICBjbGllbnRFbnRyeTogc3RyaW5nO1xuICByb3V0ZUVudHJpZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufTtcblxuLyoqIFJlc29sdmVzIG9yZGVyZWQgcHVibGljIGFzc2V0cyBmcm9tIGEgVml0ZSBjbGllbnQgbWFuaWZlc3Qgd2l0aG91dCBJL08uICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNpdGVBc3NldHNGcm9tVml0ZU1hbmlmZXN0KFxuICBtYW5pZmVzdDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgVml0ZU1hbmlmZXN0Q2h1bms+PixcbiAgb3B0aW9uczogUmVzb2x2ZVNpdGVBc3NldHNPcHRpb25zLFxuKTogU2l0ZVJlc29sdmVkQXNzZXRzIHtcbiAgaWYgKG9wdGlvbnMucm91dGVFbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2l0ZSBhc3NldCByZXNvbHV0aW9uIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSByb3V0ZSBlbnRyeScpO1xuICB9XG4gIHJlcXVpcmVDaHVuayhtYW5pZmVzdCwgb3B0aW9ucy5jbGllbnRFbnRyeSk7XG4gIG9wdGlvbnMucm91dGVFbnRyaWVzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIHJlcXVpcmVDaHVuayhtYW5pZmVzdCwga2V5KTtcbiAgfSk7XG5cbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB2aXNpdGluZyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBzdHlsZXNoZWV0czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbW9kdWxlUHJlbG9hZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNlZW5TdHlsZXNoZWV0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBzZWVuUHJlbG9hZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdCB2aXNpdCA9IChrZXk6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlmICh2aXNpdGVkLmhhcyhrZXkpIHx8IHZpc2l0aW5nLmhhcyhrZXkpKSByZXR1cm47XG4gICAgY29uc3QgY2h1bmsgPSByZXF1aXJlQ2h1bmsobWFuaWZlc3QsIGtleSk7XG4gICAgdmlzaXRpbmcuYWRkKGtleSk7XG4gICAgdmlzaXRlZC5hZGQoa2V5KTtcbiAgICBjb25zdCBmaWxlID0gdG9QdWJsaWNBc3NldChjaHVuay5maWxlKTtcbiAgICBpZiAoXG4gICAgICBrZXkgIT09IG9wdGlvbnMuY2xpZW50RW50cnkgJiZcbiAgICAgIC9cXC4oPzptP2pzfGNqcykkL2kudGVzdChjaHVuay5maWxlKSAmJlxuICAgICAgIXNlZW5QcmVsb2Fkcy5oYXMoZmlsZSlcbiAgICApIHtcbiAgICAgIHNlZW5QcmVsb2Fkcy5hZGQoZmlsZSk7XG4gICAgICBtb2R1bGVQcmVsb2Fkcy5wdXNoKGZpbGUpO1xuICAgIH1cbiAgICAoY2h1bmsuY3NzID8/IFtdKS5mb3JFYWNoKChjc3MpID0+IHtcbiAgICAgIGNvbnN0IHB1YmxpY0NzcyA9IHRvUHVibGljQXNzZXQoY3NzKTtcbiAgICAgIGlmICghc2VlblN0eWxlc2hlZXRzLmhhcyhwdWJsaWNDc3MpKSB7XG4gICAgICAgIHNlZW5TdHlsZXNoZWV0cy5hZGQocHVibGljQ3NzKTtcbiAgICAgICAgc3R5bGVzaGVldHMucHVzaChwdWJsaWNDc3MpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIChjaHVuay5pbXBvcnRzID8/IFtdKS5mb3JFYWNoKHZpc2l0KTtcbiAgICB2aXNpdGluZy5kZWxldGUoa2V5KTtcbiAgfTtcblxuICB2aXNpdChvcHRpb25zLmNsaWVudEVudHJ5KTtcbiAgb3B0aW9ucy5yb3V0ZUVudHJpZXMuZm9yRWFjaCh2aXNpdCk7XG4gIHJldHVybiB7XG4gICAgc3R5bGVzaGVldHMsXG4gICAgbW9kdWxlUHJlbG9hZHMsXG4gICAgY2xpZW50RW50cnk6IHRvUHVibGljQXNzZXQoXG4gICAgICByZXF1aXJlQ2h1bmsobWFuaWZlc3QsIG9wdGlvbnMuY2xpZW50RW50cnkpLmZpbGUsXG4gICAgKSxcbiAgfTtcbn1cblxuLyoqIFJldHVybnMgYSB2YWxpZGF0ZWQgbWFuaWZlc3QgY2h1bmsgb3IgcmVwb3J0cyB0aGUgbWlzc2luZyBlbnRyeS4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVDaHVuayhcbiAgbWFuaWZlc3Q6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFZpdGVNYW5pZmVzdENodW5rPj4sXG4gIGtleTogc3RyaW5nLFxuKTogVml0ZU1hbmlmZXN0Q2h1bmsge1xuICBjb25zdCBjaHVuayA9IG1hbmlmZXN0W2tleV07XG4gIGlmIChjaHVuayA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIFZpdGUgbWFuaWZlc3QgZW50cnk6ICR7a2V5fWApO1xuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgY2h1bmsgIT09ICdvYmplY3QnIHx8XG4gICAgdHlwZW9mIGNodW5rLmZpbGUgIT09ICdzdHJpbmcnIHx8XG4gICAgKGNodW5rLmNzcyAhPSBudWxsICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkoY2h1bmsuY3NzKSB8fFxuICAgICAgICBjaHVuay5jc3Muc29tZSgodmFsdWUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJztcbiAgICAgICAgfSkpKSB8fFxuICAgIChjaHVuay5pbXBvcnRzICE9IG51bGwgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheShjaHVuay5pbXBvcnRzKSB8fFxuICAgICAgICBjaHVuay5pbXBvcnRzLnNvbWUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZyc7XG4gICAgICAgIH0pKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNYWxmb3JtZWQgVml0ZSBtYW5pZmVzdCBlbnRyeTogJHtrZXl9YCk7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG4vKiogQ29udmVydHMgYSBWaXRlIGZpbGUgbmFtZSBpbnRvIGEgc2FmZSByb290LXJlbGF0aXZlIHB1YmxpYyBhc3NldCBwYXRoLiAqL1xuZnVuY3Rpb24gdG9QdWJsaWNBc3NldCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKFxuICAgIHZhbHVlID09PSAnJyB8fFxuICAgIHZhbHVlLnN0YXJ0c1dpdGgoJy8nKSB8fFxuICAgIHZhbHVlLmluY2x1ZGVzKCdcXFxcJykgfHxcbiAgICB2YWx1ZS5pbmNsdWRlcygnPycpIHx8XG4gICAgdmFsdWUuaW5jbHVkZXMoJyMnKSB8fFxuICAgIC9eW2Etel1bYS16XFxkKy4tXSo6L2kudGVzdCh2YWx1ZSkgfHxcbiAgICB2YWx1ZS5zcGxpdCgnLycpLnNvbWUoKHNlZ21lbnQpID0+IHtcbiAgICAgIHJldHVybiBzZWdtZW50ID09PSAnLi4nO1xuICAgIH0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBWaXRlIG1hbmlmZXN0IGFzc2V0OiAke3ZhbHVlfWApO1xuICB9XG4gIHJldHVybiBgLyR7dmFsdWV9YDtcbn1cbiJdfQ==
|