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 | (function (factory) {
|
---|
9 | if (typeof module === "object" && typeof module.exports === "object") {
|
---|
10 | var v = factory(require, exports);
|
---|
11 | if (v !== undefined) module.exports = v;
|
---|
12 | }
|
---|
13 | else if (typeof define === "function" && define.amd) {
|
---|
14 | define("@angular/compiler-cli/src/metadata/schema", ["require", "exports"], factory);
|
---|
15 | }
|
---|
16 | })(function (require, exports) {
|
---|
17 | "use strict";
|
---|
18 | Object.defineProperty(exports, "__esModule", { value: true });
|
---|
19 | exports.isMetadataError = exports.isMetadataSymbolicSpreadExpression = exports.isMetadataSymbolicSelectExpression = exports.isMetadataSymbolicReferenceExpression = exports.isMetadataImportDefaultReference = exports.isMetadataImportedSymbolReferenceExpression = exports.isMetadataModuleReferenceExpression = exports.isMetadataGlobalReferenceExpression = exports.isMetadataSymbolicIfExpression = exports.isMetadataSymbolicPrefixExpression = exports.isMetadataSymbolicCallExpression = exports.isMetadataSymbolicIndexExpression = exports.isMetadataSymbolicBinaryExpression = exports.isMetadataSymbolicExpression = exports.isFunctionMetadata = exports.isConstructorMetadata = exports.isMethodMetadata = exports.isMemberMetadata = exports.isInterfaceMetadata = exports.isClassMetadata = exports.isModuleMetadata = exports.METADATA_VERSION = void 0;
|
---|
20 | // Metadata Schema
|
---|
21 | // If you make a backwards incompatible change to the schema, increment the METADTA_VERSION number.
|
---|
22 | // If you make a backwards compatible change to the metadata (such as adding an option field) then
|
---|
23 | // leave METADATA_VERSION the same. If possible, supply as many versions of the metadata that can
|
---|
24 | // represent the semantics of the file in an array. For example, when generating a version 2 file,
|
---|
25 | // if version 1 can accurately represent the metadata, generate both version 1 and version 2 in
|
---|
26 | // an array.
|
---|
27 | exports.METADATA_VERSION = 4;
|
---|
28 | function isModuleMetadata(value) {
|
---|
29 | return value && value.__symbolic === 'module';
|
---|
30 | }
|
---|
31 | exports.isModuleMetadata = isModuleMetadata;
|
---|
32 | function isClassMetadata(value) {
|
---|
33 | return value && value.__symbolic === 'class';
|
---|
34 | }
|
---|
35 | exports.isClassMetadata = isClassMetadata;
|
---|
36 | function isInterfaceMetadata(value) {
|
---|
37 | return value && value.__symbolic === 'interface';
|
---|
38 | }
|
---|
39 | exports.isInterfaceMetadata = isInterfaceMetadata;
|
---|
40 | function isMemberMetadata(value) {
|
---|
41 | if (value) {
|
---|
42 | switch (value.__symbolic) {
|
---|
43 | case 'constructor':
|
---|
44 | case 'method':
|
---|
45 | case 'property':
|
---|
46 | return true;
|
---|
47 | }
|
---|
48 | }
|
---|
49 | return false;
|
---|
50 | }
|
---|
51 | exports.isMemberMetadata = isMemberMetadata;
|
---|
52 | function isMethodMetadata(value) {
|
---|
53 | return value && (value.__symbolic === 'constructor' || value.__symbolic === 'method');
|
---|
54 | }
|
---|
55 | exports.isMethodMetadata = isMethodMetadata;
|
---|
56 | function isConstructorMetadata(value) {
|
---|
57 | return value && value.__symbolic === 'constructor';
|
---|
58 | }
|
---|
59 | exports.isConstructorMetadata = isConstructorMetadata;
|
---|
60 | function isFunctionMetadata(value) {
|
---|
61 | return value && value.__symbolic === 'function';
|
---|
62 | }
|
---|
63 | exports.isFunctionMetadata = isFunctionMetadata;
|
---|
64 | function isMetadataSymbolicExpression(value) {
|
---|
65 | if (value) {
|
---|
66 | switch (value.__symbolic) {
|
---|
67 | case 'binary':
|
---|
68 | case 'call':
|
---|
69 | case 'index':
|
---|
70 | case 'new':
|
---|
71 | case 'pre':
|
---|
72 | case 'reference':
|
---|
73 | case 'select':
|
---|
74 | case 'spread':
|
---|
75 | case 'if':
|
---|
76 | return true;
|
---|
77 | }
|
---|
78 | }
|
---|
79 | return false;
|
---|
80 | }
|
---|
81 | exports.isMetadataSymbolicExpression = isMetadataSymbolicExpression;
|
---|
82 | function isMetadataSymbolicBinaryExpression(value) {
|
---|
83 | return value && value.__symbolic === 'binary';
|
---|
84 | }
|
---|
85 | exports.isMetadataSymbolicBinaryExpression = isMetadataSymbolicBinaryExpression;
|
---|
86 | function isMetadataSymbolicIndexExpression(value) {
|
---|
87 | return value && value.__symbolic === 'index';
|
---|
88 | }
|
---|
89 | exports.isMetadataSymbolicIndexExpression = isMetadataSymbolicIndexExpression;
|
---|
90 | function isMetadataSymbolicCallExpression(value) {
|
---|
91 | return value && (value.__symbolic === 'call' || value.__symbolic === 'new');
|
---|
92 | }
|
---|
93 | exports.isMetadataSymbolicCallExpression = isMetadataSymbolicCallExpression;
|
---|
94 | function isMetadataSymbolicPrefixExpression(value) {
|
---|
95 | return value && value.__symbolic === 'pre';
|
---|
96 | }
|
---|
97 | exports.isMetadataSymbolicPrefixExpression = isMetadataSymbolicPrefixExpression;
|
---|
98 | function isMetadataSymbolicIfExpression(value) {
|
---|
99 | return value && value.__symbolic === 'if';
|
---|
100 | }
|
---|
101 | exports.isMetadataSymbolicIfExpression = isMetadataSymbolicIfExpression;
|
---|
102 | function isMetadataGlobalReferenceExpression(value) {
|
---|
103 | return value && value.name && !value.module && isMetadataSymbolicReferenceExpression(value);
|
---|
104 | }
|
---|
105 | exports.isMetadataGlobalReferenceExpression = isMetadataGlobalReferenceExpression;
|
---|
106 | function isMetadataModuleReferenceExpression(value) {
|
---|
107 | return value && value.module && !value.name && !value.default &&
|
---|
108 | isMetadataSymbolicReferenceExpression(value);
|
---|
109 | }
|
---|
110 | exports.isMetadataModuleReferenceExpression = isMetadataModuleReferenceExpression;
|
---|
111 | function isMetadataImportedSymbolReferenceExpression(value) {
|
---|
112 | return value && value.module && !!value.name && isMetadataSymbolicReferenceExpression(value);
|
---|
113 | }
|
---|
114 | exports.isMetadataImportedSymbolReferenceExpression = isMetadataImportedSymbolReferenceExpression;
|
---|
115 | function isMetadataImportDefaultReference(value) {
|
---|
116 | return value && value.module && value.default && isMetadataSymbolicReferenceExpression(value);
|
---|
117 | }
|
---|
118 | exports.isMetadataImportDefaultReference = isMetadataImportDefaultReference;
|
---|
119 | function isMetadataSymbolicReferenceExpression(value) {
|
---|
120 | return value && value.__symbolic === 'reference';
|
---|
121 | }
|
---|
122 | exports.isMetadataSymbolicReferenceExpression = isMetadataSymbolicReferenceExpression;
|
---|
123 | function isMetadataSymbolicSelectExpression(value) {
|
---|
124 | return value && value.__symbolic === 'select';
|
---|
125 | }
|
---|
126 | exports.isMetadataSymbolicSelectExpression = isMetadataSymbolicSelectExpression;
|
---|
127 | function isMetadataSymbolicSpreadExpression(value) {
|
---|
128 | return value && value.__symbolic === 'spread';
|
---|
129 | }
|
---|
130 | exports.isMetadataSymbolicSpreadExpression = isMetadataSymbolicSpreadExpression;
|
---|
131 | function isMetadataError(value) {
|
---|
132 | return value && value.__symbolic === 'error';
|
---|
133 | }
|
---|
134 | exports.isMetadataError = isMetadataError;
|
---|
135 | });
|
---|
136 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9tZXRhZGF0YS9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUgsa0JBQWtCO0lBRWxCLG1HQUFtRztJQUVuRyxrR0FBa0c7SUFDbEcsaUdBQWlHO0lBQ2pHLGtHQUFrRztJQUNsRywrRkFBK0Y7SUFDL0YsWUFBWTtJQUVDLFFBQUEsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBWWxDLFNBQWdCLGdCQUFnQixDQUFDLEtBQVU7UUFDekMsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUM7SUFDaEQsQ0FBQztJQUZELDRDQUVDO0lBZUQsU0FBZ0IsZUFBZSxDQUFDLEtBQVU7UUFDeEMsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUM7SUFDL0MsQ0FBQztJQUZELDBDQUVDO0lBS0QsU0FBZ0IsbUJBQW1CLENBQUMsS0FBVTtRQUM1QyxPQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQztJQUNuRCxDQUFDO0lBRkQsa0RBRUM7SUFXRCxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pDLElBQUksS0FBSyxFQUFFO1lBQ1QsUUFBUSxLQUFLLENBQUMsVUFBVSxFQUFFO2dCQUN4QixLQUFLLGFBQWEsQ0FBQztnQkFDbkIsS0FBSyxRQUFRLENBQUM7Z0JBQ2QsS0FBSyxVQUFVO29CQUNiLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQVZELDRDQVVDO0lBTUQsU0FBZ0IsZ0JBQWdCLENBQUMsS0FBVTtRQUN6QyxPQUFPLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssYUFBYSxJQUFJLEtBQUss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VSxLQUFLLFdBQVcsQ0FBQztJQUNuRCxDQUFDO0lBSEQsc0ZBR0M7SUFPRCxTQUFnQixrQ0FBa0MsQ0FBQyxLQUFVO1FBRTNELE9BQU8sS0FBSyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDO0lBQ2hELENBQUM7SUFIRCxnRkFHQztJQU1ELFNBQWdCLGtDQUFrQyxDQUFDLEtBQVU7UUFFM0QsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUM7SUFDaEQsQ0FBQztJQUhELGdGQUdDO0lBeUJELFNBQWdCLGVBQWUsQ0FBQyxLQUFVO1FBQ3hDLE9BQU8sS0FBSyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDO0lBQy9DLENBQUM7SUFGRCwwQ0FFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyBNZXRhZGF0YSBTY2hlbWFcblxuLy8gSWYgeW91IG1ha2UgYSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIGNoYW5nZSB0byB0aGUgc2NoZW1hLCBpbmNyZW1lbnQgdGhlIE1FVEFEVEFfVkVSU0lPTiBudW1iZXIuXG5cbi8vIElmIHlvdSBtYWtlIGEgYmFja3dhcmRzIGNvbXBhdGlibGUgY2hhbmdlIHRvIHRoZSBtZXRhZGF0YSAoc3VjaCBhcyBhZGRpbmcgYW4gb3B0aW9uIGZpZWxkKSB0aGVuXG4vLyBsZWF2ZSBNRVRBREFUQV9WRVJTSU9OIHRoZSBzYW1lLiBJZiBwb3NzaWJsZSwgc3VwcGx5IGFzIG1hbnkgdmVyc2lvbnMgb2YgdGhlIG1ldGFkYXRhIHRoYXQgY2FuXG4vLyByZXByZXNlbnQgdGhlIHNlbWFudGljcyBvZiB0aGUgZmlsZSBpbiBhbiBhcnJheS4gRm9yIGV4YW1wbGUsIHdoZW4gZ2VuZXJhdGluZyBhIHZlcnNpb24gMiBmaWxlLFxuLy8gaWYgdmVyc2lvbiAxIGNhbiBhY2N1cmF0ZWx5IHJlcHJlc2VudCB0aGUgbWV0YWRhdGEsIGdlbmVyYXRlIGJvdGggdmVyc2lvbiAxIGFuZCB2ZXJzaW9uIDIgaW5cbi8vIGFuIGFycmF5LlxuXG5leHBvcnQgY29uc3QgTUVUQURBVEFfVkVSU0lPTiA9IDQ7XG5cbmV4cG9ydCB0eXBlIE1ldGFkYXRhRW50cnkgPSBDbGFzc01ldGFkYXRhfEludGVyZmFjZU1ldGFkYXRhfEZ1bmN0aW9uTWV0YWRhdGF8TWV0YWRhdGFWYWx1ZTtcblxuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVNZXRhZGF0YSB7XG4gIF9fc3ltYm9saWM6ICdtb2R1bGUnO1xuICB2ZXJzaW9uOiBudW1iZXI7XG4gIGV4cG9ydHM/OiBNb2R1bGVFeHBvcnRNZXRhZGF0YVtdO1xuICBpbXBvcnRBcz86IHN0cmluZztcbiAgbWV0YWRhdGE6IHtbbmFtZTogc3RyaW5nXTogTWV0YWRhdGFFbnRyeX07XG4gIG9yaWdpbnM/OiB7W25hbWU6IHN0cmluZ106IHN0cmluZ307XG59XG5leHBvcnQgZnVuY3Rpb24gaXNNb2R1bGVNZXRhZGF0YSh2YWx1ZTogYW55KTogdmFsdWUgaXMgTW9kdWxlTWV0YWRhdGEge1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuX19zeW1ib2xpYyA9PT0gJ21vZHVsZSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlRXhwb3J0TWV0YWRhdGEge1xuICBleHBvcnQ/OiAoc3RyaW5nfHtuYW1lOiBzdHJpbmcsIGFzOiBzdHJpbmd9KVtdO1xuICBmcm9tOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhc3NNZXRhZGF0YSB7XG4gIF9fc3ltYm9saWM6ICdjbGFzcyc7XG4gIGV4dGVuZHM/OiBNZXRhZGF0YVN5bWJvbGljRXhwcmVzc2lvbnxNZXRhZGF0YUVycm9yO1xuICBhcml0eT86IG51bWJlcjtcbiAgZGVjb3JhdG9ycz86IChNZXRhZGF0YVN5bWJvbGljRXhwcmVzc2lvbnxNZXRhZGF0YUVycm9yKVtdO1xuICBtZW1iZXJzPzogTWV0YWRhdGFNYXA7XG4gIHN0YXRpY3M/OiB7W25hbWU6IHN0cmluZ106IE1ldGFkYXRhVmFsdWV8RnVuY3Rpb25NZXRhZGF0YX07XG59XG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzc01ldGFkYXRhKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBDbGFzc01ldGFkYXRhIHtcbiAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLl9fc3ltYm9saWMgPT09ICdjbGFzcyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlTWV0YWRhdGEge1xuICBfX3N5bWJvbGljOiAnaW50ZXJmYWNlJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVyZmFjZU1ldGFkYXRhKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBJbnRlcmZhY2VNZXRhZGF0YSB7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5fX3N5bWJvbGljID09PSAnaW50ZXJmYWNlJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YU1hcCB7XG4gIFtuYW1lOiBzdHJpbmddOiBNZW1iZXJNZXRhZGF0YVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbWJlck1ldGFkYXRhIHtcbiAgX19zeW1ib2xpYzogJ2NvbnN0cnVjdG9yJ3wnbWV0aG9kJ3wncHJvcGVydHknO1xuICBkZWNvcmF0b3JzPzogKE1ldGFkYXRhU3ltYm9saWNFeHByZXNzaW9ufE1ldGFkYXRhRXJyb3IpW107XG4gIHBhcmFtZXRlcnM/OiAoTWV0YWRhdGFTeW1ib2xpY0V4cHJlc3Npb258TWV0YWRhdGFFcnJvcnxudWxsfHVuZGVmaW5lZClbXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01lbWJlck1ldGFkYXRhKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBNZW1iZXJNZXRhZGF0YSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHN3aXRjaCAodmFsdWUuX19zeW1ib2xpYykge1xuICAgICAgY2FzZSAnY29uc3RydWN0b3InOlxuICAgICAgY2FzZSAnbWV0aG9kJzpcbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRob2RNZXRhZGF0YSBleHRlbmRzIE1lbWJlck1ldGFkYXRhIHtcbiAgX19zeW1ib2xpYzogJ2NvbnN0cnVjdG9yJ3wnbWV0aG9kJztcbiAgcGFyYW1ldGVyRGVjb3JhdG9ycz86ICgoTWV0YWRhdGFTeW1ib2xpY0V4cHJlc3Npb24gfCBNZXRhZGF0YUVycm9yKVtdfHVuZGVmaW5lZClbXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01ldGhvZE1ldGFkYXRhKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBNZXRob2RNZXRhZGF0YSB7XG4gIHJldHVybiB2YWx1ZSAmJiAodmFsdWUuX19zeW1ib2xpYyA9PT0gJ2NvbnN0cnVjdG9yJyB8fCB2YWx1ZS5fX3N5bWJvbGljID09PSAnbWV0aG9kJyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RydWN0b3JNZXRhZGF0YSBleHRlbmRzIE1ldGhvZE1ldGFkYXRhIHtcbiAgX19zeW1ib2xpYzogJ2NvbnN0cnVjdG9yJztcbiAgcGFyYW1ldGVycz86IChNZXRhZGF0YVN5bWJvbGljRXhwcmVzc2lvbnxNZXRhZGF0YUVycm9yfG51bGx8dW5kZWZpbmVkKVtdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3JNZXRhZGF0YSh2YWx1ZTogYW55KTogdmFsdWUgaXMgQ29uc3RydWN0b3JNZXRhZGF0YSB7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5fX3N5bWJvbGljID09PSAnY29uc3RydWN0b3InO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uTWV0YWRhdGEge1xuICBfX3N5bWJvbGljOiAnZnVuY3Rpb24nO1xuICBwYXJhbWV0ZXJzOiBzdHJpbmdbXTtcbiAgZGVmYXVsdHM/OiBNZXRhZGF0YVZhbHVlW107XG4gIHZhbHVlOiBNZXRhZGF0YVZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb25NZXRhZGF0YSh2YWx1ZTogYW55KTogdmFsdWUgaXMgRnVuY3Rpb25NZXRhZGF0YSB7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5fX3N5bWJvbGljID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgdHlwZSBNZXRhZGF0YVZhbHVlID0gc3RyaW5nfG51bWJlcnxib29sZWFufHVuZGVmaW5lZHxudWxsfE1ldGFkYXRhT2JqZWN0fE1ldGFkYXRhQXJyYXl8XG4gICAgTWV0YWRhdGFTeW1ib2xpY0V4cHJlc3Npb258TWV0YWRhdGFTeW1ib2xpY1JlZmVyZW5jZUV4cHJlc3Npb258TWV0YWRhdGFTeW1ib2xpY0JpbmFyeUV4cHJlc3Npb258XG4gICAgTWV0YWRhdGFTeW1ib2xpY0luZGV4RXhwcmVzc2lvbnxNZXRhZGF0YVN5bWJvbGljQ2FsbEV4cHJlc3Npb258TWV0YWRhdGFTeW1ib2xpY1ByZWZpeEV4cHJlc3Npb258XG4gICAgTWV0YWRhdGFTeW1ib2xpY0lmRXhwcmVzc2lvbnxNZXRhZGF0YVN5bWJvbGljU3ByZWFkRXhwcmVzc2lvbnxNZXRhZGF0YVN5bWJvbGljU2VsZWN0RXhwcmVzc2lvbnxcbiAgICBNZXRhZGF0YUVycm9yO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhT2JqZWN0IHtcbiAgW25hbWU6IHN0cmluZ106IE1ldGFkYXRhVmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFBcnJheSB7XG4gIFtuYW1lOiBudW1iZXJdOiBNZXRhZGF0YVZhbHVlO1xufVxuXG5leHBvcnQgdHlwZSBNZXRhZGF0YVN5bWJvbGljRXhwcmVzc2lvbiA9IE1ldGFkYXRhU3ltYm9saWNCaW5hcnlFeHByZXNzaW9ufFxuICAgIE1ldGFkYXRhU3ltYm9saWNJbmRleEV4cHJlc3Npb258TWV0YWRhdGFTeW1ib2xpY0luZGV4RXhwcmVzc2lvbnxNZXRhZGF0YVN5bWJvbGljQ2FsbEV4cHJlc3Npb258XG4gICAgTWV0YWRhdGFTeW1ib2xpY0NhbGxFeHByZXNzaW9ufE1ldGFkYXRhU3ltYm9saWNQcmVmaXhFeHByZXNzaW9ufE1ldGFkYXRhU3ltYm9saWNJZkV4cHJlc3Npb258XG4gICAgTWV0YWRhdGFHbG9iYWxSZWZlcmVuY2VFeHByZXNzaW9ufE1ldGFkYXRhTW9kdWxlUmVmZXJlbmNlRXhwcmVzc2lvbnxcbiAgICBNZXRhZGF0YUltcG9ydGVkU3ltYm9sUmVmZXJlbmNlRXhwcmVzc2lvbnxNZXRhZGF0YUltcG9ydGVkRGVmYXVsdFJlZmVyZW5jZUV4cHJlc3Npb258XG4gICAgTWV0YWRhdGFTeW1ib2xpY1NlbGVjdEV4cHJlc3Npb258TWV0YWRhdGFTeW1ib2xpY1NwcmVhZEV4cHJlc3Npb247XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01ldGFkYXRhU3ltYm9saWNFeHByZXNzaW9uKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBNZXRhZGF0YVN5bWJvbGljRXhwcmVzc2lvbiB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHN3aXRjaCAodmFsdWUuX19zeW1ib2xpYykge1xuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgIGNhc2UgJ2NhbGwnOlxuICAgICAgY2FzZSAnaW5kZXgnOlxuICAgICAgY2FzZSAnbmV3JzpcbiAgICAgIGNhc2UgJ3ByZSc6XG4gICAgICBjYXNlICdyZWZlcmVuY2UnOlxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGNhc2UgJ3NwcmVhZCc6XG4gICAgICBjYXNlICdpZic6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFTeW1ib2xpY0JpbmFyeUV4cHJlc3Npb24ge1xuICBfX3N5bWJvbGljOiAnYmluYXJ5JztcbiAgb3BlcmF0b3I6ICcmJid8J3x8J3wnfCd8J14nfCcmJ3wnPT0nfCchPSd8Jz09PSd8JyE9PSd8JzwnfCc+J3wnPD0nfCc+PSd8J2luc3RhbmNlb2YnfCdpbid8J2FzJ3xcbiAgICAgICc8PCd8Jz4+J3wnPj4+J3wnKyd8Jy0nfCcqJ3wnLyd8JyUnfCcqKid8Jz8/JztcbiAgbGVmdDogTWV0YWRhdGFWYWx1ZTtcbiAgcmlnaHQ6IE1ldGFkYXRhVmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNNZXRhZGF0YVN5bWJvbGljQmluYXJ5RXhwcmVzc2lvbih2YWx1ZTogYW55KTpcbiAgICB2YWx1ZSBpcyBNZXRhZGF0YVN5bWJvbGljQmluYXJ5RXhwcmVzc2lvbiB7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5fX3N5bWJvbGljID09PSAnYmluYXJ5Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YVN5bWJvbGljSW5kZXhFeHByZXNzaW9uIHtcbiAgX19zeW1ib2xpYzogJ2luZGV4JztcbiAgZXhwcmVzc2lvbjogTWV0YWRhdGFWYWx1ZTtcbiAgaW5kZXg6IE1ldGFkYXRhVmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNNZXRhZGF0YVN5bWJvbGljSW5kZXhFeHByZXNzaW9uKHZhbHVlOiBhbnkpOlxuICAgIHZhbHVlIGlzIE1ldGFkYXRhU3ltYm9saWNJbmRleEV4cHJlc3Npb24ge1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuX19zeW1ib2xpYyA9PT0gJ2luZGV4Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YVN5bWJvbGljQ2FsbEV4cHJlc3Npb24ge1xuICBfX3N5bWJvbGljOiAnY2FsbCd8J25ldyc7XG4gIGV4cHJlc3Npb246IE1ldGFkYXRhVmFsdWU7XG4gIGFyZ3VtZW50cz86IE1ldGFkYXRhVmFsdWVbXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01ldGFkYXRhU3ltYm9saWNDYWxsRXhwcmVzc2lvbih2YWx1ZTogYW55KTpcbiAgICB2YWx1ZSBpcyBNZXRhZGF0YVN5bWJvbGljQ2FsbEV4cHJlc3Npb24ge1xuICByZXR1cm4gdmFsdWUgJiYgKHZhbHVlLl9fc3ltYm9saWMgPT09ICdjYWxsJyB8fCB2YWx1ZS5fX3N5bWJvbGljID09PSAnbmV3Jyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFTeW1ib2xpY1ByZWZpeEV4cHJlc3Npb24ge1xuICBfX3N5bWJvbGljOiAncHJlJztcbiAgb3BlcmF0b3I6ICcrJ3wnLSd8J34nfCchJztcbiAgb3BlcmFuZDogTWV0YWRhdGFWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01ldGFkYXRhU3ltYm9saWNQcmVmaXhFeHByZXNzaW9uKHZhbHVlOiBhbnkpOlxuICAgIHZhbHVlIGlzIE1ldGFkYXRhU3ltYm9saWNQcmVmaXhFeHByZXNzaW9uIHtcbiAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLl9fc3ltYm9saWMgPT09ICdwcmUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhU3ltYm9saWNJZkV4cHJlc3Npb24ge1xuICBfX3N5bWJvbGljOiAnaWYnO1xuICBjb25kaXRpb246IE1ldGFkYXRhVmFsdWU7XG4gIHRoZW5FeHByZXNzaW9uOiBNZXRhZGF0YVZhbHVlO1xuICBlbHNlRXhwcmVzc2lvbjogTWV0YWRhdGFWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01ldGFkYXRhU3ltYm9saWNJZkV4cHJlc3Npb24odmFsdWU6IGFueSk6IHZhbHVlIGlzIE1ldGFkYXRhU3ltYm9saWNJZkV4cHJlc3Npb24ge1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuX19zeW1ib2xpYyA9PT0gJ2lmJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YVNvdXJjZUxvY2F0aW9uSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgbGluZSBudW1iZXIgb2YgdGhlIGVycm9yIGluIHRoZSAudHMgZmlsZSB0aGUgbWV0YWRhdGEgd2FzIGNyZWF0ZWQgZm9yLlxuICAgKi9cbiAgbGluZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB1dGY4IGNvZGUtdW5pdHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIGNoYXJhY3Rlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUdsb2JhbFJlZmVyZW5jZUV4cHJlc3Npb24gZXh0ZW5kcyBNZXRhZGF0YVNvdXJjZUxvY2F0aW9uSW5mbyB7XG4gIF9fc3ltYm9saWM6ICdyZWZlcmVuY2UnO1xuICBuYW1lOiBzdHJpbmc7XG4gIGFyZ3VtZW50cz86IE1ldGFkYXRhVmFsdWVbXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01ldGFkYXRhR2xvYmFsUmVmZXJlbmNlRXhwcmVzc2lvbih2YWx1ZTogYW55KTpcbiAgICB2YWx1ZSBpcyBNZXRhZGF0YUdsb2JhbFJlZmVyZW5jZUV4cHJlc3Npb24ge1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUubmFtZSAmJiAhdmFsdWUubW9kdWxlICYmIGlzTWV0YWRhdGFTeW1ib2xpY1JlZmVyZW5jZUV4cHJlc3Npb24odmFsdWUpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhTW9kdWxlUmVmZXJlbmNlRXhwcmVzc2lvbiBleHRlbmRzIE1ldGFkYXRhU291cmNlTG9jYXRpb25JbmZvIHtcbiAgX19zeW1ib2xpYzogJ3JlZmVyZW5jZSc7XG4gIG1vZHVsZTogc3RyaW5nO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWV0YWRhdGFNb2R1bGVSZWZlcmVuY2VFeHByZXNzaW9uKHZhbHVlOiBhbnkpOlxuICAgIHZhbHVlIGlzIE1ldGFkYXRhTW9kdWxlUmVmZXJlbmNlRXhwcmVzc2lvbiB7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5tb2R1bGUgJiYgIXZhbHVlLm5hbWUgJiYgIXZhbHVlLmRlZmF1bHQgJiZcbiAgICAgIGlzTWV0YWRhdGFTeW1ib2xpY1JlZmVyZW5jZUV4cHJlc3Npb24odmFsdWUpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhSW1wb3J0ZWRTeW1ib2xSZWZlcmVuY2VFeHByZXNzaW9uIGV4dGVuZHMgTWV0YWRhdGFTb3VyY2VMb2NhdGlvbkluZm8ge1xuICBfX3N5bWJvbGljOiAncmVmZXJlbmNlJztcbiAgbW9kdWxlOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYXJndW1lbnRzPzogTWV0YWRhdGFWYWx1ZVtdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWV0YWRhdGFJbXBvcnRlZFN5bWJvbFJlZmVyZW5jZUV4cHJlc3Npb24odmFsdWU6IGFueSk6XG4gICAgdmFsdWUgaXMgTWV0YWRhdGFJbXBvcnRlZFN5bWJvbFJlZmVyZW5jZUV4cHJlc3Npb24ge1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUubW9kdWxlICYmICEhdmFsdWUubmFtZSAmJiBpc01ldGFkYXRhU3ltYm9saWNSZWZlcmVuY2VFeHByZXNzaW9uKHZhbHVlKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUltcG9ydGVkRGVmYXVsdFJlZmVyZW5jZUV4cHJlc3Npb24gZXh0ZW5kcyBNZXRhZGF0YVNvdXJjZUxvY2F0aW9uSW5mbyB7XG4gIF9fc3ltYm9saWM6ICdyZWZlcmVuY2UnO1xuICBtb2R1bGU6IHN0cmluZztcbiAgZGVmYXVsdDogYm9vbGVhbjtcbiAgYXJndW1lbnRzPzogTWV0YWRhdGFWYWx1ZVtdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWV0YWRhdGFJbXBvcnREZWZhdWx0UmVmZXJlbmNlKHZhbHVlOiBhbnkpOlxuICAgIHZhbHVlIGlzIE1ldGFkYXRhSW1wb3J0ZWREZWZhdWx0UmVmZXJlbmNlRXhwcmVzc2lvbiB7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5tb2R1bGUgJiYgdmFsdWUuZGVmYXVsdCAmJiBpc01ldGFkYXRhU3ltYm9saWNSZWZlcmVuY2VFeHByZXNzaW9uKHZhbHVlKTtcbn1cblxuZXhwb3J0IHR5cGUgTWV0YWRhdGFTeW1ib2xpY1JlZmVyZW5jZUV4cHJlc3Npb24gPVxuICAgIE1ldGFkYXRhR2xvYmFsUmVmZXJlbmNlRXhwcmVzc2lvbnxNZXRhZGF0YU1vZHVsZVJlZmVyZW5jZUV4cHJlc3Npb258XG4gICAgTWV0YWRhdGFJbXBvcnRlZFN5bWJvbFJlZmVyZW5jZUV4cHJlc3Npb258TWV0YWRhdGFJbXBvcnRlZERlZmF1bHRSZWZlcmVuY2VFeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWV0YWRhdGFTeW1ib2xpY1JlZmVyZW5jZUV4cHJlc3Npb24odmFsdWU6IGFueSk6XG4gICAgdmFsdWUgaXMgTWV0YWRhdGFTeW1ib2xpY1JlZmVyZW5jZUV4cHJlc3Npb24ge1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuX19zeW1ib2xpYyA9PT0gJ3JlZmVyZW5jZSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFTeW1ib2xpY1NlbGVjdEV4cHJlc3Npb24ge1xuICBfX3N5bWJvbGljOiAnc2VsZWN0JztcbiAgZXhwcmVzc2lvbjogTWV0YWRhdGFWYWx1ZTtcbiAgbWVtYmVyOiBzdHJpbmc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNNZXRhZGF0YVN5bWJvbGljU2VsZWN0RXhwcmVzc2lvbih2YWx1ZTogYW55KTpcbiAgICB2YWx1ZSBpcyBNZXRhZGF0YVN5bWJvbGljU2VsZWN0RXhwcmVzc2lvbiB7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5fX3N5bWJvbGljID09PSAnc2VsZWN0Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YVN5bWJvbGljU3ByZWFkRXhwcmVzc2lvbiB7XG4gIF9fc3ltYm9saWM6ICdzcHJlYWQnO1xuICBleHByZXNzaW9uOiBNZXRhZGF0YVZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWV0YWRhdGFTeW1ib2xpY1NwcmVhZEV4cHJlc3Npb24odmFsdWU6IGFueSk6XG4gICAgdmFsdWUgaXMgTWV0YWRhdGFTeW1ib2xpY1NwcmVhZEV4cHJlc3Npb24ge1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuX19zeW1ib2xpYyA9PT0gJ3NwcmVhZCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFFcnJvciBleHRlbmRzIE1ldGFkYXRhU291cmNlTG9jYXRpb25JbmZvIHtcbiAgX19zeW1ib2xpYzogJ2Vycm9yJztcblxuICAvKipcbiAgICogVGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzaG9ydCBhbmQgcmVsYXRpdmVseSBkaXNjcmlwdGl2ZSBhbmQgc2hvdWxkIGJlIGZpeGVkIG9uY2UgaXQgaXMgY3JlYXRlZC5cbiAgICogSWYgdGhlIHJlYWRlciBkb2Vzbid0IHJlY29nbml6ZSB0aGUgbWVzc2FnZSwgaXQgd2lsbCBkaXNwbGF5IHRoZSBtZXNzYWdlIHVubW9kaWZpZWQuIElmIHRoZVxuICAgKiByZWFkZXIgcmVjb2duaXplcyB0aGUgZXJyb3IgbWVzc2FnZSBpcyBpdCBmcmVlIHRvIHVzZSBzdWJzdGl0dXRlIG1lc3NhZ2UgdGhlIGlzIG1vcmVcbiAgICogZGVzY3JpcHRpdmUgYW5kL29yIGxvY2FsaXplZC5cbiAgICovXG4gIG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vZHVsZSBvZiB0aGUgZXJyb3IgKG9ubHkgdXNlZCBpbiBidW5kbGVkIG1ldGFkYXRhKVxuICAgKi9cbiAgbW9kdWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250ZXh0IGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBtb3JlIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UuIFRoZSBjb250ZW50XG4gICAqIG9mIHRoZSBjb250ZXh0IGlzIGRlcGVuZGVudCBvbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIGNvbnRleHQ/OiB7W25hbWU6IHN0cmluZ106IHN0cmluZ307XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01ldGFkYXRhRXJyb3IodmFsdWU6IGFueSk6IHZhbHVlIGlzIE1ldGFkYXRhRXJyb3Ige1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuX19zeW1ib2xpYyA9PT0gJ2Vycm9yJztcbn1cbiJdfQ== |
---|