1 | (function (factory) {
|
---|
2 | if (typeof module === "object" && typeof module.exports === "object") {
|
---|
3 | var v = factory(require, exports);
|
---|
4 | if (v !== undefined) module.exports = v;
|
---|
5 | }
|
---|
6 | else if (typeof define === "function" && define.amd) {
|
---|
7 | define("@angular/compiler-cli/ngcc/src/migrations/utils", ["require", "exports", "typescript", "@angular/compiler-cli/src/ngtsc/imports", "@angular/compiler-cli/src/ngtsc/reflection"], factory);
|
---|
8 | }
|
---|
9 | })(function (require, exports) {
|
---|
10 | "use strict";
|
---|
11 | Object.defineProperty(exports, "__esModule", { value: true });
|
---|
12 | exports.createInjectableDecorator = exports.createComponentDecorator = exports.createDirectiveDecorator = exports.hasConstructor = exports.hasPipeDecorator = exports.hasDirectiveDecorator = exports.isClassDeclaration = void 0;
|
---|
13 | /**
|
---|
14 | * @license
|
---|
15 | * Copyright Google LLC All Rights Reserved.
|
---|
16 | *
|
---|
17 | * Use of this source code is governed by an MIT-style license that can be
|
---|
18 | * found in the LICENSE file at https://angular.io/license
|
---|
19 | */
|
---|
20 | var ts = require("typescript");
|
---|
21 | var imports_1 = require("@angular/compiler-cli/src/ngtsc/imports");
|
---|
22 | var reflection_1 = require("@angular/compiler-cli/src/ngtsc/reflection");
|
---|
23 | function isClassDeclaration(clazz) {
|
---|
24 | return reflection_1.isNamedClassDeclaration(clazz) || reflection_1.isNamedFunctionDeclaration(clazz) ||
|
---|
25 | reflection_1.isNamedVariableDeclaration(clazz);
|
---|
26 | }
|
---|
27 | exports.isClassDeclaration = isClassDeclaration;
|
---|
28 | /**
|
---|
29 | * Returns true if the `clazz` is decorated as a `Directive` or `Component`.
|
---|
30 | */
|
---|
31 | function hasDirectiveDecorator(host, clazz) {
|
---|
32 | var ref = new imports_1.Reference(clazz);
|
---|
33 | return host.metadata.getDirectiveMetadata(ref) !== null;
|
---|
34 | }
|
---|
35 | exports.hasDirectiveDecorator = hasDirectiveDecorator;
|
---|
36 | /**
|
---|
37 | * Returns true if the `clazz` is decorated as a `Pipe`.
|
---|
38 | */
|
---|
39 | function hasPipeDecorator(host, clazz) {
|
---|
40 | var ref = new imports_1.Reference(clazz);
|
---|
41 | return host.metadata.getPipeMetadata(ref) !== null;
|
---|
42 | }
|
---|
43 | exports.hasPipeDecorator = hasPipeDecorator;
|
---|
44 | /**
|
---|
45 | * Returns true if the `clazz` has its own constructor function.
|
---|
46 | */
|
---|
47 | function hasConstructor(host, clazz) {
|
---|
48 | return host.reflectionHost.getConstructorParameters(clazz) !== null;
|
---|
49 | }
|
---|
50 | exports.hasConstructor = hasConstructor;
|
---|
51 | /**
|
---|
52 | * Create an empty `Directive` decorator that will be associated with the `clazz`.
|
---|
53 | */
|
---|
54 | function createDirectiveDecorator(clazz, metadata) {
|
---|
55 | var args = [];
|
---|
56 | if (metadata !== undefined) {
|
---|
57 | var metaArgs = [];
|
---|
58 | if (metadata.selector !== null) {
|
---|
59 | metaArgs.push(property('selector', metadata.selector));
|
---|
60 | }
|
---|
61 | if (metadata.exportAs !== null) {
|
---|
62 | metaArgs.push(property('exportAs', metadata.exportAs.join(', ')));
|
---|
63 | }
|
---|
64 | args.push(reifySourceFile(ts.createObjectLiteral(metaArgs)));
|
---|
65 | }
|
---|
66 | return {
|
---|
67 | name: 'Directive',
|
---|
68 | identifier: null,
|
---|
69 | import: { name: 'Directive', from: '@angular/core' },
|
---|
70 | node: null,
|
---|
71 | synthesizedFor: clazz.name,
|
---|
72 | args: args,
|
---|
73 | };
|
---|
74 | }
|
---|
75 | exports.createDirectiveDecorator = createDirectiveDecorator;
|
---|
76 | /**
|
---|
77 | * Create an empty `Component` decorator that will be associated with the `clazz`.
|
---|
78 | */
|
---|
79 | function createComponentDecorator(clazz, metadata) {
|
---|
80 | var metaArgs = [
|
---|
81 | property('template', ''),
|
---|
82 | ];
|
---|
83 | if (metadata.selector !== null) {
|
---|
84 | metaArgs.push(property('selector', metadata.selector));
|
---|
85 | }
|
---|
86 | if (metadata.exportAs !== null) {
|
---|
87 | metaArgs.push(property('exportAs', metadata.exportAs.join(', ')));
|
---|
88 | }
|
---|
89 | return {
|
---|
90 | name: 'Component',
|
---|
91 | identifier: null,
|
---|
92 | import: { name: 'Component', from: '@angular/core' },
|
---|
93 | node: null,
|
---|
94 | synthesizedFor: clazz.name,
|
---|
95 | args: [
|
---|
96 | reifySourceFile(ts.createObjectLiteral(metaArgs)),
|
---|
97 | ],
|
---|
98 | };
|
---|
99 | }
|
---|
100 | exports.createComponentDecorator = createComponentDecorator;
|
---|
101 | /**
|
---|
102 | * Create an empty `Injectable` decorator that will be associated with the `clazz`.
|
---|
103 | */
|
---|
104 | function createInjectableDecorator(clazz) {
|
---|
105 | return {
|
---|
106 | name: 'Injectable',
|
---|
107 | identifier: null,
|
---|
108 | import: { name: 'Injectable', from: '@angular/core' },
|
---|
109 | node: null,
|
---|
110 | synthesizedFor: clazz.name,
|
---|
111 | args: [],
|
---|
112 | };
|
---|
113 | }
|
---|
114 | exports.createInjectableDecorator = createInjectableDecorator;
|
---|
115 | function property(name, value) {
|
---|
116 | return ts.createPropertyAssignment(name, ts.createStringLiteral(value));
|
---|
117 | }
|
---|
118 | var EMPTY_SF = ts.createSourceFile('(empty)', '', ts.ScriptTarget.Latest);
|
---|
119 | /**
|
---|
120 | * Takes a `ts.Expression` and returns the same `ts.Expression`, but with an associated
|
---|
121 | * `ts.SourceFile`.
|
---|
122 | *
|
---|
123 | * This transformation is necessary to use synthetic `ts.Expression`s with the `PartialEvaluator`,
|
---|
124 | * and many decorator arguments are interpreted in this way.
|
---|
125 | */
|
---|
126 | function reifySourceFile(expr) {
|
---|
127 | var printer = ts.createPrinter();
|
---|
128 | var exprText = printer.printNode(ts.EmitHint.Unspecified, expr, EMPTY_SF);
|
---|
129 | var sf = ts.createSourceFile('(synthetic)', "const expr = " + exprText + ";", ts.ScriptTarget.Latest, true, ts.ScriptKind.JS);
|
---|
130 | var stmt = sf.statements[0];
|
---|
131 | if (!ts.isVariableStatement(stmt)) {
|
---|
132 | throw new Error("Expected VariableStatement, got " + ts.SyntaxKind[stmt.kind]);
|
---|
133 | }
|
---|
134 | return stmt.declarationList.declarations[0].initializer;
|
---|
135 | }
|
---|
136 | });
|
---|
137 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbmdjYy9zcmMvbWlncmF0aW9ucy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCwrQkFBaUM7SUFDakMsbUVBQXFEO0lBQ3JELHlFQUEySjtJQUczSixTQUFnQixrQkFBa0IsQ0FBQyxLQUFjO1FBQy9DLE9BQU8sb0NBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksdUNBQTBCLENBQUMsS0FBSyxDQUFDO1lBQ3RFLHVDQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFIRCxnREFHQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0IscUJBQXFCLENBQUMsSUFBbUIsRUFBRSxLQUF1QjtRQUNoRixJQUFNLEdBQUcsR0FBRyxJQUFJLG1CQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQztJQUMxRCxDQUFDO0lBSEQsc0RBR0M7SUFFRDs7T0FFRztJQUNILFNBQWdCLGdCQUFnQixDQUFDLElBQW1CLEVBQUUsS0FBdUI7UUFDM0UsSUFBTSxHQUFHLEdBQUcsSUFBSSxtQkFBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQ3JELENBQUM7SUFIRCw0Q0FHQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0IsY0FBYyxDQUFDLElBQW1CLEVBQUUsS0FBdUI7UUFDekUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQztJQUN0RSxDQUFDO0lBRkQsd0NBRUM7SUFFRDs7T0FFRztJQUNILFNBQWdCLHdCQUF3QixDQUNwQyxLQUF1QixFQUN2QixRQUEyRDtRQUM3RCxJQUFNLElBQUksR0FBb0IsRUFBRSxDQUFDO1FBQ2pDLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMxQixJQUFNLFFBQVEsR0FBNEIsRUFBRSxDQUFDO1lBQzdDLElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUN4RDtZQUNELElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkU7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsT0FBTztZQUNMLElBQUksRUFBRSxXQUFXO1lBQ2pCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBQztZQUNsRCxJQUFJLEVBQUUsSUFBSTtZQUNWLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSTtZQUMxQixJQUFJLE1BQUE7U0FDTCxDQUFDO0lBQ0osQ0FBQztJQXRCRCw0REFzQkM7SUFFRDs7T0FFRztJQUNILFNBQWdCLHdCQUF3QixDQUNwQyxLQUF1QixFQUN2QixRQUEwRDtRQUM1RCxJQUFNLFFBQVEsR0FBNEI7WUFDeEMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7U0FDekIsQ0FBQztRQUNGLElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUM5QixRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsT0FBTztZQUNMLElBQUksRUFBRSxXQUFXO1lBQ2pCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBQztZQUNsRCxJQUFJLEVBQUUsSUFBSTtZQUNWLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSTtZQUMxQixJQUFJLEVBQUU7Z0JBQ0osZUFBZSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNsRDtTQUNGLENBQUM7SUFDSixDQUFDO0lBdEJELDREQXNCQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0IseUJBQXlCLENBQUMsS0FBdUI7UUFDL0QsT0FBTztZQUNMLElBQUksRUFBRSxZQUFZO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBQztZQUNuRCxJQUFJLEVBQUUsSUFBSTtZQUNWLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSTtZQUMxQixJQUFJLEVBQUUsRUFBRTtTQUNULENBQUM7SUFDSixDQUFDO0lBVEQsOERBU0M7SUFFRCxTQUFTLFFBQVEsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUMzQyxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELElBQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFNUU7Ozs7OztPQU1HO0lBQ0gsU0FBUyxlQUFlLENBQUMsSUFBbUI7UUFDMUMsSUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25DLElBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FDMUIsYUFBYSxFQUFFLGtCQUFnQixRQUFRLE1BQUcsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRyxJQUFNLElBQUksR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBbUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFHLENBQUMsQ0FBQztTQUNoRjtRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBWSxDQUFDO0lBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtSZWZlcmVuY2V9IGZyb20gJy4uLy4uLy4uL3NyYy9uZ3RzYy9pbXBvcnRzJztcbmltcG9ydCB7Q2xhc3NEZWNsYXJhdGlvbiwgRGVjb3JhdG9yLCBpc05hbWVkQ2xhc3NEZWNsYXJhdGlvbiwgaXNOYW1lZEZ1bmN0aW9uRGVjbGFyYXRpb24sIGlzTmFtZWRWYXJpYWJsZURlY2xhcmF0aW9ufSBmcm9tICcuLi8uLi8uLi9zcmMvbmd0c2MvcmVmbGVjdGlvbic7XG5pbXBvcnQge01pZ3JhdGlvbkhvc3R9IGZyb20gJy4vbWlncmF0aW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3NEZWNsYXJhdGlvbihjbGF6ejogdHMuTm9kZSk6IGNsYXp6IGlzIENsYXNzRGVjbGFyYXRpb248dHMuRGVjbGFyYXRpb24+IHtcbiAgcmV0dXJuIGlzTmFtZWRDbGFzc0RlY2xhcmF0aW9uKGNsYXp6KSB8fCBpc05hbWVkRnVuY3Rpb25EZWNsYXJhdGlvbihjbGF6eikgfHxcbiAgICAgIGlzTmFtZWRWYXJpYWJsZURlY2xhcmF0aW9uKGNsYXp6KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGBjbGF6emAgaXMgZGVjb3JhdGVkIGFzIGEgYERpcmVjdGl2ZWAgb3IgYENvbXBvbmVudGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNEaXJlY3RpdmVEZWNvcmF0b3IoaG9zdDogTWlncmF0aW9uSG9zdCwgY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBib29sZWFuIHtcbiAgY29uc3QgcmVmID0gbmV3IFJlZmVyZW5jZShjbGF6eik7XG4gIHJldHVybiBob3N0Lm1ldGFkYXRhLmdldERpcmVjdGl2ZU1ldGFkYXRhKHJlZikgIT09IG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBgY2xhenpgIGlzIGRlY29yYXRlZCBhcyBhIGBQaXBlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1BpcGVEZWNvcmF0b3IoaG9zdDogTWlncmF0aW9uSG9zdCwgY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBib29sZWFuIHtcbiAgY29uc3QgcmVmID0gbmV3IFJlZmVyZW5jZShjbGF6eik7XG4gIHJldHVybiBob3N0Lm1ldGFkYXRhLmdldFBpcGVNZXRhZGF0YShyZWYpICE9PSBudWxsO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYGNsYXp6YCBoYXMgaXRzIG93biBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0NvbnN0cnVjdG9yKGhvc3Q6IE1pZ3JhdGlvbkhvc3QsIGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBob3N0LnJlZmxlY3Rpb25Ib3N0LmdldENvbnN0cnVjdG9yUGFyYW1ldGVycyhjbGF6eikgIT09IG51bGw7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVtcHR5IGBEaXJlY3RpdmVgIGRlY29yYXRvciB0aGF0IHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBgY2xhenpgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlyZWN0aXZlRGVjb3JhdG9yKFxuICAgIGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uLFxuICAgIG1ldGFkYXRhPzoge3NlbGVjdG9yOiBzdHJpbmd8bnVsbCwgZXhwb3J0QXM6IHN0cmluZ1tdfG51bGx9KTogRGVjb3JhdG9yIHtcbiAgY29uc3QgYXJnczogdHMuRXhwcmVzc2lvbltdID0gW107XG4gIGlmIChtZXRhZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWV0YUFyZ3M6IHRzLlByb3BlcnR5QXNzaWdubWVudFtdID0gW107XG4gICAgaWYgKG1ldGFkYXRhLnNlbGVjdG9yICE9PSBudWxsKSB7XG4gICAgICBtZXRhQXJncy5wdXNoKHByb3BlcnR5KCdzZWxlY3RvcicsIG1ldGFkYXRhLnNlbGVjdG9yKSk7XG4gICAgfVxuICAgIGlmIChtZXRhZGF0YS5leHBvcnRBcyAhPT0gbnVsbCkge1xuICAgICAgbWV0YUFyZ3MucHVzaChwcm9wZXJ0eSgnZXhwb3J0QXMnLCBtZXRhZGF0YS5leHBvcnRBcy5qb2luKCcsICcpKSk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChyZWlmeVNvdXJjZUZpbGUodHMuY3JlYXRlT2JqZWN0TGl0ZXJhbChtZXRhQXJncykpKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdEaXJlY3RpdmUnLFxuICAgIGlkZW50aWZpZXI6IG51bGwsXG4gICAgaW1wb3J0OiB7bmFtZTogJ0RpcmVjdGl2ZScsIGZyb206ICdAYW5ndWxhci9jb3JlJ30sXG4gICAgbm9kZTogbnVsbCxcbiAgICBzeW50aGVzaXplZEZvcjogY2xhenoubmFtZSxcbiAgICBhcmdzLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBlbXB0eSBgQ29tcG9uZW50YCBkZWNvcmF0b3IgdGhhdCB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGNsYXp6YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudERlY29yYXRvcihcbiAgICBjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbixcbiAgICBtZXRhZGF0YToge3NlbGVjdG9yOiBzdHJpbmd8bnVsbCwgZXhwb3J0QXM6IHN0cmluZ1tdfG51bGx9KTogRGVjb3JhdG9yIHtcbiAgY29uc3QgbWV0YUFyZ3M6IHRzLlByb3BlcnR5QXNzaWdubWVudFtdID0gW1xuICAgIHByb3BlcnR5KCd0ZW1wbGF0ZScsICcnKSxcbiAgXTtcbiAgaWYgKG1ldGFkYXRhLnNlbGVjdG9yICE9PSBudWxsKSB7XG4gICAgbWV0YUFyZ3MucHVzaChwcm9wZXJ0eSgnc2VsZWN0b3InLCBtZXRhZGF0YS5zZWxlY3RvcikpO1xuICB9XG4gIGlmIChtZXRhZGF0YS5leHBvcnRBcyAhPT0gbnVsbCkge1xuICAgIG1ldGFBcmdzLnB1c2gocHJvcGVydHkoJ2V4cG9ydEFzJywgbWV0YWRhdGEuZXhwb3J0QXMuam9pbignLCAnKSkpO1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0NvbXBvbmVudCcsXG4gICAgaWRlbnRpZmllcjogbnVsbCxcbiAgICBpbXBvcnQ6IHtuYW1lOiAnQ29tcG9uZW50JywgZnJvbTogJ0Bhbmd1bGFyL2NvcmUnfSxcbiAgICBub2RlOiBudWxsLFxuICAgIHN5bnRoZXNpemVkRm9yOiBjbGF6ei5uYW1lLFxuICAgIGFyZ3M6IFtcbiAgICAgIHJlaWZ5U291cmNlRmlsZSh0cy5jcmVhdGVPYmplY3RMaXRlcmFsKG1ldGFBcmdzKSksXG4gICAgXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZW1wdHkgYEluamVjdGFibGVgIGRlY29yYXRvciB0aGF0IHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBgY2xhenpgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5qZWN0YWJsZURlY29yYXRvcihjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IERlY29yYXRvciB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0luamVjdGFibGUnLFxuICAgIGlkZW50aWZpZXI6IG51bGwsXG4gICAgaW1wb3J0OiB7bmFtZTogJ0luamVjdGFibGUnLCBmcm9tOiAnQGFuZ3VsYXIvY29yZSd9LFxuICAgIG5vZGU6IG51bGwsXG4gICAgc3ludGhlc2l6ZWRGb3I6IGNsYXp6Lm5hbWUsXG4gICAgYXJnczogW10sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHRzLlByb3BlcnR5QXNzaWdubWVudCB7XG4gIHJldHVybiB0cy5jcmVhdGVQcm9wZXJ0eUFzc2lnbm1lbnQobmFtZSwgdHMuY3JlYXRlU3RyaW5nTGl0ZXJhbCh2YWx1ZSkpO1xufVxuXG5jb25zdCBFTVBUWV9TRiA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoJyhlbXB0eSknLCAnJywgdHMuU2NyaXB0VGFyZ2V0LkxhdGVzdCk7XG5cbi8qKlxuICogVGFrZXMgYSBgdHMuRXhwcmVzc2lvbmAgYW5kIHJldHVybnMgdGhlIHNhbWUgYHRzLkV4cHJlc3Npb25gLCBidXQgd2l0aCBhbiBhc3NvY2lhdGVkXG4gKiBgdHMuU291cmNlRmlsZWAuXG4gKlxuICogVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyBuZWNlc3NhcnkgdG8gdXNlIHN5bnRoZXRpYyBgdHMuRXhwcmVzc2lvbmBzIHdpdGggdGhlIGBQYXJ0aWFsRXZhbHVhdG9yYCxcbiAqIGFuZCBtYW55IGRlY29yYXRvciBhcmd1bWVudHMgYXJlIGludGVycHJldGVkIGluIHRoaXMgd2F5LlxuICovXG5mdW5jdGlvbiByZWlmeVNvdXJjZUZpbGUoZXhwcjogdHMuRXhwcmVzc2lvbik6IHRzLkV4cHJlc3Npb24ge1xuICBjb25zdCBwcmludGVyID0gdHMuY3JlYXRlUHJpbnRlcigpO1xuICBjb25zdCBleHByVGV4dCA9IHByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBleHByLCBFTVBUWV9TRik7XG4gIGNvbnN0IHNmID0gdHMuY3JlYXRlU291cmNlRmlsZShcbiAgICAgICcoc3ludGhldGljKScsIGBjb25zdCBleHByID0gJHtleHByVGV4dH07YCwgdHMuU2NyaXB0VGFyZ2V0LkxhdGVzdCwgdHJ1ZSwgdHMuU2NyaXB0S2luZC5KUyk7XG4gIGNvbnN0IHN0bXQgPSBzZi5zdGF0ZW1lbnRzWzBdO1xuICBpZiAoIXRzLmlzVmFyaWFibGVTdGF0ZW1lbnQoc3RtdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFZhcmlhYmxlU3RhdGVtZW50LCBnb3QgJHt0cy5TeW50YXhLaW5kW3N0bXQua2luZF19YCk7XG4gIH1cbiAgcmV0dXJuIHN0bXQuZGVjbGFyYXRpb25MaXN0LmRlY2xhcmF0aW9uc1swXS5pbml0aWFsaXplciE7XG59XG4iXX0= |
---|