@angular-devkit/build-angular 17.0.0-next.5 → 17.0.0-next.7
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 +16 -16
- package/src/builders/application/build-action.d.ts +1 -0
- package/src/builders/application/build-action.js +63 -51
- package/src/builders/application/execute-build.js +27 -10
- package/src/builders/application/i18n.d.ts +28 -0
- package/src/builders/application/i18n.js +139 -0
- package/src/builders/application/index.d.ts +3 -1
- package/src/builders/application/index.js +10 -2
- package/src/builders/application/options.d.ts +6 -0
- package/src/builders/application/options.js +8 -4
- package/src/builders/application/schema.d.ts +4 -0
- package/src/builders/application/schema.js +1 -1
- package/src/builders/application/schema.json +5 -0
- package/src/builders/browser-esbuild/builder-status-warnings.js +2 -9
- package/src/builders/dev-server/vite-server.js +29 -1
- package/src/builders/extract-i18n/application-extraction.js +2 -1
- package/src/tools/esbuild/angular/angular-host.d.ts +1 -0
- package/src/tools/esbuild/angular/angular-host.js +1 -1
- package/src/tools/esbuild/angular/compilation/aot-compilation.js +26 -11
- package/src/tools/esbuild/angular/compilation/jit-compilation.js +12 -5
- package/src/tools/esbuild/angular/compiler-plugin.js +48 -15
- package/src/tools/esbuild/angular/web-worker-transformer.d.ts +17 -0
- package/src/tools/esbuild/angular/web-worker-transformer.js +95 -0
- package/src/tools/esbuild/application-code-bundle.js +54 -7
- package/src/tools/esbuild/bundler-context.js +3 -3
- package/src/tools/esbuild/bundler-execution-result.d.ts +2 -2
- package/src/tools/esbuild/bundler-execution-result.js +1 -1
- package/src/tools/esbuild/i18n-inliner-worker.d.ts +37 -0
- package/src/tools/esbuild/i18n-inliner-worker.js +138 -0
- package/src/tools/esbuild/i18n-inliner.d.ts +40 -0
- package/src/tools/esbuild/i18n-inliner.js +119 -0
- package/src/tools/esbuild/i18n-locale-plugin.d.ts +18 -0
- package/src/tools/esbuild/i18n-locale-plugin.js +91 -0
- package/src/tools/esbuild/index-html-generator.d.ts +2 -2
- package/src/tools/esbuild/index-html-generator.js +4 -4
- package/src/tools/esbuild/utils.d.ts +2 -0
- package/src/tools/esbuild/utils.js +32 -2
- package/src/tools/esbuild/virtual-module-plugin.d.ts +2 -0
- package/src/tools/esbuild/virtual-module-plugin.js +3 -3
- package/src/tools/vite/i18n-locale-plugin.d.ts +18 -0
- package/src/tools/vite/i18n-locale-plugin.js +56 -0
- package/src/utils/routes-extractor/extractor.js +17 -14
- package/src/utils/server-rendering/main-bundle-exports.d.ts +1 -0
- package/src/utils/server-rendering/main-bundle-exports.js +1 -1
- package/src/utils/server-rendering/render-page.js +6 -2
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.createAngularLocaleDataPlugin = exports.LOCALE_DATA_BASE_MODULE = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* The base module location used to search for locale specific data.
|
|
13
|
+
*/
|
|
14
|
+
exports.LOCALE_DATA_BASE_MODULE = '@angular/common/locales/global';
|
|
15
|
+
/**
|
|
16
|
+
* Creates a Vite plugin that resolves Angular locale data files from `@angular/common`.
|
|
17
|
+
*
|
|
18
|
+
* @returns A Vite plugin.
|
|
19
|
+
*/
|
|
20
|
+
function createAngularLocaleDataPlugin() {
|
|
21
|
+
return {
|
|
22
|
+
name: 'angular-locale-data',
|
|
23
|
+
enforce: 'pre',
|
|
24
|
+
async resolveId(source) {
|
|
25
|
+
if (!source.startsWith('angular:locale/data:')) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Extract the locale from the path
|
|
29
|
+
const originalLocale = source.split(':', 3)[2];
|
|
30
|
+
// Remove any private subtags since these will never match
|
|
31
|
+
let partialLocale = originalLocale.replace(/-x(-[a-zA-Z0-9]{1,8})+$/, '');
|
|
32
|
+
let exact = true;
|
|
33
|
+
while (partialLocale) {
|
|
34
|
+
const potentialPath = `${exports.LOCALE_DATA_BASE_MODULE}/${partialLocale}`;
|
|
35
|
+
const result = await this.resolve(potentialPath);
|
|
36
|
+
if (result) {
|
|
37
|
+
if (!exact) {
|
|
38
|
+
this.warn(`Locale data for '${originalLocale}' cannot be found. Using locale data for '${partialLocale}'.`);
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
// Remove the last subtag and try again with a less specific locale
|
|
43
|
+
const parts = partialLocale.split('-');
|
|
44
|
+
partialLocale = parts.slice(0, -1).join('-');
|
|
45
|
+
exact = false;
|
|
46
|
+
// The locales "en" and "en-US" are considered exact to retain existing behavior
|
|
47
|
+
if (originalLocale === 'en-US' && partialLocale === 'en') {
|
|
48
|
+
exact = true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
exports.createAngularLocaleDataPlugin = createAngularLocaleDataPlugin;
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1sb2NhbGUtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvdG9vbHMvdml0ZS9pMThuLWxvY2FsZS1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBSUg7O0dBRUc7QUFDVSxRQUFBLHVCQUF1QixHQUFHLGdDQUFnQyxDQUFDO0FBRXhFOzs7O0dBSUc7QUFDSCxTQUFnQiw2QkFBNkI7SUFDM0MsT0FBTztRQUNMLElBQUksRUFBRSxxQkFBcUI7UUFDM0IsT0FBTyxFQUFFLEtBQUs7UUFDZCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsRUFBRTtnQkFDOUMsT0FBTzthQUNSO1lBRUQsbUNBQW1DO1lBQ25DLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9DLDBEQUEwRDtZQUMxRCxJQUFJLGFBQWEsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztZQUNqQixPQUFPLGFBQWEsRUFBRTtnQkFDcEIsTUFBTSxhQUFhLEdBQUcsR0FBRywrQkFBdUIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFFcEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLE1BQU0sRUFBRTtvQkFDVixJQUFJLENBQUMsS0FBSyxFQUFFO3dCQUNWLElBQUksQ0FBQyxJQUFJLENBQ1Asb0JBQW9CLGNBQWMsNkNBQTZDLGFBQWEsSUFBSSxDQUNqRyxDQUFDO3FCQUNIO29CQUVELE9BQU8sTUFBTSxDQUFDO2lCQUNmO2dCQUVELG1FQUFtRTtnQkFDbkUsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNkLGdGQUFnRjtnQkFDaEYsSUFBSSxjQUFjLEtBQUssT0FBTyxJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUU7b0JBQ3hELEtBQUssR0FBRyxJQUFJLENBQUM7aUJBQ2Q7YUFDRjtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBM0NELHNFQTJDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIFRoZSBiYXNlIG1vZHVsZSBsb2NhdGlvbiB1c2VkIHRvIHNlYXJjaCBmb3IgbG9jYWxlIHNwZWNpZmljIGRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBMT0NBTEVfREFUQV9CQVNFX01PRFVMRSA9ICdAYW5ndWxhci9jb21tb24vbG9jYWxlcy9nbG9iYWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBWaXRlIHBsdWdpbiB0aGF0IHJlc29sdmVzIEFuZ3VsYXIgbG9jYWxlIGRhdGEgZmlsZXMgZnJvbSBgQGFuZ3VsYXIvY29tbW9uYC5cbiAqXG4gKiBAcmV0dXJucyBBIFZpdGUgcGx1Z2luLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5ndWxhckxvY2FsZURhdGFQbHVnaW4oKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYW5ndWxhci1sb2NhbGUtZGF0YScsXG4gICAgZW5mb3JjZTogJ3ByZScsXG4gICAgYXN5bmMgcmVzb2x2ZUlkKHNvdXJjZSkge1xuICAgICAgaWYgKCFzb3VyY2Uuc3RhcnRzV2l0aCgnYW5ndWxhcjpsb2NhbGUvZGF0YTonKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEV4dHJhY3QgdGhlIGxvY2FsZSBmcm9tIHRoZSBwYXRoXG4gICAgICBjb25zdCBvcmlnaW5hbExvY2FsZSA9IHNvdXJjZS5zcGxpdCgnOicsIDMpWzJdO1xuXG4gICAgICAvLyBSZW1vdmUgYW55IHByaXZhdGUgc3VidGFncyBzaW5jZSB0aGVzZSB3aWxsIG5ldmVyIG1hdGNoXG4gICAgICBsZXQgcGFydGlhbExvY2FsZSA9IG9yaWdpbmFsTG9jYWxlLnJlcGxhY2UoLy14KC1bYS16QS1aMC05XXsxLDh9KSskLywgJycpO1xuXG4gICAgICBsZXQgZXhhY3QgPSB0cnVlO1xuICAgICAgd2hpbGUgKHBhcnRpYWxMb2NhbGUpIHtcbiAgICAgICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IGAke0xPQ0FMRV9EQVRBX0JBU0VfTU9EVUxFfS8ke3BhcnRpYWxMb2NhbGV9YDtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlc29sdmUocG90ZW50aWFsUGF0aCk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBpZiAoIWV4YWN0KSB7XG4gICAgICAgICAgICB0aGlzLndhcm4oXG4gICAgICAgICAgICAgIGBMb2NhbGUgZGF0YSBmb3IgJyR7b3JpZ2luYWxMb2NhbGV9JyBjYW5ub3QgYmUgZm91bmQuIFVzaW5nIGxvY2FsZSBkYXRhIGZvciAnJHtwYXJ0aWFsTG9jYWxlfScuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgbGFzdCBzdWJ0YWcgYW5kIHRyeSBhZ2FpbiB3aXRoIGEgbGVzcyBzcGVjaWZpYyBsb2NhbGVcbiAgICAgICAgY29uc3QgcGFydHMgPSBwYXJ0aWFsTG9jYWxlLnNwbGl0KCctJyk7XG4gICAgICAgIHBhcnRpYWxMb2NhbGUgPSBwYXJ0cy5zbGljZSgwLCAtMSkuam9pbignLScpO1xuICAgICAgICBleGFjdCA9IGZhbHNlO1xuICAgICAgICAvLyBUaGUgbG9jYWxlcyBcImVuXCIgYW5kIFwiZW4tVVNcIiBhcmUgY29uc2lkZXJlZCBleGFjdCB0byByZXRhaW4gZXhpc3RpbmcgYmVoYXZpb3JcbiAgICAgICAgaWYgKG9yaWdpbmFsTG9jYWxlID09PSAnZW4tVVMnICYmIHBhcnRpYWxMb2NhbGUgPT09ICdlbicpIHtcbiAgICAgICAgICBleGFjdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -5,20 +5,16 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
|
-
import { ApplicationRef, createPlatformFactory, platformCore } from '@angular/core';
|
|
8
|
+
import { ApplicationRef, Compiler, createPlatformFactory, platformCore, ɵwhenStable as whenStable, } from '@angular/core';
|
|
9
9
|
import { INITIAL_CONFIG, ɵINTERNAL_SERVER_PLATFORM_PROVIDERS as INTERNAL_SERVER_PLATFORM_PROVIDERS, } from '@angular/platform-server';
|
|
10
|
-
import { Router,
|
|
11
|
-
|
|
12
|
-
// TODO(alanagius): replace the below once `RouterConfigLoader` is privately exported from `@angular/router`.
|
|
13
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
|
-
const RouterConfigLoader = ɵROUTER_PROVIDERS[5];
|
|
15
|
-
async function* getRoutesFromRouterConfig(routes, routerConfigLoader, injector, parent = '') {
|
|
10
|
+
import { Router, ɵloadChildren as loadChildrenHelper } from '@angular/router';
|
|
11
|
+
async function* getRoutesFromRouterConfig(routes, compiler, parentInjector, parentRoute = '') {
|
|
16
12
|
for (const route of routes) {
|
|
17
13
|
const { path, redirectTo, loadChildren, children } = route;
|
|
18
14
|
if (path === undefined) {
|
|
19
15
|
continue;
|
|
20
16
|
}
|
|
21
|
-
const currentRoutePath = buildRoutePath(
|
|
17
|
+
const currentRoutePath = buildRoutePath(parentRoute, path);
|
|
22
18
|
if (redirectTo !== undefined) {
|
|
23
19
|
// TODO: handle `redirectTo`.
|
|
24
20
|
yield { route: currentRoutePath, success: false, redirect: true };
|
|
@@ -30,8 +26,15 @@ async function* getRoutesFromRouterConfig(routes, routerConfigLoader, injector,
|
|
|
30
26
|
continue;
|
|
31
27
|
}
|
|
32
28
|
yield { route: currentRoutePath, success: true, redirect: false };
|
|
33
|
-
if (children?.length
|
|
34
|
-
yield* getRoutesFromRouterConfig(children
|
|
29
|
+
if (children?.length) {
|
|
30
|
+
yield* getRoutesFromRouterConfig(children, compiler, parentInjector, currentRoutePath);
|
|
31
|
+
}
|
|
32
|
+
if (loadChildren) {
|
|
33
|
+
const loadedChildRoutes = await loadChildrenHelper(route, compiler, parentInjector).toPromise();
|
|
34
|
+
if (loadedChildRoutes) {
|
|
35
|
+
const { routes: childRoutes, injector = parentInjector } = loadedChildRoutes;
|
|
36
|
+
yield* getRoutesFromRouterConfig(childRoutes, compiler, injector, currentRoutePath);
|
|
37
|
+
}
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
}
|
|
@@ -55,12 +58,12 @@ export async function* extractRoutes(bootstrapAppFnOrModule, document) {
|
|
|
55
58
|
applicationRef = moduleRef.injector.get(ApplicationRef);
|
|
56
59
|
}
|
|
57
60
|
// Wait until the application is stable.
|
|
58
|
-
await applicationRef
|
|
61
|
+
await whenStable(applicationRef);
|
|
59
62
|
const injector = applicationRef.injector;
|
|
60
63
|
const router = injector.get(Router);
|
|
61
|
-
const
|
|
64
|
+
const compiler = injector.get(Compiler);
|
|
62
65
|
// Extract all the routes from the config.
|
|
63
|
-
yield* getRoutesFromRouterConfig(router.config,
|
|
66
|
+
yield* getRoutesFromRouterConfig(router.config, compiler, injector);
|
|
64
67
|
}
|
|
65
68
|
finally {
|
|
66
69
|
platformRef.destroy();
|
|
@@ -73,4 +76,4 @@ function isBootstrapFn(value) {
|
|
|
73
76
|
function buildRoutePath(...routeParts) {
|
|
74
77
|
return routeParts.filter(Boolean).join('/');
|
|
75
78
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvdXRpbHMvcm91dGVzLWV4dHJhY3Rvci9leHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLGNBQWMsRUFDZCxRQUFRLEVBR1IscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixXQUFXLElBQUksVUFBVSxHQUMxQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsY0FBYyxFQUNkLG1DQUFtQyxJQUFJLGtDQUFrQyxHQUMxRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBUyxNQUFNLEVBQUUsYUFBYSxJQUFJLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFRckYsS0FBSyxTQUFTLENBQUMsQ0FBQyx5QkFBeUIsQ0FDdkMsTUFBZSxFQUNmLFFBQWtCLEVBQ2xCLGNBQXdCLEVBQ3hCLFdBQVcsR0FBRyxFQUFFO0lBRWhCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO1FBQzFCLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDM0QsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RCLFNBQVM7U0FDVjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUzRCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDNUIsNkJBQTZCO1lBQzdCLE1BQU0sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDbEUsU0FBUztTQUNWO1FBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JCLGdEQUFnRDtZQUNoRCxNQUFNLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ25FLFNBQVM7U0FDVjtRQUVELE1BQU0sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFFbEUsSUFBSSxRQUFRLEVBQUUsTUFBTSxFQUFFO1lBQ3BCLEtBQUssQ0FBQyxDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUM7U0FDeEY7UUFFRCxJQUFJLFlBQVksRUFBRTtZQUNoQixNQUFNLGlCQUFpQixHQUFHLE1BQU0sa0JBQWtCLENBQ2hELEtBQUssRUFDTCxRQUFRLEVBQ1IsY0FBYyxDQUNmLENBQUMsU0FBUyxFQUFFLENBQUM7WUFFZCxJQUFJLGlCQUFpQixFQUFFO2dCQUNyQixNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEdBQUcsY0FBYyxFQUFFLEdBQUcsaUJBQWlCLENBQUM7Z0JBQzdFLEtBQUssQ0FBQyxDQUFDLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7YUFDckY7U0FDRjtLQUNGO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FDbEMsc0JBQXVFLEVBQ3ZFLFFBQWdCO0lBRWhCLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUU7UUFDaEU7WUFDRTtnQkFDRSxPQUFPLEVBQUUsY0FBYztnQkFDdkIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7YUFDaEM7U0FDRjtRQUNELEdBQUcsa0NBQWtDO0tBQ3RDLENBQUMsRUFBRSxDQUFDO0lBRUwsSUFBSTtRQUNGLElBQUksY0FBOEIsQ0FBQztRQUNuQyxJQUFJLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1lBQ3pDLGNBQWMsR0FBRyxNQUFNLHNCQUFzQixFQUFFLENBQUM7U0FDakQ7YUFBTTtZQUNMLE1BQU0sU0FBUyxHQUFHLE1BQU0sV0FBVyxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzVFLGNBQWMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN6RDtRQUVELHdDQUF3QztRQUN4QyxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVqQyxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV4QywwQ0FBMEM7UUFDMUMsS0FBSyxDQUFDLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDckU7WUFBUztRQUNSLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUN2QjtBQUNILENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFjO0lBQ25DLHVIQUF1SDtJQUN2SCxPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxHQUFHLFVBQW9CO0lBQzdDLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgQ29tcGlsZXIsXG4gIEluamVjdG9yLFxuICBUeXBlLFxuICBjcmVhdGVQbGF0Zm9ybUZhY3RvcnksXG4gIHBsYXRmb3JtQ29yZSxcbiAgybV3aGVuU3RhYmxlIGFzIHdoZW5TdGFibGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSU5JVElBTF9DT05GSUcsXG4gIMm1SU5URVJOQUxfU0VSVkVSX1BMQVRGT1JNX1BST1ZJREVSUyBhcyBJTlRFUk5BTF9TRVJWRVJfUExBVEZPUk1fUFJPVklERVJTLFxufSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1zZXJ2ZXInO1xuaW1wb3J0IHsgUm91dGUsIFJvdXRlciwgybVsb2FkQ2hpbGRyZW4gYXMgbG9hZENoaWxkcmVuSGVscGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW50ZXJmYWNlIFJvdXRlclJlc3VsdCB7XG4gIHJvdXRlOiBzdHJpbmc7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIHJlZGlyZWN0OiBib29sZWFuO1xufVxuXG5hc3luYyBmdW5jdGlvbiogZ2V0Um91dGVzRnJvbVJvdXRlckNvbmZpZyhcbiAgcm91dGVzOiBSb3V0ZVtdLFxuICBjb21waWxlcjogQ29tcGlsZXIsXG4gIHBhcmVudEluamVjdG9yOiBJbmplY3RvcixcbiAgcGFyZW50Um91dGUgPSAnJyxcbik6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxSb3V0ZXJSZXN1bHQ+IHtcbiAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICBjb25zdCB7IHBhdGgsIHJlZGlyZWN0VG8sIGxvYWRDaGlsZHJlbiwgY2hpbGRyZW4gfSA9IHJvdXRlO1xuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRSb3V0ZVBhdGggPSBidWlsZFJvdXRlUGF0aChwYXJlbnRSb3V0ZSwgcGF0aCk7XG5cbiAgICBpZiAocmVkaXJlY3RUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUT0RPOiBoYW5kbGUgYHJlZGlyZWN0VG9gLlxuICAgICAgeWllbGQgeyByb3V0ZTogY3VycmVudFJvdXRlUGF0aCwgc3VjY2VzczogZmFsc2UsIHJlZGlyZWN0OiB0cnVlIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoL1s6Kl0vLnRlc3QocGF0aCkpIHtcbiAgICAgIC8vIFRPRE86IGhhbmRsZSBwYXJhbWV0ZXJpemVkIHJvdXRlcyBwb3B1bGF0aW9uLlxuICAgICAgeWllbGQgeyByb3V0ZTogY3VycmVudFJvdXRlUGF0aCwgc3VjY2VzczogZmFsc2UsIHJlZGlyZWN0OiBmYWxzZSB9O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgeWllbGQgeyByb3V0ZTogY3VycmVudFJvdXRlUGF0aCwgc3VjY2VzczogdHJ1ZSwgcmVkaXJlY3Q6IGZhbHNlIH07XG5cbiAgICBpZiAoY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgeWllbGQqIGdldFJvdXRlc0Zyb21Sb3V0ZXJDb25maWcoY2hpbGRyZW4sIGNvbXBpbGVyLCBwYXJlbnRJbmplY3RvciwgY3VycmVudFJvdXRlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYgKGxvYWRDaGlsZHJlbikge1xuICAgICAgY29uc3QgbG9hZGVkQ2hpbGRSb3V0ZXMgPSBhd2FpdCBsb2FkQ2hpbGRyZW5IZWxwZXIoXG4gICAgICAgIHJvdXRlLFxuICAgICAgICBjb21waWxlcixcbiAgICAgICAgcGFyZW50SW5qZWN0b3IsXG4gICAgICApLnRvUHJvbWlzZSgpO1xuXG4gICAgICBpZiAobG9hZGVkQ2hpbGRSb3V0ZXMpIHtcbiAgICAgICAgY29uc3QgeyByb3V0ZXM6IGNoaWxkUm91dGVzLCBpbmplY3RvciA9IHBhcmVudEluamVjdG9yIH0gPSBsb2FkZWRDaGlsZFJvdXRlcztcbiAgICAgICAgeWllbGQqIGdldFJvdXRlc0Zyb21Sb3V0ZXJDb25maWcoY2hpbGRSb3V0ZXMsIGNvbXBpbGVyLCBpbmplY3RvciwgY3VycmVudFJvdXRlUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZXh0cmFjdFJvdXRlcyhcbiAgYm9vdHN0cmFwQXBwRm5Pck1vZHVsZTogKCgpID0+IFByb21pc2U8QXBwbGljYXRpb25SZWY+KSB8IFR5cGU8dW5rbm93bj4sXG4gIGRvY3VtZW50OiBzdHJpbmcsXG4pOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8Um91dGVyUmVzdWx0PiB7XG4gIGNvbnN0IHBsYXRmb3JtUmVmID0gY3JlYXRlUGxhdGZvcm1GYWN0b3J5KHBsYXRmb3JtQ29yZSwgJ3NlcnZlcicsIFtcbiAgICBbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IElOSVRJQUxfQ09ORklHLFxuICAgICAgICB1c2VWYWx1ZTogeyBkb2N1bWVudCwgdXJsOiAnJyB9LFxuICAgICAgfSxcbiAgICBdLFxuICAgIC4uLklOVEVSTkFMX1NFUlZFUl9QTEFURk9STV9QUk9WSURFUlMsXG4gIF0pKCk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmO1xuICAgIGlmIChpc0Jvb3RzdHJhcEZuKGJvb3RzdHJhcEFwcEZuT3JNb2R1bGUpKSB7XG4gICAgICBhcHBsaWNhdGlvblJlZiA9IGF3YWl0IGJvb3RzdHJhcEFwcEZuT3JNb2R1bGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbW9kdWxlUmVmID0gYXdhaXQgcGxhdGZvcm1SZWYuYm9vdHN0cmFwTW9kdWxlKGJvb3RzdHJhcEFwcEZuT3JNb2R1bGUpO1xuICAgICAgYXBwbGljYXRpb25SZWYgPSBtb2R1bGVSZWYuaW5qZWN0b3IuZ2V0KEFwcGxpY2F0aW9uUmVmKTtcbiAgICB9XG5cbiAgICAvLyBXYWl0IHVudGlsIHRoZSBhcHBsaWNhdGlvbiBpcyBzdGFibGUuXG4gICAgYXdhaXQgd2hlblN0YWJsZShhcHBsaWNhdGlvblJlZik7XG5cbiAgICBjb25zdCBpbmplY3RvciA9IGFwcGxpY2F0aW9uUmVmLmluamVjdG9yO1xuICAgIGNvbnN0IHJvdXRlciA9IGluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIGNvbnN0IGNvbXBpbGVyID0gaW5qZWN0b3IuZ2V0KENvbXBpbGVyKTtcblxuICAgIC8vIEV4dHJhY3QgYWxsIHRoZSByb3V0ZXMgZnJvbSB0aGUgY29uZmlnLlxuICAgIHlpZWxkKiBnZXRSb3V0ZXNGcm9tUm91dGVyQ29uZmlnKHJvdXRlci5jb25maWcsIGNvbXBpbGVyLCBpbmplY3Rvcik7XG4gIH0gZmluYWxseSB7XG4gICAgcGxhdGZvcm1SZWYuZGVzdHJveSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQm9vdHN0cmFwRm4odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyAoKSA9PiBQcm9taXNlPEFwcGxpY2F0aW9uUmVmPiB7XG4gIC8vIFdlIGNhbiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYSBtb2R1bGUgYW5kIGEgYm9vdHN0cmFwIGZ1bmN0aW9uIGJ5IHJlYWRpbmcgY29tcGlsZXItZ2VuZXJhdGVkIGDJtW1vZGAgc3RhdGljIHByb3BlcnR5OlxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICEoJ8m1bW9kJyBpbiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUm91dGVQYXRoKC4uLnJvdXRlUGFydHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJvdXRlUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy8nKTtcbn1cbiJdfQ==
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* found in the LICENSE file at https://angular.io/license
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1idW5kbGUtZXhwb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL3V0aWxzL3NlcnZlci1yZW5kZXJpbmcvbWFpbi1idW5kbGUtZXhwb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwbGljYXRpb25SZWYsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgcmVuZGVyQXBwbGljYXRpb24sIHJlbmRlck1vZHVsZSwgybVTRVJWRVJfQ09OVEVYVCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLXNlcnZlcic7XG5pbXBvcnQgdHlwZSB7IGV4dHJhY3RSb3V0ZXMgfSBmcm9tICcuLi9yb3V0ZXMtZXh0cmFjdG9yL2V4dHJhY3Rvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFpblNlcnZlckJ1bmRsZUV4cG9ydHMge1xuICAvKiogQW4gaW50ZXJuYWwgdG9rZW4gdGhhdCBhbGxvd3MgcHJvdmlkaW5nIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2ZXIgY29udGV4dC4gKi9cbiAgybVTRVJWRVJfQ09OVEVYVDogdHlwZW9mIMm1U0VSVkVSX0NPTlRFWFQ7XG5cbiAgLyoqIFJlbmRlciBhbiBOZ01vZHVsZSBhcHBsaWNhdGlvbi4gKi9cbiAgcmVuZGVyTW9kdWxlOiB0eXBlb2YgcmVuZGVyTW9kdWxlO1xuXG4gIC8qKiBNZXRob2QgdG8gcmVuZGVyIGEgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbi4gKi9cbiAgcmVuZGVyQXBwbGljYXRpb246IHR5cGVvZiByZW5kZXJBcHBsaWNhdGlvbjtcblxuICAvKiogU3RhbmRhbG9uZSBhcHBsaWNhdGlvbiBib290c3RyYXBwaW5nIGZ1bmN0aW9uLiAqL1xuICBkZWZhdWx0OiAoKCkgPT4gUHJvbWlzZTxBcHBsaWNhdGlvblJlZj4pIHwgVHlwZTx1bmtub3duPjtcblxuICAvKiogTWV0aG9kIHRvIGV4dHJhY3Qgcm91dGVzIGZyb20gdGhlIHJvdXRlciBjb25maWcuICovXG4gIGV4dHJhY3RSb3V0ZXM6IHR5cGVvZiBleHRyYWN0Um91dGVzO1xuXG4gIMm1cmVzZXRDb21waWxlZENvbXBvbmVudHM/OiAoKSA9PiB2b2lkO1xufVxuIl19
|
|
@@ -15,7 +15,11 @@ const load_esm_1 = require("../load-esm");
|
|
|
15
15
|
* Renders each route in routes and writes them to <outputPath>/<route>/index.html.
|
|
16
16
|
*/
|
|
17
17
|
async function renderPage({ route, serverContext, document, inlineCriticalCss, outputFiles, loadBundle = load_esm_1.loadEsmModule, }) {
|
|
18
|
-
const { default: bootstrapAppFnOrModule, ɵSERVER_CONTEXT, renderModule, renderApplication, } = await loadBundle('./main.server.mjs');
|
|
18
|
+
const { default: bootstrapAppFnOrModule, ɵSERVER_CONTEXT, renderModule, renderApplication, ɵresetCompiledComponents, } = await loadBundle('./main.server.mjs');
|
|
19
|
+
// Need to clean up GENERATED_COMP_IDS map in `@angular/core`.
|
|
20
|
+
// Otherwise an incorrect component ID generation collision detected warning will be displayed in development.
|
|
21
|
+
// See: https://github.com/angular/angular-cli/issues/25924
|
|
22
|
+
ɵresetCompiledComponents?.();
|
|
19
23
|
const platformProviders = [
|
|
20
24
|
{
|
|
21
25
|
provide: ɵSERVER_CONTEXT,
|
|
@@ -60,4 +64,4 @@ function isBootstrapFn(value) {
|
|
|
60
64
|
// We can differentiate between a module and a bootstrap function by reading compiler-generated `ɵmod` static property:
|
|
61
65
|
return typeof value === 'function' && !('ɵmod' in value);
|
|
62
66
|
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLXBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy91dGlscy9zZXJ2ZXItcmVuZGVyaW5nL3JlbmRlci1wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7OztBQUdILHlDQUFxQztBQUNyQywyRUFBK0U7QUFDL0UsMENBQTRDO0FBb0I1Qzs7R0FFRztBQUNJLEtBQUssVUFBVSxVQUFVLENBQUMsRUFDL0IsS0FBSyxFQUNMLGFBQWEsRUFDYixRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxVQUFVLEdBQUcsd0JBQWEsR0FDWjtJQUNkLE1BQU0sRUFDSixPQUFPLEVBQUUsc0JBQXNCLEVBQy9CLGVBQWUsRUFDZixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLHdCQUF3QixHQUN6QixHQUFHLE1BQU0sVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFMUMsOERBQThEO0lBQzlELDhHQUE4RztJQUM5RywyREFBMkQ7SUFDM0Qsd0JBQXdCLEVBQUUsRUFBRSxDQUFDO0lBRTdCLE1BQU0saUJBQWlCLEdBQXFCO1FBQzFDO1lBQ0UsT0FBTyxFQUFFLGVBQWU7WUFDeEIsUUFBUSxFQUFFLGFBQWE7U0FDeEI7S0FDRixDQUFDO0lBRUYsSUFBSSxJQUF3QixDQUFDO0lBRTdCLElBQUksYUFBYSxDQUFDLHNCQUFzQixDQUFDLEVBQUU7UUFDekMsSUFBSSxHQUFHLE1BQU0saUJBQWlCLENBQUMsc0JBQXNCLEVBQUU7WUFDckQsUUFBUTtZQUNSLEdBQUcsRUFBRSxLQUFLO1lBQ1YsaUJBQWlCO1NBQ2xCLENBQUMsQ0FBQztLQUNKO1NBQU07UUFDTCxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsc0JBQXNCLEVBQUU7WUFDaEQsUUFBUTtZQUNSLEdBQUcsRUFBRSxLQUFLO1lBQ1YsY0FBYyxFQUFFLGlCQUFpQjtTQUNsQyxDQUFDLENBQUM7S0FDSjtJQUVELElBQUksaUJBQWlCLEVBQUU7UUFDckIsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLGdEQUEwQixDQUFDO1lBQ2hFLE1BQU0sRUFBRSxLQUFLO1lBQ2IsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDNUIsUUFBUSxHQUFHLElBQUEsb0JBQVEsRUFBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7b0JBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLFFBQVEsRUFBRSxDQUFDLENBQUM7aUJBQzVEO2dCQUVELE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNyRTtJQUVELE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSTtLQUNkLENBQUM7QUFDSixDQUFDO0FBaEVELGdDQWdFQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsdUhBQXVIO0lBQ3ZILE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcGxpY2F0aW9uUmVmLCBTdGF0aWNQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgSW5saW5lQ3JpdGljYWxDc3NQcm9jZXNzb3IgfSBmcm9tICcuLi9pbmRleC1maWxlL2lubGluZS1jcml0aWNhbC1jc3MnO1xuaW1wb3J0IHsgbG9hZEVzbU1vZHVsZSB9IGZyb20gJy4uL2xvYWQtZXNtJztcbmltcG9ydCB7IE1haW5TZXJ2ZXJCdW5kbGVFeHBvcnRzIH0gZnJvbSAnLi9tYWluLWJ1bmRsZS1leHBvcnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJPcHRpb25zIHtcbiAgcm91dGU6IHN0cmluZztcbiAgc2VydmVyQ29udGV4dDogU2VydmVyQ29udGV4dDtcbiAgb3V0cHV0RmlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGRvY3VtZW50OiBzdHJpbmc7XG4gIGlubGluZUNyaXRpY2FsQ3NzPzogYm9vbGVhbjtcbiAgbG9hZEJ1bmRsZT86IChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8TWFpblNlcnZlckJ1bmRsZUV4cG9ydHM+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIGVycm9ycz86IHN0cmluZ1tdO1xuICB3YXJuaW5ncz86IHN0cmluZ1tdO1xuICBjb250ZW50Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJDb250ZXh0ID0gJ2FwcC1zaGVsbCcgfCAnc3NnJyB8ICdzc3InO1xuXG4vKipcbiAqIFJlbmRlcnMgZWFjaCByb3V0ZSBpbiByb3V0ZXMgYW5kIHdyaXRlcyB0aGVtIHRvIDxvdXRwdXRQYXRoPi88cm91dGU+L2luZGV4Lmh0bWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJQYWdlKHtcbiAgcm91dGUsXG4gIHNlcnZlckNvbnRleHQsXG4gIGRvY3VtZW50LFxuICBpbmxpbmVDcml0aWNhbENzcyxcbiAgb3V0cHV0RmlsZXMsXG4gIGxvYWRCdW5kbGUgPSBsb2FkRXNtTW9kdWxlLFxufTogUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8UmVuZGVyUmVzdWx0PiB7XG4gIGNvbnN0IHtcbiAgICBkZWZhdWx0OiBib290c3RyYXBBcHBGbk9yTW9kdWxlLFxuICAgIMm1U0VSVkVSX0NPTlRFWFQsXG4gICAgcmVuZGVyTW9kdWxlLFxuICAgIHJlbmRlckFwcGxpY2F0aW9uLFxuICAgIMm1cmVzZXRDb21waWxlZENvbXBvbmVudHMsXG4gIH0gPSBhd2FpdCBsb2FkQnVuZGxlKCcuL21haW4uc2VydmVyLm1qcycpO1xuXG4gIC8vIE5lZWQgdG8gY2xlYW4gdXAgR0VORVJBVEVEX0NPTVBfSURTIG1hcCBpbiBgQGFuZ3VsYXIvY29yZWAuXG4gIC8vIE90aGVyd2lzZSBhbiBpbmNvcnJlY3QgY29tcG9uZW50IElEIGdlbmVyYXRpb24gY29sbGlzaW9uIGRldGVjdGVkIHdhcm5pbmcgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gZGV2ZWxvcG1lbnQuXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci1jbGkvaXNzdWVzLzI1OTI0XG4gIMm1cmVzZXRDb21waWxlZENvbXBvbmVudHM/LigpO1xuXG4gIGNvbnN0IHBsYXRmb3JtUHJvdmlkZXJzOiBTdGF0aWNQcm92aWRlcltdID0gW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IMm1U0VSVkVSX0NPTlRFWFQsXG4gICAgICB1c2VWYWx1ZTogc2VydmVyQ29udGV4dCxcbiAgICB9LFxuICBdO1xuXG4gIGxldCBodG1sOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgaWYgKGlzQm9vdHN0cmFwRm4oYm9vdHN0cmFwQXBwRm5Pck1vZHVsZSkpIHtcbiAgICBodG1sID0gYXdhaXQgcmVuZGVyQXBwbGljYXRpb24oYm9vdHN0cmFwQXBwRm5Pck1vZHVsZSwge1xuICAgICAgZG9jdW1lbnQsXG4gICAgICB1cmw6IHJvdXRlLFxuICAgICAgcGxhdGZvcm1Qcm92aWRlcnMsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaHRtbCA9IGF3YWl0IHJlbmRlck1vZHVsZShib290c3RyYXBBcHBGbk9yTW9kdWxlLCB7XG4gICAgICBkb2N1bWVudCxcbiAgICAgIHVybDogcm91dGUsXG4gICAgICBleHRyYVByb3ZpZGVyczogcGxhdGZvcm1Qcm92aWRlcnMsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoaW5saW5lQ3JpdGljYWxDc3MpIHtcbiAgICBjb25zdCBpbmxpbmVDcml0aWNhbENzc1Byb2Nlc3NvciA9IG5ldyBJbmxpbmVDcml0aWNhbENzc1Byb2Nlc3Nvcih7XG4gICAgICBtaW5pZnk6IGZhbHNlLCAvLyBDU1MgaGFzIGFscmVhZHkgYmVlbiBtaW5pZmllZCBkdXJpbmcgdGhlIGJ1aWxkLlxuICAgICAgcmVhZEFzc2V0OiBhc3luYyAoZmlsZVBhdGgpID0+IHtcbiAgICAgICAgZmlsZVBhdGggPSBiYXNlbmFtZShmaWxlUGF0aCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBvdXRwdXRGaWxlc1tmaWxlUGF0aF07XG4gICAgICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE91dHB1dCBmaWxlIGRvZXMgbm90IGV4aXN0OiAke2ZpbGVQYXRofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlubGluZUNyaXRpY2FsQ3NzUHJvY2Vzc29yLnByb2Nlc3MoaHRtbCwgeyBvdXRwdXRQYXRoOiAnJyB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29udGVudDogaHRtbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNCb290c3RyYXBGbih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzICgpID0+IFByb21pc2U8QXBwbGljYXRpb25SZWY+IHtcbiAgLy8gV2UgY2FuIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhIG1vZHVsZSBhbmQgYSBib290c3RyYXAgZnVuY3Rpb24gYnkgcmVhZGluZyBjb21waWxlci1nZW5lcmF0ZWQgYMm1bW9kYCBzdGF0aWMgcHJvcGVydHk6XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgISgnybVtb2QnIGluIHZhbHVlKTtcbn1cbiJdfQ==
|