@angular/compiler-cli 9.0.0-rc.6 → 9.0.0
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/ngcc/src/analysis/decoration_analyzer.d.ts +13 -26
- package/ngcc/src/analysis/decoration_analyzer.js +100 -134
- package/ngcc/src/analysis/migration_host.d.ts +5 -16
- package/ngcc/src/analysis/migration_host.js +20 -91
- package/ngcc/src/analysis/module_with_providers_analyzer.js +2 -2
- package/ngcc/src/analysis/ngcc_trait_compiler.d.ts +42 -0
- package/ngcc/src/analysis/ngcc_trait_compiler.js +107 -0
- package/ngcc/src/analysis/private_declarations_analyzer.d.ts +0 -1
- package/ngcc/src/analysis/private_declarations_analyzer.js +4 -35
- package/ngcc/src/analysis/types.d.ts +6 -21
- package/ngcc/src/analysis/types.js +1 -1
- package/ngcc/src/analysis/util.d.ts +2 -5
- package/ngcc/src/analysis/util.js +11 -94
- package/ngcc/src/dependencies/commonjs_dependency_host.d.ts +1 -1
- package/ngcc/src/dependencies/commonjs_dependency_host.js +90 -39
- package/ngcc/src/dependencies/dependency_host.d.ts +7 -5
- package/ngcc/src/dependencies/dependency_host.js +12 -10
- package/ngcc/src/dependencies/dependency_resolver.d.ts +2 -1
- package/ngcc/src/dependencies/dependency_resolver.js +9 -4
- package/ngcc/src/dependencies/dts_dependency_host.d.ts +21 -0
- package/ngcc/src/dependencies/dts_dependency_host.js +34 -0
- package/ngcc/src/dependencies/esm_dependency_host.d.ts +8 -1
- package/ngcc/src/dependencies/esm_dependency_host.js +30 -22
- package/ngcc/src/dependencies/module_resolver.d.ts +1 -1
- package/ngcc/src/dependencies/module_resolver.js +1 -1
- package/ngcc/src/dependencies/umd_dependency_host.d.ts +1 -1
- package/ngcc/src/dependencies/umd_dependency_host.js +3 -3
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.d.ts +2 -0
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +49 -9
- package/ngcc/src/execution/cluster/executor.d.ts +3 -1
- package/ngcc/src/execution/cluster/executor.js +12 -7
- package/ngcc/src/execution/cluster/package_json_updater.js +3 -2
- package/ngcc/src/execution/cluster/worker.d.ts +3 -1
- package/ngcc/src/execution/cluster/worker.js +10 -7
- package/ngcc/src/execution/lock_file.d.ts +43 -0
- package/ngcc/src/execution/lock_file.js +129 -0
- package/ngcc/src/execution/single_process_executor.d.ts +3 -1
- package/ngcc/src/execution/single_process_executor.js +18 -15
- package/ngcc/src/execution/task_selection/base_task_queue.d.ts +1 -1
- package/ngcc/src/host/commonjs_host.d.ts +6 -18
- package/ngcc/src/host/commonjs_host.js +45 -81
- package/ngcc/src/host/commonjs_umd_utils.d.ts +73 -0
- package/ngcc/src/host/commonjs_umd_utils.js +109 -0
- package/ngcc/src/host/esm2015_host.d.ts +46 -14
- package/ngcc/src/host/esm2015_host.js +182 -55
- package/ngcc/src/host/esm5_host.js +3 -1
- package/ngcc/src/host/umd_host.d.ts +12 -5
- package/ngcc/src/host/umd_host.js +144 -92
- package/ngcc/src/main.js +65 -122
- package/ngcc/src/migrations/migration.d.ts +1 -0
- package/ngcc/src/migrations/migration.js +1 -1
- package/ngcc/src/packages/build_marker.d.ts +17 -8
- package/ngcc/src/packages/build_marker.js +61 -32
- package/ngcc/src/packages/entry_point_bundle.js +2 -2
- package/ngcc/src/packages/transformer.js +5 -6
- package/ngcc/src/rendering/commonjs_rendering_formatter.js +9 -5
- package/ngcc/src/rendering/dts_renderer.js +8 -5
- package/ngcc/src/rendering/esm_rendering_formatter.js +17 -5
- package/ngcc/src/rendering/renderer.js +4 -4
- package/ngcc/src/rendering/umd_rendering_formatter.d.ts +18 -1
- package/ngcc/src/rendering/umd_rendering_formatter.js +69 -16
- package/ngcc/src/utils.d.ts +14 -0
- package/ngcc/src/utils.js +29 -1
- package/ngcc/src/writing/cleaning/cleaning_strategies.d.ts +45 -0
- package/ngcc/src/writing/cleaning/cleaning_strategies.js +77 -0
- package/ngcc/src/writing/cleaning/package_cleaner.d.ts +39 -0
- package/ngcc/src/writing/cleaning/package_cleaner.js +125 -0
- package/ngcc/src/writing/cleaning/utils.d.ts +16 -0
- package/ngcc/src/writing/cleaning/utils.js +29 -0
- package/ngcc/src/writing/in_place_file_writer.d.ts +1 -0
- package/ngcc/src/writing/in_place_file_writer.js +3 -2
- package/ngcc/src/writing/new_entry_point_file_writer.d.ts +2 -0
- package/ngcc/src/writing/new_entry_point_file_writer.js +5 -4
- package/ngcc/src/writing/package_json_updater.d.ts +24 -10
- package/ngcc/src/writing/package_json_updater.js +53 -10
- package/package.json +6 -5
- package/src/main.d.ts +2 -2
- package/src/metadata/symbols.d.ts +1 -1
- package/src/ngtsc/annotations/src/component.d.ts +58 -20
- package/src/ngtsc/annotations/src/component.js +149 -97
- package/src/ngtsc/annotations/src/diagnostics.d.ts +23 -0
- package/src/ngtsc/annotations/src/diagnostics.js +123 -0
- package/src/ngtsc/annotations/src/directive.d.ts +19 -8
- package/src/ngtsc/annotations/src/directive.js +41 -18
- package/src/ngtsc/annotations/src/injectable.d.ts +8 -4
- package/src/ngtsc/annotations/src/injectable.js +7 -3
- package/src/ngtsc/annotations/src/ng_module.d.ts +22 -7
- package/src/ngtsc/annotations/src/ng_module.js +115 -52
- package/src/ngtsc/annotations/src/pipe.d.ts +12 -6
- package/src/ngtsc/annotations/src/pipe.js +22 -5
- package/src/ngtsc/annotations/src/util.d.ts +22 -0
- package/src/ngtsc/annotations/src/util.js +92 -3
- package/src/ngtsc/core/api.d.ts +368 -0
- package/src/ngtsc/core/api.js +20 -0
- package/src/ngtsc/core/index.d.ts +10 -0
- package/src/ngtsc/core/index.js +24 -0
- package/src/ngtsc/core/src/compiler.d.ts +120 -0
- package/src/ngtsc/core/src/compiler.js +769 -0
- package/src/ngtsc/core/src/host.d.ts +85 -0
- package/src/ngtsc/core/src/host.js +208 -0
- package/src/ngtsc/cycles/src/imports.js +2 -2
- package/src/ngtsc/diagnostics/index.d.ts +1 -1
- package/src/ngtsc/diagnostics/index.js +5 -5
- package/src/ngtsc/diagnostics/src/error.d.ts +1 -1
- package/src/ngtsc/diagnostics/src/error.js +1 -1
- package/src/ngtsc/diagnostics/src/{code.d.ts → error_code.d.ts} +27 -4
- package/src/ngtsc/diagnostics/src/error_code.js +128 -0
- package/src/ngtsc/file_system/src/cached_file_system.d.ts +3 -1
- package/src/ngtsc/file_system/src/cached_file_system.js +48 -4
- package/src/ngtsc/file_system/src/invalid_file_system.d.ts +3 -1
- package/src/ngtsc/file_system/src/invalid_file_system.js +4 -2
- package/src/ngtsc/file_system/src/node_js_file_system.d.ts +3 -1
- package/src/ngtsc/file_system/src/node_js_file_system.js +8 -4
- package/src/ngtsc/file_system/src/types.d.ts +3 -1
- package/src/ngtsc/file_system/src/types.js +1 -1
- package/src/ngtsc/imports/index.d.ts +3 -3
- package/src/ngtsc/imports/index.js +4 -4
- package/src/ngtsc/imports/src/alias.d.ts +12 -11
- package/src/ngtsc/imports/src/alias.js +21 -16
- package/src/ngtsc/imports/src/emitter.d.ts +40 -19
- package/src/ngtsc/imports/src/emitter.js +54 -26
- package/src/ngtsc/imports/src/references.d.ts +30 -8
- package/src/ngtsc/imports/src/references.js +41 -6
- package/src/ngtsc/imports/src/resolver.d.ts +3 -6
- package/src/ngtsc/imports/src/resolver.js +5 -4
- package/src/ngtsc/incremental/api.d.ts +51 -0
- package/src/ngtsc/incremental/api.js +20 -0
- package/src/ngtsc/incremental/index.d.ts +1 -0
- package/src/ngtsc/incremental/index.js +4 -2
- package/src/ngtsc/incremental/src/dependency_tracking.d.ts +56 -0
- package/src/ngtsc/incremental/src/dependency_tracking.js +186 -0
- package/src/ngtsc/incremental/src/noop.d.ts +10 -0
- package/src/ngtsc/incremental/src/noop.js +23 -0
- package/src/ngtsc/incremental/src/state.d.ts +8 -14
- package/src/ngtsc/incremental/src/state.js +83 -80
- package/src/ngtsc/indexer/index.d.ts +1 -0
- package/src/ngtsc/indexer/index.js +4 -2
- package/src/ngtsc/metadata/index.d.ts +1 -1
- package/src/ngtsc/metadata/index.js +2 -1
- package/src/ngtsc/metadata/src/api.d.ts +8 -0
- package/src/ngtsc/metadata/src/api.js +1 -1
- package/src/ngtsc/metadata/src/dts.js +2 -1
- package/src/ngtsc/metadata/src/registry.d.ts +12 -1
- package/src/ngtsc/metadata/src/registry.js +22 -2
- package/src/ngtsc/metadata/src/util.d.ts +2 -0
- package/src/ngtsc/metadata/src/util.js +10 -1
- package/src/ngtsc/modulewithproviders/src/scanner.js +2 -2
- package/src/ngtsc/partial_evaluator/index.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/index.js +1 -1
- package/src/ngtsc/partial_evaluator/src/builtin.d.ts +7 -6
- package/src/ngtsc/partial_evaluator/src/builtin.js +54 -9
- package/src/ngtsc/partial_evaluator/src/interface.d.ts +3 -9
- package/src/ngtsc/partial_evaluator/src/interface.js +4 -3
- package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +4 -3
- package/src/ngtsc/partial_evaluator/src/interpreter.js +11 -7
- package/src/ngtsc/partial_evaluator/src/known_declaration.d.ts +19 -0
- package/src/ngtsc/partial_evaluator/src/known_declaration.js +38 -0
- package/src/ngtsc/partial_evaluator/src/result.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/result.js +1 -1
- package/src/ngtsc/partial_evaluator/src/ts_helpers.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/ts_helpers.js +13 -3
- package/src/ngtsc/program.d.ts +46 -57
- package/src/ngtsc/program.js +68 -574
- package/src/ngtsc/reflection/src/host.d.ts +19 -2
- package/src/ngtsc/reflection/src/host.js +17 -3
- package/src/ngtsc/reflection/src/typescript.js +11 -7
- package/src/ngtsc/resource/index.d.ts +9 -0
- package/src/ngtsc/resource/index.js +22 -0
- package/src/ngtsc/{resource_loader.d.ts → resource/src/loader.d.ts} +4 -4
- package/src/ngtsc/resource/src/loader.js +193 -0
- package/src/ngtsc/routing/src/route.js +2 -2
- package/src/ngtsc/scope/index.d.ts +1 -1
- package/src/ngtsc/scope/index.js +1 -1
- package/src/ngtsc/scope/src/component_scope.d.ts +2 -2
- package/src/ngtsc/scope/src/component_scope.js +1 -1
- package/src/ngtsc/scope/src/dependency.js +10 -8
- package/src/ngtsc/scope/src/local.d.ts +31 -4
- package/src/ngtsc/scope/src/local.js +83 -15
- package/src/ngtsc/shims/index.d.ts +2 -1
- package/src/ngtsc/shims/index.js +4 -5
- package/src/ngtsc/shims/src/api.d.ts +25 -0
- package/src/ngtsc/shims/src/api.js +13 -0
- package/src/ngtsc/shims/src/factory_generator.d.ts +2 -2
- package/src/ngtsc/shims/src/factory_generator.js +1 -1
- package/src/ngtsc/shims/src/factory_tracker.d.ts +24 -0
- package/src/ngtsc/shims/src/factory_tracker.js +47 -0
- package/src/ngtsc/shims/src/summary_generator.d.ts +1 -1
- package/src/ngtsc/shims/src/summary_generator.js +1 -1
- package/src/ngtsc/shims/src/typecheck_shim.d.ts +1 -1
- package/src/ngtsc/shims/src/typecheck_shim.js +1 -1
- package/src/ngtsc/synthetic_files_compiler_host.d.ts +1 -1
- package/src/ngtsc/transform/index.d.ts +3 -1
- package/src/ngtsc/transform/index.js +8 -3
- package/src/ngtsc/transform/src/alias.d.ts +1 -1
- package/src/ngtsc/transform/src/alias.js +1 -1
- package/src/ngtsc/transform/src/api.d.ts +52 -17
- package/src/ngtsc/transform/src/api.js +1 -1
- package/src/ngtsc/transform/src/compilation.d.ts +68 -47
- package/src/ngtsc/transform/src/compilation.js +498 -313
- package/src/ngtsc/transform/src/declaration.d.ts +1 -1
- package/src/ngtsc/transform/src/declaration.js +6 -1
- package/src/ngtsc/transform/src/trait.d.ts +169 -0
- package/src/ngtsc/transform/src/trait.js +114 -0
- package/src/ngtsc/transform/src/transform.d.ts +2 -2
- package/src/ngtsc/transform/src/transform.js +4 -4
- package/src/ngtsc/translator/src/translator.d.ts +11 -9
- package/src/ngtsc/translator/src/translator.js +51 -18
- package/src/ngtsc/typecheck/index.d.ts +1 -0
- package/src/ngtsc/typecheck/index.js +4 -2
- package/src/ngtsc/typecheck/src/api.d.ts +12 -1
- package/src/ngtsc/typecheck/src/api.js +1 -1
- package/src/ngtsc/typecheck/src/context.d.ts +3 -2
- package/src/ngtsc/typecheck/src/context.js +10 -8
- package/src/ngtsc/typecheck/src/diagnostics.d.ts +30 -31
- package/src/ngtsc/typecheck/src/diagnostics.js +108 -70
- package/src/ngtsc/typecheck/src/dom.d.ts +6 -5
- package/src/ngtsc/typecheck/src/dom.js +3 -3
- package/src/ngtsc/typecheck/src/environment.d.ts +5 -3
- package/src/ngtsc/typecheck/src/environment.js +20 -8
- package/src/ngtsc/typecheck/src/expression.d.ts +2 -3
- package/src/ngtsc/typecheck/src/expression.js +26 -23
- package/src/ngtsc/typecheck/src/host.d.ts +1 -0
- package/src/ngtsc/typecheck/src/host.js +4 -1
- package/src/ngtsc/typecheck/src/oob.d.ts +11 -11
- package/src/ngtsc/typecheck/src/oob.js +15 -4
- package/src/ngtsc/typecheck/src/source.d.ts +9 -9
- package/src/ngtsc/typecheck/src/source.js +15 -15
- package/src/ngtsc/typecheck/src/template_semantics.d.ts +22 -0
- package/src/ngtsc/typecheck/src/template_semantics.js +51 -0
- package/src/ngtsc/typecheck/src/ts_util.js +36 -1
- package/src/ngtsc/typecheck/src/type_check_block.d.ts +3 -3
- package/src/ngtsc/typecheck/src/type_check_block.js +70 -43
- package/src/ngtsc/typecheck/src/type_check_file.d.ts +2 -2
- package/src/ngtsc/typecheck/src/type_check_file.js +3 -3
- package/src/ngtsc/typecheck/src/type_constructor.d.ts +4 -4
- package/src/ngtsc/typecheck/src/type_constructor.js +15 -10
- package/src/ngtsc/typecheck/src/type_emitter.d.ts +72 -0
- package/src/ngtsc/typecheck/src/type_emitter.js +150 -0
- package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +31 -0
- package/src/ngtsc/typecheck/src/type_parameter_emitter.js +96 -0
- package/src/ngtsc/util/src/typescript.d.ts +7 -1
- package/src/ngtsc/util/src/typescript.js +15 -5
- package/src/perform_watch.js +6 -5
- package/src/transformers/api.d.ts +3 -204
- package/src/transformers/api.js +1 -1
- package/src/transformers/compiler_host.js +2 -2
- package/src/transformers/program.js +1 -1
- package/src/typescript_support.js +2 -2
- package/src/version.js +1 -1
- package/src/ngtsc/diagnostics/src/code.js +0 -101
- package/src/ngtsc/resource_loader.js +0 -193
- package/src/ngtsc/shims/src/host.d.ts +0 -46
- package/src/ngtsc/shims/src/host.js +0 -82
- package/src/ngtsc/util/src/resource_recorder.d.ts +0 -18
- package/src/ngtsc/util/src/resource_recorder.js +0 -20
|
@@ -27,7 +27,7 @@ export declare class DtsTransformRegistry {
|
|
|
27
27
|
*/
|
|
28
28
|
getAllTransforms(sf: ts.SourceFile): DtsTransform[] | null;
|
|
29
29
|
}
|
|
30
|
-
export declare function declarationTransformFactory(transformRegistry: DtsTransformRegistry, importRewriter: ImportRewriter, importPrefix?: string): ts.TransformerFactory<ts.
|
|
30
|
+
export declare function declarationTransformFactory(transformRegistry: DtsTransformRegistry, importRewriter: ImportRewriter, importPrefix?: string): ts.TransformerFactory<ts.SourceFile>;
|
|
31
31
|
export interface IvyDeclarationField {
|
|
32
32
|
name: string;
|
|
33
33
|
type: Type;
|
|
@@ -216,6 +216,7 @@
|
|
|
216
216
|
var newMembers = fields.map(function (decl) {
|
|
217
217
|
var modifiers = [ts.createModifier(ts.SyntaxKind.StaticKeyword)];
|
|
218
218
|
var typeRef = translator_1.translateType(decl.type, imports);
|
|
219
|
+
emitAsSingleLine(typeRef);
|
|
219
220
|
return ts.createProperty(
|
|
220
221
|
/* decorators */ undefined,
|
|
221
222
|
/* modifiers */ modifiers,
|
|
@@ -235,6 +236,10 @@
|
|
|
235
236
|
return IvyDeclarationDtsTransform;
|
|
236
237
|
}());
|
|
237
238
|
exports.IvyDeclarationDtsTransform = IvyDeclarationDtsTransform;
|
|
239
|
+
function emitAsSingleLine(node) {
|
|
240
|
+
ts.setEmitFlags(node, ts.EmitFlags.SingleLine);
|
|
241
|
+
ts.forEachChild(node, emitAsSingleLine);
|
|
242
|
+
}
|
|
238
243
|
var ReturnTypeTransform = /** @class */ (function () {
|
|
239
244
|
function ReturnTypeTransform() {
|
|
240
245
|
this.typeReplacements = new Map();
|
|
@@ -288,4 +293,4 @@
|
|
|
288
293
|
}());
|
|
289
294
|
exports.ReturnTypeTransform = ReturnTypeTransform;
|
|
290
295
|
});
|
|
291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjbGFyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3RyYW5zZm9ybS9zcmMvZGVjbGFyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBR0gsK0JBQWlDO0lBSWpDLHlFQUE4RDtJQUc5RCw2RUFBbUM7SUFFbkM7OztPQUdHO0lBQ0g7UUFBQTtZQUNVLDZCQUF3QixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1lBQ2hGLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFDO1FBeUMvRSxDQUFDO1FBdkNDLHlEQUEwQixHQUExQixVQUEyQixFQUFpQjtZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSwwQkFBMEIsRUFBRSxDQUFDLENBQUM7YUFDekU7WUFDRCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFHLENBQUM7UUFDakQsQ0FBQztRQUVELHFEQUFzQixHQUF0QixVQUF1QixFQUFpQjtZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7YUFDOUQ7WUFDRCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFHLENBQUM7UUFDN0MsQ0FBQztRQUVEOzs7V0FHRztRQUNILCtDQUFnQixHQUFoQixVQUFpQixFQUFpQjtZQUNoQyw2RkFBNkY7WUFD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QVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNILDBCQUFDO0lBQUQsQ0FBQyxBQXhERCxJQXdEQztJQXhEWSxrREFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7SW1wb3J0UmV3cml0ZXJ9IGZyb20gJy4uLy4uL2ltcG9ydHMnO1xuaW1wb3J0IHtDbGFzc0RlY2xhcmF0aW9ufSBmcm9tICcuLi8uLi9yZWZsZWN0aW9uJztcbmltcG9ydCB7SW1wb3J0TWFuYWdlciwgdHJhbnNsYXRlVHlwZX0gZnJvbSAnLi4vLi4vdHJhbnNsYXRvcic7XG5cbmltcG9ydCB7RHRzVHJhbnNmb3JtfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge2FkZEltcG9ydHN9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIGBEdHNUcmFuc2Zvcm1gcyBwZXIgc291cmNlIGZpbGUsIHNvIHRoYXQgaXQgaXMga25vd24gd2hpY2ggc291cmNlIGZpbGVzIG5lZWQgdG9cbiAqIGhhdmUgdGhlaXIgZGVjbGFyYXRpb24gZmlsZSB0cmFuc2Zvcm1lZC5cbiAqL1xuZXhwb3J0IGNsYXNzIER0c1RyYW5zZm9ybVJlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSBpdnlEZWNsYXJhdGlvblRyYW5zZm9ybXMgPSBuZXcgTWFwPHRzLlNvdXJjZUZpbGUsIEl2eURlY2xhcmF0aW9uRHRzVHJhbnNmb3JtPigpO1xuICBwcml2YXRlIHJldHVyblR5cGVUcmFuc2Zvcm1zID0gbmV3IE1hcDx0cy5Tb3VyY2VGaWxlLCBSZXR1cm5UeXBlVHJhbnNmb3JtPigpO1xuXG4gIGdldEl2eURlY2xhcmF0aW9uVHJhbnNmb3JtKHNmOiB0cy5Tb3VyY2VGaWxlKTogSXZ5RGVjbGFyYXRpb25EdHNUcmFuc2Zvcm0ge1xuICAgIGlmICghdGhpcy5pdnlEZWNsYXJhdGlvblRyYW5zZm9ybXMuaGFzKHNmKSkge1xuICAgICAgdGhpcy5pdnlEZWNsYXJhdGlvblRyYW5zZm9ybXMuc2V0KHNmLCBuZXcgSXZ5RGVjbGFyYXRpb25EdHNUcmFuc2Zvcm0oKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLml2eURlY2xhcmF0aW9uVHJhbnNmb3Jtcy5nZXQoc2YpICE7XG4gIH1cblxuICBnZXRSZXR1cm5UeXBlVHJhbnNmb3JtKHNmOiB0cy5Tb3VyY2VGaWxlKTogUmV0dXJuVHlwZVRyYW5zZm9ybSB7XG4gICAgaWYgKCF0aGlzLnJldHVyblR5cGVUcmFuc2Zvcm1zLmhhcyhzZikpIHtcbiAgICAgIHRoaXMucmV0dXJuVHlwZVRyYW5zZm9ybXMuc2V0KHNmLCBuZXcgUmV0dXJuVHlwZVRyYW5zZm9ybSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmV0dXJuVHlwZVRyYW5zZm9ybXMuZ2V0KHNmKSAhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGR0cyB0cmFuc2Zvcm1zIHRvIGJlIGFwcGxpZWQgZm9yIHRoZSBnaXZlbiBzb3VyY2UgZmlsZSwgb3IgYG51bGxgIGlmIG5vIHRyYW5zZm9ybSBpc1xuICAgKiBuZWNlc3NhcnkuXG4gICAqL1xuICBnZXRBbGxUcmFuc2Zvcm1zKHNmOiB0cy5Tb3VyY2VGaWxlKTogRHRzVHJhbnNmb3JtW118bnVsbCB7XG4gICAgLy8gTm8gbmVlZCB0byB0cmFuc2Zvcm0gaWYgaXQncyBub3QgYSBkZWNsYXJhdGlvbnMgZmlsZSwgb3IgaWYgbm8gY2hhbmdlcyBoYXZlIGJlZW4gcmVxdWVzdGVkXG4gICAgLy8gdG8gdGhlIGlucHV0IGZpbGUuIER1ZSB0byB0aGUgd2F5IFR5cGVTY3JpcHQgYWZ0ZXJEZWNsYXJhdGlvbnMgdHJhbnNmb3JtZXJzIHdvcmssIHRoZVxuICAgIC8vIGB0cy5Tb3VyY2VGaWxlYCBwYXRoIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCAudHMuIFRoZSBvbmx5IHdheSB3ZSBrbm93IGl0J3MgYWN0dWFsbHkgYVxuICAgIC8vIGRlY2xhcmF0aW9uIGZpbGUgaXMgdmlhIHRoZSBgaXNEZWNsYXJhdGlvbkZpbGVgIHByb3BlcnR5LlxuICAgIGlmICghc2YuaXNEZWNsYXJhdGlvbkZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbFNmID0gdHMuZ2V0T3JpZ2luYWxOb2RlKHNmKSBhcyB0cy5Tb3VyY2VGaWxlO1xuXG4gICAgbGV0IHRyYW5zZm9ybXM6IER0c1RyYW5zZm9ybVtdfG51bGwgPSBudWxsO1xuICAgIGlmICh0aGlzLml2eURlY2xhcmF0aW9uVHJhbnNmb3Jtcy5oYXMob3JpZ2luYWxTZikpIHtcbiAgICAgIHRyYW5zZm9ybXMgPSBbXTtcbiAgICAgIHRyYW5zZm9ybXMucHVzaCh0aGlzLml2eURlY2xhcmF0aW9uVHJhbnNmb3Jtcy5nZXQob3JpZ2luYWxTZikgISk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJldHVyblR5cGVUcmFuc2Zvcm1zLmhhcyhvcmlnaW5hbFNmKSkge1xuICAgICAgdHJhbnNmb3JtcyA9IHRyYW5zZm9ybXMgfHwgW107XG4gICAgICB0cmFuc2Zvcm1zLnB1c2godGhpcy5yZXR1cm5UeXBlVHJhbnNmb3Jtcy5nZXQob3JpZ2luYWxTZikgISk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2Zvcm1zO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvblRyYW5zZm9ybUZhY3RvcnkoXG4gICAgdHJhbnNmb3JtUmVnaXN0cnk6IER0c1RyYW5zZm9ybVJlZ2lzdHJ5LCBpbXBvcnRSZXdyaXRlcjogSW1wb3J0UmV3cml0ZXIsXG4gICAgaW1wb3J0UHJlZml4Pzogc3RyaW5nKTogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLkJ1bmRsZXx0cy5Tb3VyY2VGaWxlPiB7XG4gIHJldHVybiAoY29udGV4dDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0KSA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgRHRzVHJhbnNmb3JtZXIoY29udGV4dCwgaW1wb3J0UmV3cml0ZXIsIGltcG9ydFByZWZpeCk7XG4gICAgcmV0dXJuIChmaWxlT3JCdW5kbGUpID0+IHtcbiAgICAgIGlmICh0cy5pc0J1bmRsZShmaWxlT3JCdW5kbGUpKSB7XG4gICAgICAgIC8vIE9ubHkgYXR0ZW1wdCB0byB0cmFuc2Zvcm0gc291cmNlIGZpbGVzLlxuICAgICAgICByZXR1cm4gZmlsZU9yQnVuZGxlO1xuICAgICAgfVxuICAgICAgY29uc3QgdHJhbnNmb3JtcyA9IHRyYW5zZm9ybVJlZ2lzdHJ5LmdldEFsbFRyYW5zZm9ybXMoZmlsZU9yQnVuZGxlKTtcbiAgICAgIGlmICh0cmFuc2Zvcm1zID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmaWxlT3JCdW5kbGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJhbnNmb3JtZXIudHJhbnNmb3JtKGZpbGVPckJ1bmRsZSwgdHJhbnNmb3Jtcyk7XG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgLmQudHMgZmlsZSB0ZXh0IGFuZCBhZGRzIHN0YXRpYyBmaWVsZCBkZWNsYXJhdGlvbnMsIHdpdGggdHlwZXMuXG4gKi9cbmNsYXNzIER0c1RyYW5zZm9ybWVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIGN0eDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0LCBwcml2YXRlIGltcG9ydFJld3JpdGVyOiBJbXBvcnRSZXdyaXRlcixcbiAgICAgIHByaXZhdGUgaW1wb3J0UHJlZml4Pzogc3RyaW5nKSB7fVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhlIGRlY2xhcmF0aW9uIGZpbGUgYW5kIGFkZCBhbnkgZGVjbGFyYXRpb25zIHdoaWNoIHdlcmUgcmVjb3JkZWQuXG4gICAqL1xuICB0cmFuc2Zvcm0oc2Y6IHRzLlNvdXJjZUZpbGUsIHRyYW5zZm9ybXM6IER0c1RyYW5zZm9ybVtdKTogdHMuU291cmNlRmlsZSB7XG4gICAgY29uc3QgaW1wb3J0cyA9IG5ldyBJbXBvcnRNYW5hZ2VyKHRoaXMuaW1wb3J0UmV3cml0ZXIsIHRoaXMuaW1wb3J0UHJlZml4KTtcblxuICAgIGNvbnN0IHZpc2l0b3I6IHRzLlZpc2l0b3IgPSAobm9kZTogdHMuTm9kZSk6IHRzLlZpc2l0UmVzdWx0PHRzLk5vZGU+ID0+IHtcbiAgICAgIGlmICh0cy5pc0NsYXNzRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtQ2xhc3NEZWNsYXJhdGlvbihub2RlLCB0cmFuc2Zvcm1zLCBpbXBvcnRzKTtcbiAgICAgIH0gZWxzZSBpZiAodHMuaXNGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUZ1bmN0aW9uRGVjbGFyYXRpb24obm9kZSwgdHJhbnNmb3JtcywgaW1wb3J0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIG5vZGUgYXMgaXMuXG4gICAgICAgIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdG9yLCB0aGlzLmN0eCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IHNjYW4gdGhyb3VnaCB0aGUgQVNUIGFuZCBwcm9jZXNzIGFsbCBub2RlcyBhcyBkZXNpcmVkLlxuICAgIHNmID0gdHMudmlzaXROb2RlKHNmLCB2aXNpdG9yKTtcblxuICAgIC8vIEFkZCBuZXcgaW1wb3J0cyBmb3IgdGhpcyBmaWxlLlxuICAgIHJldHVybiBhZGRJbXBvcnRzKGltcG9ydHMsIHNmKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ2xhc3NEZWNsYXJhdGlvbihcbiAgICAgIGNsYXp6OiB0cy5DbGFzc0RlY2xhcmF0aW9uLCB0cmFuc2Zvcm1zOiBEdHNUcmFuc2Zvcm1bXSxcbiAgICAgIGltcG9ydHM6IEltcG9ydE1hbmFnZXIpOiB0cy5DbGFzc0RlY2xhcmF0aW9uIHtcbiAgICBsZXQgZWxlbWVudHM6IHRzLkNsYXNzRWxlbWVudFtdfFJlYWRvbmx5QXJyYXk8dHMuQ2xhc3NFbGVtZW50PiA9IGNsYXp6Lm1lbWJlcnM7XG4gICAgbGV0IGVsZW1lbnRzQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCB0cmFuc2Zvcm0gb2YgdHJhbnNmb3Jtcykge1xuICAgICAgaWYgKHRyYW5zZm9ybS50cmFuc2Zvcm1DbGFzc0VsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gdHJhbnNmb3JtLnRyYW5zZm9ybUNsYXNzRWxlbWVudChlbGVtZW50c1tpXSwgaW1wb3J0cyk7XG4gICAgICAgICAgaWYgKHJlcyAhPT0gZWxlbWVudHNbaV0pIHtcbiAgICAgICAgICAgIGlmICghZWxlbWVudHNDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnRzID0gWy4uLmVsZW1lbnRzXTtcbiAgICAgICAgICAgICAgZWxlbWVudHNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChlbGVtZW50cyBhcyB0cy5DbGFzc0VsZW1lbnRbXSlbaV0gPSByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5ld0NsYXp6OiB0cy5DbGFzc0RlY2xhcmF0aW9uID0gY2xheno7XG5cbiAgICBmb3IgKGNvbnN0IHRyYW5zZm9ybSBvZiB0cmFuc2Zvcm1zKSB7XG4gICAgICBpZiAodHJhbnNmb3JtLnRyYW5zZm9ybUNsYXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gSWYgbm8gRHRzVHJhbnNmb3JtIGhhcyBjaGFuZ2VkIHRoZSBjbGFzcyB5ZXQsIHRoZW4gdGhlIChwb3NzaWJseSBtdXRhdGVkKSBlbGVtZW50cyBoYXZlXG4gICAgICAgIC8vIG5vdCB5ZXQgYmVlbiBpbmNvcnBvcmF0ZWQuIE90aGVyd2lzZSwgYG5ld0NsYXp6Lm1lbWJlcnNgIGhvbGRzIHRoZSBsYXRlc3QgY2xhc3MgbWVtYmVycy5cbiAgICAgICAgY29uc3QgaW5wdXRNZW1iZXJzID0gKGNsYXp6ID09PSBuZXdDbGF6eiA/IGVsZW1lbnRzIDogbmV3Q2xhenoubWVtYmVycyk7XG5cbiAgICAgICAgbmV3Q2xhenogPSB0cmFuc2Zvcm0udHJhbnNmb3JtQ2xhc3MobmV3Q2xhenosIGlucHV0TWVtYmVycywgaW1wb3J0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgc29tZSBlbGVtZW50cyBoYXZlIGJlZW4gdHJhbnNmb3JtZWQgYnV0IHRoZSBjbGFzcyBpdHNlbGYgaGFzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLCBjcmVhdGVcbiAgICAvLyBhbiB1cGRhdGVkIGNsYXNzIGRlY2xhcmF0aW9uIHdpdGggdGhlIHVwZGF0ZWQgZWxlbWVudHMuXG4gICAgaWYgKGVsZW1lbnRzQ2hhbmdlZCAmJiBjbGF6eiA9PT0gbmV3Q2xhenopIHtcbiAgICAgIG5ld0NsYXp6ID0gdHMudXBkYXRlQ2xhc3NEZWNsYXJhdGlvbihcbiAgICAgICAgICAvKiBub2RlICovIGNsYXp6LFxuICAgICAgICAgIC8qIGRlY29yYXRvcnMgKi8gY2xhenouZGVjb3JhdG9ycyxcbiAgICAgICAgICAvKiBtb2RpZmllcnMgKi8gY2xhenoubW9kaWZpZXJzLFxuICAgICAgICAgIC8qIG5hbWUgKi8gY2xhenoubmFtZSxcbiAgICAgICAgICAvKiB0eXBlUGFyYW1ldGVycyAqLyBjbGF6ei50eXBlUGFyYW1ldGVycyxcbiAgICAgICAgICAvKiBoZXJpdGFnZUNsYXVzZXMgKi8gY2xhenouaGVyaXRhZ2VDbGF1c2VzLFxuICAgICAgICAgIC8qIG1lbWJlcnMgKi8gZWxlbWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdDbGF6ejtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIGRlY2xhcmF0aW9uOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uLCB0cmFuc2Zvcm1zOiBEdHNUcmFuc2Zvcm1bXSxcbiAgICAgIGltcG9ydHM6IEltcG9ydE1hbmFnZXIpOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgICBsZXQgbmV3RGVjbCA9IGRlY2xhcmF0aW9uO1xuXG4gICAgZm9yIChjb25zdCB0cmFuc2Zvcm0gb2YgdHJhbnNmb3Jtcykge1xuICAgICAgaWYgKHRyYW5zZm9ybS50cmFuc2Zvcm1GdW5jdGlvbkRlY2xhcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3RGVjbCA9IHRyYW5zZm9ybS50cmFuc2Zvcm1GdW5jdGlvbkRlY2xhcmF0aW9uKG5ld0RlY2wsIGltcG9ydHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdEZWNsO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXZ5RGVjbGFyYXRpb25GaWVsZCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogVHlwZTtcbn1cblxuZXhwb3J0IGNsYXNzIEl2eURlY2xhcmF0aW9uRHRzVHJhbnNmb3JtIGltcGxlbWVudHMgRHRzVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSBkZWNsYXJhdGlvbkZpZWxkcyA9IG5ldyBNYXA8Q2xhc3NEZWNsYXJhdGlvbiwgSXZ5RGVjbGFyYXRpb25GaWVsZFtdPigpO1xuXG4gIGFkZEZpZWxkcyhkZWNsOiBDbGFzc0RlY2xhcmF0aW9uLCBmaWVsZHM6IEl2eURlY2xhcmF0aW9uRmllbGRbXSk6IHZvaWQge1xuICAgIHRoaXMuZGVjbGFyYXRpb25GaWVsZHMuc2V0KGRlY2wsIGZpZWxkcyk7XG4gIH1cblxuICB0cmFuc2Zvcm1DbGFzcyhcbiAgICAgIGNsYXp6OiB0cy5DbGFzc0RlY2xhcmF0aW9uLCBtZW1iZXJzOiBSZWFkb25seUFycmF5PHRzLkNsYXNzRWxlbWVudD4sXG4gICAgICBpbXBvcnRzOiBJbXBvcnRNYW5hZ2VyKTogdHMuQ2xhc3NEZWNsYXJhdGlvbiB7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSB0cy5nZXRPcmlnaW5hbE5vZGUoY2xhenopIGFzIENsYXNzRGVjbGFyYXRpb247XG5cbiAgICBpZiAoIXRoaXMuZGVjbGFyYXRpb25GaWVsZHMuaGFzKG9yaWdpbmFsKSkge1xuICAgICAgcmV0dXJuIGNsYXp6O1xuICAgIH1cbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmRlY2xhcmF0aW9uRmllbGRzLmdldChvcmlnaW5hbCkgITtcblxuICAgIGNvbnN0IG5ld01lbWJlcnMgPSBmaWVsZHMubWFwKGRlY2wgPT4ge1xuICAgICAgY29uc3QgbW9kaWZpZXJzID0gW3RzLmNyZWF0ZU1vZGlmaWVyKHRzLlN5bnRheEtpbmQuU3RhdGljS2V5d29yZCldO1xuICAgICAgY29uc3QgdHlwZVJlZiA9IHRyYW5zbGF0ZVR5cGUoZGVjbC50eXBlLCBpbXBvcnRzKTtcbiAgICAgIHJldHVybiB0cy5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAvKiBkZWNvcmF0b3JzICovIHVuZGVmaW5lZCxcbiAgICAgICAgICAvKiBtb2RpZmllcnMgKi8gbW9kaWZpZXJzLFxuICAgICAgICAgIC8qIG5hbWUgKi8gZGVjbC5uYW1lLFxuICAgICAgICAgIC8qIHF1ZXN0aW9uT3JFeGNsYW1hdGlvblRva2VuICovIHVuZGVmaW5lZCxcbiAgICAgICAgICAvKiB0eXBlICovIHR5cGVSZWYsXG4gICAgICAgICAgLyogaW5pdGlhbGl6ZXIgKi8gdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0cy51cGRhdGVDbGFzc0RlY2xhcmF0aW9uKFxuICAgICAgICAvKiBub2RlICovIGNsYXp6LFxuICAgICAgICAvKiBkZWNvcmF0b3JzICovIGNsYXp6LmRlY29yYXRvcnMsXG4gICAgICAgIC8qIG1vZGlmaWVycyAqLyBjbGF6ei5tb2RpZmllcnMsXG4gICAgICAgIC8qIG5hbWUgKi8gY2xhenoubmFtZSxcbiAgICAgICAgLyogdHlwZVBhcmFtZXRlcnMgKi8gY2xhenoudHlwZVBhcmFtZXRlcnMsXG4gICAgICAgIC8qIGhlcml0YWdlQ2xhdXNlcyAqLyBjbGF6ei5oZXJpdGFnZUNsYXVzZXMsXG4gICAgICAgIC8qIG1lbWJlcnMgKi9bLi4ubWVtYmVycywgLi4ubmV3TWVtYmVyc10pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXR1cm5UeXBlVHJhbnNmb3JtIGltcGxlbWVudHMgRHRzVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSB0eXBlUmVwbGFjZW1lbnRzID0gbmV3IE1hcDx0cy5EZWNsYXJhdGlvbiwgVHlwZT4oKTtcblxuICBhZGRUeXBlUmVwbGFjZW1lbnQoZGVjbGFyYXRpb246IHRzLkRlY2xhcmF0aW9uLCB0eXBlOiBUeXBlKTogdm9pZCB7XG4gICAgdGhpcy50eXBlUmVwbGFjZW1lbnRzLnNldChkZWNsYXJhdGlvbiwgdHlwZSk7XG4gIH1cblxuICB0cmFuc2Zvcm1DbGFzc0VsZW1lbnQoZWxlbWVudDogdHMuQ2xhc3NFbGVtZW50LCBpbXBvcnRzOiBJbXBvcnRNYW5hZ2VyKTogdHMuQ2xhc3NFbGVtZW50IHtcbiAgICBpZiAoIXRzLmlzTWV0aG9kU2lnbmF0dXJlKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbCA9IHRzLmdldE9yaWdpbmFsTm9kZShlbGVtZW50KSBhcyB0cy5NZXRob2REZWNsYXJhdGlvbjtcbiAgICBpZiAoIXRoaXMudHlwZVJlcGxhY2VtZW50cy5oYXMob3JpZ2luYWwpKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3QgcmV0dXJuVHlwZSA9IHRoaXMudHlwZVJlcGxhY2VtZW50cy5nZXQob3JpZ2luYWwpICE7XG4gICAgY29uc3QgdHNSZXR1cm5UeXBlID0gdHJhbnNsYXRlVHlwZShyZXR1cm5UeXBlLCBpbXBvcnRzKTtcblxuICAgIGNvbnN0IG1ldGhvZFNpZ25hdHVyZSA9IHRzLnVwZGF0ZU1ldGhvZFNpZ25hdHVyZShcbiAgICAgICAgLyogbm9kZSAqLyBlbGVtZW50LFxuICAgICAgICAvKiB0eXBlUGFyYW1ldGVycyAqLyBlbGVtZW50LnR5cGVQYXJhbWV0ZXJzLFxuICAgICAgICAvKiBwYXJhbWV0ZXJzICovIGVsZW1lbnQucGFyYW1ldGVycyxcbiAgICAgICAgLyogdHlwZSAqLyB0c1JldHVyblR5cGUsXG4gICAgICAgIC8qIG5hbWUgKi8gZWxlbWVudC5uYW1lLFxuICAgICAgICAvKiBxdWVzdGlvblRva2VuICovIGVsZW1lbnQucXVlc3Rpb25Ub2tlbik7XG5cbiAgICAvLyBDb3B5IG92ZXIgYW55IG1vZGlmaWVycywgdGhlc2UgY2Fubm90IGJlIHNldCBkdXJpbmcgdGhlIGB0cy51cGRhdGVNZXRob2RTaWduYXR1cmVgIGNhbGwuXG4gICAgbWV0aG9kU2lnbmF0dXJlLm1vZGlmaWVycyA9IGVsZW1lbnQubW9kaWZpZXJzO1xuXG4gICAgLy8gQSBidWcgaW4gdGhlIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gY2F1c2VzIGB0cy5NZXRob2RTaWduYXR1cmVgIG5vdCB0byBiZSBhc3NpZ25hYmxlIHRvXG4gICAgLy8gYHRzLkNsYXNzRWxlbWVudGAuIFNpbmNlIGBlbGVtZW50YCB3YXMgYSBgdHMuTWV0aG9kU2lnbmF0dXJlYCBhbHJlYWR5LCB0cmFuc2Zvcm1pbmcgaXQgaW50b1xuICAgIC8vIHRoaXMgdHlwZSBpcyBhY3R1YWxseSBjb3JyZWN0LlxuICAgIHJldHVybiBtZXRob2RTaWduYXR1cmUgYXMgdW5rbm93biBhcyB0cy5DbGFzc0VsZW1lbnQ7XG4gIH1cblxuICB0cmFuc2Zvcm1GdW5jdGlvbkRlY2xhcmF0aW9uKGVsZW1lbnQ6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24sIGltcG9ydHM6IEltcG9ydE1hbmFnZXIpOlxuICAgICAgdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSB0cy5nZXRPcmlnaW5hbE5vZGUoZWxlbWVudCkgYXMgdHMuRnVuY3Rpb25EZWNsYXJhdGlvbjtcbiAgICBpZiAoIXRoaXMudHlwZVJlcGxhY2VtZW50cy5oYXMob3JpZ2luYWwpKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3QgcmV0dXJuVHlwZSA9IHRoaXMudHlwZVJlcGxhY2VtZW50cy5nZXQob3JpZ2luYWwpICE7XG4gICAgY29uc3QgdHNSZXR1cm5UeXBlID0gdHJhbnNsYXRlVHlwZShyZXR1cm5UeXBlLCBpbXBvcnRzKTtcblxuICAgIHJldHVybiB0cy51cGRhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgICAvKiBub2RlICovIGVsZW1lbnQsXG4gICAgICAgIC8qIGRlY29yYXRvcnMgKi8gZWxlbWVudC5kZWNvcmF0b3JzLFxuICAgICAgICAvKiBtb2RpZmllcnMgKi8gZWxlbWVudC5tb2RpZmllcnMsXG4gICAgICAgIC8qIGFzdGVyaXNrVG9rZW4gKi8gZWxlbWVudC5hc3Rlcmlza1Rva2VuLFxuICAgICAgICAvKiBuYW1lICovIGVsZW1lbnQubmFtZSxcbiAgICAgICAgLyogdHlwZVBhcmFtZXRlcnMgKi8gZWxlbWVudC50eXBlUGFyYW1ldGVycyxcbiAgICAgICAgLyogcGFyYW1ldGVycyAqLyBlbGVtZW50LnBhcmFtZXRlcnMsXG4gICAgICAgIC8qIHR5cGUgKi8gdHNSZXR1cm5UeXBlLFxuICAgICAgICAvKiBib2R5ICovIGVsZW1lbnQuYm9keSk7XG4gIH1cbn1cbiJdfQ==
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjbGFyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3RyYW5zZm9ybS9zcmMvZGVjbGFyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBR0gsK0JBQWlDO0lBSWpDLHlFQUE4RDtJQUc5RCw2RUFBbUM7SUFFbkM7OztPQUdHO0lBQ0g7UUFBQTtZQUNVLDZCQUF3QixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1lBQ2hGLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFDO1FBeUMvRSxDQUFDO1FBdkNDLHlEQUEwQixHQUExQixVQUEyQixFQUFpQjtZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSwwQkFBMEIsRUFBRSxDQUFDLENBQUM7YUFDekU7WUFDRCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFHLENBQUM7UUFDakQsQ0FBQztRQUVELHFEQUFzQixHQUF0QixVQUF1QixFQUFpQjtZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7YUFDOUQ7WUFDRCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFHLENBQUM7UUFDN0MsQ0FBQztRQUVEOzs7V0FHRztRQUNILCtDQUFnQixHQUFoQixVQUFpQixFQUFpQjtZQUNoQyw2RkFBNkY7WUFD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LFVBQVU7WUFDbkMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTO1lBQ2pDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxhQUFhO1lBQ3pDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSTtZQUN2QixvQkFBb0IsQ0FBQyxPQUFPLENBQUMsY0FBYztZQUMzQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsVUFBVTtZQUNuQyxVQUFVLENBQUMsWUFBWTtZQUN2QixVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDSCwwQkFBQztJQUFELENBQUMsQUF4REQsSUF3REM7SUF4RFksa0RBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0ltcG9ydFJld3JpdGVyfSBmcm9tICcuLi8uLi9pbXBvcnRzJztcbmltcG9ydCB7Q2xhc3NEZWNsYXJhdGlvbn0gZnJvbSAnLi4vLi4vcmVmbGVjdGlvbic7XG5pbXBvcnQge0ltcG9ydE1hbmFnZXIsIHRyYW5zbGF0ZVR5cGV9IGZyb20gJy4uLy4uL3RyYW5zbGF0b3InO1xuXG5pbXBvcnQge0R0c1RyYW5zZm9ybX0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHthZGRJbXBvcnRzfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiBgRHRzVHJhbnNmb3JtYHMgcGVyIHNvdXJjZSBmaWxlLCBzbyB0aGF0IGl0IGlzIGtub3duIHdoaWNoIHNvdXJjZSBmaWxlcyBuZWVkIHRvXG4gKiBoYXZlIHRoZWlyIGRlY2xhcmF0aW9uIGZpbGUgdHJhbnNmb3JtZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEdHNUcmFuc2Zvcm1SZWdpc3RyeSB7XG4gIHByaXZhdGUgaXZ5RGVjbGFyYXRpb25UcmFuc2Zvcm1zID0gbmV3IE1hcDx0cy5Tb3VyY2VGaWxlLCBJdnlEZWNsYXJhdGlvbkR0c1RyYW5zZm9ybT4oKTtcbiAgcHJpdmF0ZSByZXR1cm5UeXBlVHJhbnNmb3JtcyA9IG5ldyBNYXA8dHMuU291cmNlRmlsZSwgUmV0dXJuVHlwZVRyYW5zZm9ybT4oKTtcblxuICBnZXRJdnlEZWNsYXJhdGlvblRyYW5zZm9ybShzZjogdHMuU291cmNlRmlsZSk6IEl2eURlY2xhcmF0aW9uRHRzVHJhbnNmb3JtIHtcbiAgICBpZiAoIXRoaXMuaXZ5RGVjbGFyYXRpb25UcmFuc2Zvcm1zLmhhcyhzZikpIHtcbiAgICAgIHRoaXMuaXZ5RGVjbGFyYXRpb25UcmFuc2Zvcm1zLnNldChzZiwgbmV3IEl2eURlY2xhcmF0aW9uRHRzVHJhbnNmb3JtKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pdnlEZWNsYXJhdGlvblRyYW5zZm9ybXMuZ2V0KHNmKSAhO1xuICB9XG5cbiAgZ2V0UmV0dXJuVHlwZVRyYW5zZm9ybShzZjogdHMuU291cmNlRmlsZSk6IFJldHVyblR5cGVUcmFuc2Zvcm0ge1xuICAgIGlmICghdGhpcy5yZXR1cm5UeXBlVHJhbnNmb3Jtcy5oYXMoc2YpKSB7XG4gICAgICB0aGlzLnJldHVyblR5cGVUcmFuc2Zvcm1zLnNldChzZiwgbmV3IFJldHVyblR5cGVUcmFuc2Zvcm0oKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJldHVyblR5cGVUcmFuc2Zvcm1zLmdldChzZikgITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkdHMgdHJhbnNmb3JtcyB0byBiZSBhcHBsaWVkIGZvciB0aGUgZ2l2ZW4gc291cmNlIGZpbGUsIG9yIGBudWxsYCBpZiBubyB0cmFuc2Zvcm0gaXNcbiAgICogbmVjZXNzYXJ5LlxuICAgKi9cbiAgZ2V0QWxsVHJhbnNmb3JtcyhzZjogdHMuU291cmNlRmlsZSk6IER0c1RyYW5zZm9ybVtdfG51bGwge1xuICAgIC8vIE5vIG5lZWQgdG8gdHJhbnNmb3JtIGlmIGl0J3Mgbm90IGEgZGVjbGFyYXRpb25zIGZpbGUsIG9yIGlmIG5vIGNoYW5nZXMgaGF2ZSBiZWVuIHJlcXVlc3RlZFxuICAgIC8vIHRvIHRoZSBpbnB1dCBmaWxlLiBEdWUgdG8gdGhlIHdheSBUeXBlU2NyaXB0IGFmdGVyRGVjbGFyYXRpb25zIHRyYW5zZm9ybWVycyB3b3JrLCB0aGVcbiAgICAvLyBgdHMuU291cmNlRmlsZWAgcGF0aCBpcyB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwgLnRzLiBUaGUgb25seSB3YXkgd2Uga25vdyBpdCdzIGFjdHVhbGx5IGFcbiAgICAvLyBkZWNsYXJhdGlvbiBmaWxlIGlzIHZpYSB0aGUgYGlzRGVjbGFyYXRpb25GaWxlYCBwcm9wZXJ0eS5cbiAgICBpZiAoIXNmLmlzRGVjbGFyYXRpb25GaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxTZiA9IHRzLmdldE9yaWdpbmFsTm9kZShzZikgYXMgdHMuU291cmNlRmlsZTtcblxuICAgIGxldCB0cmFuc2Zvcm1zOiBEdHNUcmFuc2Zvcm1bXXxudWxsID0gbnVsbDtcbiAgICBpZiAodGhpcy5pdnlEZWNsYXJhdGlvblRyYW5zZm9ybXMuaGFzKG9yaWdpbmFsU2YpKSB7XG4gICAgICB0cmFuc2Zvcm1zID0gW107XG4gICAgICB0cmFuc2Zvcm1zLnB1c2godGhpcy5pdnlEZWNsYXJhdGlvblRyYW5zZm9ybXMuZ2V0KG9yaWdpbmFsU2YpICEpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXR1cm5UeXBlVHJhbnNmb3Jtcy5oYXMob3JpZ2luYWxTZikpIHtcbiAgICAgIHRyYW5zZm9ybXMgPSB0cmFuc2Zvcm1zIHx8IFtdO1xuICAgICAgdHJhbnNmb3Jtcy5wdXNoKHRoaXMucmV0dXJuVHlwZVRyYW5zZm9ybXMuZ2V0KG9yaWdpbmFsU2YpICEpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNmb3JtcztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb25UcmFuc2Zvcm1GYWN0b3J5KFxuICAgIHRyYW5zZm9ybVJlZ2lzdHJ5OiBEdHNUcmFuc2Zvcm1SZWdpc3RyeSwgaW1wb3J0UmV3cml0ZXI6IEltcG9ydFJld3JpdGVyLFxuICAgIGltcG9ydFByZWZpeD86IHN0cmluZyk6IHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPiB7XG4gIHJldHVybiAoY29udGV4dDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0KSA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgRHRzVHJhbnNmb3JtZXIoY29udGV4dCwgaW1wb3J0UmV3cml0ZXIsIGltcG9ydFByZWZpeCk7XG4gICAgcmV0dXJuIChmaWxlT3JCdW5kbGUpID0+IHtcbiAgICAgIGlmICh0cy5pc0J1bmRsZShmaWxlT3JCdW5kbGUpKSB7XG4gICAgICAgIC8vIE9ubHkgYXR0ZW1wdCB0byB0cmFuc2Zvcm0gc291cmNlIGZpbGVzLlxuICAgICAgICByZXR1cm4gZmlsZU9yQnVuZGxlO1xuICAgICAgfVxuICAgICAgY29uc3QgdHJhbnNmb3JtcyA9IHRyYW5zZm9ybVJlZ2lzdHJ5LmdldEFsbFRyYW5zZm9ybXMoZmlsZU9yQnVuZGxlKTtcbiAgICAgIGlmICh0cmFuc2Zvcm1zID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmaWxlT3JCdW5kbGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJhbnNmb3JtZXIudHJhbnNmb3JtKGZpbGVPckJ1bmRsZSwgdHJhbnNmb3Jtcyk7XG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgLmQudHMgZmlsZSB0ZXh0IGFuZCBhZGRzIHN0YXRpYyBmaWVsZCBkZWNsYXJhdGlvbnMsIHdpdGggdHlwZXMuXG4gKi9cbmNsYXNzIER0c1RyYW5zZm9ybWVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIGN0eDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0LCBwcml2YXRlIGltcG9ydFJld3JpdGVyOiBJbXBvcnRSZXdyaXRlcixcbiAgICAgIHByaXZhdGUgaW1wb3J0UHJlZml4Pzogc3RyaW5nKSB7fVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhlIGRlY2xhcmF0aW9uIGZpbGUgYW5kIGFkZCBhbnkgZGVjbGFyYXRpb25zIHdoaWNoIHdlcmUgcmVjb3JkZWQuXG4gICAqL1xuICB0cmFuc2Zvcm0oc2Y6IHRzLlNvdXJjZUZpbGUsIHRyYW5zZm9ybXM6IER0c1RyYW5zZm9ybVtdKTogdHMuU291cmNlRmlsZSB7XG4gICAgY29uc3QgaW1wb3J0cyA9IG5ldyBJbXBvcnRNYW5hZ2VyKHRoaXMuaW1wb3J0UmV3cml0ZXIsIHRoaXMuaW1wb3J0UHJlZml4KTtcblxuICAgIGNvbnN0IHZpc2l0b3I6IHRzLlZpc2l0b3IgPSAobm9kZTogdHMuTm9kZSk6IHRzLlZpc2l0UmVzdWx0PHRzLk5vZGU+ID0+IHtcbiAgICAgIGlmICh0cy5pc0NsYXNzRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtQ2xhc3NEZWNsYXJhdGlvbihub2RlLCB0cmFuc2Zvcm1zLCBpbXBvcnRzKTtcbiAgICAgIH0gZWxzZSBpZiAodHMuaXNGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUZ1bmN0aW9uRGVjbGFyYXRpb24obm9kZSwgdHJhbnNmb3JtcywgaW1wb3J0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIG5vZGUgYXMgaXMuXG4gICAgICAgIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdG9yLCB0aGlzLmN0eCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IHNjYW4gdGhyb3VnaCB0aGUgQVNUIGFuZCBwcm9jZXNzIGFsbCBub2RlcyBhcyBkZXNpcmVkLlxuICAgIHNmID0gdHMudmlzaXROb2RlKHNmLCB2aXNpdG9yKTtcblxuICAgIC8vIEFkZCBuZXcgaW1wb3J0cyBmb3IgdGhpcyBmaWxlLlxuICAgIHJldHVybiBhZGRJbXBvcnRzKGltcG9ydHMsIHNmKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ2xhc3NEZWNsYXJhdGlvbihcbiAgICAgIGNsYXp6OiB0cy5DbGFzc0RlY2xhcmF0aW9uLCB0cmFuc2Zvcm1zOiBEdHNUcmFuc2Zvcm1bXSxcbiAgICAgIGltcG9ydHM6IEltcG9ydE1hbmFnZXIpOiB0cy5DbGFzc0RlY2xhcmF0aW9uIHtcbiAgICBsZXQgZWxlbWVudHM6IHRzLkNsYXNzRWxlbWVudFtdfFJlYWRvbmx5QXJyYXk8dHMuQ2xhc3NFbGVtZW50PiA9IGNsYXp6Lm1lbWJlcnM7XG4gICAgbGV0IGVsZW1lbnRzQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCB0cmFuc2Zvcm0gb2YgdHJhbnNmb3Jtcykge1xuICAgICAgaWYgKHRyYW5zZm9ybS50cmFuc2Zvcm1DbGFzc0VsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gdHJhbnNmb3JtLnRyYW5zZm9ybUNsYXNzRWxlbWVudChlbGVtZW50c1tpXSwgaW1wb3J0cyk7XG4gICAgICAgICAgaWYgKHJlcyAhPT0gZWxlbWVudHNbaV0pIHtcbiAgICAgICAgICAgIGlmICghZWxlbWVudHNDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnRzID0gWy4uLmVsZW1lbnRzXTtcbiAgICAgICAgICAgICAgZWxlbWVudHNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChlbGVtZW50cyBhcyB0cy5DbGFzc0VsZW1lbnRbXSlbaV0gPSByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5ld0NsYXp6OiB0cy5DbGFzc0RlY2xhcmF0aW9uID0gY2xheno7XG5cbiAgICBmb3IgKGNvbnN0IHRyYW5zZm9ybSBvZiB0cmFuc2Zvcm1zKSB7XG4gICAgICBpZiAodHJhbnNmb3JtLnRyYW5zZm9ybUNsYXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gSWYgbm8gRHRzVHJhbnNmb3JtIGhhcyBjaGFuZ2VkIHRoZSBjbGFzcyB5ZXQsIHRoZW4gdGhlIChwb3NzaWJseSBtdXRhdGVkKSBlbGVtZW50cyBoYXZlXG4gICAgICAgIC8vIG5vdCB5ZXQgYmVlbiBpbmNvcnBvcmF0ZWQuIE90aGVyd2lzZSwgYG5ld0NsYXp6Lm1lbWJlcnNgIGhvbGRzIHRoZSBsYXRlc3QgY2xhc3MgbWVtYmVycy5cbiAgICAgICAgY29uc3QgaW5wdXRNZW1iZXJzID0gKGNsYXp6ID09PSBuZXdDbGF6eiA/IGVsZW1lbnRzIDogbmV3Q2xhenoubWVtYmVycyk7XG5cbiAgICAgICAgbmV3Q2xhenogPSB0cmFuc2Zvcm0udHJhbnNmb3JtQ2xhc3MobmV3Q2xhenosIGlucHV0TWVtYmVycywgaW1wb3J0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgc29tZSBlbGVtZW50cyBoYXZlIGJlZW4gdHJhbnNmb3JtZWQgYnV0IHRoZSBjbGFzcyBpdHNlbGYgaGFzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLCBjcmVhdGVcbiAgICAvLyBhbiB1cGRhdGVkIGNsYXNzIGRlY2xhcmF0aW9uIHdpdGggdGhlIHVwZGF0ZWQgZWxlbWVudHMuXG4gICAgaWYgKGVsZW1lbnRzQ2hhbmdlZCAmJiBjbGF6eiA9PT0gbmV3Q2xhenopIHtcbiAgICAgIG5ld0NsYXp6ID0gdHMudXBkYXRlQ2xhc3NEZWNsYXJhdGlvbihcbiAgICAgICAgICAvKiBub2RlICovIGNsYXp6LFxuICAgICAgICAgIC8qIGRlY29yYXRvcnMgKi8gY2xhenouZGVjb3JhdG9ycyxcbiAgICAgICAgICAvKiBtb2RpZmllcnMgKi8gY2xhenoubW9kaWZpZXJzLFxuICAgICAgICAgIC8qIG5hbWUgKi8gY2xhenoubmFtZSxcbiAgICAgICAgICAvKiB0eXBlUGFyYW1ldGVycyAqLyBjbGF6ei50eXBlUGFyYW1ldGVycyxcbiAgICAgICAgICAvKiBoZXJpdGFnZUNsYXVzZXMgKi8gY2xhenouaGVyaXRhZ2VDbGF1c2VzLFxuICAgICAgICAgIC8qIG1lbWJlcnMgKi8gZWxlbWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdDbGF6ejtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIGRlY2xhcmF0aW9uOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uLCB0cmFuc2Zvcm1zOiBEdHNUcmFuc2Zvcm1bXSxcbiAgICAgIGltcG9ydHM6IEltcG9ydE1hbmFnZXIpOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgICBsZXQgbmV3RGVjbCA9IGRlY2xhcmF0aW9uO1xuXG4gICAgZm9yIChjb25zdCB0cmFuc2Zvcm0gb2YgdHJhbnNmb3Jtcykge1xuICAgICAgaWYgKHRyYW5zZm9ybS50cmFuc2Zvcm1GdW5jdGlvbkRlY2xhcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3RGVjbCA9IHRyYW5zZm9ybS50cmFuc2Zvcm1GdW5jdGlvbkRlY2xhcmF0aW9uKG5ld0RlY2wsIGltcG9ydHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdEZWNsO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXZ5RGVjbGFyYXRpb25GaWVsZCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogVHlwZTtcbn1cblxuZXhwb3J0IGNsYXNzIEl2eURlY2xhcmF0aW9uRHRzVHJhbnNmb3JtIGltcGxlbWVudHMgRHRzVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSBkZWNsYXJhdGlvbkZpZWxkcyA9IG5ldyBNYXA8Q2xhc3NEZWNsYXJhdGlvbiwgSXZ5RGVjbGFyYXRpb25GaWVsZFtdPigpO1xuXG4gIGFkZEZpZWxkcyhkZWNsOiBDbGFzc0RlY2xhcmF0aW9uLCBmaWVsZHM6IEl2eURlY2xhcmF0aW9uRmllbGRbXSk6IHZvaWQge1xuICAgIHRoaXMuZGVjbGFyYXRpb25GaWVsZHMuc2V0KGRlY2wsIGZpZWxkcyk7XG4gIH1cblxuICB0cmFuc2Zvcm1DbGFzcyhcbiAgICAgIGNsYXp6OiB0cy5DbGFzc0RlY2xhcmF0aW9uLCBtZW1iZXJzOiBSZWFkb25seUFycmF5PHRzLkNsYXNzRWxlbWVudD4sXG4gICAgICBpbXBvcnRzOiBJbXBvcnRNYW5hZ2VyKTogdHMuQ2xhc3NEZWNsYXJhdGlvbiB7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSB0cy5nZXRPcmlnaW5hbE5vZGUoY2xhenopIGFzIENsYXNzRGVjbGFyYXRpb247XG5cbiAgICBpZiAoIXRoaXMuZGVjbGFyYXRpb25GaWVsZHMuaGFzKG9yaWdpbmFsKSkge1xuICAgICAgcmV0dXJuIGNsYXp6O1xuICAgIH1cbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmRlY2xhcmF0aW9uRmllbGRzLmdldChvcmlnaW5hbCkgITtcblxuICAgIGNvbnN0IG5ld01lbWJlcnMgPSBmaWVsZHMubWFwKGRlY2wgPT4ge1xuICAgICAgY29uc3QgbW9kaWZpZXJzID0gW3RzLmNyZWF0ZU1vZGlmaWVyKHRzLlN5bnRheEtpbmQuU3RhdGljS2V5d29yZCldO1xuICAgICAgY29uc3QgdHlwZVJlZiA9IHRyYW5zbGF0ZVR5cGUoZGVjbC50eXBlLCBpbXBvcnRzKTtcbiAgICAgIGVtaXRBc1NpbmdsZUxpbmUodHlwZVJlZik7XG4gICAgICByZXR1cm4gdHMuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgLyogZGVjb3JhdG9ycyAqLyB1bmRlZmluZWQsXG4gICAgICAgICAgLyogbW9kaWZpZXJzICovIG1vZGlmaWVycyxcbiAgICAgICAgICAvKiBuYW1lICovIGRlY2wubmFtZSxcbiAgICAgICAgICAvKiBxdWVzdGlvbk9yRXhjbGFtYXRpb25Ub2tlbiAqLyB1bmRlZmluZWQsXG4gICAgICAgICAgLyogdHlwZSAqLyB0eXBlUmVmLFxuICAgICAgICAgIC8qIGluaXRpYWxpemVyICovIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHMudXBkYXRlQ2xhc3NEZWNsYXJhdGlvbihcbiAgICAgICAgLyogbm9kZSAqLyBjbGF6eixcbiAgICAgICAgLyogZGVjb3JhdG9ycyAqLyBjbGF6ei5kZWNvcmF0b3JzLFxuICAgICAgICAvKiBtb2RpZmllcnMgKi8gY2xhenoubW9kaWZpZXJzLFxuICAgICAgICAvKiBuYW1lICovIGNsYXp6Lm5hbWUsXG4gICAgICAgIC8qIHR5cGVQYXJhbWV0ZXJzICovIGNsYXp6LnR5cGVQYXJhbWV0ZXJzLFxuICAgICAgICAvKiBoZXJpdGFnZUNsYXVzZXMgKi8gY2xhenouaGVyaXRhZ2VDbGF1c2VzLFxuICAgICAgICAvKiBtZW1iZXJzICovWy4uLm1lbWJlcnMsIC4uLm5ld01lbWJlcnNdKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWl0QXNTaW5nbGVMaW5lKG5vZGU6IHRzLk5vZGUpIHtcbiAgdHMuc2V0RW1pdEZsYWdzKG5vZGUsIHRzLkVtaXRGbGFncy5TaW5nbGVMaW5lKTtcbiAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIGVtaXRBc1NpbmdsZUxpbmUpO1xufVxuXG5leHBvcnQgY2xhc3MgUmV0dXJuVHlwZVRyYW5zZm9ybSBpbXBsZW1lbnRzIER0c1RyYW5zZm9ybSB7XG4gIHByaXZhdGUgdHlwZVJlcGxhY2VtZW50cyA9IG5ldyBNYXA8dHMuRGVjbGFyYXRpb24sIFR5cGU+KCk7XG5cbiAgYWRkVHlwZVJlcGxhY2VtZW50KGRlY2xhcmF0aW9uOiB0cy5EZWNsYXJhdGlvbiwgdHlwZTogVHlwZSk6IHZvaWQge1xuICAgIHRoaXMudHlwZVJlcGxhY2VtZW50cy5zZXQoZGVjbGFyYXRpb24sIHR5cGUpO1xuICB9XG5cbiAgdHJhbnNmb3JtQ2xhc3NFbGVtZW50KGVsZW1lbnQ6IHRzLkNsYXNzRWxlbWVudCwgaW1wb3J0czogSW1wb3J0TWFuYWdlcik6IHRzLkNsYXNzRWxlbWVudCB7XG4gICAgaWYgKCF0cy5pc01ldGhvZFNpZ25hdHVyZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWwgPSB0cy5nZXRPcmlnaW5hbE5vZGUoZWxlbWVudCkgYXMgdHMuTWV0aG9kRGVjbGFyYXRpb247XG4gICAgaWYgKCF0aGlzLnR5cGVSZXBsYWNlbWVudHMuaGFzKG9yaWdpbmFsKSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHJldHVyblR5cGUgPSB0aGlzLnR5cGVSZXBsYWNlbWVudHMuZ2V0KG9yaWdpbmFsKSAhO1xuICAgIGNvbnN0IHRzUmV0dXJuVHlwZSA9IHRyYW5zbGF0ZVR5cGUocmV0dXJuVHlwZSwgaW1wb3J0cyk7XG5cbiAgICBjb25zdCBtZXRob2RTaWduYXR1cmUgPSB0cy51cGRhdGVNZXRob2RTaWduYXR1cmUoXG4gICAgICAgIC8qIG5vZGUgKi8gZWxlbWVudCxcbiAgICAgICAgLyogdHlwZVBhcmFtZXRlcnMgKi8gZWxlbWVudC50eXBlUGFyYW1ldGVycyxcbiAgICAgICAgLyogcGFyYW1ldGVycyAqLyBlbGVtZW50LnBhcmFtZXRlcnMsXG4gICAgICAgIC8qIHR5cGUgKi8gdHNSZXR1cm5UeXBlLFxuICAgICAgICAvKiBuYW1lICovIGVsZW1lbnQubmFtZSxcbiAgICAgICAgLyogcXVlc3Rpb25Ub2tlbiAqLyBlbGVtZW50LnF1ZXN0aW9uVG9rZW4pO1xuXG4gICAgLy8gQ29weSBvdmVyIGFueSBtb2RpZmllcnMsIHRoZXNlIGNhbm5vdCBiZSBzZXQgZHVyaW5nIHRoZSBgdHMudXBkYXRlTWV0aG9kU2lnbmF0dXJlYCBjYWxsLlxuICAgIG1ldGhvZFNpZ25hdHVyZS5tb2RpZmllcnMgPSBlbGVtZW50Lm1vZGlmaWVycztcblxuICAgIC8vIEEgYnVnIGluIHRoZSBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGNhdXNlcyBgdHMuTWV0aG9kU2lnbmF0dXJlYCBub3QgdG8gYmUgYXNzaWduYWJsZSB0b1xuICAgIC8vIGB0cy5DbGFzc0VsZW1lbnRgLiBTaW5jZSBgZWxlbWVudGAgd2FzIGEgYHRzLk1ldGhvZFNpZ25hdHVyZWAgYWxyZWFkeSwgdHJhbnNmb3JtaW5nIGl0IGludG9cbiAgICAvLyB0aGlzIHR5cGUgaXMgYWN0dWFsbHkgY29ycmVjdC5cbiAgICByZXR1cm4gbWV0aG9kU2lnbmF0dXJlIGFzIHVua25vd24gYXMgdHMuQ2xhc3NFbGVtZW50O1xuICB9XG5cbiAgdHJhbnNmb3JtRnVuY3Rpb25EZWNsYXJhdGlvbihlbGVtZW50OiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uLCBpbXBvcnRzOiBJbXBvcnRNYW5hZ2VyKTpcbiAgICAgIHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gdHMuZ2V0T3JpZ2luYWxOb2RlKGVsZW1lbnQpIGFzIHRzLkZ1bmN0aW9uRGVjbGFyYXRpb247XG4gICAgaWYgKCF0aGlzLnR5cGVSZXBsYWNlbWVudHMuaGFzKG9yaWdpbmFsKSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHJldHVyblR5cGUgPSB0aGlzLnR5cGVSZXBsYWNlbWVudHMuZ2V0KG9yaWdpbmFsKSAhO1xuICAgIGNvbnN0IHRzUmV0dXJuVHlwZSA9IHRyYW5zbGF0ZVR5cGUocmV0dXJuVHlwZSwgaW1wb3J0cyk7XG5cbiAgICByZXR1cm4gdHMudXBkYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgICAgLyogbm9kZSAqLyBlbGVtZW50LFxuICAgICAgICAvKiBkZWNvcmF0b3JzICovIGVsZW1lbnQuZGVjb3JhdG9ycyxcbiAgICAgICAgLyogbW9kaWZpZXJzICovIGVsZW1lbnQubW9kaWZpZXJzLFxuICAgICAgICAvKiBhc3Rlcmlza1Rva2VuICovIGVsZW1lbnQuYXN0ZXJpc2tUb2tlbixcbiAgICAgICAgLyogbmFtZSAqLyBlbGVtZW50Lm5hbWUsXG4gICAgICAgIC8qIHR5cGVQYXJhbWV0ZXJzICovIGVsZW1lbnQudHlwZVBhcmFtZXRlcnMsXG4gICAgICAgIC8qIHBhcmFtZXRlcnMgKi8gZWxlbWVudC5wYXJhbWV0ZXJzLFxuICAgICAgICAvKiB0eXBlICovIHRzUmV0dXJuVHlwZSxcbiAgICAgICAgLyogYm9keSAqLyBlbGVtZW50LmJvZHkpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google Inc. 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
|
+
/// <amd-module name="@angular/compiler-cli/src/ngtsc/transform/src/trait" />
|
|
9
|
+
import * as ts from 'typescript';
|
|
10
|
+
import { DecoratorHandler, DetectResult } from './api';
|
|
11
|
+
export declare enum TraitState {
|
|
12
|
+
/**
|
|
13
|
+
* Pending traits are freshly created and have never been analyzed.
|
|
14
|
+
*/
|
|
15
|
+
PENDING = 1,
|
|
16
|
+
/**
|
|
17
|
+
* Analyzed traits have successfully been analyzed, but are pending resolution.
|
|
18
|
+
*/
|
|
19
|
+
ANALYZED = 2,
|
|
20
|
+
/**
|
|
21
|
+
* Resolved traits have successfully been analyzed and resolved and are ready for compilation.
|
|
22
|
+
*/
|
|
23
|
+
RESOLVED = 4,
|
|
24
|
+
/**
|
|
25
|
+
* Errored traits have failed either analysis or resolution and as a result contain diagnostics
|
|
26
|
+
* describing the failure(s).
|
|
27
|
+
*/
|
|
28
|
+
ERRORED = 8,
|
|
29
|
+
/**
|
|
30
|
+
* Skipped traits are no longer considered for compilation.
|
|
31
|
+
*/
|
|
32
|
+
SKIPPED = 16
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* An Ivy aspect added to a class (for example, the compilation of a component definition).
|
|
36
|
+
*
|
|
37
|
+
* Traits are created when a `DecoratorHandler` matches a class. Each trait begins in a pending
|
|
38
|
+
* state and undergoes transitions as compilation proceeds through the various steps.
|
|
39
|
+
*
|
|
40
|
+
* In practice, traits are instances of the private class `TraitImpl` declared below. Through the
|
|
41
|
+
* various interfaces included in this union type, the legal API of a trait in any given state is
|
|
42
|
+
* represented in the type system. This includes any possible transitions from one type to the next.
|
|
43
|
+
*
|
|
44
|
+
* This not only simplifies the implementation, but ensures traits are monomorphic objects as
|
|
45
|
+
* they're all just "views" in the type system of the same object (which never changes shape).
|
|
46
|
+
*/
|
|
47
|
+
export declare type Trait<D, A, R> = PendingTrait<D, A, R> | SkippedTrait<D, A, R> | AnalyzedTrait<D, A, R> | ResolvedTrait<D, A, R> | ErroredTrait<D, A, R>;
|
|
48
|
+
/**
|
|
49
|
+
* The value side of `Trait` exposes a helper to create a `Trait` in a pending state (by delegating
|
|
50
|
+
* to `TraitImpl`).
|
|
51
|
+
*/
|
|
52
|
+
export declare const Trait: {
|
|
53
|
+
pending: <D, A, R>(handler: DecoratorHandler<D, A, R>, detected: DetectResult<D>) => PendingTrait<D, A, R>;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* The part of the `Trait` interface that's common to all trait states.
|
|
57
|
+
*/
|
|
58
|
+
export interface TraitBase<D, A, R> {
|
|
59
|
+
/**
|
|
60
|
+
* Current state of the trait.
|
|
61
|
+
*
|
|
62
|
+
* This will be narrowed in the interfaces for each specific state.
|
|
63
|
+
*/
|
|
64
|
+
state: TraitState;
|
|
65
|
+
/**
|
|
66
|
+
* The `DecoratorHandler` which matched on the class to create this trait.
|
|
67
|
+
*/
|
|
68
|
+
handler: DecoratorHandler<D, A, R>;
|
|
69
|
+
/**
|
|
70
|
+
* The detection result (of `handler.detect`) which indicated that this trait applied to the
|
|
71
|
+
* class.
|
|
72
|
+
*
|
|
73
|
+
* This is mainly used to cache the detection between pre-analysis and analysis.
|
|
74
|
+
*/
|
|
75
|
+
detected: DetectResult<D>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* A trait in the pending state.
|
|
79
|
+
*
|
|
80
|
+
* Pending traits have yet to be analyzed in any way.
|
|
81
|
+
*/
|
|
82
|
+
export interface PendingTrait<D, A, R> extends TraitBase<D, A, R> {
|
|
83
|
+
state: TraitState.PENDING;
|
|
84
|
+
/**
|
|
85
|
+
* This pending trait has been successfully analyzed, and should transition to the "analyzed"
|
|
86
|
+
* state.
|
|
87
|
+
*/
|
|
88
|
+
toAnalyzed(analysis: A): AnalyzedTrait<D, A, R>;
|
|
89
|
+
/**
|
|
90
|
+
* This trait failed analysis, and should transition to the "errored" state with the resulting
|
|
91
|
+
* diagnostics.
|
|
92
|
+
*/
|
|
93
|
+
toErrored(errors: ts.Diagnostic[]): ErroredTrait<D, A, R>;
|
|
94
|
+
/**
|
|
95
|
+
* During analysis it was determined that this trait is not eligible for compilation after all,
|
|
96
|
+
* and should be transitioned to the "skipped" state.
|
|
97
|
+
*/
|
|
98
|
+
toSkipped(): SkippedTrait<D, A, R>;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* A trait in the "errored" state.
|
|
102
|
+
*
|
|
103
|
+
* Errored traits contain `ts.Diagnostic`s indicating any problem(s) with the class.
|
|
104
|
+
*
|
|
105
|
+
* This is a terminal state.
|
|
106
|
+
*/
|
|
107
|
+
export interface ErroredTrait<D, A, R> extends TraitBase<D, A, R> {
|
|
108
|
+
state: TraitState.ERRORED;
|
|
109
|
+
/**
|
|
110
|
+
* Diagnostics which were produced while attempting to analyze the trait.
|
|
111
|
+
*/
|
|
112
|
+
diagnostics: ts.Diagnostic[];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* A trait in the "skipped" state.
|
|
116
|
+
*
|
|
117
|
+
* Skipped traits aren't considered for compilation.
|
|
118
|
+
*
|
|
119
|
+
* This is a terminal state.
|
|
120
|
+
*/
|
|
121
|
+
export interface SkippedTrait<D, A, R> extends TraitBase<D, A, R> {
|
|
122
|
+
state: TraitState.SKIPPED;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* The part of the `Trait` interface for any trait which has been successfully analyzed.
|
|
126
|
+
*
|
|
127
|
+
* Mainly, this is used to share the comment on the `analysis` field.
|
|
128
|
+
*/
|
|
129
|
+
export interface TraitWithAnalysis<A> {
|
|
130
|
+
/**
|
|
131
|
+
* The results returned by a successful analysis of the given class/`DecoratorHandler`
|
|
132
|
+
* combination.
|
|
133
|
+
*/
|
|
134
|
+
analysis: Readonly<A>;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* A trait in the "analyzed" state.
|
|
138
|
+
*
|
|
139
|
+
* Analyzed traits have analysis results available, and are eligible for resolution.
|
|
140
|
+
*/
|
|
141
|
+
export interface AnalyzedTrait<D, A, R> extends TraitBase<D, A, R>, TraitWithAnalysis<A> {
|
|
142
|
+
state: TraitState.ANALYZED;
|
|
143
|
+
/**
|
|
144
|
+
* This analyzed trait has been successfully resolved, and should be transitioned to the
|
|
145
|
+
* "resolved" state.
|
|
146
|
+
*/
|
|
147
|
+
toResolved(resolution: R): ResolvedTrait<D, A, R>;
|
|
148
|
+
/**
|
|
149
|
+
* This trait failed resolution, and should transition to the "errored" state with the resulting
|
|
150
|
+
* diagnostics.
|
|
151
|
+
*/
|
|
152
|
+
toErrored(errors: ts.Diagnostic[]): ErroredTrait<D, A, R>;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* A trait in the "resolved" state.
|
|
156
|
+
*
|
|
157
|
+
* Resolved traits have been successfully analyzed and resolved, contain no errors, and are ready
|
|
158
|
+
* for the compilation phase.
|
|
159
|
+
*
|
|
160
|
+
* This is a terminal state.
|
|
161
|
+
*/
|
|
162
|
+
export interface ResolvedTrait<D, A, R> extends TraitBase<D, A, R>, TraitWithAnalysis<A> {
|
|
163
|
+
state: TraitState.RESOLVED;
|
|
164
|
+
/**
|
|
165
|
+
* The results returned by a successful resolution of the given class/`DecoratorHandler`
|
|
166
|
+
* combination.
|
|
167
|
+
*/
|
|
168
|
+
resolution: Readonly<R>;
|
|
169
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google Inc. 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/ngtsc/transform/src/trait", ["require", "exports"], factory);
|
|
15
|
+
}
|
|
16
|
+
})(function (require, exports) {
|
|
17
|
+
"use strict";
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
var TraitState;
|
|
20
|
+
(function (TraitState) {
|
|
21
|
+
/**
|
|
22
|
+
* Pending traits are freshly created and have never been analyzed.
|
|
23
|
+
*/
|
|
24
|
+
TraitState[TraitState["PENDING"] = 1] = "PENDING";
|
|
25
|
+
/**
|
|
26
|
+
* Analyzed traits have successfully been analyzed, but are pending resolution.
|
|
27
|
+
*/
|
|
28
|
+
TraitState[TraitState["ANALYZED"] = 2] = "ANALYZED";
|
|
29
|
+
/**
|
|
30
|
+
* Resolved traits have successfully been analyzed and resolved and are ready for compilation.
|
|
31
|
+
*/
|
|
32
|
+
TraitState[TraitState["RESOLVED"] = 4] = "RESOLVED";
|
|
33
|
+
/**
|
|
34
|
+
* Errored traits have failed either analysis or resolution and as a result contain diagnostics
|
|
35
|
+
* describing the failure(s).
|
|
36
|
+
*/
|
|
37
|
+
TraitState[TraitState["ERRORED"] = 8] = "ERRORED";
|
|
38
|
+
/**
|
|
39
|
+
* Skipped traits are no longer considered for compilation.
|
|
40
|
+
*/
|
|
41
|
+
TraitState[TraitState["SKIPPED"] = 16] = "SKIPPED";
|
|
42
|
+
})(TraitState = exports.TraitState || (exports.TraitState = {}));
|
|
43
|
+
/**
|
|
44
|
+
* The value side of `Trait` exposes a helper to create a `Trait` in a pending state (by delegating
|
|
45
|
+
* to `TraitImpl`).
|
|
46
|
+
*/
|
|
47
|
+
exports.Trait = {
|
|
48
|
+
pending: function (handler, detected) { return TraitImpl.pending(handler, detected); },
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* An implementation of the `Trait` type which transitions safely between the various
|
|
52
|
+
* `TraitState`s.
|
|
53
|
+
*/
|
|
54
|
+
var TraitImpl = /** @class */ (function () {
|
|
55
|
+
function TraitImpl(handler, detected) {
|
|
56
|
+
this.state = TraitState.PENDING;
|
|
57
|
+
this.analysis = null;
|
|
58
|
+
this.resolution = null;
|
|
59
|
+
this.diagnostics = null;
|
|
60
|
+
this.handler = handler;
|
|
61
|
+
this.detected = detected;
|
|
62
|
+
}
|
|
63
|
+
TraitImpl.prototype.toAnalyzed = function (analysis) {
|
|
64
|
+
// Only pending traits can be analyzed.
|
|
65
|
+
this.assertTransitionLegal(TraitState.PENDING, TraitState.ANALYZED);
|
|
66
|
+
this.analysis = analysis;
|
|
67
|
+
this.state = TraitState.ANALYZED;
|
|
68
|
+
return this;
|
|
69
|
+
};
|
|
70
|
+
TraitImpl.prototype.toErrored = function (diagnostics) {
|
|
71
|
+
// Pending traits (during analysis) or analyzed traits (during resolution) can produce
|
|
72
|
+
// diagnostics and enter an errored state.
|
|
73
|
+
this.assertTransitionLegal(TraitState.PENDING | TraitState.ANALYZED, TraitState.RESOLVED);
|
|
74
|
+
this.diagnostics = diagnostics;
|
|
75
|
+
this.analysis = null;
|
|
76
|
+
this.state = TraitState.ERRORED;
|
|
77
|
+
return this;
|
|
78
|
+
};
|
|
79
|
+
TraitImpl.prototype.toResolved = function (resolution) {
|
|
80
|
+
// Only analyzed traits can be resolved.
|
|
81
|
+
this.assertTransitionLegal(TraitState.ANALYZED, TraitState.RESOLVED);
|
|
82
|
+
this.resolution = resolution;
|
|
83
|
+
this.state = TraitState.RESOLVED;
|
|
84
|
+
return this;
|
|
85
|
+
};
|
|
86
|
+
TraitImpl.prototype.toSkipped = function () {
|
|
87
|
+
// Only pending traits can be skipped.
|
|
88
|
+
this.assertTransitionLegal(TraitState.PENDING, TraitState.SKIPPED);
|
|
89
|
+
this.state = TraitState.SKIPPED;
|
|
90
|
+
return this;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Verifies that the trait is currently in one of the `allowedState`s.
|
|
94
|
+
*
|
|
95
|
+
* If correctly used, the `Trait` type and transition methods prevent illegal transitions from
|
|
96
|
+
* occurring. However, if a reference to the `TraitImpl` instance typed with the previous
|
|
97
|
+
* interface is retained after calling one of its transition methods, it will allow for illegal
|
|
98
|
+
* transitions to take place. Hence, this assertion provides a little extra runtime protection.
|
|
99
|
+
*/
|
|
100
|
+
TraitImpl.prototype.assertTransitionLegal = function (allowedState, transitionTo) {
|
|
101
|
+
if (!(this.state & allowedState)) {
|
|
102
|
+
throw new Error("Assertion failure: cannot transition from " + TraitState[this.state] + " to " + TraitState[transitionTo] + ".");
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Construct a new `TraitImpl` in the pending state.
|
|
107
|
+
*/
|
|
108
|
+
TraitImpl.pending = function (handler, detected) {
|
|
109
|
+
return new TraitImpl(handler, detected);
|
|
110
|
+
};
|
|
111
|
+
return TraitImpl;
|
|
112
|
+
}());
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3RyYW5zZm9ybS9zcmMvdHJhaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFLSCxJQUFZLFVBMEJYO0lBMUJELFdBQVksVUFBVTtRQUNwQjs7V0FFRztRQUNILGlEQUFjLENBQUE7UUFFZDs7V0FFRztRQUNILG1EQUFlLENBQUE7UUFFZjs7V0FFRztRQUNILG1EQUFlLENBQUE7UUFFZjs7O1dBR0c7UUFDSCxpREFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCxrREFBYyxDQUFBO0lBQ2hCLENBQUMsRUExQlcsVUFBVSxHQUFWLGtCQUFVLEtBQVYsa0JBQVUsUUEwQnJCO0lBa0JEOzs7T0FHRztJQUNVLFFBQUEsS0FBSyxHQUFHO1FBQ25CLE9BQU8sRUFBRSxVQUFVLE9BQWtDLEVBQUUsUUFBeUIsSUFDMUMsT0FBQSxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBcEMsQ0FBb0M7S0FDM0UsQ0FBQztJQW1JRjs7O09BR0c7SUFDSDtRQVFFLG1CQUFZLE9BQWtDLEVBQUUsUUFBeUI7WUFQekUsVUFBSyxHQUFlLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFHdkMsYUFBUSxHQUFxQixJQUFJLENBQUM7WUFDbEMsZUFBVSxHQUFxQixJQUFJLENBQUM7WUFDcEMsZ0JBQVcsR0FBeUIsSUFBSSxDQUFDO1lBR3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzNCLENBQUM7UUFFRCw4QkFBVSxHQUFWLFVBQVcsUUFBVztZQUNwQix1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLElBQThCLENBQUM7UUFDeEMsQ0FBQztRQUVELDZCQUFTLEdBQVQsVUFBVSxXQUE0QjtZQUNwQyxzRkFBc0Y7WUFDdEYsMENBQTBDO1lBQzFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFGLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUNoQyxPQUFPLElBQTZCLENBQUM7UUFDdkMsQ0FBQztRQUVELDhCQUFVLEdBQVYsVUFBVyxVQUFhO1lBQ3RCLHdDQUF3QztZQUN4QyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sSUFBOEIsQ0FBQztRQUN4QyxDQUFDO1FBRUQsNkJBQVMsR0FBVDtZQUNFLHNDQUFzQztZQUN0QyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ2hDLE9BQU8sSUFBNkIsQ0FBQztRQUN2QyxDQUFDO1FBRUQ7Ozs7Ozs7V0FPRztRQUNLLHlDQUFxQixHQUE3QixVQUE4QixZQUF3QixFQUFFLFlBQXdCO1lBQzlFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLEVBQUU7Z0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQ1gsK0NBQTZDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFHLENBQUMsQ0FBQzthQUM1RztRQUNILENBQUM7UUFFRDs7V0FFRztRQUNJLGlCQUFPLEdBQWQsVUFBd0IsT0FBa0MsRUFBRSxRQUF5QjtZQUVuRixPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQTBCLENBQUM7UUFDbkUsQ0FBQztRQUNILGdCQUFDO0lBQUQsQ0FBQyxBQXBFRCxJQW9FQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge0RlY29yYXRvckhhbmRsZXIsIERldGVjdFJlc3VsdH0gZnJvbSAnLi9hcGknO1xuXG5leHBvcnQgZW51bSBUcmFpdFN0YXRlIHtcbiAgLyoqXG4gICAqIFBlbmRpbmcgdHJhaXRzIGFyZSBmcmVzaGx5IGNyZWF0ZWQgYW5kIGhhdmUgbmV2ZXIgYmVlbiBhbmFseXplZC5cbiAgICovXG4gIFBFTkRJTkcgPSAweDAxLFxuXG4gIC8qKlxuICAgKiBBbmFseXplZCB0cmFpdHMgaGF2ZSBzdWNjZXNzZnVsbHkgYmVlbiBhbmFseXplZCwgYnV0IGFyZSBwZW5kaW5nIHJlc29sdXRpb24uXG4gICAqL1xuICBBTkFMWVpFRCA9IDB4MDIsXG5cbiAgLyoqXG4gICAqIFJlc29sdmVkIHRyYWl0cyBoYXZlIHN1Y2Nlc3NmdWxseSBiZWVuIGFuYWx5emVkIGFuZCByZXNvbHZlZCBhbmQgYXJlIHJlYWR5IGZvciBjb21waWxhdGlvbi5cbiAgICovXG4gIFJFU09MVkVEID0gMHgwNCxcblxuICAvKipcbiAgICogRXJyb3JlZCB0cmFpdHMgaGF2ZSBmYWlsZWQgZWl0aGVyIGFuYWx5c2lzIG9yIHJlc29sdXRpb24gYW5kIGFzIGEgcmVzdWx0IGNvbnRhaW4gZGlhZ25vc3RpY3NcbiAgICogZGVzY3JpYmluZyB0aGUgZmFpbHVyZShzKS5cbiAgICovXG4gIEVSUk9SRUQgPSAweDA4LFxuXG4gIC8qKlxuICAgKiBTa2lwcGVkIHRyYWl0cyBhcmUgbm8gbG9uZ2VyIGNvbnNpZGVyZWQgZm9yIGNvbXBpbGF0aW9uLlxuICAgKi9cbiAgU0tJUFBFRCA9IDB4MTAsXG59XG5cbi8qKlxuICogQW4gSXZ5IGFzcGVjdCBhZGRlZCB0byBhIGNsYXNzIChmb3IgZXhhbXBsZSwgdGhlIGNvbXBpbGF0aW9uIG9mIGEgY29tcG9uZW50IGRlZmluaXRpb24pLlxuICpcbiAqIFRyYWl0cyBhcmUgY3JlYXRlZCB3aGVuIGEgYERlY29yYXRvckhhbmRsZXJgIG1hdGNoZXMgYSBjbGFzcy4gRWFjaCB0cmFpdCBiZWdpbnMgaW4gYSBwZW5kaW5nXG4gKiBzdGF0ZSBhbmQgdW5kZXJnb2VzIHRyYW5zaXRpb25zIGFzIGNvbXBpbGF0aW9uIHByb2NlZWRzIHRocm91Z2ggdGhlIHZhcmlvdXMgc3RlcHMuXG4gKlxuICogSW4gcHJhY3RpY2UsIHRyYWl0cyBhcmUgaW5zdGFuY2VzIG9mIHRoZSBwcml2YXRlIGNsYXNzIGBUcmFpdEltcGxgIGRlY2xhcmVkIGJlbG93LiBUaHJvdWdoIHRoZVxuICogdmFyaW91cyBpbnRlcmZhY2VzIGluY2x1ZGVkIGluIHRoaXMgdW5pb24gdHlwZSwgdGhlIGxlZ2FsIEFQSSBvZiBhIHRyYWl0IGluIGFueSBnaXZlbiBzdGF0ZSBpc1xuICogcmVwcmVzZW50ZWQgaW4gdGhlIHR5cGUgc3lzdGVtLiBUaGlzIGluY2x1ZGVzIGFueSBwb3NzaWJsZSB0cmFuc2l0aW9ucyBmcm9tIG9uZSB0eXBlIHRvIHRoZSBuZXh0LlxuICpcbiAqIFRoaXMgbm90IG9ubHkgc2ltcGxpZmllcyB0aGUgaW1wbGVtZW50YXRpb24sIGJ1dCBlbnN1cmVzIHRyYWl0cyBhcmUgbW9ub21vcnBoaWMgb2JqZWN0cyBhc1xuICogdGhleSdyZSBhbGwganVzdCBcInZpZXdzXCIgaW4gdGhlIHR5cGUgc3lzdGVtIG9mIHRoZSBzYW1lIG9iamVjdCAod2hpY2ggbmV2ZXIgY2hhbmdlcyBzaGFwZSkuXG4gKi9cbmV4cG9ydCB0eXBlIFRyYWl0PEQsIEEsIFI+ID0gUGVuZGluZ1RyYWl0PEQsIEEsIFI+fCBTa2lwcGVkVHJhaXQ8RCwgQSwgUj58IEFuYWx5emVkVHJhaXQ8RCwgQSwgUj58XG4gICAgUmVzb2x2ZWRUcmFpdDxELCBBLCBSPnwgRXJyb3JlZFRyYWl0PEQsIEEsIFI+O1xuXG4vKipcbiAqIFRoZSB2YWx1ZSBzaWRlIG9mIGBUcmFpdGAgZXhwb3NlcyBhIGhlbHBlciB0byBjcmVhdGUgYSBgVHJhaXRgIGluIGEgcGVuZGluZyBzdGF0ZSAoYnkgZGVsZWdhdGluZ1xuICogdG8gYFRyYWl0SW1wbGApLlxuICovXG5leHBvcnQgY29uc3QgVHJhaXQgPSB7XG4gIHBlbmRpbmc6IDxELCBBLCBSPihoYW5kbGVyOiBEZWNvcmF0b3JIYW5kbGVyPEQsIEEsIFI+LCBkZXRlY3RlZDogRGV0ZWN0UmVzdWx0PEQ+KTpcbiAgICAgICAgICAgICAgIFBlbmRpbmdUcmFpdDxELCBBLCBSPiA9PiBUcmFpdEltcGwucGVuZGluZyhoYW5kbGVyLCBkZXRlY3RlZCksXG59O1xuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIHRoZSBgVHJhaXRgIGludGVyZmFjZSB0aGF0J3MgY29tbW9uIHRvIGFsbCB0cmFpdCBzdGF0ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhaXRCYXNlPEQsIEEsIFI+IHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIHRyYWl0LlxuICAgKlxuICAgKiBUaGlzIHdpbGwgYmUgbmFycm93ZWQgaW4gdGhlIGludGVyZmFjZXMgZm9yIGVhY2ggc3BlY2lmaWMgc3RhdGUuXG4gICAqL1xuICBzdGF0ZTogVHJhaXRTdGF0ZTtcblxuICAvKipcbiAgICogVGhlIGBEZWNvcmF0b3JIYW5kbGVyYCB3aGljaCBtYXRjaGVkIG9uIHRoZSBjbGFzcyB0byBjcmVhdGUgdGhpcyB0cmFpdC5cbiAgICovXG4gIGhhbmRsZXI6IERlY29yYXRvckhhbmRsZXI8RCwgQSwgUj47XG5cbiAgLyoqXG4gICAqIFRoZSBkZXRlY3Rpb24gcmVzdWx0IChvZiBgaGFuZGxlci5kZXRlY3RgKSB3aGljaCBpbmRpY2F0ZWQgdGhhdCB0aGlzIHRyYWl0IGFwcGxpZWQgdG8gdGhlXG4gICAqIGNsYXNzLlxuICAgKlxuICAgKiBUaGlzIGlzIG1haW5seSB1c2VkIHRvIGNhY2hlIHRoZSBkZXRlY3Rpb24gYmV0d2VlbiBwcmUtYW5hbHlzaXMgYW5kIGFuYWx5c2lzLlxuICAgKi9cbiAgZGV0ZWN0ZWQ6IERldGVjdFJlc3VsdDxEPjtcbn1cblxuLyoqXG4gKiBBIHRyYWl0IGluIHRoZSBwZW5kaW5nIHN0YXRlLlxuICpcbiAqIFBlbmRpbmcgdHJhaXRzIGhhdmUgeWV0IHRvIGJlIGFuYWx5emVkIGluIGFueSB3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVuZGluZ1RyYWl0PEQsIEEsIFI+IGV4dGVuZHMgVHJhaXRCYXNlPEQsIEEsIFI+IHtcbiAgc3RhdGU6IFRyYWl0U3RhdGUuUEVORElORztcblxuICAvKipcbiAgICogVGhpcyBwZW5kaW5nIHRyYWl0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBhbmFseXplZCwgYW5kIHNob3VsZCB0cmFuc2l0aW9uIHRvIHRoZSBcImFuYWx5emVkXCJcbiAgICogc3RhdGUuXG4gICAqL1xuICB0b0FuYWx5emVkKGFuYWx5c2lzOiBBKTogQW5hbHl6ZWRUcmFpdDxELCBBLCBSPjtcblxuICAvKipcbiAgICogVGhpcyB0cmFpdCBmYWlsZWQgYW5hbHlzaXMsIGFuZCBzaG91bGQgdHJhbnNpdGlvbiB0byB0aGUgXCJlcnJvcmVkXCIgc3RhdGUgd2l0aCB0aGUgcmVzdWx0aW5nXG4gICAqIGRpYWdub3N0aWNzLlxuICAgKi9cbiAgdG9FcnJvcmVkKGVycm9yczogdHMuRGlhZ25vc3RpY1tdKTogRXJyb3JlZFRyYWl0PEQsIEEsIFI+O1xuXG4gIC8qKlxuICAgKiBEdXJpbmcgYW5hbHlzaXMgaXQgd2FzIGRldGVybWluZWQgdGhhdCB0aGlzIHRyYWl0IGlzIG5vdCBlbGlnaWJsZSBmb3IgY29tcGlsYXRpb24gYWZ0ZXIgYWxsLFxuICAgKiBhbmQgc2hvdWxkIGJlIHRyYW5zaXRpb25lZCB0byB0aGUgXCJza2lwcGVkXCIgc3RhdGUuXG4gICAqL1xuICB0b1NraXBwZWQoKTogU2tpcHBlZFRyYWl0PEQsIEEsIFI+O1xufVxuXG4vKipcbiAqIEEgdHJhaXQgaW4gdGhlIFwiZXJyb3JlZFwiIHN0YXRlLlxuICpcbiAqIEVycm9yZWQgdHJhaXRzIGNvbnRhaW4gYHRzLkRpYWdub3N0aWNgcyBpbmRpY2F0aW5nIGFueSBwcm9ibGVtKHMpIHdpdGggdGhlIGNsYXNzLlxuICpcbiAqIFRoaXMgaXMgYSB0ZXJtaW5hbCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcnJvcmVkVHJhaXQ8RCwgQSwgUj4gZXh0ZW5kcyBUcmFpdEJhc2U8RCwgQSwgUj4ge1xuICBzdGF0ZTogVHJhaXRTdGF0ZS5FUlJPUkVEO1xuXG4gIC8qKlxuICAgKiBEaWFnbm9zdGljcyB3aGljaCB3ZXJlIHByb2R1Y2VkIHdoaWxlIGF0dGVtcHRpbmcgdG8gYW5hbHl6ZSB0aGUgdHJhaXQuXG4gICAqL1xuICBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdO1xufVxuXG4vKipcbiAqIEEgdHJhaXQgaW4gdGhlIFwic2tpcHBlZFwiIHN0YXRlLlxuICpcbiAqIFNraXBwZWQgdHJhaXRzIGFyZW4ndCBjb25zaWRlcmVkIGZvciBjb21waWxhdGlvbi5cbiAqXG4gKiBUaGlzIGlzIGEgdGVybWluYWwgc3RhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2tpcHBlZFRyYWl0PEQsIEEsIFI+IGV4dGVuZHMgVHJhaXRCYXNlPEQsIEEsIFI+IHsgc3RhdGU6IFRyYWl0U3RhdGUuU0tJUFBFRDsgfVxuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIHRoZSBgVHJhaXRgIGludGVyZmFjZSBmb3IgYW55IHRyYWl0IHdoaWNoIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBhbmFseXplZC5cbiAqXG4gKiBNYWlubHksIHRoaXMgaXMgdXNlZCB0byBzaGFyZSB0aGUgY29tbWVudCBvbiB0aGUgYGFuYWx5c2lzYCBmaWVsZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFpdFdpdGhBbmFseXNpczxBPiB7XG4gIC8qKlxuICAgKiBUaGUgcmVzdWx0cyByZXR1cm5lZCBieSBhIHN1Y2Nlc3NmdWwgYW5hbHlzaXMgb2YgdGhlIGdpdmVuIGNsYXNzL2BEZWNvcmF0b3JIYW5kbGVyYFxuICAgKiBjb21iaW5hdGlvbi5cbiAgICovXG4gIGFuYWx5c2lzOiBSZWFkb25seTxBPjtcbn1cblxuLyoqXG4gKiBBIHRyYWl0IGluIHRoZSBcImFuYWx5emVkXCIgc3RhdGUuXG4gKlxuICogQW5hbHl6ZWQgdHJhaXRzIGhhdmUgYW5hbHlzaXMgcmVzdWx0cyBhdmFpbGFibGUsIGFuZCBhcmUgZWxpZ2libGUgZm9yIHJlc29sdXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl6ZWRUcmFpdDxELCBBLCBSPiBleHRlbmRzIFRyYWl0QmFzZTxELCBBLCBSPiwgVHJhaXRXaXRoQW5hbHlzaXM8QT4ge1xuICBzdGF0ZTogVHJhaXRTdGF0ZS5BTkFMWVpFRDtcblxuICAvKipcbiAgICogVGhpcyBhbmFseXplZCB0cmFpdCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVzb2x2ZWQsIGFuZCBzaG91bGQgYmUgdHJhbnNpdGlvbmVkIHRvIHRoZVxuICAgKiBcInJlc29sdmVkXCIgc3RhdGUuXG4gICAqL1xuICB0b1Jlc29sdmVkKHJlc29sdXRpb246IFIpOiBSZXNvbHZlZFRyYWl0PEQsIEEsIFI+O1xuXG4gIC8qKlxuICAgKiBUaGlzIHRyYWl0IGZhaWxlZCByZXNvbHV0aW9uLCBhbmQgc2hvdWxkIHRyYW5zaXRpb24gdG8gdGhlIFwiZXJyb3JlZFwiIHN0YXRlIHdpdGggdGhlIHJlc3VsdGluZ1xuICAgKiBkaWFnbm9zdGljcy5cbiAgICovXG4gIHRvRXJyb3JlZChlcnJvcnM6IHRzLkRpYWdub3N0aWNbXSk6IEVycm9yZWRUcmFpdDxELCBBLCBSPjtcbn1cblxuLyoqXG4gKiBBIHRyYWl0IGluIHRoZSBcInJlc29sdmVkXCIgc3RhdGUuXG4gKlxuICogUmVzb2x2ZWQgdHJhaXRzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgYW5hbHl6ZWQgYW5kIHJlc29sdmVkLCBjb250YWluIG5vIGVycm9ycywgYW5kIGFyZSByZWFkeVxuICogZm9yIHRoZSBjb21waWxhdGlvbiBwaGFzZS5cbiAqXG4gKiBUaGlzIGlzIGEgdGVybWluYWwgc3RhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRUcmFpdDxELCBBLCBSPiBleHRlbmRzIFRyYWl0QmFzZTxELCBBLCBSPiwgVHJhaXRXaXRoQW5hbHlzaXM8QT4ge1xuICBzdGF0ZTogVHJhaXRTdGF0ZS5SRVNPTFZFRDtcblxuICAvKipcbiAgICogVGhlIHJlc3VsdHMgcmV0dXJuZWQgYnkgYSBzdWNjZXNzZnVsIHJlc29sdXRpb24gb2YgdGhlIGdpdmVuIGNsYXNzL2BEZWNvcmF0b3JIYW5kbGVyYFxuICAgKiBjb21iaW5hdGlvbi5cbiAgICovXG4gIHJlc29sdXRpb246IFJlYWRvbmx5PFI+O1xufVxuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgVHJhaXRgIHR5cGUgd2hpY2ggdHJhbnNpdGlvbnMgc2FmZWx5IGJldHdlZW4gdGhlIHZhcmlvdXNcbiAqIGBUcmFpdFN0YXRlYHMuXG4gKi9cbmNsYXNzIFRyYWl0SW1wbDxELCBBLCBSPiB7XG4gIHN0YXRlOiBUcmFpdFN0YXRlID0gVHJhaXRTdGF0ZS5QRU5ESU5HO1xuICBoYW5kbGVyOiBEZWNvcmF0b3JIYW5kbGVyPEQsIEEsIFI+O1xuICBkZXRlY3RlZDogRGV0ZWN0UmVzdWx0PEQ+O1xuICBhbmFseXNpczogUmVhZG9ubHk8QT58bnVsbCA9IG51bGw7XG4gIHJlc29sdXRpb246IFJlYWRvbmx5PFI+fG51bGwgPSBudWxsO1xuICBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdfG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGhhbmRsZXI6IERlY29yYXRvckhhbmRsZXI8RCwgQSwgUj4sIGRldGVjdGVkOiBEZXRlY3RSZXN1bHQ8RD4pIHtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMuZGV0ZWN0ZWQgPSBkZXRlY3RlZDtcbiAgfVxuXG4gIHRvQW5hbHl6ZWQoYW5hbHlzaXM6IEEpOiBBbmFseXplZFRyYWl0PEQsIEEsIFI+IHtcbiAgICAvLyBPbmx5IHBlbmRpbmcgdHJhaXRzIGNhbiBiZSBhbmFseXplZC5cbiAgICB0aGlzLmFzc2VydFRyYW5zaXRpb25MZWdhbChUcmFpdFN0YXRlLlBFTkRJTkcsIFRyYWl0U3RhdGUuQU5BTFlaRUQpO1xuICAgIHRoaXMuYW5hbHlzaXMgPSBhbmFseXNpcztcbiAgICB0aGlzLnN0YXRlID0gVHJhaXRTdGF0ZS5BTkFMWVpFRDtcbiAgICByZXR1cm4gdGhpcyBhcyBBbmFseXplZFRyYWl0PEQsIEEsIFI+O1xuICB9XG5cbiAgdG9FcnJvcmVkKGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10pOiBFcnJvcmVkVHJhaXQ8RCwgQSwgUj4ge1xuICAgIC8vIFBlbmRpbmcgdHJhaXRzIChkdXJpbmcgYW5hbHlzaXMpIG9yIGFuYWx5emVkIHRyYWl0cyAoZHVyaW5nIHJlc29sdXRpb24pIGNhbiBwcm9kdWNlXG4gICAgLy8gZGlhZ25vc3RpY3MgYW5kIGVudGVyIGFuIGVycm9yZWQgc3RhdGUuXG4gICAgdGhpcy5hc3NlcnRUcmFuc2l0aW9uTGVnYWwoVHJhaXRTdGF0ZS5QRU5ESU5HIHwgVHJhaXRTdGF0ZS5BTkFMWVpFRCwgVHJhaXRTdGF0ZS5SRVNPTFZFRCk7XG4gICAgdGhpcy5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzO1xuICAgIHRoaXMuYW5hbHlzaXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGUgPSBUcmFpdFN0YXRlLkVSUk9SRUQ7XG4gICAgcmV0dXJuIHRoaXMgYXMgRXJyb3JlZFRyYWl0PEQsIEEsIFI+O1xuICB9XG5cbiAgdG9SZXNvbHZlZChyZXNvbHV0aW9uOiBSKTogUmVzb2x2ZWRUcmFpdDxELCBBLCBSPiB7XG4gICAgLy8gT25seSBhbmFseXplZCB0cmFpdHMgY2FuIGJlIHJlc29sdmVkLlxuICAgIHRoaXMuYXNzZXJ0VHJhbnNpdGlvbkxlZ2FsKFRyYWl0U3RhdGUuQU5BTFlaRUQsIFRyYWl0U3RhdGUuUkVTT0xWRUQpO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG4gICAgdGhpcy5zdGF0ZSA9IFRyYWl0U3RhdGUuUkVTT0xWRUQ7XG4gICAgcmV0dXJuIHRoaXMgYXMgUmVzb2x2ZWRUcmFpdDxELCBBLCBSPjtcbiAgfVxuXG4gIHRvU2tpcHBlZCgpOiBTa2lwcGVkVHJhaXQ8RCwgQSwgUj4ge1xuICAgIC8vIE9ubHkgcGVuZGluZyB0cmFpdHMgY2FuIGJlIHNraXBwZWQuXG4gICAgdGhpcy5hc3NlcnRUcmFuc2l0aW9uTGVnYWwoVHJhaXRTdGF0ZS5QRU5ESU5HLCBUcmFpdFN0YXRlLlNLSVBQRUQpO1xuICAgIHRoaXMuc3RhdGUgPSBUcmFpdFN0YXRlLlNLSVBQRUQ7XG4gICAgcmV0dXJuIHRoaXMgYXMgU2tpcHBlZFRyYWl0PEQsIEEsIFI+O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIHRyYWl0IGlzIGN1cnJlbnRseSBpbiBvbmUgb2YgdGhlIGBhbGxvd2VkU3RhdGVgcy5cbiAgICpcbiAgICogSWYgY29ycmVjdGx5IHVzZWQsIHRoZSBgVHJhaXRgIHR5cGUgYW5kIHRyYW5zaXRpb24gbWV0aG9kcyBwcmV2ZW50IGlsbGVnYWwgdHJhbnNpdGlvbnMgZnJvbVxuICAgKiBvY2N1cnJpbmcuIEhvd2V2ZXIsIGlmIGEgcmVmZXJlbmNlIHRvIHRoZSBgVHJhaXRJbXBsYCBpbnN0YW5jZSB0eXBlZCB3aXRoIHRoZSBwcmV2aW91c1xuICAgKiBpbnRlcmZhY2UgaXMgcmV0YWluZWQgYWZ0ZXIgY2FsbGluZyBvbmUgb2YgaXRzIHRyYW5zaXRpb24gbWV0aG9kcywgaXQgd2lsbCBhbGxvdyBmb3IgaWxsZWdhbFxuICAgKiB0cmFuc2l0aW9ucyB0byB0YWtlIHBsYWNlLiBIZW5jZSwgdGhpcyBhc3NlcnRpb24gcHJvdmlkZXMgYSBsaXR0bGUgZXh0cmEgcnVudGltZSBwcm90ZWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3NlcnRUcmFuc2l0aW9uTGVnYWwoYWxsb3dlZFN0YXRlOiBUcmFpdFN0YXRlLCB0cmFuc2l0aW9uVG86IFRyYWl0U3RhdGUpOiB2b2lkIHtcbiAgICBpZiAoISh0aGlzLnN0YXRlICYgYWxsb3dlZFN0YXRlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBc3NlcnRpb24gZmFpbHVyZTogY2Fubm90IHRyYW5zaXRpb24gZnJvbSAke1RyYWl0U3RhdGVbdGhpcy5zdGF0ZV19IHRvICR7VHJhaXRTdGF0ZVt0cmFuc2l0aW9uVG9dfS5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IGBUcmFpdEltcGxgIGluIHRoZSBwZW5kaW5nIHN0YXRlLlxuICAgKi9cbiAgc3RhdGljIHBlbmRpbmc8RCwgQSwgUj4oaGFuZGxlcjogRGVjb3JhdG9ySGFuZGxlcjxELCBBLCBSPiwgZGV0ZWN0ZWQ6IERldGVjdFJlc3VsdDxEPik6XG4gICAgICBQZW5kaW5nVHJhaXQ8RCwgQSwgUj4ge1xuICAgIHJldHVybiBuZXcgVHJhaXRJbXBsKGhhbmRsZXIsIGRldGVjdGVkKSBhcyBQZW5kaW5nVHJhaXQ8RCwgQSwgUj47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
import * as ts from 'typescript';
|
|
10
10
|
import { DefaultImportRecorder, ImportRewriter } from '../../imports';
|
|
11
11
|
import { ReflectionHost } from '../../reflection';
|
|
12
|
-
import {
|
|
13
|
-
export declare function ivyTransformFactory(compilation:
|
|
12
|
+
import { TraitCompiler } from './compilation';
|
|
13
|
+
export declare function ivyTransformFactory(compilation: TraitCompiler, reflector: ReflectionHost, importRewriter: ImportRewriter, defaultImportRecorder: DefaultImportRecorder, isCore: boolean, isClosureCompilerEnabled: boolean): ts.TransformerFactory<ts.SourceFile>;
|
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
var _this = this;
|
|
49
49
|
// Determine if this class has an Ivy field that needs to be added, and compile the field
|
|
50
50
|
// to an expression if so.
|
|
51
|
-
var res = this.compilation.
|
|
52
|
-
if (res !==
|
|
51
|
+
var res = this.compilation.compile(node, this.constantPool);
|
|
52
|
+
if (res !== null) {
|
|
53
53
|
// There is at least one field to add.
|
|
54
54
|
var statements_1 = [];
|
|
55
55
|
var members_1 = tslib_1.__spread(node.members);
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
// Replace the class declaration with an updated version.
|
|
67
67
|
node = ts.updateClassDeclaration(node,
|
|
68
68
|
// Remove the decorator which triggered this compilation, leaving the others alone.
|
|
69
|
-
maybeFilterDecorator(node.decorators, this.compilation.
|
|
69
|
+
maybeFilterDecorator(node.decorators, this.compilation.decoratorsFor(node)), node.modifiers, node.name, node.typeParameters, node.heritageClauses || [],
|
|
70
70
|
// Map over the class members and remove any Angular decorators from them.
|
|
71
71
|
members_1.map(function (member) { return _this._stripAngularDecorators(member); }));
|
|
72
72
|
return { node: node, after: statements_1 };
|
|
@@ -236,4 +236,4 @@
|
|
|
236
236
|
return decorator.import !== null && decorator.import.from === '@angular/core';
|
|
237
237
|
}
|
|
238
238
|
});
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90cmFuc2Zvcm0vc3JjL3RyYW5zZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUFFSCw4Q0FBK0M7SUFDL0MsK0JBQWlDO0lBSWpDLHlFQUF3RjtJQUN4Riw0RUFBNEU7SUFHNUUsNkVBQW1DO0lBRW5DLElBQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFnQixDQUFDO0lBRTlDLElBQU0sNEJBQTRCLEdBQUcsc0JBQXNCLENBQUM7SUFXNUQsU0FBZ0IsbUJBQW1CLENBQy9CLFdBQTJCLEVBQUUsU0FBeUIsRUFBRSxjQUE4QixFQUN0RixxQkFBNEMsRUFBRSxNQUFlLEVBQzdELHdCQUFpQztRQUNuQyxPQUFPLFVBQUMsT0FBaUM7WUFDdkMsT0FBTyxVQUFDLElBQW1CO2dCQUN6QixPQUFPLHNCQUFzQixDQUN6QixXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFDdkYscUJBQXFCLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7SUFDSixDQUFDO0lBWEQsa0RBV0M7SUFFRDtRQUF5QixzQ0FBTztRQUM5QixvQkFDWSxXQUEyQixFQUFVLFNBQXlCLEVBQzlELGFBQTRCLEVBQVUscUJBQTRDLEVBQ2xGLE1BQWUsRUFBVSxZQUEwQjtZQUgvRCxZQUlFLGlCQUFPLFNBQ1I7WUFKVyxpQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7WUFBVSxlQUFTLEdBQVQsU0FBUyxDQUFnQjtZQUM5RCxtQkFBYSxHQUFiLGFBQWEsQ0FBZTtZQUFVLDJCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7WUFDbEYsWUFBTSxHQUFOLE1BQU0sQ0FBUztZQUFVLGtC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Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0NvbnN0YW50UG9vbH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7RGVmYXVsdEltcG9ydFJlY29yZGVyLCBJbXBvcnRSZXdyaXRlcn0gZnJvbSAnLi4vLi4vaW1wb3J0cyc7XG5pbXBvcnQge0RlY29yYXRvciwgUmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uLy4uL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtJbXBvcnRNYW5hZ2VyLCB0cmFuc2xhdGVFeHByZXNzaW9uLCB0cmFuc2xhdGVTdGF0ZW1lbnR9IGZyb20gJy4uLy4uL3RyYW5zbGF0b3InO1xuaW1wb3J0IHtWaXNpdExpc3RFbnRyeVJlc3VsdCwgVmlzaXRvciwgdmlzaXR9IGZyb20gJy4uLy4uL3V0aWwvc3JjL3Zpc2l0b3InO1xuXG5pbXBvcnQge0l2eUNvbXBpbGF0aW9ufSBmcm9tICcuL2NvbXBpbGF0aW9uJztcbmltcG9ydCB7YWRkSW1wb3J0c30gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IE5PX0RFQ09SQVRPUlMgPSBuZXcgU2V0PHRzLkRlY29yYXRvcj4oKTtcblxuY29uc3QgQ0xPU1VSRV9GSUxFX09WRVJWSUVXX1JFR0VYUCA9IC9cXHMrQGZpbGVvdmVydmlld1xccysvaTtcblxuLyoqXG4gKiBNZXRhZGF0YSB0byBzdXBwb3J0IEBmaWxlb3ZlcnZpZXcgYmxvY2tzIChDbG9zdXJlIGFubm90YXRpb25zKSBleHRyYWN0aW5nL3Jlc3RvcmluZy5cbiAqL1xuaW50ZXJmYWNlIEZpbGVPdmVydmlld01ldGEge1xuICBjb21tZW50czogdHMuU3ludGhlc2l6ZWRDb21tZW50W107XG4gIGhvc3Q6IHRzLlN0YXRlbWVudDtcbiAgdHJhaWxpbmc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdnlUcmFuc2Zvcm1GYWN0b3J5KFxuICAgIGNvbXBpbGF0aW9uOiBJdnlDb21waWxhdGlvbiwgcmVmbGVjdG9yOiBSZWZsZWN0aW9uSG9zdCwgaW1wb3J0UmV3cml0ZXI6IEltcG9ydFJld3JpdGVyLFxuICAgIGRlZmF1bHRJbXBvcnRSZWNvcmRlcjogRGVmYXVsdEltcG9ydFJlY29yZGVyLCBpc0NvcmU6IGJvb2xlYW4sXG4gICAgaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkOiBib29sZWFuKTogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+IHtcbiAgcmV0dXJuIChjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpOiB0cy5UcmFuc2Zvcm1lcjx0cy5Tb3VyY2VGaWxlPiA9PiB7XG4gICAgcmV0dXJuIChmaWxlOiB0cy5Tb3VyY2VGaWxlKTogdHMuU291cmNlRmlsZSA9PiB7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtSXZ5U291cmNlRmlsZShcbiAgICAgICAgICBjb21waWxhdGlvbiwgY29udGV4dCwgcmVmbGVjdG9yLCBpbXBvcnRSZXdyaXRlciwgZmlsZSwgaXNDb3JlLCBpc0Nsb3N1cmVDb21waWxlckVuYWJsZWQsXG4gICAgICAgICAgZGVmYXVsdEltcG9ydFJlY29yZGVyKTtcbiAgICB9O1xuICB9O1xufVxuXG5jbGFzcyBJdnlWaXNpdG9yIGV4dGVuZHMgVmlzaXRvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBjb21waWxhdGlvbjogSXZ5Q29tcGlsYXRpb24sIHByaXZhdGUgcmVmbGVjdG9yOiBSZWZsZWN0aW9uSG9zdCxcbiAgICAgIHByaXZhdGUgaW1wb3J0TWFuYWdlcjogSW1wb3J0TWFuYWdlciwgcHJpdmF0ZSBkZWZhdWx0SW1wb3J0UmVjb3JkZXI6IERlZmF1bHRJbXBvcnRSZWNvcmRlcixcbiAgICAgIHByaXZhdGUgaXNDb3JlOiBib29sZWFuLCBwcml2YXRlIGNvbnN0YW50UG9vbDogQ29uc3RhbnRQb29sKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHZpc2l0Q2xhc3NEZWNsYXJhdGlvbihub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uKTpcbiAgICAgIFZpc2l0TGlzdEVudHJ5UmVzdWx0PHRzLlN0YXRlbWVudCwgdHMuQ2xhc3NEZWNsYXJhdGlvbj4ge1xuICAgIC8vIERldGVybWluZSBpZiB0aGlzIGNsYXNzIGhhcyBhbiBJdnkgZmllbGQgdGhhdCBuZWVkcyB0byBiZSBhZGRlZCwgYW5kIGNvbXBpbGUgdGhlIGZpZWxkXG4gICAgLy8gdG8gYW4gZXhwcmVzc2lvbiBpZiBzby5cbiAgICBjb25zdCByZXMgPSB0aGlzLmNvbXBpbGF0aW9uLmNvbXBpbGVJdnlGaWVsZEZvcihub2RlLCB0aGlzLmNvbnN0YW50UG9vbCk7XG5cbiAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmaWVsZCB0byBhZGQuXG4gICAgICBjb25zdCBzdGF0ZW1lbnRzOiB0cy5TdGF0ZW1lbnRbXSA9IFtdO1xuICAgICAgY29uc3QgbWVtYmVycyA9IFsuLi5ub2RlLm1lbWJlcnNdO1xuXG4gICAgICByZXMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgaW5pdGlhbGl6ZXIgZm9yIHRoZSBmaWVsZCBpbnRvIFRTIG5vZGVzLlxuICAgICAgICBjb25zdCBleHByTm9kZSA9IHRyYW5zbGF0ZUV4cHJlc3Npb24oXG4gICAgICAgICAgICBmaWVsZC5pbml0aWFsaXplciwgdGhpcy5pbXBvcnRNYW5hZ2VyLCB0aGlzLmRlZmF1bHRJbXBvcnRSZWNvcmRlcixcbiAgICAgICAgICAgIHRzLlNjcmlwdFRhcmdldC5FUzIwMTUpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIHN0YXRpYyBwcm9wZXJ0eSBkZWNsYXJhdGlvbiBmb3IgdGhlIG5ldyBmaWVsZC5cbiAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0cy5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgIHVuZGVmaW5lZCwgW3RzLmNyZWF0ZVRva2VuKHRzLlN5bnRheEtpbmQuU3RhdGljS2V5d29yZCldLCBmaWVsZC5uYW1lLCB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsIGV4cHJOb2RlKTtcblxuICAgICAgICBmaWVsZC5zdGF0ZW1lbnRzXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIHN0bXQgPT4gdHJhbnNsYXRlU3RhdGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBzdG10LCB0aGlzLmltcG9ydE1hbmFnZXIsIHRoaXMuZGVmYXVsdEltcG9ydFJlY29yZGVyLCB0cy5TY3JpcHRUYXJnZXQuRVMyMDE1KSlcbiAgICAgICAgICAgIC5mb3JFYWNoKHN0bXQgPT4gc3RhdGVtZW50cy5wdXNoKHN0bXQpKTtcblxuICAgICAgICBtZW1iZXJzLnB1c2gocHJvcGVydHkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlcGxhY2UgdGhlIGNsYXNzIGRlY2xhcmF0aW9uIHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uLlxuICAgICAgbm9kZSA9IHRzLnVwZGF0ZUNsYXNzRGVjbGFyYXRpb24oXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRlY29yYXRvciB3aGljaCB0cmlnZ2VyZWQgdGhpcyBjb21waWxhdGlvbiwgbGVhdmluZyB0aGUgb3RoZXJzIGFsb25lLlxuICAgICAgICAgIG1heWJlRmlsdGVyRGVjb3JhdG9yKG5vZGUuZGVjb3JhdG9ycywgdGhpcy5jb21waWxhdGlvbi5pdnlEZWNvcmF0b3JzRm9yKG5vZGUpKSxcbiAgICAgICAgICBub2RlLm1vZGlmaWVycywgbm9kZS5uYW1lLCBub2RlLnR5cGVQYXJhbWV0ZXJzLCBub2RlLmhlcml0YWdlQ2xhdXNlcyB8fCBbXSxcbiAgICAgICAgICAvLyBNYXAgb3ZlciB0aGUgY2xhc3MgbWVtYmVycyBhbmQgcmVtb3ZlIGFueSBBbmd1bGFyIGRlY29yYXRvcnMgZnJvbSB0aGVtLlxuICAgICAgICAgIG1lbWJlcnMubWFwKG1lbWJlciA9PiB0aGlzLl9zdHJpcEFuZ3VsYXJEZWNvcmF0b3JzKG1lbWJlcikpKTtcbiAgICAgIHJldHVybiB7bm9kZSwgYWZ0ZXI6IHN0YXRlbWVudHN9O1xuICAgIH1cblxuICAgIHJldHVybiB7bm9kZX07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBkZWNvcmF0b3JzIG9uIGEgYERlY2xhcmF0aW9uYCB3aGljaCBhcmUgZnJvbSBAYW5ndWxhci9jb3JlLCBvciBhbiBlbXB0eSBzZXQgaWYgbm9uZVxuICAgKiBhcmUuXG4gICAqL1xuICBwcml2YXRlIF9hbmd1bGFyQ29yZURlY29yYXRvcnMoZGVjbDogdHMuRGVjbGFyYXRpb24pOiBTZXQ8dHMuRGVjb3JhdG9yPiB7XG4gICAgY29uc3QgZGVjb3JhdG9ycyA9IHRoaXMucmVmbGVjdG9yLmdldERlY29yYXRvcnNPZkRlY2xhcmF0aW9uKGRlY2wpO1xuICAgIGlmIChkZWNvcmF0b3JzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gTk9fREVDT1JBVE9SUztcbiAgICB9XG4gICAgY29uc3QgY29yZURlY29yYXRvcnMgPSBkZWNvcmF0b3JzLmZpbHRlcihkZWMgPT4gdGhpcy5pc0NvcmUgfHwgaXNGcm9tQW5ndWxhckNvcmUoZGVjKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGRlYyA9PiBkZWMubm9kZSBhcyB0cy5EZWNvcmF0b3IpO1xuICAgIGlmIChjb3JlRGVjb3JhdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbmV3IFNldDx0cy5EZWNvcmF0b3I+KGNvcmVEZWNvcmF0b3JzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE5PX0RFQ09SQVRPUlM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgYHRzLk5vZGVgLCBmaWx0ZXIgdGhlIGRlY29yYXRvcnMgYXJyYXkgYW5kIHJldHVybiBhIHZlcnNpb24gY29udGFpbmluZyBvbmx5IG5vbi1Bbmd1bGFyXG4gICAqIGRlY29yYXRvcnMuXG4gICAqXG4gICAqIElmIGFsbCBkZWNvcmF0b3JzIGFyZSByZW1vdmVkIChvciBub25lIGV4aXN0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlKSwgdGhpcyBtZXRob2QgcmV0dXJuc1xuICAgKiBgdW5kZWZpbmVkYC5cbiAgICovXG4gIHByaXZhdGUgX25vbkNvcmVEZWNvcmF0b3JzT25seShub2RlOiB0cy5EZWNsYXJhdGlvbik6IHRzLk5vZGVBcnJheTx0cy5EZWNvcmF0b3I+fHVuZGVmaW5lZCB7XG4gICAgLy8gU2hvcnRjdXQgaWYgdGhlIG5vZGUgaGFzIG5vIGRlY29yYXRvcnMuXG4gICAgaWYgKG5vZGUuZGVjb3JhdG9ycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBCdWlsZCBhIFNldCBvZiB0aGUgZGVjb3JhdG9ycyBvbiB0aGlzIG5vZGUgZnJvbSBAYW5ndWxhci9jb3JlLlxuICAgIGNvbnN0IGNvcmVEZWNvcmF0b3JzID0gdGhpcy5fYW5ndWxhckNvcmVEZWNvcmF0b3JzKG5vZGUpO1xuXG4gICAgaWYgKGNvcmVEZWNvcmF0b3JzLnNpemUgPT09IG5vZGUuZGVjb3JhdG9ycy5sZW5ndGgpIHtcbiAgICAgIC8vIElmIGFsbCBkZWNvcmF0b3JzIGFyZSB0byBiZSByZW1vdmVkLCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAoY29yZURlY29yYXRvcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgLy8gSWYgbm8gZGVjb3JhdG9ycyBuZWVkIHRvIGJlIHJlbW92ZWQsIHJldHVybiB0aGUgb3JpZ2luYWwgZGVjb3JhdG9ycyBhcnJheS5cbiAgICAgIHJldHVybiBub2RlLmRlY29yYXRvcnM7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIG91dCB0aGUgY29yZSBkZWNvcmF0b3JzLlxuICAgIGNvbnN0IGZpbHRlcmVkID0gbm9kZS5kZWNvcmF0b3JzLmZpbHRlcihkZWMgPT4gIWNvcmVEZWNvcmF0b3JzLmhhcyhkZWMpKTtcblxuICAgIC8vIElmIG5vIGRlY29yYXRvcnMgc3Vydml2ZSwgcmV0dXJuIGB1bmRlZmluZWRgLiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiBhIGNvcmUgZGVjb3JhdG9yIGlzXG4gICAgLy8gcmVwZWF0ZWQgb24gdGhlIG5vZGUuXG4gICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgYE5vZGVBcnJheWAgd2l0aCB0aGUgZmlsdGVyZWQgZGVjb3JhdG9ycyB0aGF0IHNvdXJjZW1hcHMgYmFjayB0byB0aGUgb3JpZ2luYWwuXG4gICAgY29uc3QgYXJyYXkgPSB0cy5jcmVhdGVOb2RlQXJyYXkoZmlsdGVyZWQpO1xuICAgIGFycmF5LnBvcyA9IG5vZGUuZGVjb3JhdG9ycy5wb3M7XG4gICAgYXJyYXkuZW5kID0gbm9kZS5kZWNvcmF0b3JzLmVuZDtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIEFuZ3VsYXIgZGVjb3JhdG9ycyBmcm9tIGEgYHRzLk5vZGVgIGluIGEgc2hhbGxvdyBtYW5uZXIuXG4gICAqXG4gICAqIFRoaXMgd2lsbCByZW1vdmUgZGVjb3JhdG9ycyBmcm9tIGNsYXNzIGVsZW1lbnRzIChnZXR0ZXJzLCBzZXR0ZXJzLCBwcm9wZXJ0aWVzLCBtZXRob2RzKSBhcyB3ZWxsXG4gICAqIGFzIHBhcmFtZXRlcnMgb2YgY29uc3RydWN0b3JzLlxuICAgKi9cbiAgcHJpdmF0ZSBfc3RyaXBBbmd1bGFyRGVjb3JhdG9yczxUIGV4dGVuZHMgdHMuTm9kZT4obm9kZTogVCk6IFQge1xuICAgIGlmICh0cy5pc1BhcmFtZXRlcihub2RlKSkge1xuICAgICAgLy8gU3RyaXAgZGVjb3JhdG9ycyBmcm9tIHBhcmFtZXRlcnMgKHByb2JhYmx5IG9mIHRoZSBjb25zdHJ1Y3RvcikuXG4gICAgICBub2RlID0gdHMudXBkYXRlUGFyYW1ldGVyKFxuICAgICAgICAgICAgICAgICBub2RlLCB0aGlzLl9ub25Db3JlRGVjb3JhdG9yc09ubHkobm9kZSksIG5vZGUubW9kaWZpZXJzLCBub2RlLmRvdERvdERvdFRva2VuLFxuICAgICAgICAgICAgICAgICBub2RlLm5hbWUsIG5vZGUucXVlc3Rpb25Ub2tlbiwgbm9kZS50eXBlLCBub2RlLmluaXRpYWxpemVyKSBhcyBUICZcbiAgICAgICAgICB0cy5QYXJhbWV0ZXJEZWNsYXJhdGlvbjtcbiAgICB9IGVsc2UgaWYgKHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkgJiYgbm9kZS5kZWNvcmF0b3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFN0cmlwIGRlY29yYXRvcnMgb2YgbWV0aG9kcy5cbiAgICAgIG5vZGUgPSB0cy51cGRhdGVNZXRob2QoXG4gICAgICAgICAgICAgICAgIG5vZGUsIHRoaXMuX25vbkNvcmVEZWNvcmF0b3JzT25seShub2RlKSwgbm9kZS5tb2RpZmllcnMsIG5vZGUuYXN0ZXJpc2tUb2tlbixcbiAgICAgICAgICAgICAgICAgbm9kZS5uYW1lLCBub2RlLnF1ZXN0aW9uVG9rZW4sIG5vZGUudHlwZVBhcmFtZXRlcnMsIG5vZGUucGFyYW1ldGVycywgbm9kZS50eXBlLFxuICAgICAgICAgICAgICAgICBub2RlLmJvZHkpIGFzIFQgJlxuICAgICAgICAgIHRzLk1ldGhvZERlY2xhcmF0aW9uO1xuICAgIH0gZWxzZSBpZiAodHMuaXNQcm9wZXJ0eURlY2xhcmF0aW9uKG5vZGUpICYmIG5vZGUuZGVjb3JhdG9ycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTdHJpcCBkZWNvcmF0b3JzIG9mIHByb3BlcnRpZXMuXG4gICAgICBub2RlID0gdHMudXBkYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgIG5vZGUsIHRoaXMuX25vbkNvcmVEZWNvcmF0b3JzT25seShub2RlKSwgbm9kZS5tb2RpZmllcnMsIG5vZGUubmFtZSxcbiAgICAgICAgICAgICAgICAgbm9kZS5xdWVzdGlvblRva2VuLCBub2RlLnR5cGUsIG5vZGUuaW5pdGlhbGl6ZXIpIGFzIFQgJlxuICAgICAgICAgIHRzLlByb3BlcnR5RGVjbGFyYXRpb247XG4gICAgfSBlbHNlIGlmICh0cy5pc0dldEFjY2Vzc29yKG5vZGUpKSB7XG4gICAgICAvLyBTdHJpcCBkZWNvcmF0b3JzIG9mIGdldHRlcnMuXG4gICAgICBub2RlID0gdHMudXBkYXRlR2V0QWNjZXNzb3IoXG4gICAgICAgICAgICAgICAgIG5vZGUsIHRoaXMuX25vbkNvcmVEZWNvcmF0b3JzT25seShub2RlKSwgbm9kZS5tb2RpZmllcnMsIG5vZGUubmFtZSxcbiAgICAgICAgICAgICAgICAgbm9kZS5wYXJhbWV0ZXJzLCBub2RlLnR5cGUsIG5vZGUuYm9keSkgYXMgVCAmXG4gICAgICAgICAgdHMuR2V0QWNjZXNzb3JEZWNsYXJhdGlvbjtcbiAgICB9IGVsc2UgaWYgKHRzLmlzU2V0QWNjZXNzb3Iobm9kZSkpIHtcbiAgICAgIC8vIFN0cmlwIGRlY29yYXRvcnMgb2Ygc2V0dGVycy5cbiAgICAgIG5vZGUgPSB0cy51cGRhdGVTZXRBY2Nlc3NvcihcbiAgICAgICAgICAgICAgICAgbm9kZSwgdGhpcy5fbm9uQ29yZURlY29yYXRvcnNPbmx5KG5vZGUpLCBub2RlLm1vZGlmaWVycywgbm9kZS5uYW1lLFxuICAgICAgICAgICAgICAgICBub2RlLnBhcmFtZXRlcnMsIG5vZGUuYm9keSkgYXMgVCAmXG4gICAgICAgICAgdHMuU2V0QWNjZXNzb3JEZWNsYXJhdGlvbjtcbiAgICB9IGVsc2UgaWYgKHRzLmlzQ29uc3RydWN0b3JEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgc3RyaXAgZGVjb3JhdG9ycyBvZiB0aGUgcGFyYW1ldGVycy5cbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtID0+IHRoaXMuX3N0cmlwQW5ndWxhckRlY29yYXRvcnMocGFyYW0pKTtcbiAgICAgIG5vZGUgPVxuICAgICAgICAgIHRzLnVwZGF0ZUNvbnN0cnVjdG9yKG5vZGUsIG5vZGUuZGVjb3JhdG9ycywgbm9kZS5tb2RpZmllcnMsIHBhcmFtZXRlcnMsIG5vZGUuYm9keSkgYXMgVCAmXG4gICAgICAgICAgdHMuQ29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHRyYW5zZm9ybWVyIHdoaWNoIG9wZXJhdGVzIG9uIHRzLlNvdXJjZUZpbGVzIGFuZCBhcHBsaWVzIGNoYW5nZXMgZnJvbSBhbiBgSXZ5Q29tcGlsYXRpb25gLlxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1JdnlTb3VyY2VGaWxlKFxuICAgIGNvbXBpbGF0aW9uOiBJdnlDb21waWxhdGlvbiwgY29udGV4dDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0LCByZWZsZWN0b3I6IFJlZmxlY3Rpb25Ib3N0LFxuICAgIGltcG9ydFJld3JpdGVyOiBJbXBvcnRSZXdyaXRlciwgZmlsZTogdHMuU291cmNlRmlsZSwgaXNDb3JlOiBib29sZWFuLFxuICAgIGlzQ2xvc3VyZUNvbXBpbGVyRW5hYmxlZDogYm9vbGVhbixcbiAgICBkZWZhdWx0SW1wb3J0UmVjb3JkZXI6IERlZmF1bHRJbXBvcnRSZWNvcmRlcik6IHRzLlNvdXJjZUZpbGUge1xuICBjb25zdCBjb25zdGFudFBvb2wgPSBuZXcgQ29uc3RhbnRQb29sKCk7XG4gIGNvbnN0IGltcG9ydE1hbmFnZXIgPSBuZXcgSW1wb3J0TWFuYWdlcihpbXBvcnRSZXdyaXRlcik7XG5cbiAgLy8gUmVjdXJzaXZlbHkgc2NhbiB0aHJvdWdoIHRoZSBBU1QgYW5kIHBlcmZvcm0gYW55IHVwZGF0ZXMgcmVxdWVzdGVkIGJ5IHRoZSBJdnlDb21waWxhdGlvbi5cbiAgY29uc3QgdmlzaXRvciA9IG5ldyBJdnlWaXNpdG9yKFxuICAgICAgY29tcGlsYXRpb24sIHJlZmxlY3RvciwgaW1wb3J0TWFuYWdlciwgZGVmYXVsdEltcG9ydFJlY29yZGVyLCBpc0NvcmUsIGNvbnN0YW50UG9vbCk7XG4gIGxldCBzZiA9IHZpc2l0KGZpbGUsIHZpc2l0b3IsIGNvbnRleHQpO1xuXG4gIC8vIEdlbmVyYXRlIHRoZSBjb25zdGFudCBzdGF0ZW1lbnRzIGZpcnN0LCBhcyB0aGV5IG1heSBpbnZvbHZlIGFkZGluZyBhZGRpdGlvbmFsIGltcG9ydHNcbiAgLy8gdG8gdGhlIEltcG9ydE1hbmFnZXIuXG4gIGNvbnN0IGNvbnN0YW50cyA9IGNvbnN0YW50UG9vbC5zdGF0ZW1lbnRzLm1hcChcbiAgICAgIHN0bXQgPT5cbiAgICAgICAgICB0cmFuc2xhdGVTdGF0ZW1lbnQoc3RtdCwgaW1wb3J0TWFuYWdlciwgZGVmYXVsdEltcG9ydFJlY29yZGVyLCB0cy5TY3JpcHRUYXJnZXQuRVMyMDE1KSk7XG5cbiAgLy8gUHJlc2VydmUgQGZpbGVvdmVydmlldyBjb21tZW50cyByZXF1aXJlZCBieSBDbG9zdXJlLCBzaW5jZSB0aGUgbG9jYXRpb24gbWlnaHQgY2hhbmdlIGFzIGFcbiAgLy8gcmVzdWx0IG9mIGFkZGluZyBleHRyYSBpbXBvcnRzIGFuZCBjb25zdGFudCBwb29sIHN0YXRlbWVudHMuXG4gIGNvbnN0IGZpbGVPdmVydmlld01ldGEgPSBpc0Nsb3N1cmVDb21waWxlckVuYWJsZWQgPyBnZXRGaWxlT3ZlcnZpZXdDb21tZW50KHNmLnN0YXRlbWVudHMpIDogbnVsbDtcblxuICAvLyBBZGQgbmV3IGltcG9ydHMgZm9yIHRoaXMgZmlsZS5cbiAgc2YgPSBhZGRJbXBvcnRzKGltcG9ydE1hbmFnZXIsIHNmLCBjb25zdGFudHMpO1xuXG4gIGlmIChmaWxlT3ZlcnZpZXdNZXRhICE9PSBudWxsKSB7XG4gICAgc2V0RmlsZU92ZXJ2aWV3Q29tbWVudChzZiwgZmlsZU92ZXJ2aWV3TWV0YSk7XG4gIH1cblxuICByZXR1cm4gc2Y7XG59XG5cbmZ1bmN0aW9uIGdldEZpbGVPdmVydmlld0NvbW1lbnQoc3RhdGVtZW50czogdHMuTm9kZUFycmF5PHRzLlN0YXRlbWVudD4pOiBGaWxlT3ZlcnZpZXdNZXRhfG51bGwge1xuICBpZiAoc3RhdGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgaG9zdCA9IHN0YXRlbWVudHNbMF07XG4gICAgbGV0IHRyYWlsaW5nID0gZmFsc2U7XG4gICAgbGV0IGNvbW1lbnRzID0gdHMuZ2V0U3ludGhldGljTGVhZGluZ0NvbW1lbnRzKGhvc3QpO1xuICAgIC8vIElmIEBmaWxlb3ZlcnZpZXcgdGFnIGlzIG5vdCBmb3VuZCBpbiBzb3VyY2UgZmlsZSwgdHNpY2tsZSBwcm9kdWNlcyBmYWtlIG5vZGUgd2l0aCB0cmFpbGluZ1xuICAgIC8vIGNvbW1lbnQgYW5kIGluamVjdCBpdCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGdlbmVyYXRlZCBmaWxlLiBTbyB3ZSBuZWVkIHRvIGNoZWNrIGZvclxuICAgIC8vIGxlYWRpbmcgYXMgd2VsbCBhcyB0cmFpbGluZyBjb21tZW50cy5cbiAgICBpZiAoIWNvbW1lbnRzIHx8IGNvbW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuICAgICAgY29tbWVudHMgPSB0cy5nZXRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnRzKGhvc3QpO1xuICAgIH1cbiAgICBpZiAoY29tbWVudHMgJiYgY29tbWVudHMubGVuZ3RoID4gMCAmJiBDTE9TVVJFX0ZJTEVfT1ZFUlZJRVdfUkVHRVhQLnRlc3QoY29tbWVudHNbMF0udGV4dCkpIHtcbiAgICAgIHJldHVybiB7Y29tbWVudHMsIGhvc3QsIHRyYWlsaW5nfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNldEZpbGVPdmVydmlld0NvbW1lbnQoc2Y6IHRzLlNvdXJjZUZpbGUsIGZpbGVvdmVydmlldzogRmlsZU92ZXJ2aWV3TWV0YSk6IHZvaWQge1xuICBjb25zdCB7Y29tbWVudHMsIGhvc3QsIHRyYWlsaW5nfSA9IGZpbGVvdmVydmlldztcbiAgLy8gSWYgaG9zdCBzdGF0ZW1lbnQgaXMgbm8gbG9uZ2VyIHRoZSBmaXJzdCBvbmUsIGl0IG1lYW5zIHRoYXQgZXh0cmEgc3RhdGVtZW50cyB3ZXJlIGFkZGVkIGF0IHRoZVxuICAvLyB2ZXJ5IGJlZ2lubmluZywgc28gd2UgbmVlZCB0byByZWxvY2F0ZSBAZmlsZW92ZXJ2aWV3IGNvbW1lbnQgYW5kIGNsZWFudXAgdGhlIG9yaWdpbmFsIHN0YXRlbWVudFxuICAvLyB0aGF0IGhvc3RlZCBpdC5cbiAgaWYgKHNmLnN0YXRlbWVudHMubGVuZ3RoID4gMCAmJiBob3N0ICE9PSBzZi5zdGF0ZW1lbnRzWzBdKSB7XG4gICAgaWYgKHRyYWlsaW5nKSB7XG4gICAgICB0cy5zZXRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnRzKGhvc3QsIHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRzLnNldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cyhob3N0LCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICB0cy5zZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMoc2Yuc3RhdGVtZW50c1swXSwgY29tbWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlRmlsdGVyRGVjb3JhdG9yKFxuICAgIGRlY29yYXRvcnM6IHRzLk5vZGVBcnJheTx0cy5EZWNvcmF0b3I+fCB1bmRlZmluZWQsXG4gICAgdG9SZW1vdmU6IHRzLkRlY29yYXRvcltdKTogdHMuTm9kZUFycmF5PHRzLkRlY29yYXRvcj58dW5kZWZpbmVkIHtcbiAgaWYgKGRlY29yYXRvcnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZmlsdGVyZWQgPSBkZWNvcmF0b3JzLmZpbHRlcihcbiAgICAgIGRlYyA9PiB0b1JlbW92ZS5maW5kKGRlY1RvUmVtb3ZlID0+IHRzLmdldE9yaWdpbmFsTm9kZShkZWMpID09PSBkZWNUb1JlbW92ZSkgPT09IHVuZGVmaW5lZCk7XG4gIGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB0cy5jcmVhdGVOb2RlQXJyYXkoZmlsdGVyZWQpO1xufVxuXG5mdW5jdGlvbiBpc0Zyb21Bbmd1bGFyQ29yZShkZWNvcmF0b3I6IERlY29yYXRvcik6IGJvb2xlYW4ge1xuICByZXR1cm4gZGVjb3JhdG9yLmltcG9ydCAhPT0gbnVsbCAmJiBkZWNvcmF0b3IuaW1wb3J0LmZyb20gPT09ICdAYW5ndWxhci9jb3JlJztcbn1cbiJdfQ==
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90cmFuc2Zvcm0vc3JjL3RyYW5zZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUFFSCw4Q0FBK0M7SUFDL0MsK0JBQWlDO0lBSWpDLHlFQUF3RjtJQUN4Riw0RUFBNEU7SUFHNUUsNkVBQW1DO0lBRW5DLElBQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFnQixDQUFDO0lBRTlDLElBQU0sNEJBQTRCLEdBQUcsc0JBQXNCLENBQUM7SUFXNUQsU0FBZ0IsbUJBQW1CLENBQy9CLFdBQTBCLEVBQUUsU0FBeUIsRUFBRSxjQUE4QixFQUNyRixxQkFBNEMsRUFBRSxNQUFlLEVBQzdELHdCQUFpQztRQUNuQyxPQUFPLFVBQUMsT0FBaUM7WUFDdkMsT0FBTyxVQUFDLElBQW1CO2dCQUN6QixPQUFPLHNCQUFzQixDQUN6QixXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFDdkYscUJBQXFCLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7SUFDSixDQUFDO0lBWEQsa0RBV0M7SUFFRDtRQUF5QixzQ0FBTztRQUM5QixvQkFDWSxXQUEwQixFQUFVLFNBQXlCLEVBQzdELGFBQTRCLEVBQVUscUJBQTRDLEVBQ2xGLE1BQWUsRUFBVSxZQUEwQjtZQUgvRCxZQUlFLGlCQUFPLFNBQ1I7WUFKVyxpQkFBVyxHQUFYLFdBQVcsQ0FBZTtZQUFVLGVBQVMsR0FBVCxTQUFTLENBQWdCO1lBQzdELG1CQUFhLEdBQWIsYUFBYSxDQUFlO1lBQVUsMkJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtZQUNsRixZQUFNLEdBQU4sTUFBTSxDQUFTO1lBQVUsa0JB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dXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtDb25zdGFudFBvb2x9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0RlZmF1bHRJbXBvcnRSZWNvcmRlciwgSW1wb3J0UmV3cml0ZXJ9IGZyb20gJy4uLy4uL2ltcG9ydHMnO1xuaW1wb3J0IHtEZWNvcmF0b3IsIFJlZmxlY3Rpb25Ib3N0fSBmcm9tICcuLi8uLi9yZWZsZWN0aW9uJztcbmltcG9ydCB7SW1wb3J0TWFuYWdlciwgdHJhbnNsYXRlRXhwcmVzc2lvbiwgdHJhbnNsYXRlU3RhdGVtZW50fSBmcm9tICcuLi8uLi90cmFuc2xhdG9yJztcbmltcG9ydCB7VmlzaXRMaXN0RW50cnlSZXN1bHQsIFZpc2l0b3IsIHZpc2l0fSBmcm9tICcuLi8uLi91dGlsL3NyYy92aXNpdG9yJztcblxuaW1wb3J0IHtUcmFpdENvbXBpbGVyfSBmcm9tICcuL2NvbXBpbGF0aW9uJztcbmltcG9ydCB7YWRkSW1wb3J0c30gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IE5PX0RFQ09SQVRPUlMgPSBuZXcgU2V0PHRzLkRlY29yYXRvcj4oKTtcblxuY29uc3QgQ0xPU1VSRV9GSUxFX09WRVJWSUVXX1JFR0VYUCA9IC9cXHMrQGZpbGVvdmVydmlld1xccysvaTtcblxuLyoqXG4gKiBNZXRhZGF0YSB0byBzdXBwb3J0IEBmaWxlb3ZlcnZpZXcgYmxvY2tzIChDbG9zdXJlIGFubm90YXRpb25zKSBleHRyYWN0aW5nL3Jlc3RvcmluZy5cbiAqL1xuaW50ZXJmYWNlIEZpbGVPdmVydmlld01ldGEge1xuICBjb21tZW50czogdHMuU3ludGhlc2l6ZWRDb21tZW50W107XG4gIGhvc3Q6IHRzLlN0YXRlbWVudDtcbiAgdHJhaWxpbmc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdnlUcmFuc2Zvcm1GYWN0b3J5KFxuICAgIGNvbXBpbGF0aW9uOiBUcmFpdENvbXBpbGVyLCByZWZsZWN0b3I6IFJlZmxlY3Rpb25Ib3N0LCBpbXBvcnRSZXdyaXRlcjogSW1wb3J0UmV3cml0ZXIsXG4gICAgZGVmYXVsdEltcG9ydFJlY29yZGVyOiBEZWZhdWx0SW1wb3J0UmVjb3JkZXIsIGlzQ29yZTogYm9vbGVhbixcbiAgICBpc0Nsb3N1cmVDb21waWxlckVuYWJsZWQ6IGJvb2xlYW4pOiB0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT4ge1xuICByZXR1cm4gKGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCk6IHRzLlRyYW5zZm9ybWVyPHRzLlNvdXJjZUZpbGU+ID0+IHtcbiAgICByZXR1cm4gKGZpbGU6IHRzLlNvdXJjZUZpbGUpOiB0cy5Tb3VyY2VGaWxlID0+IHtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1JdnlTb3VyY2VGaWxlKFxuICAgICAgICAgIGNvbXBpbGF0aW9uLCBjb250ZXh0LCByZWZsZWN0b3IsIGltcG9ydFJld3JpdGVyLCBmaWxlLCBpc0NvcmUsIGlzQ2xvc3VyZUNvbXBpbGVyRW5hYmxlZCxcbiAgICAgICAgICBkZWZhdWx0SW1wb3J0UmVjb3JkZXIpO1xuICAgIH07XG4gIH07XG59XG5cbmNsYXNzIEl2eVZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIGNvbXBpbGF0aW9uOiBUcmFpdENvbXBpbGVyLCBwcml2YXRlIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QsXG4gICAgICBwcml2YXRlIGltcG9ydE1hbmFnZXI6IEltcG9ydE1hbmFnZXIsIHByaXZhdGUgZGVmYXVsdEltcG9ydFJlY29yZGVyOiBEZWZhdWx0SW1wb3J0UmVjb3JkZXIsXG4gICAgICBwcml2YXRlIGlzQ29yZTogYm9vbGVhbiwgcHJpdmF0ZSBjb25zdGFudFBvb2w6IENvbnN0YW50UG9vbCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICB2aXNpdENsYXNzRGVjbGFyYXRpb24obm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbik6XG4gICAgICBWaXNpdExpc3RFbnRyeVJlc3VsdDx0cy5TdGF0ZW1lbnQsIHRzLkNsYXNzRGVjbGFyYXRpb24+IHtcbiAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBjbGFzcyBoYXMgYW4gSXZ5IGZpZWxkIHRoYXQgbmVlZHMgdG8gYmUgYWRkZWQsIGFuZCBjb21waWxlIHRoZSBmaWVsZFxuICAgIC8vIHRvIGFuIGV4cHJlc3Npb24gaWYgc28uXG4gICAgY29uc3QgcmVzID0gdGhpcy5jb21waWxhdGlvbi5jb21waWxlKG5vZGUsIHRoaXMuY29uc3RhbnRQb29sKTtcblxuICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmaWVsZCB0byBhZGQuXG4gICAgICBjb25zdCBzdGF0ZW1lbnRzOiB0cy5TdGF0ZW1lbnRbXSA9IFtdO1xuICAgICAgY29uc3QgbWVtYmVycyA9IFsuLi5ub2RlLm1lbWJlcnNdO1xuXG4gICAgICByZXMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgaW5pdGlhbGl6ZXIgZm9yIHRoZSBmaWVsZCBpbnRvIFRTIG5vZGVzLlxuICAgICAgICBjb25zdCBleHByTm9kZSA9IHRyYW5zbGF0ZUV4cHJlc3Npb24oXG4gICAgICAgICAgICBmaWVsZC5pbml0aWFsaXplciwgdGhpcy5pbXBvcnRNYW5hZ2VyLCB0aGlzLmRlZmF1bHRJbXBvcnRSZWNvcmRlcixcbiAgICAgICAgICAgIHRzLlNjcmlwdFRhcmdldC5FUzIwMTUpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIHN0YXRpYyBwcm9wZXJ0eSBkZWNsYXJhdGlvbiBmb3IgdGhlIG5ldyBmaWVsZC5cbiAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0cy5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgIHVuZGVmaW5lZCwgW3RzLmNyZWF0ZVRva2VuKHRzLlN5bnRheEtpbmQuU3RhdGljS2V5d29yZCldLCBmaWVsZC5uYW1lLCB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsIGV4cHJOb2RlKTtcblxuICAgICAgICBmaWVsZC5zdGF0ZW1lbnRzXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIHN0bXQgPT4gdHJhbnNsYXRlU3RhdGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBzdG10LCB0aGlzLmltcG9ydE1hbmFnZXIsIHRoaXMuZGVmYXVsdEltcG9ydFJlY29yZGVyLCB0cy5TY3JpcHRUYXJnZXQuRVMyMDE1KSlcbiAgICAgICAgICAgIC5mb3JFYWNoKHN0bXQgPT4gc3RhdGVtZW50cy5wdXNoKHN0bXQpKTtcblxuICAgICAgICBtZW1iZXJzLnB1c2gocHJvcGVydHkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlcGxhY2UgdGhlIGNsYXNzIGRlY2xhcmF0aW9uIHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uLlxuICAgICAgbm9kZSA9IHRzLnVwZGF0ZUNsYXNzRGVjbGFyYXRpb24oXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRlY29yYXRvciB3aGljaCB0cmlnZ2VyZWQgdGhpcyBjb21waWxhdGlvbiwgbGVhdmluZyB0aGUgb3RoZXJzIGFsb25lLlxuICAgICAgICAgIG1heWJlRmlsdGVyRGVjb3JhdG9yKG5vZGUuZGVjb3JhdG9ycywgdGhpcy5jb21waWxhdGlvbi5kZWNvcmF0b3JzRm9yKG5vZGUpKSxcbiAgICAgICAgICBub2RlLm1vZGlmaWVycywgbm9kZS5uYW1lLCBub2RlLnR5cGVQYXJhbWV0ZXJzLCBub2RlLmhlcml0YWdlQ2xhdXNlcyB8fCBbXSxcbiAgICAgICAgICAvLyBNYXAgb3ZlciB0aGUgY2xhc3MgbWVtYmVycyBhbmQgcmVtb3ZlIGFueSBBbmd1bGFyIGRlY29yYXRvcnMgZnJvbSB0aGVtLlxuICAgICAgICAgIG1lbWJlcnMubWFwKG1lbWJlciA9PiB0aGlzLl9zdHJpcEFuZ3VsYXJEZWNvcmF0b3JzKG1lbWJlcikpKTtcbiAgICAgIHJldHVybiB7bm9kZSwgYWZ0ZXI6IHN0YXRlbWVudHN9O1xuICAgIH1cblxuICAgIHJldHVybiB7bm9kZX07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBkZWNvcmF0b3JzIG9uIGEgYERlY2xhcmF0aW9uYCB3aGljaCBhcmUgZnJvbSBAYW5ndWxhci9jb3JlLCBvciBhbiBlbXB0eSBzZXQgaWYgbm9uZVxuICAgKiBhcmUuXG4gICAqL1xuICBwcml2YXRlIF9hbmd1bGFyQ29yZURlY29yYXRvcnMoZGVjbDogdHMuRGVjbGFyYXRpb24pOiBTZXQ8dHMuRGVjb3JhdG9yPiB7XG4gICAgY29uc3QgZGVjb3JhdG9ycyA9IHRoaXMucmVmbGVjdG9yLmdldERlY29yYXRvcnNPZkRlY2xhcmF0aW9uKGRlY2wpO1xuICAgIGlmIChkZWNvcmF0b3JzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gTk9fREVDT1JBVE9SUztcbiAgICB9XG4gICAgY29uc3QgY29yZURlY29yYXRvcnMgPSBkZWNvcmF0b3JzLmZpbHRlcihkZWMgPT4gdGhpcy5pc0NvcmUgfHwgaXNGcm9tQW5ndWxhckNvcmUoZGVjKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGRlYyA9PiBkZWMubm9kZSBhcyB0cy5EZWNvcmF0b3IpO1xuICAgIGlmIChjb3JlRGVjb3JhdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbmV3IFNldDx0cy5EZWNvcmF0b3I+KGNvcmVEZWNvcmF0b3JzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE5PX0RFQ09SQVRPUlM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgYHRzLk5vZGVgLCBmaWx0ZXIgdGhlIGRlY29yYXRvcnMgYXJyYXkgYW5kIHJldHVybiBhIHZlcnNpb24gY29udGFpbmluZyBvbmx5IG5vbi1Bbmd1bGFyXG4gICAqIGRlY29yYXRvcnMuXG4gICAqXG4gICAqIElmIGFsbCBkZWNvcmF0b3JzIGFyZSByZW1vdmVkIChvciBub25lIGV4aXN0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlKSwgdGhpcyBtZXRob2QgcmV0dXJuc1xuICAgKiBgdW5kZWZpbmVkYC5cbiAgICovXG4gIHByaXZhdGUgX25vbkNvcmVEZWNvcmF0b3JzT25seShub2RlOiB0cy5EZWNsYXJhdGlvbik6IHRzLk5vZGVBcnJheTx0cy5EZWNvcmF0b3I+fHVuZGVmaW5lZCB7XG4gICAgLy8gU2hvcnRjdXQgaWYgdGhlIG5vZGUgaGFzIG5vIGRlY29yYXRvcnMuXG4gICAgaWYgKG5vZGUuZGVjb3JhdG9ycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBCdWlsZCBhIFNldCBvZiB0aGUgZGVjb3JhdG9ycyBvbiB0aGlzIG5vZGUgZnJvbSBAYW5ndWxhci9jb3JlLlxuICAgIGNvbnN0IGNvcmVEZWNvcmF0b3JzID0gdGhpcy5fYW5ndWxhckNvcmVEZWNvcmF0b3JzKG5vZGUpO1xuXG4gICAgaWYgKGNvcmVEZWNvcmF0b3JzLnNpemUgPT09IG5vZGUuZGVjb3JhdG9ycy5sZW5ndGgpIHtcbiAgICAgIC8vIElmIGFsbCBkZWNvcmF0b3JzIGFyZSB0byBiZSByZW1vdmVkLCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAoY29yZURlY29yYXRvcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgLy8gSWYgbm8gZGVjb3JhdG9ycyBuZWVkIHRvIGJlIHJlbW92ZWQsIHJldHVybiB0aGUgb3JpZ2luYWwgZGVjb3JhdG9ycyBhcnJheS5cbiAgICAgIHJldHVybiBub2RlLmRlY29yYXRvcnM7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIG91dCB0aGUgY29yZSBkZWNvcmF0b3JzLlxuICAgIGNvbnN0IGZpbHRlcmVkID0gbm9kZS5kZWNvcmF0b3JzLmZpbHRlcihkZWMgPT4gIWNvcmVEZWNvcmF0b3JzLmhhcyhkZWMpKTtcblxuICAgIC8vIElmIG5vIGRlY29yYXRvcnMgc3Vydml2ZSwgcmV0dXJuIGB1bmRlZmluZWRgLiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiBhIGNvcmUgZGVjb3JhdG9yIGlzXG4gICAgLy8gcmVwZWF0ZWQgb24gdGhlIG5vZGUuXG4gICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgYE5vZGVBcnJheWAgd2l0aCB0aGUgZmlsdGVyZWQgZGVjb3JhdG9ycyB0aGF0IHNvdXJjZW1hcHMgYmFjayB0byB0aGUgb3JpZ2luYWwuXG4gICAgY29uc3QgYXJyYXkgPSB0cy5jcmVhdGVOb2RlQXJyYXkoZmlsdGVyZWQpO1xuICAgIGFycmF5LnBvcyA9IG5vZGUuZGVjb3JhdG9ycy5wb3M7XG4gICAgYXJyYXkuZW5kID0gbm9kZS5kZWNvcmF0b3JzLmVuZDtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIEFuZ3VsYXIgZGVjb3JhdG9ycyBmcm9tIGEgYHRzLk5vZGVgIGluIGEgc2hhbGxvdyBtYW5uZXIuXG4gICAqXG4gICAqIFRoaXMgd2lsbCByZW1vdmUgZGVjb3JhdG9ycyBmcm9tIGNsYXNzIGVsZW1lbnRzIChnZXR0ZXJzLCBzZXR0ZXJzLCBwcm9wZXJ0aWVzLCBtZXRob2RzKSBhcyB3ZWxsXG4gICAqIGFzIHBhcmFtZXRlcnMgb2YgY29uc3RydWN0b3JzLlxuICAgKi9cbiAgcHJpdmF0ZSBfc3RyaXBBbmd1bGFyRGVjb3JhdG9yczxUIGV4dGVuZHMgdHMuTm9kZT4obm9kZTogVCk6IFQge1xuICAgIGlmICh0cy5pc1BhcmFtZXRlcihub2RlKSkge1xuICAgICAgLy8gU3RyaXAgZGVjb3JhdG9ycyBmcm9tIHBhcmFtZXRlcnMgKHByb2JhYmx5IG9mIHRoZSBjb25zdHJ1Y3RvcikuXG4gICAgICBub2RlID0gdHMudXBkYXRlUGFyYW1ldGVyKFxuICAgICAgICAgICAgICAgICBub2RlLCB0aGlzLl9ub25Db3JlRGVjb3JhdG9yc09ubHkobm9kZSksIG5vZGUubW9kaWZpZXJzLCBub2RlLmRvdERvdERvdFRva2VuLFxuICAgICAgICAgICAgICAgICBub2RlLm5hbWUsIG5vZGUucXVlc3Rpb25Ub2tlbiwgbm9kZS50eXBlLCBub2RlLmluaXRpYWxpemVyKSBhcyBUICZcbiAgICAgICAgICB0cy5QYXJhbWV0ZXJEZWNsYXJhdGlvbjtcbiAgICB9IGVsc2UgaWYgKHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkgJiYgbm9kZS5kZWNvcmF0b3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFN0cmlwIGRlY29yYXRvcnMgb2YgbWV0aG9kcy5cbiAgICAgIG5vZGUgPSB0cy51cGRhdGVNZXRob2QoXG4gICAgICAgICAgICAgICAgIG5vZGUsIHRoaXMuX25vbkNvcmVEZWNvcmF0b3JzT25seShub2RlKSwgbm9kZS5tb2RpZmllcnMsIG5vZGUuYXN0ZXJpc2tUb2tlbixcbiAgICAgICAgICAgICAgICAgbm9kZS5uYW1lLCBub2RlLnF1ZXN0aW9uVG9rZW4sIG5vZGUudHlwZVBhcmFtZXRlcnMsIG5vZGUucGFyYW1ldGVycywgbm9kZS50eXBlLFxuICAgICAgICAgICAgICAgICBub2RlLmJvZHkpIGFzIFQgJlxuICAgICAgICAgIHRzLk1ldGhvZERlY2xhcmF0aW9uO1xuICAgIH0gZWxzZSBpZiAodHMuaXNQcm9wZXJ0eURlY2xhcmF0aW9uKG5vZGUpICYmIG5vZGUuZGVjb3JhdG9ycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTdHJpcCBkZWNvcmF0b3JzIG9mIHByb3BlcnRpZXMuXG4gICAgICBub2RlID0gdHMudXBkYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgIG5vZGUsIHRoaXMuX25vbkNvcmVEZWNvcmF0b3JzT25seShub2RlKSwgbm9kZS5tb2RpZmllcnMsIG5vZGUubmFtZSxcbiAgICAgICAgICAgICAgICAgbm9kZS5xdWVzdGlvblRva2VuLCBub2RlLnR5cGUsIG5vZGUuaW5pdGlhbGl6ZXIpIGFzIFQgJlxuICAgICAgICAgIHRzLlByb3BlcnR5RGVjbGFyYXRpb247XG4gICAgfSBlbHNlIGlmICh0cy5pc0dldEFjY2Vzc29yKG5vZGUpKSB7XG4gICAgICAvLyBTdHJpcCBkZWNvcmF0b3JzIG9mIGdldHRlcnMuXG4gICAgICBub2RlID0gdHMudXBkYXRlR2V0QWNjZXNzb3IoXG4gICAgICAgICAgICAgICAgIG5vZGUsIHRoaXMuX25vbkNvcmVEZWNvcmF0b3JzT25seShub2RlKSwgbm9kZS5tb2RpZmllcnMsIG5vZGUubmFtZSxcbiAgICAgICAgICAgICAgICAgbm9kZS5wYXJhbWV0ZXJzLCBub2RlLnR5cGUsIG5vZGUuYm9keSkgYXMgVCAmXG4gICAgICAgICAgdHMuR2V0QWNjZXNzb3JEZWNsYXJhdGlvbjtcbiAgICB9IGVsc2UgaWYgKHRzLmlzU2V0QWNjZXNzb3Iobm9kZSkpIHtcbiAgICAgIC8vIFN0cmlwIGRlY29yYXRvcnMgb2Ygc2V0dGVycy5cbiAgICAgIG5vZGUgPSB0cy51cGRhdGVTZXRBY2Nlc3NvcihcbiAgICAgICAgICAgICAgICAgbm9kZSwgdGhpcy5fbm9uQ29yZURlY29yYXRvcnNPbmx5KG5vZGUpLCBub2RlLm1vZGlmaWVycywgbm9kZS5uYW1lLFxuICAgICAgICAgICAgICAgICBub2RlLnBhcmFtZXRlcnMsIG5vZGUuYm9keSkgYXMgVCAmXG4gICAgICAgICAgdHMuU2V0QWNjZXNzb3JEZWNsYXJhdGlvbjtcbiAgICB9IGVsc2UgaWYgKHRzLmlzQ29uc3RydWN0b3JEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgc3RyaXAgZGVjb3JhdG9ycyBvZiB0aGUgcGFyYW1ldGVycy5cbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtID0+IHRoaXMuX3N0cmlwQW5ndWxhckRlY29yYXRvcnMocGFyYW0pKTtcbiAgICAgIG5vZGUgPVxuICAgICAgICAgIHRzLnVwZGF0ZUNvbnN0cnVjdG9yKG5vZGUsIG5vZGUuZGVjb3JhdG9ycywgbm9kZS5tb2RpZmllcnMsIHBhcmFtZXRlcnMsIG5vZGUuYm9keSkgYXMgVCAmXG4gICAgICAgICAgdHMuQ29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHRyYW5zZm9ybWVyIHdoaWNoIG9wZXJhdGVzIG9uIHRzLlNvdXJjZUZpbGVzIGFuZCBhcHBsaWVzIGNoYW5nZXMgZnJvbSBhbiBgSXZ5Q29tcGlsYXRpb25gLlxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1JdnlTb3VyY2VGaWxlKFxuICAgIGNvbXBpbGF0aW9uOiBUcmFpdENvbXBpbGVyLCBjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQsIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QsXG4gICAgaW1wb3J0UmV3cml0ZXI6IEltcG9ydFJld3JpdGVyLCBmaWxlOiB0cy5Tb3VyY2VGaWxlLCBpc0NvcmU6IGJvb2xlYW4sXG4gICAgaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkOiBib29sZWFuLFxuICAgIGRlZmF1bHRJbXBvcnRSZWNvcmRlcjogRGVmYXVsdEltcG9ydFJlY29yZGVyKTogdHMuU291cmNlRmlsZSB7XG4gIGNvbnN0IGNvbnN0YW50UG9vbCA9IG5ldyBDb25zdGFudFBvb2woKTtcbiAgY29uc3QgaW1wb3J0TWFuYWdlciA9IG5ldyBJbXBvcnRNYW5hZ2VyKGltcG9ydFJld3JpdGVyKTtcblxuICAvLyBSZWN1cnNpdmVseSBzY2FuIHRocm91Z2ggdGhlIEFTVCBhbmQgcGVyZm9ybSBhbnkgdXBkYXRlcyByZXF1ZXN0ZWQgYnkgdGhlIEl2eUNvbXBpbGF0aW9uLlxuICBjb25zdCB2aXNpdG9yID0gbmV3IEl2eVZpc2l0b3IoXG4gICAgICBjb21waWxhdGlvbiwgcmVmbGVjdG9yLCBpbXBvcnRNYW5hZ2VyLCBkZWZhdWx0SW1wb3J0UmVjb3JkZXIsIGlzQ29yZSwgY29uc3RhbnRQb29sKTtcbiAgbGV0IHNmID0gdmlzaXQoZmlsZSwgdmlzaXRvciwgY29udGV4dCk7XG5cbiAgLy8gR2VuZXJhdGUgdGhlIGNvbnN0YW50IHN0YXRlbWVudHMgZmlyc3QsIGFzIHRoZXkgbWF5IGludm9sdmUgYWRkaW5nIGFkZGl0aW9uYWwgaW1wb3J0c1xuICAvLyB0byB0aGUgSW1wb3J0TWFuYWdlci5cbiAgY29uc3QgY29uc3RhbnRzID0gY29uc3RhbnRQb29sLnN0YXRlbWVudHMubWFwKFxuICAgICAgc3RtdCA9PlxuICAgICAgICAgIHRyYW5zbGF0ZVN0YXRlbWVudChzdG10LCBpbXBvcnRNYW5hZ2VyLCBkZWZhdWx0SW1wb3J0UmVjb3JkZXIsIHRzLlNjcmlwdFRhcmdldC5FUzIwMTUpKTtcblxuICAvLyBQcmVzZXJ2ZSBAZmlsZW92ZXJ2aWV3IGNvbW1lbnRzIHJlcXVpcmVkIGJ5IENsb3N1cmUsIHNpbmNlIHRoZSBsb2NhdGlvbiBtaWdodCBjaGFuZ2UgYXMgYVxuICAvLyByZXN1bHQgb2YgYWRkaW5nIGV4dHJhIGltcG9ydHMgYW5kIGNvbnN0YW50IHBvb2wgc3RhdGVtZW50cy5cbiAgY29uc3QgZmlsZU92ZXJ2aWV3TWV0YSA9IGlzQ2xvc3VyZUNvbXBpbGVyRW5hYmxlZCA/IGdldEZpbGVPdmVydmlld0NvbW1lbnQoc2Yuc3RhdGVtZW50cykgOiBudWxsO1xuXG4gIC8vIEFkZCBuZXcgaW1wb3J0cyBmb3IgdGhpcyBmaWxlLlxuICBzZiA9IGFkZEltcG9ydHMoaW1wb3J0TWFuYWdlciwgc2YsIGNvbnN0YW50cyk7XG5cbiAgaWYgKGZpbGVPdmVydmlld01ldGEgIT09IG51bGwpIHtcbiAgICBzZXRGaWxlT3ZlcnZpZXdDb21tZW50KHNmLCBmaWxlT3ZlcnZpZXdNZXRhKTtcbiAgfVxuXG4gIHJldHVybiBzZjtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsZU92ZXJ2aWV3Q29tbWVudChzdGF0ZW1lbnRzOiB0cy5Ob2RlQXJyYXk8dHMuU3RhdGVtZW50Pik6IEZpbGVPdmVydmlld01ldGF8bnVsbCB7XG4gIGlmIChzdGF0ZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBob3N0ID0gc3RhdGVtZW50c1swXTtcbiAgICBsZXQgdHJhaWxpbmcgPSBmYWxzZTtcbiAgICBsZXQgY29tbWVudHMgPSB0cy5nZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMoaG9zdCk7XG4gICAgLy8gSWYgQGZpbGVvdmVydmlldyB0YWcgaXMgbm90IGZvdW5kIGluIHNvdXJjZSBmaWxlLCB0c2lja2xlIHByb2R1Y2VzIGZha2Ugbm9kZSB3aXRoIHRyYWlsaW5nXG4gICAgLy8gY29tbWVudCBhbmQgaW5qZWN0IGl0IGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgZ2VuZXJhdGVkIGZpbGUuIFNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yXG4gICAgLy8gbGVhZGluZyBhcyB3ZWxsIGFzIHRyYWlsaW5nIGNvbW1lbnRzLlxuICAgIGlmICghY29tbWVudHMgfHwgY29tbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0cmFpbGluZyA9IHRydWU7XG4gICAgICBjb21tZW50cyA9IHRzLmdldFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudHMoaG9zdCk7XG4gICAgfVxuICAgIGlmIChjb21tZW50cyAmJiBjb21tZW50cy5sZW5ndGggPiAwICYmIENMT1NVUkVfRklMRV9PVkVSVklFV19SRUdFWFAudGVzdChjb21tZW50c1swXS50ZXh0KSkge1xuICAgICAgcmV0dXJuIHtjb21tZW50cywgaG9zdCwgdHJhaWxpbmd9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2V0RmlsZU92ZXJ2aWV3Q29tbWVudChzZjogdHMuU291cmNlRmlsZSwgZmlsZW92ZXJ2aWV3OiBGaWxlT3ZlcnZpZXdNZXRhKTogdm9pZCB7XG4gIGNvbnN0IHtjb21tZW50cywgaG9zdCwgdHJhaWxpbmd9ID0gZmlsZW92ZXJ2aWV3O1xuICAvLyBJZiBob3N0IHN0YXRlbWVudCBpcyBubyBsb25nZXIgdGhlIGZpcnN0IG9uZSwgaXQgbWVhbnMgdGhhdCBleHRyYSBzdGF0ZW1lbnRzIHdlcmUgYWRkZWQgYXQgdGhlXG4gIC8vIHZlcnkgYmVnaW5uaW5nLCBzbyB3ZSBuZWVkIHRvIHJlbG9jYXRlIEBmaWxlb3ZlcnZpZXcgY29tbWVudCBhbmQgY2xlYW51cCB0aGUgb3JpZ2luYWwgc3RhdGVtZW50XG4gIC8vIHRoYXQgaG9zdGVkIGl0LlxuICBpZiAoc2Yuc3RhdGVtZW50cy5sZW5ndGggPiAwICYmIGhvc3QgIT09IHNmLnN0YXRlbWVudHNbMF0pIHtcbiAgICBpZiAodHJhaWxpbmcpIHtcbiAgICAgIHRzLnNldFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudHMoaG9zdCwgdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHMuc2V0U3ludGhldGljTGVhZGluZ0NvbW1lbnRzKGhvc3QsIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHRzLnNldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cyhzZi5zdGF0ZW1lbnRzWzBdLCBjb21tZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF5YmVGaWx0ZXJEZWNvcmF0b3IoXG4gICAgZGVjb3JhdG9yczogdHMuTm9kZUFycmF5PHRzLkRlY29yYXRvcj58IHVuZGVmaW5lZCxcbiAgICB0b1JlbW92ZTogdHMuRGVjb3JhdG9yW10pOiB0cy5Ob2RlQXJyYXk8dHMuRGVjb3JhdG9yPnx1bmRlZmluZWQge1xuICBpZiAoZGVjb3JhdG9ycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBmaWx0ZXJlZCA9IGRlY29yYXRvcnMuZmlsdGVyKFxuICAgICAgZGVjID0+IHRvUmVtb3ZlLmZpbmQoZGVjVG9SZW1vdmUgPT4gdHMuZ2V0T3JpZ2luYWxOb2RlKGRlYykgPT09IGRlY1RvUmVtb3ZlKSA9PT0gdW5kZWZpbmVkKTtcbiAgaWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHRzLmNyZWF0ZU5vZGVBcnJheShmaWx0ZXJlZCk7XG59XG5cbmZ1bmN0aW9uIGlzRnJvbUFuZ3VsYXJDb3JlKGRlY29yYXRvcjogRGVjb3JhdG9yKTogYm9vbGVhbiB7XG4gIHJldHVybiBkZWNvcmF0b3IuaW1wb3J0ICE9PSBudWxsICYmIGRlY29yYXRvci5pbXBvcnQuZnJvbSA9PT0gJ0Bhbmd1bGFyL2NvcmUnO1xufVxuIl19
|