@angular-devkit/build-angular 16.2.1 → 17.0.0-next.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/README.md +14 -10
- package/builders.json +10 -0
- package/package.json +31 -29
- package/src/builders/application/options.d.ts +6 -1
- package/src/builders/application/options.js +6 -1
- package/src/builders/application/schema.d.ts +3 -6
- package/src/builders/application/schema.js +1 -1
- package/src/builders/application/schema.json +7 -16
- package/src/builders/browser-esbuild/index.js +3 -2
- package/src/builders/dev-server/vite-server.d.ts +1 -1
- package/src/builders/dev-server/vite-server.js +11 -8
- package/src/builders/extract-i18n/application-extraction.d.ts +17 -0
- package/src/builders/extract-i18n/application-extraction.js +137 -0
- package/src/builders/extract-i18n/builder.d.ts +17 -0
- package/src/builders/extract-i18n/builder.js +152 -0
- package/src/builders/extract-i18n/index.d.ts +4 -14
- package/src/builders/extract-i18n/index.js +4 -247
- package/src/builders/extract-i18n/options.d.ts +29 -0
- package/src/builders/extract-i18n/options.js +82 -0
- package/src/builders/extract-i18n/webpack-extraction.d.ts +21 -0
- package/src/builders/extract-i18n/webpack-extraction.js +100 -0
- package/src/builders/jest/schema.d.ts +3 -6
- package/src/builders/jest/schema.js +1 -1
- package/src/builders/jest/schema.json +7 -16
- package/src/builders/prerender/index.d.ts +20 -0
- package/src/builders/prerender/index.js +180 -0
- package/src/builders/prerender/render-worker.d.ts +30 -0
- package/src/builders/prerender/render-worker.js +126 -0
- package/src/builders/prerender/schema.d.ts +22 -0
- package/src/builders/prerender/schema.js +5 -0
- package/src/builders/prerender/schema.json +39 -0
- package/src/builders/prerender/utils.d.ts +22 -0
- package/src/builders/prerender/utils.js +79 -0
- package/src/builders/ssr-dev-server/index.d.ts +23 -0
- package/src/builders/ssr-dev-server/index.js +309 -0
- package/src/builders/ssr-dev-server/schema.d.ts +64 -0
- package/src/builders/ssr-dev-server/schema.js +5 -0
- package/src/builders/ssr-dev-server/schema.json +75 -0
- package/src/builders/ssr-dev-server/utils.d.ts +15 -0
- package/src/builders/ssr-dev-server/utils.js +75 -0
- package/src/tools/babel/plugins/elide-angular-metadata.js +43 -20
- package/src/tools/babel/plugins/pure-toplevel-functions.js +3 -2
- package/src/tools/babel/webpack-loader.js +2 -2
- package/src/tools/esbuild/angular/compilation/angular-compilation.d.ts +7 -2
- package/src/tools/esbuild/angular/compilation/angular-compilation.js +21 -1
- package/src/tools/esbuild/angular/compiler-plugin.js +8 -13
- package/src/tools/esbuild/application-code-bundle.js +3 -5
- package/src/tools/esbuild/utils.js +5 -1
- package/src/tools/sass/rebasing-importer.js +2 -2
- package/src/utils/index-file/inline-critical-css.js +13 -26
- package/src/tools/esbuild/external-packages-plugin.d.ts +0 -17
- package/src/tools/esbuild/external-packages-plugin.js +0 -49
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.io/license
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.extractMessages = void 0;
|
|
14
|
+
const build_webpack_1 = require("@angular-devkit/build-webpack");
|
|
15
|
+
const rxjs_1 = require("rxjs");
|
|
16
|
+
const webpack_1 = __importDefault(require("webpack"));
|
|
17
|
+
const configs_1 = require("../../tools/webpack/configs");
|
|
18
|
+
const stats_1 = require("../../tools/webpack/utils/stats");
|
|
19
|
+
const webpack_browser_config_1 = require("../../utils/webpack-browser-config");
|
|
20
|
+
const schema_1 = require("../browser/schema");
|
|
21
|
+
class NoEmitPlugin {
|
|
22
|
+
apply(compiler) {
|
|
23
|
+
compiler.hooks.shouldEmit.tap('angular-no-emit', () => false);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function extractMessages(options, builderName, context, transforms = {}) {
|
|
27
|
+
const messages = [];
|
|
28
|
+
let useLegacyIds = true;
|
|
29
|
+
const browserOptions = await context.validateOptions(await context.getTargetOptions(options.browserTarget), builderName);
|
|
30
|
+
const builderOptions = {
|
|
31
|
+
...browserOptions,
|
|
32
|
+
optimization: false,
|
|
33
|
+
sourceMap: {
|
|
34
|
+
scripts: true,
|
|
35
|
+
styles: false,
|
|
36
|
+
vendor: true,
|
|
37
|
+
},
|
|
38
|
+
buildOptimizer: false,
|
|
39
|
+
aot: true,
|
|
40
|
+
progress: options.progress,
|
|
41
|
+
budgets: [],
|
|
42
|
+
assets: [],
|
|
43
|
+
scripts: [],
|
|
44
|
+
styles: [],
|
|
45
|
+
deleteOutputPath: false,
|
|
46
|
+
extractLicenses: false,
|
|
47
|
+
subresourceIntegrity: false,
|
|
48
|
+
outputHashing: schema_1.OutputHashing.None,
|
|
49
|
+
namedChunks: true,
|
|
50
|
+
allowedCommonJsDependencies: undefined,
|
|
51
|
+
};
|
|
52
|
+
const { config } = await (0, webpack_browser_config_1.generateBrowserWebpackConfigFromContext)(builderOptions, context, (wco) => {
|
|
53
|
+
// Default value for legacy message ids is currently true
|
|
54
|
+
useLegacyIds = wco.tsConfig.options.enableI18nLegacyMessageIdFormat ?? true;
|
|
55
|
+
const partials = [
|
|
56
|
+
{ plugins: [new NoEmitPlugin()] },
|
|
57
|
+
(0, configs_1.getCommonConfig)(wco),
|
|
58
|
+
];
|
|
59
|
+
// Add Ivy application file extractor support
|
|
60
|
+
partials.unshift({
|
|
61
|
+
module: {
|
|
62
|
+
rules: [
|
|
63
|
+
{
|
|
64
|
+
test: /\.[cm]?[tj]sx?$/,
|
|
65
|
+
loader: require.resolve('./ivy-extract-loader'),
|
|
66
|
+
options: {
|
|
67
|
+
messageHandler: (fileMessages) => messages.push(...fileMessages),
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
// Replace all stylesheets with empty content
|
|
74
|
+
partials.push({
|
|
75
|
+
module: {
|
|
76
|
+
rules: [
|
|
77
|
+
{
|
|
78
|
+
test: /\.(css|scss|sass|less)$/,
|
|
79
|
+
loader: require.resolve('./empty-loader'),
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
return partials;
|
|
85
|
+
},
|
|
86
|
+
// During extraction we don't need specific browser support.
|
|
87
|
+
{ supportedBrowsers: undefined });
|
|
88
|
+
const builderResult = await (0, rxjs_1.lastValueFrom)((0, build_webpack_1.runWebpack)((await transforms?.webpackConfiguration?.(config)) || config, context, {
|
|
89
|
+
logging: (0, stats_1.createWebpackLoggingCallback)(builderOptions, context.logger),
|
|
90
|
+
webpackFactory: webpack_1.default,
|
|
91
|
+
}));
|
|
92
|
+
return {
|
|
93
|
+
builderResult,
|
|
94
|
+
basePath: config.context || options.projectRoot,
|
|
95
|
+
messages,
|
|
96
|
+
useLegacyIds,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
exports.extractMessages = extractMessages;
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VicGFjay1leHRyYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvYnVpbGRlcnMvZXh0cmFjdC1pMThuL3dlYnBhY2stZXh0cmFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7QUFJSCxpRUFBd0U7QUFDeEUsK0JBQXFDO0FBQ3JDLHNEQUFzRDtBQUN0RCx5REFBOEQ7QUFDOUQsMkRBQStFO0FBRS9FLCtFQUE2RjtBQUM3Riw4Q0FBMEQ7QUFHMUQsTUFBTSxZQUFZO0lBQ2hCLEtBQUssQ0FBQyxRQUEwQjtRQUM5QixRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNGO0FBRU0sS0FBSyxVQUFVLGVBQWUsQ0FDbkMsT0FBcUMsRUFDckMsV0FBbUIsRUFDbkIsT0FBdUIsRUFDdkIsYUFFSSxFQUFFO0lBT04sTUFBTSxRQUFRLEdBQXNCLEVBQUUsQ0FBQztJQUN2QyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7SUFFeEIsTUFBTSxjQUFjLEdBQUcsTUFBTSxPQUFPLENBQUMsZUFBZSxDQUNsRCxNQUFNLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQ3JELFdBQVcsQ0FDWixDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUc7UUFDckIsR0FBRyxjQUFjO1FBQ2pCLFlBQVksRUFBRSxLQUFLO1FBQ25CLFNBQVMsRUFBRTtZQUNULE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLEtBQUs7WUFDYixNQUFNLEVBQUUsSUFBSTtTQUNiO1FBQ0QsY0FBYyxFQUFFLEtBQUs7UUFDckIsR0FBRyxFQUFFLElBQUk7UUFDVCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsT0FBTyxFQUFFLEVBQUU7UUFDWCxNQUFNLEVBQUUsRUFBRTtRQUNWLE9BQU8sRUFBRSxFQUFFO1FBQ1gsTUFBTSxFQUFFLEVBQUU7UUFDVixnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCLGVBQWUsRUFBRSxLQUFLO1FBQ3RCLG9CQUFvQixFQUFFLEtBQUs7UUFDM0IsYUFBYSxFQUFFLHNCQUFhLENBQUMsSUFBSTtRQUNqQyxXQUFXLEVBQUUsSUFBSTtRQUNqQiwyQkFBMkIsRUFBRSxTQUFTO0tBQ2xCLENBQUM7SUFDdkIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSxnRUFBdUMsRUFDOUQsY0FBYyxFQUNkLE9BQU8sRUFDUCxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ04seURBQXlEO1FBQ3pELFlBQVksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsSUFBSSxJQUFJLENBQUM7UUFFNUUsTUFBTSxRQUFRLEdBQStDO1lBQzNELEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxFQUFFO1lBQ2pDLElBQUEseUJBQWUsRUFBQyxHQUFHLENBQUM7U0FDckIsQ0FBQztRQUVGLDZDQUE2QztRQUM3QyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ2YsTUFBTSxFQUFFO2dCQUNOLEtBQUssRUFBRTtvQkFDTDt3QkFDRSxJQUFJLEVBQUUsaUJBQWlCO3dCQUN2QixNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQzt3QkFDL0MsT0FBTyxFQUFFOzRCQUNQLGNBQWMsRUFBRSxDQUFDLFlBQStCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUM7eUJBQ3BGO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCw2Q0FBNkM7UUFDN0MsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNaLE1BQU0sRUFBRTtnQkFDTixLQUFLLEVBQUU7b0JBQ0w7d0JBQ0UsSUFBSSxFQUFFLHlCQUF5Qjt3QkFDL0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7cUJBQzFDO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsNERBQTREO0lBQzVELEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLENBQ2pDLENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUEsb0JBQWEsRUFDdkMsSUFBQSwwQkFBVSxFQUFDLENBQUMsTUFBTSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE1BQU0sRUFBRSxPQUFPLEVBQUU7UUFDaEYsT0FBTyxFQUFFLElBQUEsb0NBQTRCLEVBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDckUsY0FBYyxFQUFFLGlCQUFPO0tBQ3hCLENBQUMsQ0FDSCxDQUFDO0lBRUYsT0FBTztRQUNMLGFBQWE7UUFDYixRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsV0FBVztRQUMvQyxRQUFRO1FBQ1IsWUFBWTtLQUNiLENBQUM7QUFDSixDQUFDO0FBckdELDBDQXFHQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IMm1UGFyc2VkTWVzc2FnZSBhcyBMb2NhbGl6ZU1lc3NhZ2UgfSBmcm9tICdAYW5ndWxhci9sb2NhbGl6ZSc7XG5pbXBvcnQgeyBCdWlsZGVyQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9hcmNoaXRlY3QnO1xuaW1wb3J0IHsgQnVpbGRSZXN1bHQsIHJ1bldlYnBhY2sgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvYnVpbGQtd2VicGFjayc7XG5pbXBvcnQgeyBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgd2VicGFjaywgeyB0eXBlIENvbmZpZ3VyYXRpb24gfSBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCB7IGdldENvbW1vbkNvbmZpZyB9IGZyb20gJy4uLy4uL3Rvb2xzL3dlYnBhY2svY29uZmlncyc7XG5pbXBvcnQgeyBjcmVhdGVXZWJwYWNrTG9nZ2luZ0NhbGxiYWNrIH0gZnJvbSAnLi4vLi4vdG9vbHMvd2VicGFjay91dGlscy9zdGF0cyc7XG5pbXBvcnQgeyBFeGVjdXRpb25UcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVCcm93c2VyV2VicGFja0NvbmZpZ0Zyb21Db250ZXh0IH0gZnJvbSAnLi4vLi4vdXRpbHMvd2VicGFjay1icm93c2VyLWNvbmZpZyc7XG5pbXBvcnQgeyBPdXRwdXRIYXNoaW5nLCBTY2hlbWEgfSBmcm9tICcuLi9icm93c2VyL3NjaGVtYSc7XG5pbXBvcnQgeyBOb3JtYWxpemVkRXh0cmFjdEkxOG5PcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcblxuY2xhc3MgTm9FbWl0UGx1Z2luIHtcbiAgYXBwbHkoY29tcGlsZXI6IHdlYnBhY2suQ29tcGlsZXIpOiB2b2lkIHtcbiAgICBjb21waWxlci5ob29rcy5zaG91bGRFbWl0LnRhcCgnYW5ndWxhci1uby1lbWl0JywgKCkgPT4gZmFsc2UpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0TWVzc2FnZXMoXG4gIG9wdGlvbnM6IE5vcm1hbGl6ZWRFeHRyYWN0STE4bk9wdGlvbnMsXG4gIGJ1aWxkZXJOYW1lOiBzdHJpbmcsXG4gIGNvbnRleHQ6IEJ1aWxkZXJDb250ZXh0LFxuICB0cmFuc2Zvcm1zOiB7XG4gICAgd2VicGFja0NvbmZpZ3VyYXRpb24/OiBFeGVjdXRpb25UcmFuc2Zvcm1lcjx3ZWJwYWNrLkNvbmZpZ3VyYXRpb24+O1xuICB9ID0ge30sXG4pOiBQcm9taXNlPHtcbiAgYnVpbGRlclJlc3VsdDogQnVpbGRSZXN1bHQ7XG4gIGJhc2VQYXRoOiBzdHJpbmc7XG4gIG1lc3NhZ2VzOiBMb2NhbGl6ZU1lc3NhZ2VbXTtcbiAgdXNlTGVnYWN5SWRzOiBib29sZWFuO1xufT4ge1xuICBjb25zdCBtZXNzYWdlczogTG9jYWxpemVNZXNzYWdlW10gPSBbXTtcbiAgbGV0IHVzZUxlZ2FjeUlkcyA9IHRydWU7XG5cbiAgY29uc3QgYnJvd3Nlck9wdGlvbnMgPSBhd2FpdCBjb250ZXh0LnZhbGlkYXRlT3B0aW9ucyhcbiAgICBhd2FpdCBjb250ZXh0LmdldFRhcmdldE9wdGlvbnMob3B0aW9ucy5icm93c2VyVGFyZ2V0KSxcbiAgICBidWlsZGVyTmFtZSxcbiAgKTtcblxuICBjb25zdCBidWlsZGVyT3B0aW9ucyA9IHtcbiAgICAuLi5icm93c2VyT3B0aW9ucyxcbiAgICBvcHRpbWl6YXRpb246IGZhbHNlLFxuICAgIHNvdXJjZU1hcDoge1xuICAgICAgc2NyaXB0czogdHJ1ZSxcbiAgICAgIHN0eWxlczogZmFsc2UsXG4gICAgICB2ZW5kb3I6IHRydWUsXG4gICAgfSxcbiAgICBidWlsZE9wdGltaXplcjogZmFsc2UsXG4gICAgYW90OiB0cnVlLFxuICAgIHByb2dyZXNzOiBvcHRpb25zLnByb2dyZXNzLFxuICAgIGJ1ZGdldHM6IFtdLFxuICAgIGFzc2V0czogW10sXG4gICAgc2NyaXB0czogW10sXG4gICAgc3R5bGVzOiBbXSxcbiAgICBkZWxldGVPdXRwdXRQYXRoOiBmYWxzZSxcbiAgICBleHRyYWN0TGljZW5zZXM6IGZhbHNlLFxuICAgIHN1YnJlc291cmNlSW50ZWdyaXR5OiBmYWxzZSxcbiAgICBvdXRwdXRIYXNoaW5nOiBPdXRwdXRIYXNoaW5nLk5vbmUsXG4gICAgbmFtZWRDaHVua3M6IHRydWUsXG4gICAgYWxsb3dlZENvbW1vbkpzRGVwZW5kZW5jaWVzOiB1bmRlZmluZWQsXG4gIH0gYXMgdW5rbm93biBhcyBTY2hlbWE7XG4gIGNvbnN0IHsgY29uZmlnIH0gPSBhd2FpdCBnZW5lcmF0ZUJyb3dzZXJXZWJwYWNrQ29uZmlnRnJvbUNvbnRleHQoXG4gICAgYnVpbGRlck9wdGlvbnMsXG4gICAgY29udGV4dCxcbiAgICAod2NvKSA9PiB7XG4gICAgICAvLyBEZWZhdWx0IHZhbHVlIGZvciBsZWdhY3kgbWVzc2FnZSBpZHMgaXMgY3VycmVudGx5IHRydWVcbiAgICAgIHVzZUxlZ2FjeUlkcyA9IHdjby50c0NvbmZpZy5vcHRpb25zLmVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQgPz8gdHJ1ZTtcblxuICAgICAgY29uc3QgcGFydGlhbHM6IChQcm9taXNlPENvbmZpZ3VyYXRpb24+IHwgQ29uZmlndXJhdGlvbilbXSA9IFtcbiAgICAgICAgeyBwbHVnaW5zOiBbbmV3IE5vRW1pdFBsdWdpbigpXSB9LFxuICAgICAgICBnZXRDb21tb25Db25maWcod2NvKSxcbiAgICAgIF07XG5cbiAgICAgIC8vIEFkZCBJdnkgYXBwbGljYXRpb24gZmlsZSBleHRyYWN0b3Igc3VwcG9ydFxuICAgICAgcGFydGlhbHMudW5zaGlmdCh7XG4gICAgICAgIG1vZHVsZToge1xuICAgICAgICAgIHJ1bGVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRlc3Q6IC9cXC5bY21dP1t0al1zeD8kLyxcbiAgICAgICAgICAgICAgbG9hZGVyOiByZXF1aXJlLnJlc29sdmUoJy4vaXZ5LWV4dHJhY3QtbG9hZGVyJyksXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlcjogKGZpbGVNZXNzYWdlczogTG9jYWxpemVNZXNzYWdlW10pID0+IG1lc3NhZ2VzLnB1c2goLi4uZmlsZU1lc3NhZ2VzKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBSZXBsYWNlIGFsbCBzdHlsZXNoZWV0cyB3aXRoIGVtcHR5IGNvbnRlbnRcbiAgICAgIHBhcnRpYWxzLnB1c2goe1xuICAgICAgICBtb2R1bGU6IHtcbiAgICAgICAgICBydWxlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXN0OiAvXFwuKGNzc3xzY3NzfHNhc3N8bGVzcykkLyxcbiAgICAgICAgICAgICAgbG9hZGVyOiByZXF1aXJlLnJlc29sdmUoJy4vZW1wdHktbG9hZGVyJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHBhcnRpYWxzO1xuICAgIH0sXG4gICAgLy8gRHVyaW5nIGV4dHJhY3Rpb24gd2UgZG9uJ3QgbmVlZCBzcGVjaWZpYyBicm93c2VyIHN1cHBvcnQuXG4gICAgeyBzdXBwb3J0ZWRCcm93c2VyczogdW5kZWZpbmVkIH0sXG4gICk7XG5cbiAgY29uc3QgYnVpbGRlclJlc3VsdCA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXG4gICAgcnVuV2VicGFjaygoYXdhaXQgdHJhbnNmb3Jtcz8ud2VicGFja0NvbmZpZ3VyYXRpb24/Lihjb25maWcpKSB8fCBjb25maWcsIGNvbnRleHQsIHtcbiAgICAgIGxvZ2dpbmc6IGNyZWF0ZVdlYnBhY2tMb2dnaW5nQ2FsbGJhY2soYnVpbGRlck9wdGlvbnMsIGNvbnRleHQubG9nZ2VyKSxcbiAgICAgIHdlYnBhY2tGYWN0b3J5OiB3ZWJwYWNrLFxuICAgIH0pLFxuICApO1xuXG4gIHJldHVybiB7XG4gICAgYnVpbGRlclJlc3VsdCxcbiAgICBiYXNlUGF0aDogY29uZmlnLmNvbnRleHQgfHwgb3B0aW9ucy5wcm9qZWN0Um9vdCxcbiAgICBtZXNzYWdlcyxcbiAgICB1c2VMZWdhY3lJZHMsXG4gIH07XG59XG4iXX0=
|
|
@@ -11,15 +11,12 @@ export interface Schema {
|
|
|
11
11
|
*/
|
|
12
12
|
include?: string[];
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* A list of polyfills to include in the build. Can be a full path for a file, relative to
|
|
15
|
+
* the current workspace or module specifier. Example: 'zone.js'.
|
|
15
16
|
*/
|
|
16
|
-
polyfills?:
|
|
17
|
+
polyfills?: string[];
|
|
17
18
|
/**
|
|
18
19
|
* The name of the TypeScript configuration file.
|
|
19
20
|
*/
|
|
20
21
|
tsConfig: string;
|
|
21
22
|
}
|
|
22
|
-
/**
|
|
23
|
-
* Polyfills to be included in the build.
|
|
24
|
-
*/
|
|
25
|
-
export type Polyfills = string[] | string;
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
// THIS FILE IS AUTOMATICALLY GENERATED. TO UPDATE THIS FILE YOU NEED TO CHANGE THE
|
|
3
3
|
// CORRESPONDING JSON SCHEMA FILE, THEN RUN devkit-admin build (or bazel build ...).
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvYnVpbGRlcnMvamVzdC9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1GQUFtRjtBQUNuRixvRkFBb0YiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8vIFRISVMgRklMRSBJUyBBVVRPTUFUSUNBTExZIEdFTkVSQVRFRC4gVE8gVVBEQVRFIFRISVMgRklMRSBZT1UgTkVFRCBUTyBDSEFOR0UgVEhFXG4vLyBDT1JSRVNQT05ESU5HIEpTT04gU0NIRU1BIEZJTEUsIFRIRU4gUlVOIGRldmtpdC1hZG1pbiBidWlsZCAob3IgYmF6ZWwgYnVpbGQgLi4uKS5cblxuLyoqXG4gKiBKZXN0IHRhcmdldCBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hIHtcbiAgICAvKipcbiAgICAgKiBHbG9icyBvZiBmaWxlcyB0byBleGNsdWRlLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LlxuICAgICAqL1xuICAgIGV4Y2x1ZGU/
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvYnVpbGRlcnMvamVzdC9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1GQUFtRjtBQUNuRixvRkFBb0YiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8vIFRISVMgRklMRSBJUyBBVVRPTUFUSUNBTExZIEdFTkVSQVRFRC4gVE8gVVBEQVRFIFRISVMgRklMRSBZT1UgTkVFRCBUTyBDSEFOR0UgVEhFXG4vLyBDT1JSRVNQT05ESU5HIEpTT04gU0NIRU1BIEZJTEUsIFRIRU4gUlVOIGRldmtpdC1hZG1pbiBidWlsZCAob3IgYmF6ZWwgYnVpbGQgLi4uKS5cblxuLyoqXG4gKiBKZXN0IHRhcmdldCBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hIHtcbiAgICAvKipcbiAgICAgKiBHbG9icyBvZiBmaWxlcyB0byBleGNsdWRlLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LlxuICAgICAqL1xuICAgIGV4Y2x1ZGU/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBHbG9icyBvZiBmaWxlcyB0byBpbmNsdWRlLCByZWxhdGl2ZSB0byBwcm9qZWN0IHJvb3QuXG4gICAgICovXG4gICAgaW5jbHVkZT86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBwb2x5ZmlsbHMgdG8gaW5jbHVkZSBpbiB0aGUgYnVpbGQuIENhbiBiZSBhIGZ1bGwgcGF0aCBmb3IgYSBmaWxlLCByZWxhdGl2ZSB0b1xuICAgICAqIHRoZSBjdXJyZW50IHdvcmtzcGFjZSBvciBtb2R1bGUgc3BlY2lmaWVyLiBFeGFtcGxlOiAnem9uZS5qcycuXG4gICAgICovXG4gICAgcG9seWZpbGxzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAqL1xuICAgIHRzQ29uZmlnOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -25,22 +25,13 @@
|
|
|
25
25
|
"description": "The name of the TypeScript configuration file."
|
|
26
26
|
},
|
|
27
27
|
"polyfills": {
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"uniqueItems": true
|
|
36
|
-
},
|
|
37
|
-
"default": []
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
"type": "string",
|
|
41
|
-
"description": "The full path for the polyfills file, relative to the current workspace or a module specifier. Example: 'zone.js'."
|
|
42
|
-
}
|
|
43
|
-
]
|
|
28
|
+
"type": "array",
|
|
29
|
+
"description": "A list of polyfills to include in the build. Can be a full path for a file, relative to the current workspace or module specifier. Example: 'zone.js'.",
|
|
30
|
+
"items": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"uniqueItems": true
|
|
33
|
+
},
|
|
34
|
+
"default": []
|
|
44
35
|
}
|
|
45
36
|
},
|
|
46
37
|
"additionalProperties": false,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { BuilderContext, BuilderOutput } from '@angular-devkit/architect';
|
|
9
|
+
import { json } from '@angular-devkit/core';
|
|
10
|
+
import { Schema } from './schema';
|
|
11
|
+
type PrerenderBuilderOptions = Schema & json.JsonObject;
|
|
12
|
+
type PrerenderBuilderOutput = BuilderOutput;
|
|
13
|
+
/**
|
|
14
|
+
* Builds the browser and server, then renders each route in options.routes
|
|
15
|
+
* and writes them to prerender/<route>/index.html for each output path in
|
|
16
|
+
* the browser result.
|
|
17
|
+
*/
|
|
18
|
+
export declare function execute(options: PrerenderBuilderOptions, context: BuilderContext): Promise<PrerenderBuilderOutput>;
|
|
19
|
+
declare const _default: import("../../../../architect/src/internal").Builder<Schema & json.JsonObject>;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.io/license
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
+
if (mod && mod.__esModule) return mod;
|
|
27
|
+
var result = {};
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
+
__setModuleDefault(result, mod);
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
33
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
34
|
+
};
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.execute = void 0;
|
|
37
|
+
const architect_1 = require("@angular-devkit/architect");
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const ora_1 = __importDefault(require("ora"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const piscina_1 = __importDefault(require("piscina"));
|
|
42
|
+
const utils_1 = require("../../utils");
|
|
43
|
+
const environment_options_1 = require("../../utils/environment-options");
|
|
44
|
+
const error_1 = require("../../utils/error");
|
|
45
|
+
const service_worker_1 = require("../../utils/service-worker");
|
|
46
|
+
const utils_2 = require("./utils");
|
|
47
|
+
/**
|
|
48
|
+
* Schedules the server and browser builds and returns their results if both builds are successful.
|
|
49
|
+
*/
|
|
50
|
+
async function _scheduleBuilds(options, context) {
|
|
51
|
+
const browserTarget = (0, architect_1.targetFromTargetString)(options.browserTarget);
|
|
52
|
+
const serverTarget = (0, architect_1.targetFromTargetString)(options.serverTarget);
|
|
53
|
+
const browserTargetRun = await context.scheduleTarget(browserTarget, {
|
|
54
|
+
watch: false,
|
|
55
|
+
serviceWorker: false,
|
|
56
|
+
// todo: handle service worker augmentation
|
|
57
|
+
});
|
|
58
|
+
const serverTargetRun = await context.scheduleTarget(serverTarget, {
|
|
59
|
+
watch: false,
|
|
60
|
+
});
|
|
61
|
+
try {
|
|
62
|
+
const [browserResult, serverResult] = await Promise.all([
|
|
63
|
+
browserTargetRun.result,
|
|
64
|
+
serverTargetRun.result,
|
|
65
|
+
]);
|
|
66
|
+
const success = browserResult.success && serverResult.success && browserResult.baseOutputPath !== undefined;
|
|
67
|
+
const error = browserResult.error || serverResult.error;
|
|
68
|
+
return { success, error, browserResult, serverResult };
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
(0, error_1.assertIsError)(e);
|
|
72
|
+
return { success: false, error: e.message };
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await Promise.all([browserTargetRun.stop(), serverTargetRun.stop()]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Renders each route and writes them to
|
|
80
|
+
* <route>/index.html for each output path in the browser result.
|
|
81
|
+
*/
|
|
82
|
+
async function _renderUniversal(routes, context, browserResult, serverResult, browserOptions) {
|
|
83
|
+
const projectName = context.target && context.target.project;
|
|
84
|
+
if (!projectName) {
|
|
85
|
+
throw new Error('The builder requires a target.');
|
|
86
|
+
}
|
|
87
|
+
const projectMetadata = await context.getProjectMetadata(projectName);
|
|
88
|
+
const projectRoot = path.join(context.workspaceRoot, projectMetadata.root ?? '');
|
|
89
|
+
// Users can specify a different base html file e.g. "src/home.html"
|
|
90
|
+
const indexFile = (0, utils_2.getIndexOutputFile)(browserOptions);
|
|
91
|
+
const { styles: normalizedStylesOptimization } = (0, utils_1.normalizeOptimization)(browserOptions.optimization);
|
|
92
|
+
const zonePackage = require.resolve('zone.js', { paths: [context.workspaceRoot] });
|
|
93
|
+
const { baseOutputPath = '' } = serverResult;
|
|
94
|
+
const worker = new piscina_1.default({
|
|
95
|
+
filename: path.join(__dirname, 'render-worker.js'),
|
|
96
|
+
maxThreads: environment_options_1.maxWorkers,
|
|
97
|
+
workerData: { zonePackage },
|
|
98
|
+
});
|
|
99
|
+
try {
|
|
100
|
+
// We need to render the routes for each locale from the browser output.
|
|
101
|
+
for (const { path: outputPath } of browserResult.outputs) {
|
|
102
|
+
const localeDirectory = path.relative(browserResult.baseOutputPath, outputPath);
|
|
103
|
+
const serverBundlePath = path.join(baseOutputPath, localeDirectory, 'main.js');
|
|
104
|
+
if (!fs.existsSync(serverBundlePath)) {
|
|
105
|
+
throw new Error(`Could not find the main bundle: ${serverBundlePath}`);
|
|
106
|
+
}
|
|
107
|
+
const spinner = (0, ora_1.default)(`Prerendering ${routes.length} route(s) to ${outputPath}...`).start();
|
|
108
|
+
try {
|
|
109
|
+
const results = (await Promise.all(routes.map((route) => {
|
|
110
|
+
const options = {
|
|
111
|
+
indexFile,
|
|
112
|
+
deployUrl: browserOptions.deployUrl || '',
|
|
113
|
+
inlineCriticalCss: !!normalizedStylesOptimization.inlineCritical,
|
|
114
|
+
minifyCss: !!normalizedStylesOptimization.minify,
|
|
115
|
+
outputPath,
|
|
116
|
+
route,
|
|
117
|
+
serverBundlePath,
|
|
118
|
+
};
|
|
119
|
+
return worker.run(options);
|
|
120
|
+
})));
|
|
121
|
+
let numErrors = 0;
|
|
122
|
+
for (const { errors, warnings } of results) {
|
|
123
|
+
spinner.stop();
|
|
124
|
+
errors?.forEach((e) => context.logger.error(e));
|
|
125
|
+
warnings?.forEach((e) => context.logger.warn(e));
|
|
126
|
+
spinner.start();
|
|
127
|
+
numErrors += errors?.length ?? 0;
|
|
128
|
+
}
|
|
129
|
+
if (numErrors > 0) {
|
|
130
|
+
throw Error(`Rendering failed with ${numErrors} worker errors.`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
spinner.fail(`Prerendering routes to ${outputPath} failed.`);
|
|
135
|
+
(0, error_1.assertIsError)(error);
|
|
136
|
+
return { success: false, error: error.message };
|
|
137
|
+
}
|
|
138
|
+
spinner.succeed(`Prerendering routes to ${outputPath} complete.`);
|
|
139
|
+
if (browserOptions.serviceWorker) {
|
|
140
|
+
spinner.start('Generating service worker...');
|
|
141
|
+
try {
|
|
142
|
+
await (0, service_worker_1.augmentAppWithServiceWorker)(projectRoot, context.workspaceRoot, outputPath, browserOptions.baseHref || '/', browserOptions.ngswConfigPath);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
spinner.fail('Service worker generation failed.');
|
|
146
|
+
(0, error_1.assertIsError)(error);
|
|
147
|
+
return { success: false, error: error.message };
|
|
148
|
+
}
|
|
149
|
+
spinner.succeed('Service worker generation complete.');
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
void worker.destroy();
|
|
155
|
+
}
|
|
156
|
+
return browserResult;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Builds the browser and server, then renders each route in options.routes
|
|
160
|
+
* and writes them to prerender/<route>/index.html for each output path in
|
|
161
|
+
* the browser result.
|
|
162
|
+
*/
|
|
163
|
+
async function execute(options, context) {
|
|
164
|
+
const browserTarget = (0, architect_1.targetFromTargetString)(options.browserTarget);
|
|
165
|
+
const browserOptions = (await context.getTargetOptions(browserTarget));
|
|
166
|
+
const tsConfigPath = typeof browserOptions.tsConfig === 'string' ? browserOptions.tsConfig : undefined;
|
|
167
|
+
const routes = await (0, utils_2.getRoutes)(options, tsConfigPath, context);
|
|
168
|
+
if (!routes.length) {
|
|
169
|
+
throw new Error(`Could not find any routes to prerender.`);
|
|
170
|
+
}
|
|
171
|
+
const result = await _scheduleBuilds(options, context);
|
|
172
|
+
const { success, error, browserResult, serverResult } = result;
|
|
173
|
+
if (!success || !browserResult || !serverResult) {
|
|
174
|
+
return { success, error };
|
|
175
|
+
}
|
|
176
|
+
return _renderUniversal(routes, context, browserResult, serverResult, browserOptions);
|
|
177
|
+
}
|
|
178
|
+
exports.execute = execute;
|
|
179
|
+
exports.default = (0, architect_1.createBuilder)(execute);
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy9idWlsZGVycy9wcmVyZW5kZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCx5REFLbUM7QUFFbkMsdUNBQXlCO0FBQ3pCLDhDQUFzQjtBQUN0QiwyQ0FBNkI7QUFDN0Isc0RBQThCO0FBQzlCLHVDQUFvRDtBQUNwRCx5RUFBNkQ7QUFDN0QsNkNBQWtEO0FBQ2xELCtEQUF5RTtBQU16RSxtQ0FBd0Q7QUFLeEQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsZUFBZSxDQUM1QixPQUFnQyxFQUNoQyxPQUF1QjtJQU92QixNQUFNLGFBQWEsR0FBRyxJQUFBLGtDQUFzQixFQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRSxNQUFNLFlBQVksR0FBRyxJQUFBLGtDQUFzQixFQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVsRSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUU7UUFDbkUsS0FBSyxFQUFFLEtBQUs7UUFDWixhQUFhLEVBQUUsS0FBSztRQUNwQiwyQ0FBMkM7S0FDNUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxlQUFlLEdBQUcsTUFBTSxPQUFPLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRTtRQUNqRSxLQUFLLEVBQUUsS0FBSztLQUNiLENBQUMsQ0FBQztJQUVILElBQUk7UUFDRixNQUFNLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUN0RCxnQkFBZ0IsQ0FBQyxNQUF5QztZQUMxRCxlQUFlLENBQUMsTUFBd0M7U0FDekQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQ1gsYUFBYSxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDO1FBQzlGLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLElBQUssWUFBWSxDQUFDLEtBQWdCLENBQUM7UUFFcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxDQUFDO0tBQ3hEO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixJQUFBLHFCQUFhLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUM3QztZQUFTO1FBQ1IsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN0RTtBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxLQUFLLFVBQVUsZ0JBQWdCLENBQzdCLE1BQWdCLEVBQ2hCLE9BQXVCLEVBQ3ZCLGFBQW1DLEVBQ25DLFlBQWlDLEVBQ2pDLGNBQXFDO0lBRXJDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDN0QsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7S0FDbkQ7SUFFRCxNQUFNLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUMzQixPQUFPLENBQUMsYUFBYSxFQUNwQixlQUFlLENBQUMsSUFBMkIsSUFBSSxFQUFFLENBQ25ELENBQUM7SUFFRixvRUFBb0U7SUFDcEUsTUFBTSxTQUFTLEdBQUcsSUFBQSwwQkFBa0IsRUFBQyxjQUFjLENBQUMsQ0FBQztJQUNyRCxNQUFNLEVBQUUsTUFBTSxFQUFFLDRCQUE0QixFQUFFLEdBQUcsSUFBQSw2QkFBcUIsRUFDcEUsY0FBYyxDQUFDLFlBQVksQ0FDNUIsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVuRixNQUFNLEVBQUUsY0FBYyxHQUFHLEVBQUUsRUFBRSxHQUFHLFlBQVksQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFPLENBQUM7UUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDO1FBQ2xELFVBQVUsRUFBRSxnQ0FBVTtRQUN0QixVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUU7S0FDNUIsQ0FBQyxDQUFDO0lBRUgsSUFBSTtRQUNGLHdFQUF3RTtRQUN4RSxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRTtZQUN4RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDaEYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBQSxhQUFHLEVBQUMsZ0JBQWdCLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixVQUFVLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRTFGLElBQUk7Z0JBQ0YsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDbkIsTUFBTSxPQUFPLEdBQWtCO3dCQUM3QixTQUFTO3dCQUNULFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUyxJQUFJLEVBQUU7d0JBQ3pDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxjQUFjO3dCQUNoRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLE1BQU07d0JBQ2hELFVBQVU7d0JBQ1YsS0FBSzt3QkFDTCxnQkFBZ0I7cUJBQ2pCLENBQUM7b0JBRUYsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QixDQUFDLENBQUMsQ0FDSCxDQUFtQixDQUFDO2dCQUNyQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xCLEtBQUssTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxPQUFPLEVBQUU7b0JBQzFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDZixNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoRCxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2hCLFNBQVMsSUFBSSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztpQkFDbEM7Z0JBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixNQUFNLEtBQUssQ0FBQyx5QkFBeUIsU0FBUyxpQkFBaUIsQ0FBQyxDQUFDO2lCQUNsRTthQUNGO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQywwQkFBMEIsVUFBVSxVQUFVLENBQUMsQ0FBQztnQkFDN0QsSUFBQSxxQkFBYSxFQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVyQixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2pEO1lBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsVUFBVSxZQUFZLENBQUMsQ0FBQztZQUVsRSxJQUFJLGNBQWMsQ0FBQyxhQUFhLEVBQUU7Z0JBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztnQkFDOUMsSUFBSTtvQkFDRixNQUFNLElBQUEsNENBQTJCLEVBQy9CLFdBQVcsRUFDWCxPQUFPLENBQUMsYUFBYSxFQUNyQixVQUFVLEVBQ1YsY0FBYyxDQUFDLFFBQVEsSUFBSSxHQUFHLEVBQzlCLGNBQWMsQ0FBQyxjQUFjLENBQzlCLENBQUM7aUJBQ0g7Z0JBQUMsT0FBTyxLQUFLLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO29CQUNsRCxJQUFBLHFCQUFhLEVBQUMsS0FBSyxDQUFDLENBQUM7b0JBRXJCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ2pEO2dCQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMscUNBQXFDLENBQUMsQ0FBQzthQUN4RDtTQUNGO0tBQ0Y7WUFBUztRQUNSLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ3ZCO0lBRUQsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsT0FBTyxDQUMzQixPQUFnQyxFQUNoQyxPQUF1QjtJQUV2QixNQUFNLGFBQWEsR0FBRyxJQUFBLGtDQUFzQixFQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRSxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQU0sT0FBTyxDQUFDLGdCQUFnQixDQUNwRCxhQUFhLENBQ2QsQ0FBcUMsQ0FBQztJQUN2QyxNQUFNLFlBQVksR0FDaEIsT0FBTyxjQUFjLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRXBGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSxpQkFBUyxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0tBQzVEO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDL0QsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFlBQVksRUFBRTtRQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBbUIsQ0FBQztLQUM1QztJQUVELE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUF2QkQsMEJBdUJDO0FBRUQsa0JBQWUsSUFBQSx5QkFBYSxFQUFDLE9BQU8sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIEJ1aWxkZXJDb250ZXh0LFxuICBCdWlsZGVyT3V0cHV0LFxuICBjcmVhdGVCdWlsZGVyLFxuICB0YXJnZXRGcm9tVGFyZ2V0U3RyaW5nLFxufSBmcm9tICdAYW5ndWxhci1kZXZraXQvYXJjaGl0ZWN0JztcbmltcG9ydCB7IGpzb24gfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IFBpc2NpbmEgZnJvbSAncGlzY2luYSc7XG5pbXBvcnQgeyBub3JtYWxpemVPcHRpbWl6YXRpb24gfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBtYXhXb3JrZXJzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZW52aXJvbm1lbnQtb3B0aW9ucyc7XG5pbXBvcnQgeyBhc3NlcnRJc0Vycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvZXJyb3InO1xuaW1wb3J0IHsgYXVnbWVudEFwcFdpdGhTZXJ2aWNlV29ya2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2VydmljZS13b3JrZXInO1xuaW1wb3J0IHsgQnJvd3NlckJ1aWxkZXJPdXRwdXQgfSBmcm9tICcuLi9icm93c2VyJztcbmltcG9ydCB7IFNjaGVtYSBhcyBCcm93c2VyQnVpbGRlck9wdGlvbnMgfSBmcm9tICcuLi9icm93c2VyL3NjaGVtYSc7XG5pbXBvcnQgeyBTZXJ2ZXJCdWlsZGVyT3V0cHV0IH0gZnJvbSAnLi4vc2VydmVyJztcbmltcG9ydCB0eXBlIHsgUmVuZGVyT3B0aW9ucywgUmVuZGVyUmVzdWx0IH0gZnJvbSAnLi9yZW5kZXItd29ya2VyJztcbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB7IGdldEluZGV4T3V0cHV0RmlsZSwgZ2V0Um91dGVzIH0gZnJvbSAnLi91dGlscyc7XG5cbnR5cGUgUHJlcmVuZGVyQnVpbGRlck9wdGlvbnMgPSBTY2hlbWEgJiBqc29uLkpzb25PYmplY3Q7XG50eXBlIFByZXJlbmRlckJ1aWxkZXJPdXRwdXQgPSBCdWlsZGVyT3V0cHV0O1xuXG4vKipcbiAqIFNjaGVkdWxlcyB0aGUgc2VydmVyIGFuZCBicm93c2VyIGJ1aWxkcyBhbmQgcmV0dXJucyB0aGVpciByZXN1bHRzIGlmIGJvdGggYnVpbGRzIGFyZSBzdWNjZXNzZnVsLlxuICovXG5hc3luYyBmdW5jdGlvbiBfc2NoZWR1bGVCdWlsZHMoXG4gIG9wdGlvbnM6IFByZXJlbmRlckJ1aWxkZXJPcHRpb25zLFxuICBjb250ZXh0OiBCdWlsZGVyQ29udGV4dCxcbik6IFByb21pc2U8XG4gIEJ1aWxkZXJPdXRwdXQgJiB7XG4gICAgc2VydmVyUmVzdWx0PzogU2VydmVyQnVpbGRlck91dHB1dDtcbiAgICBicm93c2VyUmVzdWx0PzogQnJvd3NlckJ1aWxkZXJPdXRwdXQ7XG4gIH1cbj4ge1xuICBjb25zdCBicm93c2VyVGFyZ2V0ID0gdGFyZ2V0RnJvbVRhcmdldFN0cmluZyhvcHRpb25zLmJyb3dzZXJUYXJnZXQpO1xuICBjb25zdCBzZXJ2ZXJUYXJnZXQgPSB0YXJnZXRGcm9tVGFyZ2V0U3RyaW5nKG9wdGlvbnMuc2VydmVyVGFyZ2V0KTtcblxuICBjb25zdCBicm93c2VyVGFyZ2V0UnVuID0gYXdhaXQgY29udGV4dC5zY2hlZHVsZVRhcmdldChicm93c2VyVGFyZ2V0LCB7XG4gICAgd2F0Y2g6IGZhbHNlLFxuICAgIHNlcnZpY2VXb3JrZXI6IGZhbHNlLFxuICAgIC8vIHRvZG86IGhhbmRsZSBzZXJ2aWNlIHdvcmtlciBhdWdtZW50YXRpb25cbiAgfSk7XG4gIGNvbnN0IHNlcnZlclRhcmdldFJ1biA9IGF3YWl0IGNvbnRleHQuc2NoZWR1bGVUYXJnZXQoc2VydmVyVGFyZ2V0LCB7XG4gICAgd2F0Y2g6IGZhbHNlLFxuICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IFticm93c2VyUmVzdWx0LCBzZXJ2ZXJSZXN1bHRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgYnJvd3NlclRhcmdldFJ1bi5yZXN1bHQgYXMgdW5rbm93biBhcyBCcm93c2VyQnVpbGRlck91dHB1dCxcbiAgICAgIHNlcnZlclRhcmdldFJ1bi5yZXN1bHQgYXMgdW5rbm93biBhcyBTZXJ2ZXJCdWlsZGVyT3V0cHV0LFxuICAgIF0pO1xuXG4gICAgY29uc3Qgc3VjY2VzcyA9XG4gICAgICBicm93c2VyUmVzdWx0LnN1Y2Nlc3MgJiYgc2VydmVyUmVzdWx0LnN1Y2Nlc3MgJiYgYnJvd3NlclJlc3VsdC5iYXNlT3V0cHV0UGF0aCAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVycm9yID0gYnJvd3NlclJlc3VsdC5lcnJvciB8fCAoc2VydmVyUmVzdWx0LmVycm9yIGFzIHN0cmluZyk7XG5cbiAgICByZXR1cm4geyBzdWNjZXNzLCBlcnJvciwgYnJvd3NlclJlc3VsdCwgc2VydmVyUmVzdWx0IH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhc3NlcnRJc0Vycm9yKGUpO1xuXG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBlLm1lc3NhZ2UgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbYnJvd3NlclRhcmdldFJ1bi5zdG9wKCksIHNlcnZlclRhcmdldFJ1bi5zdG9wKCldKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlcnMgZWFjaCByb3V0ZSBhbmQgd3JpdGVzIHRoZW0gdG9cbiAqIDxyb3V0ZT4vaW5kZXguaHRtbCBmb3IgZWFjaCBvdXRwdXQgcGF0aCBpbiB0aGUgYnJvd3NlciByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIF9yZW5kZXJVbml2ZXJzYWwoXG4gIHJvdXRlczogc3RyaW5nW10sXG4gIGNvbnRleHQ6IEJ1aWxkZXJDb250ZXh0LFxuICBicm93c2VyUmVzdWx0OiBCcm93c2VyQnVpbGRlck91dHB1dCxcbiAgc2VydmVyUmVzdWx0OiBTZXJ2ZXJCdWlsZGVyT3V0cHV0LFxuICBicm93c2VyT3B0aW9uczogQnJvd3NlckJ1aWxkZXJPcHRpb25zLFxuKTogUHJvbWlzZTxQcmVyZW5kZXJCdWlsZGVyT3V0cHV0PiB7XG4gIGNvbnN0IHByb2plY3ROYW1lID0gY29udGV4dC50YXJnZXQgJiYgY29udGV4dC50YXJnZXQucHJvamVjdDtcbiAgaWYgKCFwcm9qZWN0TmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGJ1aWxkZXIgcmVxdWlyZXMgYSB0YXJnZXQuJyk7XG4gIH1cblxuICBjb25zdCBwcm9qZWN0TWV0YWRhdGEgPSBhd2FpdCBjb250ZXh0LmdldFByb2plY3RNZXRhZGF0YShwcm9qZWN0TmFtZSk7XG4gIGNvbnN0IHByb2plY3RSb290ID0gcGF0aC5qb2luKFxuICAgIGNvbnRleHQud29ya3NwYWNlUm9vdCxcbiAgICAocHJvamVjdE1ldGFkYXRhLnJvb3QgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyAnJyxcbiAgKTtcblxuICAvLyBVc2VycyBjYW4gc3BlY2lmeSBhIGRpZmZlcmVudCBiYXNlIGh0bWwgZmlsZSBlLmcuIFwic3JjL2hvbWUuaHRtbFwiXG4gIGNvbnN0IGluZGV4RmlsZSA9IGdldEluZGV4T3V0cHV0RmlsZShicm93c2VyT3B0aW9ucyk7XG4gIGNvbnN0IHsgc3R5bGVzOiBub3JtYWxpemVkU3R5bGVzT3B0aW1pemF0aW9uIH0gPSBub3JtYWxpemVPcHRpbWl6YXRpb24oXG4gICAgYnJvd3Nlck9wdGlvbnMub3B0aW1pemF0aW9uLFxuICApO1xuXG4gIGNvbnN0IHpvbmVQYWNrYWdlID0gcmVxdWlyZS5yZXNvbHZlKCd6b25lLmpzJywgeyBwYXRoczogW2NvbnRleHQud29ya3NwYWNlUm9vdF0gfSk7XG5cbiAgY29uc3QgeyBiYXNlT3V0cHV0UGF0aCA9ICcnIH0gPSBzZXJ2ZXJSZXN1bHQ7XG4gIGNvbnN0IHdvcmtlciA9IG5ldyBQaXNjaW5hKHtcbiAgICBmaWxlbmFtZTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ3JlbmRlci13b3JrZXIuanMnKSxcbiAgICBtYXhUaHJlYWRzOiBtYXhXb3JrZXJzLFxuICAgIHdvcmtlckRhdGE6IHsgem9uZVBhY2thZ2UgfSxcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICAvLyBXZSBuZWVkIHRvIHJlbmRlciB0aGUgcm91dGVzIGZvciBlYWNoIGxvY2FsZSBmcm9tIHRoZSBicm93c2VyIG91dHB1dC5cbiAgICBmb3IgKGNvbnN0IHsgcGF0aDogb3V0cHV0UGF0aCB9IG9mIGJyb3dzZXJSZXN1bHQub3V0cHV0cykge1xuICAgICAgY29uc3QgbG9jYWxlRGlyZWN0b3J5ID0gcGF0aC5yZWxhdGl2ZShicm93c2VyUmVzdWx0LmJhc2VPdXRwdXRQYXRoLCBvdXRwdXRQYXRoKTtcbiAgICAgIGNvbnN0IHNlcnZlckJ1bmRsZVBhdGggPSBwYXRoLmpvaW4oYmFzZU91dHB1dFBhdGgsIGxvY2FsZURpcmVjdG9yeSwgJ21haW4uanMnKTtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhzZXJ2ZXJCdW5kbGVQYXRoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSBtYWluIGJ1bmRsZTogJHtzZXJ2ZXJCdW5kbGVQYXRofWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKGBQcmVyZW5kZXJpbmcgJHtyb3V0ZXMubGVuZ3RofSByb3V0ZShzKSB0byAke291dHB1dFBhdGh9Li4uYCkuc3RhcnQoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICByb3V0ZXMubWFwKChyb3V0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uczogUmVuZGVyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgaW5kZXhGaWxlLFxuICAgICAgICAgICAgICBkZXBsb3lVcmw6IGJyb3dzZXJPcHRpb25zLmRlcGxveVVybCB8fCAnJyxcbiAgICAgICAgICAgICAgaW5saW5lQ3JpdGljYWxDc3M6ICEhbm9ybWFsaXplZFN0eWxlc09wdGltaXphdGlvbi5pbmxpbmVDcml0aWNhbCxcbiAgICAgICAgICAgICAgbWluaWZ5Q3NzOiAhIW5vcm1hbGl6ZWRTdHlsZXNPcHRpbWl6YXRpb24ubWluaWZ5LFxuICAgICAgICAgICAgICBvdXRwdXRQYXRoLFxuICAgICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgICAgc2VydmVyQnVuZGxlUGF0aCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiB3b3JrZXIucnVuKG9wdGlvbnMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICApKSBhcyBSZW5kZXJSZXN1bHRbXTtcbiAgICAgICAgbGV0IG51bUVycm9ycyA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgeyBlcnJvcnMsIHdhcm5pbmdzIH0gb2YgcmVzdWx0cykge1xuICAgICAgICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgICAgICAgIGVycm9ycz8uZm9yRWFjaCgoZSkgPT4gY29udGV4dC5sb2dnZXIuZXJyb3IoZSkpO1xuICAgICAgICAgIHdhcm5pbmdzPy5mb3JFYWNoKChlKSA9PiBjb250ZXh0LmxvZ2dlci53YXJuKGUpKTtcbiAgICAgICAgICBzcGlubmVyLnN0YXJ0KCk7XG4gICAgICAgICAgbnVtRXJyb3JzICs9IGVycm9ycz8ubGVuZ3RoID8/IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bUVycm9ycyA+IDApIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihgUmVuZGVyaW5nIGZhaWxlZCB3aXRoICR7bnVtRXJyb3JzfSB3b3JrZXIgZXJyb3JzLmApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzcGlubmVyLmZhaWwoYFByZXJlbmRlcmluZyByb3V0ZXMgdG8gJHtvdXRwdXRQYXRofSBmYWlsZWQuYCk7XG4gICAgICAgIGFzc2VydElzRXJyb3IoZXJyb3IpO1xuXG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogZXJyb3IubWVzc2FnZSB9O1xuICAgICAgfVxuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBQcmVyZW5kZXJpbmcgcm91dGVzIHRvICR7b3V0cHV0UGF0aH0gY29tcGxldGUuYCk7XG5cbiAgICAgIGlmIChicm93c2VyT3B0aW9ucy5zZXJ2aWNlV29ya2VyKSB7XG4gICAgICAgIHNwaW5uZXIuc3RhcnQoJ0dlbmVyYXRpbmcgc2VydmljZSB3b3JrZXIuLi4nKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBhdWdtZW50QXBwV2l0aFNlcnZpY2VXb3JrZXIoXG4gICAgICAgICAgICBwcm9qZWN0Um9vdCxcbiAgICAgICAgICAgIGNvbnRleHQud29ya3NwYWNlUm9vdCxcbiAgICAgICAgICAgIG91dHB1dFBhdGgsXG4gICAgICAgICAgICBicm93c2VyT3B0aW9ucy5iYXNlSHJlZiB8fCAnLycsXG4gICAgICAgICAgICBicm93c2VyT3B0aW9ucy5uZ3N3Q29uZmlnUGF0aCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHNwaW5uZXIuZmFpbCgnU2VydmljZSB3b3JrZXIgZ2VuZXJhdGlvbiBmYWlsZWQuJyk7XG4gICAgICAgICAgYXNzZXJ0SXNFcnJvcihlcnJvcik7XG5cbiAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfTtcbiAgICAgICAgfVxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1NlcnZpY2Ugd29ya2VyIGdlbmVyYXRpb24gY29tcGxldGUuJyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHZvaWQgd29ya2VyLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHJldHVybiBicm93c2VyUmVzdWx0O1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYnJvd3NlciBhbmQgc2VydmVyLCB0aGVuIHJlbmRlcnMgZWFjaCByb3V0ZSBpbiBvcHRpb25zLnJvdXRlc1xuICogYW5kIHdyaXRlcyB0aGVtIHRvIHByZXJlbmRlci88cm91dGU+L2luZGV4Lmh0bWwgZm9yIGVhY2ggb3V0cHV0IHBhdGggaW5cbiAqIHRoZSBicm93c2VyIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUoXG4gIG9wdGlvbnM6IFByZXJlbmRlckJ1aWxkZXJPcHRpb25zLFxuICBjb250ZXh0OiBCdWlsZGVyQ29udGV4dCxcbik6IFByb21pc2U8UHJlcmVuZGVyQnVpbGRlck91dHB1dD4ge1xuICBjb25zdCBicm93c2VyVGFyZ2V0ID0gdGFyZ2V0RnJvbVRhcmdldFN0cmluZyhvcHRpb25zLmJyb3dzZXJUYXJnZXQpO1xuICBjb25zdCBicm93c2VyT3B0aW9ucyA9IChhd2FpdCBjb250ZXh0LmdldFRhcmdldE9wdGlvbnMoXG4gICAgYnJvd3NlclRhcmdldCxcbiAgKSkgYXMgdW5rbm93biBhcyBCcm93c2VyQnVpbGRlck9wdGlvbnM7XG4gIGNvbnN0IHRzQ29uZmlnUGF0aCA9XG4gICAgdHlwZW9mIGJyb3dzZXJPcHRpb25zLnRzQ29uZmlnID09PSAnc3RyaW5nJyA/IGJyb3dzZXJPcHRpb25zLnRzQ29uZmlnIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHJvdXRlcyA9IGF3YWl0IGdldFJvdXRlcyhvcHRpb25zLCB0c0NvbmZpZ1BhdGgsIGNvbnRleHQpO1xuICBpZiAoIXJvdXRlcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGFueSByb3V0ZXMgdG8gcHJlcmVuZGVyLmApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgX3NjaGVkdWxlQnVpbGRzKG9wdGlvbnMsIGNvbnRleHQpO1xuICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yLCBicm93c2VyUmVzdWx0LCBzZXJ2ZXJSZXN1bHQgfSA9IHJlc3VsdDtcbiAgaWYgKCFzdWNjZXNzIHx8ICFicm93c2VyUmVzdWx0IHx8ICFzZXJ2ZXJSZXN1bHQpIHtcbiAgICByZXR1cm4geyBzdWNjZXNzLCBlcnJvciB9IGFzIEJ1aWxkZXJPdXRwdXQ7XG4gIH1cblxuICByZXR1cm4gX3JlbmRlclVuaXZlcnNhbChyb3V0ZXMsIGNvbnRleHQsIGJyb3dzZXJSZXN1bHQsIHNlcnZlclJlc3VsdCwgYnJvd3Nlck9wdGlvbnMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCdWlsZGVyKGV4ZWN1dGUpO1xuIl19
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
export interface RenderOptions {
|
|
9
|
+
indexFile: string;
|
|
10
|
+
deployUrl: string;
|
|
11
|
+
inlineCriticalCss: boolean;
|
|
12
|
+
minifyCss: boolean;
|
|
13
|
+
outputPath: string;
|
|
14
|
+
serverBundlePath: string;
|
|
15
|
+
route: string;
|
|
16
|
+
}
|
|
17
|
+
export interface RenderResult {
|
|
18
|
+
errors?: string[];
|
|
19
|
+
warnings?: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Renders each route in routes and writes them to <outputPath>/<route>/index.html.
|
|
23
|
+
*/
|
|
24
|
+
declare function render({ indexFile, deployUrl, minifyCss, outputPath, serverBundlePath, route, inlineCriticalCss, }: RenderOptions): Promise<RenderResult>;
|
|
25
|
+
/**
|
|
26
|
+
* The default export will be the promise returned by the initialize function.
|
|
27
|
+
* This is awaited by piscina prior to using the Worker.
|
|
28
|
+
*/
|
|
29
|
+
declare const _default: Promise<typeof render>;
|
|
30
|
+
export default _default;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.io/license
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
+
if (mod && mod.__esModule) return mod;
|
|
27
|
+
var result = {};
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
+
__setModuleDefault(result, mod);
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
33
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
34
|
+
};
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
const node_worker_threads_1 = require("node:worker_threads");
|
|
40
|
+
const inline_critical_css_1 = require("../../utils/index-file/inline-critical-css");
|
|
41
|
+
/**
|
|
42
|
+
* The fully resolved path to the zone.js package that will be loaded during worker initialization.
|
|
43
|
+
* This is passed as workerData when setting up the worker via the `piscina` package.
|
|
44
|
+
*/
|
|
45
|
+
const { zonePackage } = node_worker_threads_1.workerData;
|
|
46
|
+
/**
|
|
47
|
+
* Renders each route in routes and writes them to <outputPath>/<route>/index.html.
|
|
48
|
+
*/
|
|
49
|
+
async function render({ indexFile, deployUrl, minifyCss, outputPath, serverBundlePath, route, inlineCriticalCss, }) {
|
|
50
|
+
const result = {};
|
|
51
|
+
const browserIndexOutputPath = path.join(outputPath, indexFile);
|
|
52
|
+
const outputFolderPath = path.join(outputPath, route);
|
|
53
|
+
const outputIndexPath = path.join(outputFolderPath, 'index.html');
|
|
54
|
+
const { ɵSERVER_CONTEXT, AppServerModule, renderModule, renderApplication, default: bootstrapAppFn, } = (await Promise.resolve(`${serverBundlePath}`).then(s => __importStar(require(s))));
|
|
55
|
+
(0, node_assert_1.default)(ɵSERVER_CONTEXT, `ɵSERVER_CONTEXT was not exported from: ${serverBundlePath}.`);
|
|
56
|
+
const indexBaseName = fs.existsSync(path.join(outputPath, 'index.original.html'))
|
|
57
|
+
? 'index.original.html'
|
|
58
|
+
: indexFile;
|
|
59
|
+
const browserIndexInputPath = path.join(outputPath, indexBaseName);
|
|
60
|
+
const document = await fs.promises.readFile(browserIndexInputPath, 'utf8');
|
|
61
|
+
const platformProviders = [
|
|
62
|
+
{
|
|
63
|
+
provide: ɵSERVER_CONTEXT,
|
|
64
|
+
useValue: 'ssg',
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
let html;
|
|
68
|
+
// Render platform server module
|
|
69
|
+
if (isBootstrapFn(bootstrapAppFn)) {
|
|
70
|
+
(0, node_assert_1.default)(renderApplication, `renderApplication was not exported from: ${serverBundlePath}.`);
|
|
71
|
+
html = await renderApplication(bootstrapAppFn, {
|
|
72
|
+
document,
|
|
73
|
+
url: route,
|
|
74
|
+
platformProviders,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
(0, node_assert_1.default)(AppServerModule, `Neither an AppServerModule nor a bootstrapping function was exported from: ${serverBundlePath}.`);
|
|
78
|
+
(0, node_assert_1.default)(renderModule, `renderModule was not exported from: ${serverBundlePath}.`);
|
|
79
|
+
html = await renderModule(AppServerModule, {
|
|
80
|
+
document,
|
|
81
|
+
url: route,
|
|
82
|
+
extraProviders: platformProviders,
|
|
83
|
+
});
|
|
84
|
+
if (inlineCriticalCss) {
|
|
85
|
+
const inlineCriticalCssProcessor = new inline_critical_css_1.InlineCriticalCssProcessor({
|
|
86
|
+
deployUrl: deployUrl,
|
|
87
|
+
minify: minifyCss,
|
|
88
|
+
});
|
|
89
|
+
const { content, warnings, errors } = await inlineCriticalCssProcessor.process(html, {
|
|
90
|
+
outputPath,
|
|
91
|
+
});
|
|
92
|
+
result.errors = errors;
|
|
93
|
+
result.warnings = warnings;
|
|
94
|
+
html = content;
|
|
95
|
+
}
|
|
96
|
+
// This case happens when we are prerendering "/".
|
|
97
|
+
if (browserIndexOutputPath === outputIndexPath) {
|
|
98
|
+
const browserIndexOutputPathOriginal = path.join(outputPath, 'index.original.html');
|
|
99
|
+
fs.renameSync(browserIndexOutputPath, browserIndexOutputPathOriginal);
|
|
100
|
+
}
|
|
101
|
+
fs.mkdirSync(outputFolderPath, { recursive: true });
|
|
102
|
+
fs.writeFileSync(outputIndexPath, html);
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
function isBootstrapFn(value) {
|
|
106
|
+
// We can differentiate between a module and a bootstrap function by reading `cmp`:
|
|
107
|
+
return typeof value === 'function' && !('ɵmod' in value);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Initializes the worker when it is first created by loading the Zone.js package
|
|
111
|
+
* into the worker instance.
|
|
112
|
+
*
|
|
113
|
+
* @returns A promise resolving to the render function of the worker.
|
|
114
|
+
*/
|
|
115
|
+
async function initialize() {
|
|
116
|
+
// Setup Zone.js
|
|
117
|
+
await Promise.resolve(`${zonePackage}`).then(s => __importStar(require(s)));
|
|
118
|
+
// Return the render function for use
|
|
119
|
+
return render;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The default export will be the promise returned by the initialize function.
|
|
123
|
+
* This is awaited by piscina prior to using the Worker.
|
|
124
|
+
*/
|
|
125
|
+
exports.default = initialize();
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLXdvcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL2J1aWxkZXJzL3ByZXJlbmRlci9yZW5kZXItd29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJSCw4REFBaUM7QUFDakMsNENBQThCO0FBQzlCLGdEQUFrQztBQUNsQyw2REFBaUQ7QUFDakQsb0ZBQXdGO0FBa0N4Rjs7O0dBR0c7QUFDSCxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsZ0NBRXZCLENBQUM7QUFFRjs7R0FFRztBQUNILEtBQUssVUFBVSxNQUFNLENBQUMsRUFDcEIsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wsaUJBQWlCLEdBQ0g7SUFDZCxNQUFNLE1BQU0sR0FBRyxFQUFrQixDQUFDO0lBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRWxFLE1BQU0sRUFDSixlQUFlLEVBQ2YsZUFBZSxFQUNmLFlBQVksRUFDWixpQkFBaUIsRUFDakIsT0FBTyxFQUFFLGNBQWMsR0FDeEIsR0FBRyxDQUFDLHlCQUFhLGdCQUFnQix1Q0FBQyxDQUF3QixDQUFDO0lBRTVELElBQUEscUJBQU0sRUFBQyxlQUFlLEVBQUUsMENBQTBDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUV2RixN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WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHBsaWNhdGlvblJlZiwgU3RhdGljUHJvdmlkZXIsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgcmVuZGVyQXBwbGljYXRpb24sIHJlbmRlck1vZHVsZSwgybVTRVJWRVJfQ09OVEVYVCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLXNlcnZlcic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgd29ya2VyRGF0YSB9IGZyb20gJ25vZGU6d29ya2VyX3RocmVhZHMnO1xuaW1wb3J0IHsgSW5saW5lQ3JpdGljYWxDc3NQcm9jZXNzb3IgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC1maWxlL2lubGluZS1jcml0aWNhbC1jc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlck9wdGlvbnMge1xuICBpbmRleEZpbGU6IHN0cmluZztcbiAgZGVwbG95VXJsOiBzdHJpbmc7XG4gIGlubGluZUNyaXRpY2FsQ3NzOiBib29sZWFuO1xuICBtaW5pZnlDc3M6IGJvb2xlYW47XG4gIG91dHB1dFBhdGg6IHN0cmluZztcbiAgc2VydmVyQnVuZGxlUGF0aDogc3RyaW5nO1xuICByb3V0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIGVycm9ycz86IHN0cmluZ1tdO1xuICB3YXJuaW5ncz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgU2VydmVyQnVuZGxlRXhwb3J0cyB7XG4gIC8qKiBBbiBpbnRlcm5hbCB0b2tlbiB0aGF0IGFsbG93cyBwcm92aWRpbmcgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZlciBjb250ZXh0LiAqL1xuICDJtVNFUlZFUl9DT05URVhUPzogdHlwZW9mIMm1U0VSVkVSX0NPTlRFWFQ7XG5cbiAgLyoqIFJlbmRlciBhbiBOZ01vZHVsZSBhcHBsaWNhdGlvbi4gKi9cbiAgcmVuZGVyTW9kdWxlPzogdHlwZW9mIHJlbmRlck1vZHVsZTtcblxuICAvKiogTmdNb2R1bGUgdG8gcmVuZGVyLiAqL1xuICBBcHBTZXJ2ZXJNb2R1bGU/OiBUeXBlPHVua25vd24+O1xuXG4gIC8qKiBNZXRob2QgdG8gcmVuZGVyIGEgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbi4gKi9cbiAgcmVuZGVyQXBwbGljYXRpb24/OiB0eXBlb2YgcmVuZGVyQXBwbGljYXRpb247XG5cbiAgLyoqIFN0YW5kYWxvbmUgYXBwbGljYXRpb24gYm9vdHN0cmFwcGluZyBmdW5jdGlvbi4gKi9cbiAgZGVmYXVsdD86ICgpID0+IFByb21pc2U8QXBwbGljYXRpb25SZWY+O1xufVxuXG4vKipcbiAqIFRoZSBmdWxseSByZXNvbHZlZCBwYXRoIHRvIHRoZSB6b25lLmpzIHBhY2thZ2UgdGhhdCB3aWxsIGJlIGxvYWRlZCBkdXJpbmcgd29ya2VyIGluaXRpYWxpemF0aW9uLlxuICogVGhpcyBpcyBwYXNzZWQgYXMgd29ya2VyRGF0YSB3aGVuIHNldHRpbmcgdXAgdGhlIHdvcmtlciB2aWEgdGhlIGBwaXNjaW5hYCBwYWNrYWdlLlxuICovXG5jb25zdCB7IHpvbmVQYWNrYWdlIH0gPSB3b3JrZXJEYXRhIGFzIHtcbiAgem9uZVBhY2thZ2U6IHN0cmluZztcbn07XG5cbi8qKlxuICogUmVuZGVycyBlYWNoIHJvdXRlIGluIHJvdXRlcyBhbmQgd3JpdGVzIHRoZW0gdG8gPG91dHB1dFBhdGg+Lzxyb3V0ZT4vaW5kZXguaHRtbC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVuZGVyKHtcbiAgaW5kZXhGaWxlLFxuICBkZXBsb3lVcmwsXG4gIG1pbmlmeUNzcyxcbiAgb3V0cHV0UGF0aCxcbiAgc2VydmVyQnVuZGxlUGF0aCxcbiAgcm91dGUsXG4gIGlubGluZUNyaXRpY2FsQ3NzLFxufTogUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8UmVuZGVyUmVzdWx0PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlbmRlclJlc3VsdDtcbiAgY29uc3QgYnJvd3NlckluZGV4T3V0cHV0UGF0aCA9IHBhdGguam9pbihvdXRwdXRQYXRoLCBpbmRleEZpbGUpO1xuICBjb25zdCBvdXRwdXRGb2xkZXJQYXRoID0gcGF0aC5qb2luKG91dHB1dFBhdGgsIHJvdXRlKTtcbiAgY29uc3Qgb3V0cHV0SW5kZXhQYXRoID0gcGF0aC5qb2luKG91dHB1dEZvbGRlclBhdGgsICdpbmRleC5odG1sJyk7XG5cbiAgY29uc3Qge1xuICAgIMm1U0VSVkVSX0NPTlRFWFQsXG4gICAgQXBwU2VydmVyTW9kdWxlLFxuICAgIHJlbmRlck1vZHVsZSxcbiAgICByZW5kZXJBcHBsaWNhdGlvbixcbiAgICBkZWZhdWx0OiBib290c3RyYXBBcHBGbixcbiAgfSA9IChhd2FpdCBpbXBvcnQoc2VydmVyQnVuZGxlUGF0aCkpIGFzIFNlcnZlckJ1bmRsZUV4cG9ydHM7XG5cbiAgYXNzZXJ0KMm1U0VSVkVSX0NPTlRFWFQsIGDJtVNFUlZFUl9DT05URVhUIHdhcyBub3QgZXhwb3J0ZWQgZnJvbTogJHtzZXJ2ZXJCdW5kbGVQYXRofS5gKTtcblxuICBjb25zdCBpbmRleEJhc2VOYW1lID0gZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ob3V0cHV0UGF0aCwgJ2luZGV4Lm9yaWdpbmFsLmh0bWwnKSlcbiAgICA/ICdpbmRleC5vcmlnaW5hbC5odG1sJ1xuICAgIDogaW5kZXhGaWxlO1xuICBjb25zdCBicm93c2VySW5kZXhJbnB1dFBhdGggPSBwYXRoLmpvaW4ob3V0cHV0UGF0aCwgaW5kZXhCYXNlTmFtZSk7XG4gIGNvbnN0IGRvY3VtZW50ID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoYnJvd3NlckluZGV4SW5wdXRQYXRoLCAndXRmOCcpO1xuXG4gIGNvbnN0IHBsYXRmb3JtUHJvdmlkZXJzOiBTdGF0aWNQcm92aWRlcltdID0gW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IMm1U0VSVkVSX0NPTlRFWFQsXG4gICAgICB1c2VWYWx1ZTogJ3NzZycsXG4gICAgfSxcbiAgXTtcblxuICBsZXQgaHRtbDogc3RyaW5nO1xuXG4gIC8vIFJlbmRlciBwbGF0Zm9ybSBzZXJ2ZXIgbW9kdWxlXG4gIGlmIChpc0Jvb3RzdHJhcEZuKGJvb3RzdHJhcEFwcEZuKSkge1xuICAgIGFzc2VydChyZW5kZXJBcHBsaWNhdGlvbiwgYHJlbmRlckFwcGxpY2F0aW9uIHdhcyBub3QgZXhwb3J0ZWQgZnJvbTogJHtzZXJ2ZXJCdW5kbGVQYXRofS5gKTtcblxuICAgIGh0bWwgPSBhd2FpdCByZW5kZXJBcHBsaWNhdGlvbihib290c3RyYXBBcHBGbiwge1xuICAgICAgZG9jdW1lbnQsXG4gICAgICB1cmw6IHJvdXRlLFxuICAgICAgcGxhdGZvcm1Qcm92aWRlcnMsXG4gICAgfSk7XG4gIH1cblxuICBhc3NlcnQoXG4gICAgQXBwU2VydmVyTW9kdWxlLFxuICAgIGBOZWl0aGVyIGFuIEFwcFNlcnZlck1vZHVsZSBub3IgYSBib290c3RyYXBwaW5nIGZ1bmN0aW9uIHdhcyBleHBvcnRlZCBmcm9tOiAke3NlcnZlckJ1bmRsZVBhdGh9LmAsXG4gICk7XG4gIGFzc2VydChyZW5kZXJNb2R1bGUsIGByZW5kZXJNb2R1bGUgd2FzIG5vdCBleHBvcnRlZCBmcm9tOiAke3NlcnZlckJ1bmRsZVBhdGh9LmApO1xuXG4gIGh0bWwgPSBhd2FpdCByZW5kZXJNb2R1bGUoQXBwU2VydmVyTW9kdWxlLCB7XG4gICAgZG9jdW1lbnQsXG4gICAgdXJsOiByb3V0ZSxcbiAgICBleHRyYVByb3ZpZGVyczogcGxhdGZvcm1Qcm92aWRlcnMsXG4gIH0pO1xuXG4gIGlmIChpbmxpbmVDcml0aWNhbENzcykge1xuICAgIGNvbnN0IGlubGluZUNyaXRpY2FsQ3NzUHJvY2Vzc29yID0gbmV3IElubGluZUNyaXRpY2FsQ3NzUHJvY2Vzc29yKHtcbiAgICAgIGRlcGxveVVybDogZGVwbG95VXJsLFxuICAgICAgbWluaWZ5OiBtaW5pZnlDc3MsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGNvbnRlbnQsIHdhcm5pbmdzLCBlcnJvcnMgfSA9IGF3YWl0IGlubGluZUNyaXRpY2FsQ3NzUHJvY2Vzc29yLnByb2Nlc3MoaHRtbCwge1xuICAgICAgb3V0cHV0UGF0aCxcbiAgICB9KTtcbiAgICByZXN1bHQuZXJyb3JzID0gZXJyb3JzO1xuICAgIHJlc3VsdC53YXJuaW5ncyA9IHdhcm5pbmdzO1xuICAgIGh0bWwgPSBjb250ZW50O1xuICB9XG5cbiAgLy8gVGhpcyBjYXNlIGhhcHBlbnMgd2hlbiB3ZSBhcmUgcHJlcmVuZGVyaW5nIFwiL1wiLlxuICBpZiAoYnJvd3NlckluZGV4T3V0cHV0UGF0aCA9PT0gb3V0cHV0SW5kZXhQYXRoKSB7XG4gICAgY29uc3QgYnJvd3NlckluZGV4T3V0cHV0UGF0aE9yaWdpbmFsID0gcGF0aC5qb2luKG91dHB1dFBhdGgsICdpbmRleC5vcmlnaW5hbC5odG1sJyk7XG4gICAgZnMucmVuYW1lU3luYyhicm93c2VySW5kZXhPdXRwdXRQYXRoLCBicm93c2VySW5kZXhPdXRwdXRQYXRoT3JpZ2luYWwpO1xuICB9XG5cbiAgZnMubWtkaXJTeW5jKG91dHB1dEZvbGRlclBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBmcy53cml0ZUZpbGVTeW5jKG91dHB1dEluZGV4UGF0aCwgaHRtbCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNCb290c3RyYXBGbih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzICgpID0+IFByb21pc2U8QXBwbGljYXRpb25SZWY+IHtcbiAgLy8gV2UgY2FuIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhIG1vZHVsZSBhbmQgYSBib290c3RyYXAgZnVuY3Rpb24gYnkgcmVhZGluZyBgY21wYDpcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhKCfJtW1vZCcgaW4gdmFsdWUpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSB3b3JrZXIgd2hlbiBpdCBpcyBmaXJzdCBjcmVhdGVkIGJ5IGxvYWRpbmcgdGhlIFpvbmUuanMgcGFja2FnZVxuICogaW50byB0aGUgd29ya2VyIGluc3RhbmNlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHJlbmRlciBmdW5jdGlvbiBvZiB0aGUgd29ya2VyLlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAvLyBTZXR1cCBab25lLmpzXG4gIGF3YWl0IGltcG9ydCh6b25lUGFja2FnZSk7XG5cbiAgLy8gUmV0dXJuIHRoZSByZW5kZXIgZnVuY3Rpb24gZm9yIHVzZVxuICByZXR1cm4gcmVuZGVyO1xufVxuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGV4cG9ydCB3aWxsIGJlIHRoZSBwcm9taXNlIHJldHVybmVkIGJ5IHRoZSBpbml0aWFsaXplIGZ1bmN0aW9uLlxuICogVGhpcyBpcyBhd2FpdGVkIGJ5IHBpc2NpbmEgcHJpb3IgdG8gdXNpbmcgdGhlIFdvcmtlci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgaW5pdGlhbGl6ZSgpO1xuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface Schema {
|
|
2
|
+
/**
|
|
3
|
+
* Target to build.
|
|
4
|
+
*/
|
|
5
|
+
browserTarget: string;
|
|
6
|
+
/**
|
|
7
|
+
* Whether or not the builder should extract routes and guess which paths to render.
|
|
8
|
+
*/
|
|
9
|
+
guessRoutes?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* The routes to render.
|
|
12
|
+
*/
|
|
13
|
+
routes?: string[];
|
|
14
|
+
/**
|
|
15
|
+
* The path to a file containing routes separated by newlines.
|
|
16
|
+
*/
|
|
17
|
+
routesFile?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Server target to use for prerendering the app.
|
|
20
|
+
*/
|
|
21
|
+
serverTarget: string;
|
|
22
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// THIS FILE IS AUTOMATICALLY GENERATED. TO UPDATE THIS FILE YOU NEED TO CHANGE THE
|
|
3
|
+
// CORRESPONDING JSON SCHEMA FILE, THEN RUN devkit-admin build (or bazel build ...).
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvYnVpbGRlcnMvcHJlcmVuZGVyL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUZBQW1GO0FBQ25GLG9GQUFvRiIsInNvdXJjZXNDb250ZW50IjpbIlxuLy8gVEhJUyBGSUxFIElTIEFVVE9NQVRJQ0FMTFkgR0VORVJBVEVELiBUTyBVUERBVEUgVEhJUyBGSUxFIFlPVSBORUVEIFRPIENIQU5HRSBUSEVcbi8vIENPUlJFU1BPTkRJTkcgSlNPTiBTQ0hFTUEgRklMRSwgVEhFTiBSVU4gZGV2a2l0LWFkbWluIGJ1aWxkIChvciBiYXplbCBidWlsZCAuLi4pLlxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYSB7XG4gICAgLyoqXG4gICAgICogVGFyZ2V0IHRvIGJ1aWxkLlxuICAgICAqL1xuICAgIGJyb3dzZXJUYXJnZXQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgYnVpbGRlciBzaG91bGQgZXh0cmFjdCByb3V0ZXMgYW5kIGd1ZXNzIHdoaWNoIHBhdGhzIHRvIHJlbmRlci5cbiAgICAgKi9cbiAgICBndWVzc1JvdXRlcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHJvdXRlcyB0byByZW5kZXIuXG4gICAgICovXG4gICAgcm91dGVzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogVGhlIHBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgcm91dGVzIHNlcGFyYXRlZCBieSBuZXdsaW5lcy5cbiAgICAgKi9cbiAgICByb3V0ZXNGaWxlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNlcnZlciB0YXJnZXQgdG8gdXNlIGZvciBwcmVyZW5kZXJpbmcgdGhlIGFwcC5cbiAgICAgKi9cbiAgICBzZXJ2ZXJUYXJnZXQ6IHN0cmluZztcbn1cbiJdfQ==
|