@angular/ssr 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/esm2022/public_api.mjs +1 -1
- package/esm2022/src/common-engine.mjs +65 -47
- package/esm2022/src/peformance-profiler.mjs +51 -0
- package/fesm2022/ssr.mjs +108 -47
- package/fesm2022/ssr.mjs.map +1 -1
- package/index.d.ts +17 -6
- package/package.json +1 -1
- package/schematics/collection.json +1 -1
- package/schematics/ng-add/index.d.ts +3 -3
- package/schematics/ng-add/index.js +2 -311
- package/schematics/ng-add/index.mjs +3 -288
- package/schematics/ng-add/schema.json +1 -1
- package/schematics/ng-add/files/application-builder/server.ts.template +0 -53
- package/schematics/ng-add/files/server-builder/server.ts.template +0 -67
- package/schematics/utility/latest-versions/index.d.ts +0 -8
- package/schematics/utility/latest-versions/index.js +0 -16
- package/schematics/utility/latest-versions/index.mjs +0 -13
- package/schematics/utility/latest-versions/package.json +0 -9
- package/schematics/utility/utils.d.ts +0 -22
- package/schematics/utility/utils.js +0 -127
- package/schematics/utility/utils.mjs +0 -95
|
@@ -1,127 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
-
exports.addInitialNavigation = exports.getImportOfIdentifier = exports.findImport = exports.getOutputPath = exports.stripTsExtension = exports.getProject = void 0;
|
|
34
|
-
const schematics_1 = require("@angular-devkit/schematics");
|
|
35
|
-
const utility_1 = require("@schematics/angular/utility");
|
|
36
|
-
const ts = __importStar(require("typescript"));
|
|
37
|
-
async function getProject(host, projectName) {
|
|
38
|
-
const workspace = await (0, utility_1.readWorkspace)(host);
|
|
39
|
-
const project = workspace.projects.get(projectName);
|
|
40
|
-
if (!project || project.extensions.projectType !== 'application') {
|
|
41
|
-
throw new schematics_1.SchematicsException(`Universal requires a project type of 'application'.`);
|
|
42
|
-
}
|
|
43
|
-
return project;
|
|
44
|
-
}
|
|
45
|
-
exports.getProject = getProject;
|
|
46
|
-
function stripTsExtension(file) {
|
|
47
|
-
return file.replace(/\.ts$/, '');
|
|
48
|
-
}
|
|
49
|
-
exports.stripTsExtension = stripTsExtension;
|
|
50
|
-
async function getOutputPath(host, projectName, target) {
|
|
51
|
-
// Generate new output paths
|
|
52
|
-
const project = await getProject(host, projectName);
|
|
53
|
-
const serverTarget = project.targets.get(target);
|
|
54
|
-
if (!serverTarget || !serverTarget.options) {
|
|
55
|
-
throw new schematics_1.SchematicsException(`Cannot find 'options' for ${projectName} ${target} target.`);
|
|
56
|
-
}
|
|
57
|
-
const { outputPath } = serverTarget.options;
|
|
58
|
-
if (typeof outputPath !== 'string') {
|
|
59
|
-
throw new schematics_1.SchematicsException(`outputPath for ${projectName} ${target} target is not a string.`);
|
|
60
|
-
}
|
|
61
|
-
return outputPath;
|
|
62
|
-
}
|
|
63
|
-
exports.getOutputPath = getOutputPath;
|
|
64
|
-
function findImport(sourceFile, moduleName, symbolName) {
|
|
65
|
-
// Only look through the top-level imports.
|
|
66
|
-
for (const node of sourceFile.statements) {
|
|
67
|
-
if (!ts.isImportDeclaration(node) ||
|
|
68
|
-
!ts.isStringLiteral(node.moduleSpecifier) ||
|
|
69
|
-
node.moduleSpecifier.text !== moduleName) {
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
const namedBindings = node.importClause && node.importClause.namedBindings;
|
|
73
|
-
if (!namedBindings || !ts.isNamedImports(namedBindings)) {
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
if (namedBindings.elements.some((element) => element.name.text === symbolName)) {
|
|
77
|
-
return namedBindings;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
exports.findImport = findImport;
|
|
83
|
-
/** Gets import information about the specified identifier by using the Type checker. */
|
|
84
|
-
function getImportOfIdentifier(typeChecker, node) {
|
|
85
|
-
const symbol = typeChecker.getSymbolAtLocation(node);
|
|
86
|
-
if (!symbol || !symbol.declarations?.length) {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
const decl = symbol.declarations[0];
|
|
90
|
-
if (!ts.isImportSpecifier(decl)) {
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
const importDecl = decl.parent.parent.parent;
|
|
94
|
-
if (!ts.isStringLiteral(importDecl.moduleSpecifier)) {
|
|
95
|
-
return null;
|
|
96
|
-
}
|
|
97
|
-
return {
|
|
98
|
-
// Handles aliased imports: e.g. "import {Component as myComp} from ...";
|
|
99
|
-
name: decl.propertyName ? decl.propertyName.text : decl.name.text,
|
|
100
|
-
importModule: importDecl.moduleSpecifier.text,
|
|
101
|
-
node: importDecl,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
exports.getImportOfIdentifier = getImportOfIdentifier;
|
|
105
|
-
function addInitialNavigation(node) {
|
|
106
|
-
const existingOptions = node.arguments[1];
|
|
107
|
-
// If the user has explicitly set initialNavigation, we respect that
|
|
108
|
-
if (existingOptions &&
|
|
109
|
-
existingOptions.properties.some((exp) => ts.isPropertyAssignment(exp) &&
|
|
110
|
-
ts.isIdentifier(exp.name) &&
|
|
111
|
-
exp.name.text === 'initialNavigation')) {
|
|
112
|
-
return node;
|
|
113
|
-
}
|
|
114
|
-
const enabledLiteral = ts.factory.createStringLiteral('enabledBlocking');
|
|
115
|
-
// TypeScript will emit the Node with double quotes.
|
|
116
|
-
// In schematics we usually write code with a single quotes
|
|
117
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
118
|
-
enabledLiteral.singleQuote = true;
|
|
119
|
-
const initialNavigationProperty = ts.factory.createPropertyAssignment('initialNavigation', enabledLiteral);
|
|
120
|
-
const routerOptions = existingOptions
|
|
121
|
-
? ts.factory.updateObjectLiteralExpression(existingOptions, ts.factory.createNodeArray([...existingOptions.properties, initialNavigationProperty]))
|
|
122
|
-
: ts.factory.createObjectLiteralExpression([initialNavigationProperty], true);
|
|
123
|
-
const args = [node.arguments[0], routerOptions];
|
|
124
|
-
return ts.factory.createCallExpression(node.expression, node.typeArguments, args);
|
|
125
|
-
}
|
|
126
|
-
exports.addInitialNavigation = addInitialNavigation;
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3Nzci9zY2hlbWF0aWNzL3V0aWxpdHkvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHSCwyREFBdUU7QUFDdkUseURBQTREO0FBQzVELCtDQUFpQztBQUUxQixLQUFLLFVBQVUsVUFBVSxDQUM5QixJQUFVLEVBQ1YsV0FBbUI7SUFFbkIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFBLHVCQUFhLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFcEQsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsS0FBSyxhQUFhLEVBQUU7UUFDaEUsTUFBTSxJQUFJLGdDQUFtQixDQUFDLHFEQUFxRCxDQUFDLENBQUM7S0FDdEY7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBWkQsZ0NBWUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxJQUFZO0lBQzNDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUZELDRDQUVDO0FBRU0sS0FBSyxVQUFVLGFBQWEsQ0FDakMsSUFBVSxFQUNWLFdBQW1CLEVBQ25CLE1BQTBCO0lBRTFCLDRCQUE0QjtJQUM1QixNQUFNLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDcEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FB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QUFDLEdBQUcsQ0FBQztZQUM1QixFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDekIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQ3hDLEVBQ0Q7UUFDQSxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pFLG9EQUFvRDtJQUNwRCwyREFBMkQ7SUFDM0QsOERBQThEO0lBQzdELGNBQXNCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUUzQyxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQ25FLG1CQUFtQixFQUNuQixjQUFjLENBQ2YsQ0FBQztJQUNGLE1BQU0sYUFBYSxHQUFHLGVBQWU7UUFDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQ3RDLGVBQWUsRUFDZixFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDLENBQ3ZGO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUVoRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BGLENBQUM7QUFuQ0Qsb0RBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7IHdvcmtzcGFjZXMgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQgeyBTY2hlbWF0aWNzRXhjZXB0aW9uLCBUcmVlIH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuaW1wb3J0IHsgcmVhZFdvcmtzcGFjZSB9IGZyb20gJ0BzY2hlbWF0aWNzL2FuZ3VsYXIvdXRpbGl0eSc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb2plY3QoXG4gIGhvc3Q6IFRyZWUsXG4gIHByb2plY3ROYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHdvcmtzcGFjZXMuUHJvamVjdERlZmluaXRpb24+IHtcbiAgY29uc3Qgd29ya3NwYWNlID0gYXdhaXQgcmVhZFdvcmtzcGFjZShob3N0KTtcbiAgY29uc3QgcHJvamVjdCA9IHdvcmtzcGFjZS5wcm9qZWN0cy5nZXQocHJvamVjdE5hbWUpO1xuXG4gIGlmICghcHJvamVjdCB8fCBwcm9qZWN0LmV4dGVuc2lvbnMucHJvamVjdFR5cGUgIT09ICdhcHBsaWNhdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihgVW5pdmVyc2FsIHJlcXVpcmVzIGEgcHJvamVjdCB0eXBlIG9mICdhcHBsaWNhdGlvbicuYCk7XG4gIH1cblxuICByZXR1cm4gcHJvamVjdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVHNFeHRlbnNpb24oZmlsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZpbGUucmVwbGFjZSgvXFwudHMkLywgJycpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3V0cHV0UGF0aChcbiAgaG9zdDogVHJlZSxcbiAgcHJvamVjdE5hbWU6IHN0cmluZyxcbiAgdGFyZ2V0OiAnc2VydmVyJyB8ICdidWlsZCcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICAvLyBHZW5lcmF0ZSBuZXcgb3V0cHV0IHBhdGhzXG4gIGNvbnN0IHByb2plY3QgPSBhd2FpdCBnZXRQcm9qZWN0KGhvc3QsIHByb2plY3ROYW1lKTtcbiAgY29uc3Qgc2VydmVyVGFyZ2V0ID0gcHJvamVjdC50YXJnZXRzLmdldCh0YXJnZXQpO1xuICBpZiAoIXNlcnZlclRhcmdldCB8fCAhc2VydmVyVGFyZ2V0Lm9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihgQ2Fubm90IGZpbmQgJ29wdGlvbnMnIGZvciAke3Byb2plY3ROYW1lfSAke3RhcmdldH0gdGFyZ2V0LmApO1xuICB9XG5cbiAgY29uc3QgeyBvdXRwdXRQYXRoIH0gPSBzZXJ2ZXJUYXJnZXQub3B0aW9ucztcbiAgaWYgKHR5cGVvZiBvdXRwdXRQYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBTY2hlbWF0aWNzRXhjZXB0aW9uKFxuICAgICAgYG91dHB1dFBhdGggZm9yICR7cHJvamVjdE5hbWV9ICR7dGFyZ2V0fSB0YXJnZXQgaXMgbm90IGEgc3RyaW5nLmAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEltcG9ydChcbiAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSxcbiAgbW9kdWxlTmFtZTogc3RyaW5nLFxuICBzeW1ib2xOYW1lOiBzdHJpbmcsXG4pOiB0cy5OYW1lZEltcG9ydHMgfCBudWxsIHtcbiAgLy8gT25seSBsb29rIHRocm91Z2ggdGhlIHRvcC1sZXZlbCBpbXBvcnRzLlxuICBmb3IgKGNvbnN0IG5vZGUgb2Ygc291cmNlRmlsZS5zdGF0ZW1lbnRzKSB7XG4gICAgaWYgKFxuICAgICAgIXRzLmlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkgfHxcbiAgICAgICF0cy5pc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpIHx8XG4gICAgICBub2RlLm1vZHVsZVNwZWNpZmllci50ZXh0ICE9PSBtb2R1bGVOYW1lXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lZEJpbmRpbmdzID0gbm9kZS5pbXBvcnRDbGF1c2UgJiYgbm9kZS5pbXBvcnRDbGF1c2UubmFtZWRCaW5kaW5ncztcblxuICAgIGlmICghbmFtZWRCaW5kaW5ncyB8fCAhdHMuaXNOYW1lZEltcG9ydHMobmFtZWRCaW5kaW5ncykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChuYW1lZEJpbmRpbmdzLmVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZS50ZXh0ID09PSBzeW1ib2xOYW1lKSkge1xuICAgICAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIEltcG9ydCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbXBvcnRNb2R1bGU6IHN0cmluZztcbiAgbm9kZTogdHMuSW1wb3J0RGVjbGFyYXRpb247XG59O1xuXG4vKiogR2V0cyBpbXBvcnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIGJ5IHVzaW5nIHRoZSBUeXBlIGNoZWNrZXIuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0T2ZJZGVudGlmaWVyKFxuICB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gIG5vZGU6IHRzLklkZW50aWZpZXIsXG4pOiBJbXBvcnQgfCBudWxsIHtcbiAgY29uc3Qgc3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcblxuICBpZiAoIXN5bWJvbCB8fCAhc3ltYm9sLmRlY2xhcmF0aW9ucz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkZWNsID0gc3ltYm9sLmRlY2xhcmF0aW9uc1swXTtcblxuICBpZiAoIXRzLmlzSW1wb3J0U3BlY2lmaWVyKGRlY2wpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBpbXBvcnREZWNsID0gZGVjbC5wYXJlbnQucGFyZW50LnBhcmVudDtcblxuICBpZiAoIXRzLmlzU3RyaW5nTGl0ZXJhbChpbXBvcnREZWNsLm1vZHVsZVNwZWNpZmllcikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gSGFuZGxlcyBhbGlhc2VkIGltcG9ydHM6IGUuZy4gXCJpbXBvcnQge0NvbXBvbmVudCBhcyBteUNvbXB9IGZyb20gLi4uXCI7XG4gICAgbmFtZTogZGVjbC5wcm9wZXJ0eU5hbWUgPyBkZWNsLnByb3BlcnR5TmFtZS50ZXh0IDogZGVjbC5uYW1lLnRleHQsXG4gICAgaW1wb3J0TW9kdWxlOiBpbXBvcnREZWNsLm1vZHVsZVNwZWNpZmllci50ZXh0LFxuICAgIG5vZGU6IGltcG9ydERlY2wsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRJbml0aWFsTmF2aWdhdGlvbihub2RlOiB0cy5DYWxsRXhwcmVzc2lvbik6IHRzLkNhbGxFeHByZXNzaW9uIHtcbiAgY29uc3QgZXhpc3RpbmdPcHRpb25zID0gbm9kZS5hcmd1bWVudHNbMV0gYXMgdHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24gfCB1bmRlZmluZWQ7XG5cbiAgLy8gSWYgdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgc2V0IGluaXRpYWxOYXZpZ2F0aW9uLCB3ZSByZXNwZWN0IHRoYXRcbiAgaWYgKFxuICAgIGV4aXN0aW5nT3B0aW9ucyAmJlxuICAgIGV4aXN0aW5nT3B0aW9ucy5wcm9wZXJ0aWVzLnNvbWUoXG4gICAgICAoZXhwKSA9PlxuICAgICAgICB0cy5pc1Byb3BlcnR5QXNzaWdubWVudChleHApICYmXG4gICAgICAgIHRzLmlzSWRlbnRpZmllcihleHAubmFtZSkgJiZcbiAgICAgICAgZXhwLm5hbWUudGV4dCA9PT0gJ2luaXRpYWxOYXZpZ2F0aW9uJyxcbiAgICApXG4gICkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgY29uc3QgZW5hYmxlZExpdGVyYWwgPSB0cy5mYWN0b3J5LmNyZWF0ZVN0cmluZ0xpdGVyYWwoJ2VuYWJsZWRCbG9ja2luZycpO1xuICAvLyBUeXBlU2NyaXB0IHdpbGwgZW1pdCB0aGUgTm9kZSB3aXRoIGRvdWJsZSBxdW90ZXMuXG4gIC8vIEluIHNjaGVtYXRpY3Mgd2UgdXN1YWxseSB3cml0ZSBjb2RlIHdpdGggYSBzaW5nbGUgcXVvdGVzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIChlbmFibGVkTGl0ZXJhbCBhcyBhbnkpLnNpbmdsZVF1b3RlID0gdHJ1ZTtcblxuICBjb25zdCBpbml0aWFsTmF2aWdhdGlvblByb3BlcnR5ID0gdHMuZmFjdG9yeS5jcmVhdGVQcm9wZXJ0eUFzc2lnbm1lbnQoXG4gICAgJ2luaXRpYWxOYXZpZ2F0aW9uJyxcbiAgICBlbmFibGVkTGl0ZXJhbCxcbiAgKTtcbiAgY29uc3Qgcm91dGVyT3B0aW9ucyA9IGV4aXN0aW5nT3B0aW9uc1xuICAgID8gdHMuZmFjdG9yeS51cGRhdGVPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihcbiAgICAgICAgZXhpc3RpbmdPcHRpb25zLFxuICAgICAgICB0cy5mYWN0b3J5LmNyZWF0ZU5vZGVBcnJheShbLi4uZXhpc3RpbmdPcHRpb25zLnByb3BlcnRpZXMsIGluaXRpYWxOYXZpZ2F0aW9uUHJvcGVydHldKSxcbiAgICAgIClcbiAgICA6IHRzLmZhY3RvcnkuY3JlYXRlT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24oW2luaXRpYWxOYXZpZ2F0aW9uUHJvcGVydHldLCB0cnVlKTtcbiAgY29uc3QgYXJncyA9IFtub2RlLmFyZ3VtZW50c1swXSwgcm91dGVyT3B0aW9uc107XG5cbiAgcmV0dXJuIHRzLmZhY3RvcnkuY3JlYXRlQ2FsbEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBub2RlLnR5cGVBcmd1bWVudHMsIGFyZ3MpO1xufVxuIl19
|
|
@@ -1,95 +0,0 @@
|
|
|
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 { SchematicsException } from '@angular-devkit/schematics';
|
|
9
|
-
import { readWorkspace } from '@schematics/angular/utility';
|
|
10
|
-
import * as ts from 'typescript';
|
|
11
|
-
export async function getProject(host, projectName) {
|
|
12
|
-
const workspace = await readWorkspace(host);
|
|
13
|
-
const project = workspace.projects.get(projectName);
|
|
14
|
-
if (!project || project.extensions.projectType !== 'application') {
|
|
15
|
-
throw new SchematicsException(`Universal requires a project type of 'application'.`);
|
|
16
|
-
}
|
|
17
|
-
return project;
|
|
18
|
-
}
|
|
19
|
-
export function stripTsExtension(file) {
|
|
20
|
-
return file.replace(/\.ts$/, '');
|
|
21
|
-
}
|
|
22
|
-
export async function getOutputPath(host, projectName, target) {
|
|
23
|
-
// Generate new output paths
|
|
24
|
-
const project = await getProject(host, projectName);
|
|
25
|
-
const serverTarget = project.targets.get(target);
|
|
26
|
-
if (!serverTarget || !serverTarget.options) {
|
|
27
|
-
throw new SchematicsException(`Cannot find 'options' for ${projectName} ${target} target.`);
|
|
28
|
-
}
|
|
29
|
-
const { outputPath } = serverTarget.options;
|
|
30
|
-
if (typeof outputPath !== 'string') {
|
|
31
|
-
throw new SchematicsException(`outputPath for ${projectName} ${target} target is not a string.`);
|
|
32
|
-
}
|
|
33
|
-
return outputPath;
|
|
34
|
-
}
|
|
35
|
-
export function findImport(sourceFile, moduleName, symbolName) {
|
|
36
|
-
// Only look through the top-level imports.
|
|
37
|
-
for (const node of sourceFile.statements) {
|
|
38
|
-
if (!ts.isImportDeclaration(node) ||
|
|
39
|
-
!ts.isStringLiteral(node.moduleSpecifier) ||
|
|
40
|
-
node.moduleSpecifier.text !== moduleName) {
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
const namedBindings = node.importClause && node.importClause.namedBindings;
|
|
44
|
-
if (!namedBindings || !ts.isNamedImports(namedBindings)) {
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
if (namedBindings.elements.some((element) => element.name.text === symbolName)) {
|
|
48
|
-
return namedBindings;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
/** Gets import information about the specified identifier by using the Type checker. */
|
|
54
|
-
export function getImportOfIdentifier(typeChecker, node) {
|
|
55
|
-
const symbol = typeChecker.getSymbolAtLocation(node);
|
|
56
|
-
if (!symbol || !symbol.declarations?.length) {
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
const decl = symbol.declarations[0];
|
|
60
|
-
if (!ts.isImportSpecifier(decl)) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
const importDecl = decl.parent.parent.parent;
|
|
64
|
-
if (!ts.isStringLiteral(importDecl.moduleSpecifier)) {
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
return {
|
|
68
|
-
// Handles aliased imports: e.g. "import {Component as myComp} from ...";
|
|
69
|
-
name: decl.propertyName ? decl.propertyName.text : decl.name.text,
|
|
70
|
-
importModule: importDecl.moduleSpecifier.text,
|
|
71
|
-
node: importDecl,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
export function addInitialNavigation(node) {
|
|
75
|
-
const existingOptions = node.arguments[1];
|
|
76
|
-
// If the user has explicitly set initialNavigation, we respect that
|
|
77
|
-
if (existingOptions &&
|
|
78
|
-
existingOptions.properties.some((exp) => ts.isPropertyAssignment(exp) &&
|
|
79
|
-
ts.isIdentifier(exp.name) &&
|
|
80
|
-
exp.name.text === 'initialNavigation')) {
|
|
81
|
-
return node;
|
|
82
|
-
}
|
|
83
|
-
const enabledLiteral = ts.factory.createStringLiteral('enabledBlocking');
|
|
84
|
-
// TypeScript will emit the Node with double quotes.
|
|
85
|
-
// In schematics we usually write code with a single quotes
|
|
86
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
87
|
-
enabledLiteral.singleQuote = true;
|
|
88
|
-
const initialNavigationProperty = ts.factory.createPropertyAssignment('initialNavigation', enabledLiteral);
|
|
89
|
-
const routerOptions = existingOptions
|
|
90
|
-
? ts.factory.updateObjectLiteralExpression(existingOptions, ts.factory.createNodeArray([...existingOptions.properties, initialNavigationProperty]))
|
|
91
|
-
: ts.factory.createObjectLiteralExpression([initialNavigationProperty], true);
|
|
92
|
-
const args = [node.arguments[0], routerOptions];
|
|
93
|
-
return ts.factory.createCallExpression(node.expression, node.typeArguments, args);
|
|
94
|
-
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3Nzci9zY2hlbWF0aWNzL3V0aWxpdHkvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBR0gsT0FBTyxFQUFFLG1CQUFtQixFQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsVUFBVSxDQUM5QixJQUFVLEVBQ1YsV0FBbUI7SUFFbkIsTUFBTSxTQUFTLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFcEQsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsS0FBSyxhQUFhLEVBQUU7UUFDaEUsTUFBTSxJQUFJLG1CQUFtQixDQUFDLHFEQUFxRCxDQUFDLENBQUM7S0FDdEY7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQVk7SUFDM0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQ2pDLElBQVUsRUFDVixXQUFtQixFQUNuQixNQUEwQjtJQUUxQiw0QkFBNEI7SUFDNUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFD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Z2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7IHdvcmtzcGFjZXMgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQgeyBTY2hlbWF0aWNzRXhjZXB0aW9uLCBUcmVlIH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuaW1wb3J0IHsgcmVhZFdvcmtzcGFjZSB9IGZyb20gJ0BzY2hlbWF0aWNzL2FuZ3VsYXIvdXRpbGl0eSc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb2plY3QoXG4gIGhvc3Q6IFRyZWUsXG4gIHByb2plY3ROYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHdvcmtzcGFjZXMuUHJvamVjdERlZmluaXRpb24+IHtcbiAgY29uc3Qgd29ya3NwYWNlID0gYXdhaXQgcmVhZFdvcmtzcGFjZShob3N0KTtcbiAgY29uc3QgcHJvamVjdCA9IHdvcmtzcGFjZS5wcm9qZWN0cy5nZXQocHJvamVjdE5hbWUpO1xuXG4gIGlmICghcHJvamVjdCB8fCBwcm9qZWN0LmV4dGVuc2lvbnMucHJvamVjdFR5cGUgIT09ICdhcHBsaWNhdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihgVW5pdmVyc2FsIHJlcXVpcmVzIGEgcHJvamVjdCB0eXBlIG9mICdhcHBsaWNhdGlvbicuYCk7XG4gIH1cblxuICByZXR1cm4gcHJvamVjdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVHNFeHRlbnNpb24oZmlsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZpbGUucmVwbGFjZSgvXFwudHMkLywgJycpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3V0cHV0UGF0aChcbiAgaG9zdDogVHJlZSxcbiAgcHJvamVjdE5hbWU6IHN0cmluZyxcbiAgdGFyZ2V0OiAnc2VydmVyJyB8ICdidWlsZCcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICAvLyBHZW5lcmF0ZSBuZXcgb3V0cHV0IHBhdGhzXG4gIGNvbnN0IHByb2plY3QgPSBhd2FpdCBnZXRQcm9qZWN0KGhvc3QsIHByb2plY3ROYW1lKTtcbiAgY29uc3Qgc2VydmVyVGFyZ2V0ID0gcHJvamVjdC50YXJnZXRzLmdldCh0YXJnZXQpO1xuICBpZiAoIXNlcnZlclRhcmdldCB8fCAhc2VydmVyVGFyZ2V0Lm9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihgQ2Fubm90IGZpbmQgJ29wdGlvbnMnIGZvciAke3Byb2plY3ROYW1lfSAke3RhcmdldH0gdGFyZ2V0LmApO1xuICB9XG5cbiAgY29uc3QgeyBvdXRwdXRQYXRoIH0gPSBzZXJ2ZXJUYXJnZXQub3B0aW9ucztcbiAgaWYgKHR5cGVvZiBvdXRwdXRQYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBTY2hlbWF0aWNzRXhjZXB0aW9uKFxuICAgICAgYG91dHB1dFBhdGggZm9yICR7cHJvamVjdE5hbWV9ICR7dGFyZ2V0fSB0YXJnZXQgaXMgbm90IGEgc3RyaW5nLmAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEltcG9ydChcbiAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSxcbiAgbW9kdWxlTmFtZTogc3RyaW5nLFxuICBzeW1ib2xOYW1lOiBzdHJpbmcsXG4pOiB0cy5OYW1lZEltcG9ydHMgfCBudWxsIHtcbiAgLy8gT25seSBsb29rIHRocm91Z2ggdGhlIHRvcC1sZXZlbCBpbXBvcnRzLlxuICBmb3IgKGNvbnN0IG5vZGUgb2Ygc291cmNlRmlsZS5zdGF0ZW1lbnRzKSB7XG4gICAgaWYgKFxuICAgICAgIXRzLmlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkgfHxcbiAgICAgICF0cy5pc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpIHx8XG4gICAgICBub2RlLm1vZHVsZVNwZWNpZmllci50ZXh0ICE9PSBtb2R1bGVOYW1lXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lZEJpbmRpbmdzID0gbm9kZS5pbXBvcnRDbGF1c2UgJiYgbm9kZS5pbXBvcnRDbGF1c2UubmFtZWRCaW5kaW5ncztcblxuICAgIGlmICghbmFtZWRCaW5kaW5ncyB8fCAhdHMuaXNOYW1lZEltcG9ydHMobmFtZWRCaW5kaW5ncykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChuYW1lZEJpbmRpbmdzLmVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZS50ZXh0ID09PSBzeW1ib2xOYW1lKSkge1xuICAgICAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIEltcG9ydCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbXBvcnRNb2R1bGU6IHN0cmluZztcbiAgbm9kZTogdHMuSW1wb3J0RGVjbGFyYXRpb247XG59O1xuXG4vKiogR2V0cyBpbXBvcnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIGJ5IHVzaW5nIHRoZSBUeXBlIGNoZWNrZXIuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0T2ZJZGVudGlmaWVyKFxuICB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gIG5vZGU6IHRzLklkZW50aWZpZXIsXG4pOiBJbXBvcnQgfCBudWxsIHtcbiAgY29uc3Qgc3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcblxuICBpZiAoIXN5bWJvbCB8fCAhc3ltYm9sLmRlY2xhcmF0aW9ucz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkZWNsID0gc3ltYm9sLmRlY2xhcmF0aW9uc1swXTtcblxuICBpZiAoIXRzLmlzSW1wb3J0U3BlY2lmaWVyKGRlY2wpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBpbXBvcnREZWNsID0gZGVjbC5wYXJlbnQucGFyZW50LnBhcmVudDtcblxuICBpZiAoIXRzLmlzU3RyaW5nTGl0ZXJhbChpbXBvcnREZWNsLm1vZHVsZVNwZWNpZmllcikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gSGFuZGxlcyBhbGlhc2VkIGltcG9ydHM6IGUuZy4gXCJpbXBvcnQge0NvbXBvbmVudCBhcyBteUNvbXB9IGZyb20gLi4uXCI7XG4gICAgbmFtZTogZGVjbC5wcm9wZXJ0eU5hbWUgPyBkZWNsLnByb3BlcnR5TmFtZS50ZXh0IDogZGVjbC5uYW1lLnRleHQsXG4gICAgaW1wb3J0TW9kdWxlOiBpbXBvcnREZWNsLm1vZHVsZVNwZWNpZmllci50ZXh0LFxuICAgIG5vZGU6IGltcG9ydERlY2wsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRJbml0aWFsTmF2aWdhdGlvbihub2RlOiB0cy5DYWxsRXhwcmVzc2lvbik6IHRzLkNhbGxFeHByZXNzaW9uIHtcbiAgY29uc3QgZXhpc3RpbmdPcHRpb25zID0gbm9kZS5hcmd1bWVudHNbMV0gYXMgdHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24gfCB1bmRlZmluZWQ7XG5cbiAgLy8gSWYgdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgc2V0IGluaXRpYWxOYXZpZ2F0aW9uLCB3ZSByZXNwZWN0IHRoYXRcbiAgaWYgKFxuICAgIGV4aXN0aW5nT3B0aW9ucyAmJlxuICAgIGV4aXN0aW5nT3B0aW9ucy5wcm9wZXJ0aWVzLnNvbWUoXG4gICAgICAoZXhwKSA9PlxuICAgICAgICB0cy5pc1Byb3BlcnR5QXNzaWdubWVudChleHApICYmXG4gICAgICAgIHRzLmlzSWRlbnRpZmllcihleHAubmFtZSkgJiZcbiAgICAgICAgZXhwLm5hbWUudGV4dCA9PT0gJ2luaXRpYWxOYXZpZ2F0aW9uJyxcbiAgICApXG4gICkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgY29uc3QgZW5hYmxlZExpdGVyYWwgPSB0cy5mYWN0b3J5LmNyZWF0ZVN0cmluZ0xpdGVyYWwoJ2VuYWJsZWRCbG9ja2luZycpO1xuICAvLyBUeXBlU2NyaXB0IHdpbGwgZW1pdCB0aGUgTm9kZSB3aXRoIGRvdWJsZSBxdW90ZXMuXG4gIC8vIEluIHNjaGVtYXRpY3Mgd2UgdXN1YWxseSB3cml0ZSBjb2RlIHdpdGggYSBzaW5nbGUgcXVvdGVzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIChlbmFibGVkTGl0ZXJhbCBhcyBhbnkpLnNpbmdsZVF1b3RlID0gdHJ1ZTtcblxuICBjb25zdCBpbml0aWFsTmF2aWdhdGlvblByb3BlcnR5ID0gdHMuZmFjdG9yeS5jcmVhdGVQcm9wZXJ0eUFzc2lnbm1lbnQoXG4gICAgJ2luaXRpYWxOYXZpZ2F0aW9uJyxcbiAgICBlbmFibGVkTGl0ZXJhbCxcbiAgKTtcbiAgY29uc3Qgcm91dGVyT3B0aW9ucyA9IGV4aXN0aW5nT3B0aW9uc1xuICAgID8gdHMuZmFjdG9yeS51cGRhdGVPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihcbiAgICAgICAgZXhpc3RpbmdPcHRpb25zLFxuICAgICAgICB0cy5mYWN0b3J5LmNyZWF0ZU5vZGVBcnJheShbLi4uZXhpc3RpbmdPcHRpb25zLnByb3BlcnRpZXMsIGluaXRpYWxOYXZpZ2F0aW9uUHJvcGVydHldKSxcbiAgICAgIClcbiAgICA6IHRzLmZhY3RvcnkuY3JlYXRlT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24oW2luaXRpYWxOYXZpZ2F0aW9uUHJvcGVydHldLCB0cnVlKTtcbiAgY29uc3QgYXJncyA9IFtub2RlLmFyZ3VtZW50c1swXSwgcm91dGVyT3B0aW9uc107XG5cbiAgcmV0dXJuIHRzLmZhY3RvcnkuY3JlYXRlQ2FsbEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBub2RlLnR5cGVBcmd1bWVudHMsIGFyZ3MpO1xufVxuIl19
|