@angular/compiler-cli 12.2.7 → 13.0.0-next.10
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/bundles/index.js +20414 -0
- package/bundles/index.js.map +6 -0
- package/bundles/linker/babel/index.js +2384 -0
- package/bundles/linker/babel/index.js.map +6 -0
- package/bundles/linker/index.js +1849 -0
- package/bundles/linker/index.js.map +6 -0
- package/bundles/ngcc/index.js +16043 -0
- package/bundles/ngcc/index.js.map +6 -0
- package/bundles/ngcc/main-ngcc.js +16131 -0
- package/bundles/ngcc/main-ngcc.js.map +6 -0
- package/bundles/ngcc/src/execution/cluster/ngcc_cluster_worker.js +13855 -0
- package/bundles/ngcc/src/execution/cluster/ngcc_cluster_worker.js.map +6 -0
- package/bundles/ngcc/src/locking/lock_file_with_child_process/ngcc_lock_unlocker.js +334 -0
- package/bundles/ngcc/src/locking/lock_file_with_child_process/ngcc_lock_unlocker.js.map +6 -0
- package/bundles/private/bazel.js +97 -0
- package/bundles/private/bazel.js.map +6 -0
- package/bundles/private/localize.js +911 -0
- package/bundles/private/localize.js.map +6 -0
- package/bundles/private/migrations.js +2181 -0
- package/bundles/private/migrations.js.map +6 -0
- package/bundles/private/tooling.js +942 -0
- package/bundles/private/tooling.js.map +6 -0
- package/bundles/src/bin/ng_xi18n.js +20466 -0
- package/bundles/src/bin/ng_xi18n.js.map +6 -0
- package/bundles/src/bin/ngc.js +20468 -0
- package/bundles/src/bin/ngc.js.map +6 -0
- package/bundles_metadata.json +1 -0
- package/import_meta_url.d.ts +14 -0
- package/index.d.ts +4 -1
- package/linker/babel/src/ast/babel_ast_factory.d.ts +1 -8
- package/linker/babel/src/ast/babel_ast_host.d.ts +1 -1
- package/linker/babel/src/babel_core.d.ts +36 -0
- package/linker/babel/src/babel_declaration_scope.d.ts +1 -1
- package/linker/babel/src/babel_plugin.d.ts +1 -8
- package/linker/babel/src/es2015_linker_plugin.d.ts +2 -2
- package/linker/src/ast/typescript/typescript_ast_host.d.ts +1 -1
- package/linker/src/file_linker/emit_scopes/emit_scope.d.ts +1 -2
- package/linker/src/file_linker/emit_scopes/iife_emit_scope.d.ts +1 -1
- package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_component_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_linker.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.d.ts +2 -2
- package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/util.d.ts +1 -2
- package/ngcc/index.d.ts +15 -0
- package/ngcc/src/analysis/decoration_analyzer.d.ts +1 -1
- package/ngcc/src/analysis/module_with_providers_analyzer.d.ts +1 -1
- package/ngcc/src/analysis/ngcc_references_registry.d.ts +1 -1
- package/ngcc/src/analysis/ngcc_trait_compiler.d.ts +1 -1
- package/ngcc/src/analysis/private_declarations_analyzer.d.ts +1 -1
- package/ngcc/src/analysis/switch_marker_analyzer.d.ts +1 -1
- package/ngcc/src/analysis/types.d.ts +1 -1
- package/ngcc/src/dependencies/esm_dependency_host.d.ts +1 -1
- package/ngcc/src/execution/cluster/api.d.ts +5 -1
- package/ngcc/src/execution/cluster/master.d.ts +5 -3
- package/{src/ngtsc/logging/testing/index.d.ts → ngcc/src/execution/cluster/ngcc_cluster_worker.d.ts} +2 -2
- package/ngcc/src/host/commonjs_host.d.ts +1 -1
- package/ngcc/src/host/commonjs_umd_utils.d.ts +1 -1
- package/ngcc/src/host/delegating_host.d.ts +1 -1
- package/ngcc/src/host/esm2015_host.d.ts +1 -1
- package/ngcc/src/host/esm5_host.d.ts +2 -1
- package/ngcc/src/host/ngcc_host.d.ts +1 -1
- package/ngcc/src/host/umd_host.d.ts +1 -1
- package/ngcc/src/host/utils.d.ts +1 -1
- package/ngcc/src/locking/lock_file.d.ts +1 -1
- package/ngcc/src/locking/lock_file_with_child_process/index.d.ts +2 -0
- package/ngcc/src/locking/lock_file_with_child_process/{unlocker.d.ts → ngcc_lock_unlocker.d.ts} +1 -1
- package/ngcc/src/migrations/migration.d.ts +1 -1
- package/ngcc/src/migrations/missing_injectable_migration.d.ts +1 -1
- package/ngcc/src/migrations/undecorated_child_migration.d.ts +1 -1
- package/ngcc/src/migrations/undecorated_parent_migration.d.ts +1 -1
- package/ngcc/src/migrations/utils.d.ts +1 -1
- package/ngcc/src/packages/build_marker.d.ts +1 -1
- package/ngcc/src/packages/bundle_program.d.ts +1 -1
- package/ngcc/src/packages/configuration.d.ts +41 -4
- package/ngcc/src/packages/entry_point_bundle.d.ts +1 -1
- package/ngcc/src/packages/ngcc_compiler_host.d.ts +1 -1
- package/ngcc/src/packages/source_file_cache.d.ts +1 -1
- package/ngcc/src/packages/transformer.d.ts +1 -1
- package/ngcc/src/rendering/commonjs_rendering_formatter.d.ts +1 -1
- package/ngcc/src/rendering/dts_renderer.d.ts +1 -1
- package/ngcc/src/rendering/esm5_rendering_formatter.d.ts +1 -1
- package/ngcc/src/rendering/esm_rendering_formatter.d.ts +1 -1
- package/ngcc/src/rendering/renderer.d.ts +1 -1
- package/ngcc/src/rendering/rendering_formatter.d.ts +1 -1
- package/ngcc/src/rendering/source_maps.d.ts +3 -3
- package/ngcc/src/rendering/umd_rendering_formatter.d.ts +1 -1
- package/ngcc/src/rendering/utils.d.ts +1 -1
- package/ngcc/src/utils.d.ts +1 -1
- package/package.json +52 -11
- package/private/bazel.d.ts +13 -0
- package/private/localize.d.ts +15 -0
- package/private/migrations.d.ts +16 -0
- package/{src → private}/tooling.d.ts +2 -2
- package/src/bin/ng_xi18n.d.ts +10 -0
- package/{ngcc/main-ivy-ngcc.d.ts → src/bin/ngc.d.ts} +2 -1
- package/src/diagnostics/translate_diagnostics.d.ts +1 -1
- package/src/extract_i18n.d.ts +0 -5
- package/src/main.d.ts +6 -6
- package/src/metadata/bundle_index_host.d.ts +1 -1
- package/src/metadata/bundler.d.ts +1 -1
- package/src/metadata/collector.d.ts +1 -1
- package/src/metadata/evaluator.d.ts +1 -1
- package/src/metadata/symbols.d.ts +1 -1
- package/src/ngtsc/annotations/src/component.d.ts +14 -1
- package/src/ngtsc/annotations/src/diagnostics.d.ts +1 -1
- package/src/ngtsc/annotations/src/directive.d.ts +1 -1
- package/src/ngtsc/annotations/src/metadata.d.ts +2 -2
- package/src/ngtsc/annotations/src/ng_module.d.ts +2 -4
- package/src/ngtsc/annotations/src/pipe.d.ts +1 -1
- package/src/ngtsc/annotations/src/util.d.ts +2 -4
- package/src/ngtsc/core/api/src/adapter.d.ts +1 -1
- package/src/ngtsc/core/api/src/interfaces.d.ts +1 -12
- package/src/ngtsc/core/api/src/options.d.ts +1 -1
- package/src/ngtsc/core/src/compiler.d.ts +2 -8
- package/src/ngtsc/core/src/host.d.ts +1 -1
- package/src/ngtsc/cycles/src/analyzer.d.ts +1 -1
- package/src/ngtsc/cycles/src/imports.d.ts +1 -1
- package/src/ngtsc/diagnostics/src/error.d.ts +1 -1
- package/src/ngtsc/entry_point/src/generator.d.ts +1 -1
- package/src/ngtsc/entry_point/src/private_export_checker.d.ts +1 -1
- package/src/ngtsc/file_system/src/compiler_host.d.ts +1 -1
- package/src/ngtsc/file_system/src/logical.d.ts +1 -1
- package/src/ngtsc/file_system/src/util.d.ts +1 -1
- package/src/ngtsc/imports/src/alias.d.ts +1 -1
- package/src/ngtsc/imports/src/default.d.ts +1 -1
- package/src/ngtsc/imports/src/emitter.d.ts +1 -1
- package/src/ngtsc/imports/src/find_export.d.ts +1 -1
- package/src/ngtsc/imports/src/references.d.ts +1 -1
- package/src/ngtsc/imports/src/resolver.d.ts +1 -1
- package/src/ngtsc/incremental/api.d.ts +1 -1
- package/src/ngtsc/incremental/src/dependency_tracking.d.ts +1 -1
- package/src/ngtsc/incremental/src/incremental.d.ts +1 -1
- package/src/ngtsc/incremental/src/state.d.ts +1 -1
- package/src/ngtsc/incremental/src/strategy.d.ts +1 -1
- package/src/ngtsc/indexer/src/api.d.ts +5 -2
- package/src/ngtsc/metadata/src/api.d.ts +1 -1
- package/src/ngtsc/metadata/src/dts.d.ts +1 -1
- package/src/ngtsc/metadata/src/resource_registry.d.ts +1 -1
- package/src/ngtsc/metadata/src/util.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/index.d.ts +1 -0
- package/src/ngtsc/partial_evaluator/src/builtin.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/diagnostics.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/interface.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/result.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/ts_helpers.d.ts +1 -1
- package/src/ngtsc/program.d.ts +1 -1
- package/src/ngtsc/program_driver/src/api.d.ts +1 -1
- package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +1 -1
- package/src/ngtsc/reflection/src/host.d.ts +1 -1
- package/src/ngtsc/reflection/src/type_to_value.d.ts +1 -1
- package/src/ngtsc/reflection/src/typescript.d.ts +1 -1
- package/src/ngtsc/reflection/src/util.d.ts +1 -1
- package/src/ngtsc/resource/src/loader.d.ts +1 -1
- package/src/ngtsc/scope/src/local.d.ts +1 -1
- package/src/ngtsc/scope/src/typecheck.d.ts +1 -1
- package/src/ngtsc/shims/api.d.ts +1 -1
- package/src/ngtsc/shims/src/adapter.d.ts +1 -1
- package/src/ngtsc/shims/src/expando.d.ts +1 -1
- package/src/ngtsc/shims/src/factory_generator.d.ts +1 -1
- package/src/ngtsc/shims/src/reference_tagger.d.ts +1 -1
- package/src/ngtsc/shims/src/summary_generator.d.ts +1 -1
- package/src/ngtsc/switch/src/switch.d.ts +1 -1
- package/src/ngtsc/transform/src/alias.d.ts +1 -1
- package/src/ngtsc/transform/src/api.d.ts +1 -1
- package/src/ngtsc/transform/src/compilation.d.ts +1 -1
- package/src/ngtsc/transform/src/declaration.d.ts +1 -1
- package/src/ngtsc/transform/src/trait.d.ts +1 -1
- package/src/ngtsc/transform/src/transform.d.ts +1 -1
- package/src/ngtsc/transform/src/utils.d.ts +1 -1
- package/src/ngtsc/translator/src/import_manager.d.ts +1 -1
- package/src/ngtsc/translator/src/translator.d.ts +0 -1
- package/src/ngtsc/translator/src/type_translator.d.ts +1 -2
- package/src/ngtsc/translator/src/typescript_ast_factory.d.ts +1 -1
- package/src/ngtsc/translator/src/typescript_translator.d.ts +1 -1
- package/src/ngtsc/tsc_plugin.d.ts +1 -1
- package/src/ngtsc/typecheck/api/api.d.ts +1 -1
- package/src/ngtsc/typecheck/api/checker.d.ts +8 -5
- package/src/ngtsc/typecheck/api/context.d.ts +1 -1
- package/src/ngtsc/typecheck/api/scope.d.ts +1 -1
- package/src/ngtsc/typecheck/api/symbols.d.ts +1 -1
- package/src/ngtsc/typecheck/diagnostics/src/diagnostic.d.ts +1 -1
- package/src/ngtsc/typecheck/extended/api/api.d.ts +1 -1
- package/src/ngtsc/typecheck/extended/api/extended_template_checker.d.ts +1 -1
- package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.d.ts +1 -1
- package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.d.ts +1 -1
- package/src/ngtsc/typecheck/extended/src/extended_template_checker.d.ts +1 -1
- package/src/ngtsc/typecheck/src/checker.d.ts +5 -5
- package/src/ngtsc/typecheck/src/comments.d.ts +1 -1
- package/src/ngtsc/typecheck/src/completion.d.ts +4 -6
- package/src/ngtsc/typecheck/src/context.d.ts +1 -1
- package/src/ngtsc/typecheck/src/diagnostics.d.ts +1 -1
- package/src/ngtsc/typecheck/src/environment.d.ts +1 -1
- package/src/ngtsc/typecheck/src/expression.d.ts +1 -1
- package/src/ngtsc/typecheck/src/oob.d.ts +3 -4
- package/src/ngtsc/typecheck/src/shim.d.ts +1 -1
- package/src/ngtsc/typecheck/src/source.d.ts +1 -1
- package/src/ngtsc/typecheck/src/tcb_util.d.ts +1 -1
- package/src/ngtsc/typecheck/src/template_symbol_builder.d.ts +1 -1
- package/src/ngtsc/typecheck/src/ts_util.d.ts +1 -1
- package/src/ngtsc/typecheck/src/type_check_block.d.ts +1 -1
- package/src/ngtsc/typecheck/src/type_check_file.d.ts +1 -1
- package/src/ngtsc/typecheck/src/type_constructor.d.ts +1 -1
- package/src/ngtsc/typecheck/src/type_emitter.d.ts +1 -1
- package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +1 -1
- package/src/ngtsc/util/src/typescript.d.ts +1 -1
- package/src/ngtsc/util/src/visitor.d.ts +1 -1
- package/src/perform_compile.d.ts +1 -1
- package/src/perform_watch.d.ts +1 -1
- package/src/transformers/api.d.ts +2 -5
- package/src/transformers/compiler_host.d.ts +1 -1
- package/src/transformers/{downlevel_decorators_transform.d.ts → downlevel_decorators_transform/downlevel_decorators_transform.d.ts} +3 -3
- package/src/{ngtsc/routing → transformers/downlevel_decorators_transform}/index.d.ts +2 -3
- package/src/transformers/{patch_alias_reference_resolution.d.ts → downlevel_decorators_transform/patch_alias_reference_resolution.d.ts} +2 -2
- package/src/transformers/i18n.d.ts +1 -1
- package/src/transformers/inline_resources.d.ts +1 -1
- package/src/transformers/lower_expressions.d.ts +1 -1
- package/src/transformers/metadata_cache.d.ts +1 -1
- package/src/transformers/node_emitter.d.ts +2 -3
- package/src/transformers/node_emitter_transform.d.ts +1 -1
- package/src/transformers/program.d.ts +1 -1
- package/src/transformers/r3_metadata_transform.d.ts +1 -1
- package/src/transformers/r3_transform.d.ts +1 -1
- package/src/transformers/util.d.ts +1 -1
- package/index.js +0 -40
- package/linker/babel/index.js +0 -25
- package/linker/babel/src/ast/babel_ast_factory.js +0 -153
- package/linker/babel/src/ast/babel_ast_host.js +0 -181
- package/linker/babel/src/babel_declaration_scope.js +0 -67
- package/linker/babel/src/babel_plugin.js +0 -38
- package/linker/babel/src/es2015_linker_plugin.js +0 -183
- package/linker/babel/src/linker_plugin_options.js +0 -13
- package/linker/index.js +0 -27
- package/linker/src/ast/ast_host.js +0 -20
- package/linker/src/ast/ast_value.js +0 -299
- package/linker/src/ast/typescript/typescript_ast_host.js +0 -183
- package/linker/src/ast/utils.js +0 -31
- package/linker/src/fatal_linker_error.js +0 -49
- package/linker/src/file_linker/declaration_scope.js +0 -20
- package/linker/src/file_linker/emit_scopes/emit_scope.js +0 -57
- package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +0 -51
- package/linker/src/file_linker/file_linker.js +0 -97
- package/linker/src/file_linker/get_source_file.js +0 -42
- package/linker/src/file_linker/linker_environment.js +0 -38
- package/linker/src/file_linker/linker_options.js +0 -29
- package/linker/src/file_linker/needs_linking.js +0 -41
- package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.js +0 -47
- package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +0 -210
- package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.js +0 -154
- package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.js +0 -70
- package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.js +0 -74
- package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.js +0 -56
- package/linker/src/file_linker/partial_linkers/partial_linker.js +0 -13
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +0 -194
- package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.js +0 -126
- package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.js +0 -59
- package/linker/src/file_linker/partial_linkers/util.js +0 -95
- package/linker/src/file_linker/translator.js +0 -40
- package/linker/src/linker_import_generator.js +0 -43
- package/ngcc/index.js +0 -33
- package/ngcc/main-ivy-ngcc.js +0 -12
- package/ngcc/main-ngcc.js +0 -54
- package/ngcc/src/analysis/decoration_analyzer.js +0 -268
- package/ngcc/src/analysis/migration_host.js +0 -108
- package/ngcc/src/analysis/module_with_providers_analyzer.js +0 -197
- package/ngcc/src/analysis/ngcc_references_registry.js +0 -65
- package/ngcc/src/analysis/ngcc_trait_compiler.js +0 -117
- package/ngcc/src/analysis/private_declarations_analyzer.js +0 -63
- package/ngcc/src/analysis/switch_marker_analyzer.js +0 -50
- package/ngcc/src/analysis/types.js +0 -15
- package/ngcc/src/analysis/util.js +0 -36
- package/ngcc/src/command_line_options.js +0 -156
- package/ngcc/src/constants.js +0 -23
- package/ngcc/src/dependencies/commonjs_dependency_host.js +0 -129
- package/ngcc/src/dependencies/dependency_host.js +0 -143
- package/ngcc/src/dependencies/dependency_resolver.js +0 -180
- package/ngcc/src/dependencies/dts_dependency_host.js +0 -35
- package/ngcc/src/dependencies/esm_dependency_host.js +0 -307
- package/ngcc/src/dependencies/module_resolver.js +0 -269
- package/ngcc/src/dependencies/umd_dependency_host.js +0 -53
- package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.js +0 -70
- package/ngcc/src/entry_point_finder/entry_point_collector.js +0 -157
- package/ngcc/src/entry_point_finder/interface.js +0 -13
- package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +0 -132
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +0 -268
- package/ngcc/src/entry_point_finder/tracing_entry_point_finder.js +0 -78
- package/ngcc/src/entry_point_finder/utils.js +0 -234
- package/ngcc/src/execution/analyze_entry_points.js +0 -197
- package/ngcc/src/execution/api.js +0 -13
- package/ngcc/src/execution/cluster/api.js +0 -20
- package/ngcc/src/execution/cluster/executor.js +0 -52
- package/ngcc/src/execution/cluster/master.js +0 -311
- package/ngcc/src/execution/cluster/package_json_updater.js +0 -79
- package/ngcc/src/execution/cluster/utils.js +0 -77
- package/ngcc/src/execution/cluster/worker.js +0 -123
- package/ngcc/src/execution/create_compile_function.js +0 -76
- package/ngcc/src/execution/single_process_executor.js +0 -91
- package/ngcc/src/execution/tasks/api.js +0 -35
- package/ngcc/src/execution/tasks/completion.js +0 -79
- package/ngcc/src/execution/tasks/queues/base_task_queue.js +0 -120
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +0 -87
- package/ngcc/src/execution/tasks/queues/serial_task_queue.js +0 -49
- package/ngcc/src/execution/tasks/utils.js +0 -167
- package/ngcc/src/host/commonjs_host.js +0 -261
- package/ngcc/src/host/commonjs_umd_utils.js +0 -210
- package/ngcc/src/host/delegating_host.js +0 -156
- package/ngcc/src/host/esm2015_host.js +0 -2441
- package/ngcc/src/host/esm5_host.js +0 -744
- package/ngcc/src/host/ngcc_host.js +0 -29
- package/ngcc/src/host/umd_host.js +0 -539
- package/ngcc/src/host/utils.js +0 -26
- package/ngcc/src/locking/async_locker.js +0 -121
- package/ngcc/src/locking/lock_file.js +0 -18
- package/ngcc/src/locking/lock_file_with_child_process/index.js +0 -93
- package/ngcc/src/locking/lock_file_with_child_process/unlocker.js +0 -46
- package/ngcc/src/locking/lock_file_with_child_process/util.js +0 -43
- package/ngcc/src/locking/sync_locker.js +0 -67
- package/ngcc/src/main.js +0 -163
- package/ngcc/src/migrations/migration.js +0 -13
- package/ngcc/src/migrations/missing_injectable_migration.js +0 -227
- package/ngcc/src/migrations/undecorated_child_migration.js +0 -90
- package/ngcc/src/migrations/undecorated_parent_migration.js +0 -103
- package/ngcc/src/migrations/utils.js +0 -137
- package/ngcc/src/ngcc_options.js +0 -135
- package/ngcc/src/packages/build_marker.js +0 -124
- package/ngcc/src/packages/bundle_program.js +0 -80
- package/ngcc/src/packages/configuration.js +0 -277
- package/ngcc/src/packages/entry_point.js +0 -267
- package/ngcc/src/packages/entry_point_bundle.js +0 -96
- package/ngcc/src/packages/entry_point_manifest.js +0 -207
- package/ngcc/src/packages/ngcc_compiler_host.js +0 -101
- package/ngcc/src/packages/patch_ts_expando_initializer.js +0 -174
- package/ngcc/src/packages/source_file_cache.js +0 -207
- package/ngcc/src/packages/transformer.js +0 -157
- package/ngcc/src/path_mappings.js +0 -27
- package/ngcc/src/rendering/commonjs_rendering_formatter.js +0 -106
- package/ngcc/src/rendering/dts_renderer.js +0 -170
- package/ngcc/src/rendering/esm5_rendering_formatter.js +0 -70
- package/ngcc/src/rendering/esm_rendering_formatter.js +0 -291
- package/ngcc/src/rendering/ngcc_import_rewriter.js +0 -49
- package/ngcc/src/rendering/renderer.js +0 -204
- package/ngcc/src/rendering/rendering_formatter.js +0 -15
- package/ngcc/src/rendering/source_maps.js +0 -68
- package/ngcc/src/rendering/umd_rendering_formatter.js +0 -326
- package/ngcc/src/rendering/utils.js +0 -35
- package/ngcc/src/utils.js +0 -182
- package/ngcc/src/writing/cleaning/cleaning_strategies.js +0 -80
- package/ngcc/src/writing/cleaning/package_cleaner.js +0 -126
- package/ngcc/src/writing/cleaning/utils.js +0 -30
- package/ngcc/src/writing/file_writer.js +0 -13
- package/ngcc/src/writing/in_place_file_writer.js +0 -90
- package/ngcc/src/writing/new_entry_point_file_writer.js +0 -214
- package/ngcc/src/writing/package_json_updater.js +0 -182
- package/src/diagnostics/translate_diagnostics.js +0 -61
- package/src/diagnostics/typescript_version.js +0 -96
- package/src/extract_i18n.js +0 -62
- package/src/language_services.js +0 -34
- package/src/main.js +0 -210
- package/src/metadata/bundle_index_host.js +0 -133
- package/src/metadata/bundler.js +0 -624
- package/src/metadata/collector.js +0 -799
- package/src/metadata/evaluator.js +0 -677
- package/src/metadata/index.js +0 -24
- package/src/metadata/index_writer.js +0 -80
- package/src/metadata/schema.js +0 -136
- package/src/metadata/symbols.js +0 -149
- package/src/ngtsc/annotations/index.js +0 -35
- package/src/ngtsc/annotations/src/api.js +0 -20
- package/src/ngtsc/annotations/src/component.js +0 -1286
- package/src/ngtsc/annotations/src/diagnostics.js +0 -174
- package/src/ngtsc/annotations/src/directive.js +0 -724
- package/src/ngtsc/annotations/src/factory.js +0 -32
- package/src/ngtsc/annotations/src/injectable.js +0 -277
- package/src/ngtsc/annotations/src/metadata.js +0 -159
- package/src/ngtsc/annotations/src/ng_module.js +0 -677
- package/src/ngtsc/annotations/src/pipe.js +0 -171
- package/src/ngtsc/annotations/src/references_registry.js +0 -38
- package/src/ngtsc/annotations/src/util.js +0 -566
- package/src/ngtsc/core/api/index.js +0 -25
- package/src/ngtsc/core/api/src/adapter.js +0 -20
- package/src/ngtsc/core/api/src/interfaces.js +0 -20
- package/src/ngtsc/core/api/src/options.js +0 -20
- package/src/ngtsc/core/api/src/public_options.js +0 -20
- package/src/ngtsc/core/index.js +0 -25
- package/src/ngtsc/core/src/compiler.js +0 -1142
- package/src/ngtsc/core/src/host.js +0 -273
- package/src/ngtsc/cycles/index.js +0 -26
- package/src/ngtsc/cycles/src/analyzer.js +0 -163
- package/src/ngtsc/cycles/src/imports.js +0 -175
- package/src/ngtsc/diagnostics/index.js +0 -33
- package/src/ngtsc/diagnostics/src/error.js +0 -69
- package/src/ngtsc/diagnostics/src/error_code.js +0 -235
- package/src/ngtsc/diagnostics/src/util.js +0 -35
- package/src/ngtsc/entry_point/index.js +0 -29
- package/src/ngtsc/entry_point/src/generator.js +0 -45
- package/src/ngtsc/entry_point/src/logic.js +0 -61
- package/src/ngtsc/entry_point/src/private_export_checker.js +0 -137
- package/src/ngtsc/entry_point/src/reference_graph.js +0 -91
- package/src/ngtsc/file_system/index.js +0 -45
- package/src/ngtsc/file_system/src/compiler_host.js +0 -80
- package/src/ngtsc/file_system/src/helpers.js +0 -135
- package/src/ngtsc/file_system/src/invalid_file_system.js +0 -120
- package/src/ngtsc/file_system/src/logical.js +0 -100
- package/src/ngtsc/file_system/src/node_js_file_system.js +0 -179
- package/src/ngtsc/file_system/src/types.js +0 -20
- package/src/ngtsc/file_system/src/util.js +0 -38
- package/src/ngtsc/file_system/testing/index.d.ts +0 -13
- package/src/ngtsc/file_system/testing/index.js +0 -32
- package/src/ngtsc/file_system/testing/src/mock_file_system.d.ts +0 -72
- package/src/ngtsc/file_system/testing/src/mock_file_system.js +0 -333
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.d.ts +0 -16
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +0 -85
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.d.ts +0 -13
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +0 -68
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.d.ts +0 -13
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +0 -68
- package/src/ngtsc/file_system/testing/src/test_helper.d.ts +0 -17
- package/src/ngtsc/file_system/testing/src/test_helper.js +0 -142
- package/src/ngtsc/imports/index.js +0 -43
- package/src/ngtsc/imports/src/alias.js +0 -158
- package/src/ngtsc/imports/src/core.js +0 -98
- package/src/ngtsc/imports/src/default.js +0 -153
- package/src/ngtsc/imports/src/emitter.js +0 -317
- package/src/ngtsc/imports/src/find_export.js +0 -82
- package/src/ngtsc/imports/src/reexport.js +0 -20
- package/src/ngtsc/imports/src/references.js +0 -171
- package/src/ngtsc/imports/src/resolver.js +0 -39
- package/src/ngtsc/incremental/api.js +0 -20
- package/src/ngtsc/incremental/index.js +0 -29
- package/src/ngtsc/incremental/semantic_graph/index.js +0 -34
- package/src/ngtsc/incremental/semantic_graph/src/api.js +0 -51
- package/src/ngtsc/incremental/semantic_graph/src/graph.js +0 -302
- package/src/ngtsc/incremental/semantic_graph/src/type_parameters.js +0 -55
- package/src/ngtsc/incremental/semantic_graph/src/util.js +0 -111
- package/src/ngtsc/incremental/src/dependency_tracking.js +0 -165
- package/src/ngtsc/incremental/src/incremental.js +0 -393
- package/src/ngtsc/incremental/src/noop.js +0 -26
- package/src/ngtsc/incremental/src/state.js +0 -30
- package/src/ngtsc/incremental/src/strategy.js +0 -99
- package/src/ngtsc/indexer/index.js +0 -27
- package/src/ngtsc/indexer/src/api.js +0 -45
- package/src/ngtsc/indexer/src/context.js +0 -40
- package/src/ngtsc/indexer/src/template.js +0 -328
- package/src/ngtsc/indexer/src/transform.js +0 -66
- package/src/ngtsc/logging/index.js +0 -25
- package/src/ngtsc/logging/src/console_logger.js +0 -75
- package/src/ngtsc/logging/src/logger.js +0 -28
- package/src/ngtsc/logging/testing/index.js +0 -23
- package/src/ngtsc/logging/testing/src/mock_logger.d.ts +0 -20
- package/src/ngtsc/logging/testing/src/mock_logger.js +0 -64
- package/src/ngtsc/metadata/index.js +0 -39
- package/src/ngtsc/metadata/src/api.js +0 -26
- package/src/ngtsc/metadata/src/dts.js +0 -168
- package/src/ngtsc/metadata/src/inheritance.js +0 -122
- package/src/ngtsc/metadata/src/property_mapping.js +0 -244
- package/src/ngtsc/metadata/src/registry.js +0 -133
- package/src/ngtsc/metadata/src/resource_registry.js +0 -109
- package/src/ngtsc/metadata/src/util.js +0 -275
- package/src/ngtsc/partial_evaluator/index.js +0 -31
- package/src/ngtsc/partial_evaluator/src/builtin.js +0 -125
- package/src/ngtsc/partial_evaluator/src/diagnostics.js +0 -193
- package/src/ngtsc/partial_evaluator/src/dynamic.js +0 -109
- package/src/ngtsc/partial_evaluator/src/interface.js +0 -42
- package/src/ngtsc/partial_evaluator/src/interpreter.js +0 -780
- package/src/ngtsc/partial_evaluator/src/known_declaration.js +0 -57
- package/src/ngtsc/partial_evaluator/src/result.js +0 -72
- package/src/ngtsc/partial_evaluator/src/ts_helpers.js +0 -121
- package/src/ngtsc/perf/index.js +0 -28
- package/src/ngtsc/perf/src/api.js +0 -291
- package/src/ngtsc/perf/src/clock.js +0 -30
- package/src/ngtsc/perf/src/noop.js +0 -37
- package/src/ngtsc/perf/src/recorder.js +0 -143
- package/src/ngtsc/program.js +0 -360
- package/src/ngtsc/program_driver/index.js +0 -25
- package/src/ngtsc/program_driver/src/api.js +0 -36
- package/src/ngtsc/program_driver/src/ts_create_program_driver.js +0 -200
- package/src/ngtsc/reflection/index.js +0 -36
- package/src/ngtsc/reflection/src/host.js +0 -88
- package/src/ngtsc/reflection/src/type_to_value.js +0 -259
- package/src/ngtsc/reflection/src/typescript.js +0 -640
- package/src/ngtsc/reflection/src/util.js +0 -37
- package/src/ngtsc/resource/index.js +0 -23
- package/src/ngtsc/resource/src/loader.js +0 -285
- package/src/ngtsc/routing/index.js +0 -26
- package/src/ngtsc/routing/src/analyzer.d.ts +0 -37
- package/src/ngtsc/routing/src/analyzer.js +0 -82
- package/src/ngtsc/routing/src/lazy.d.ts +0 -19
- package/src/ngtsc/routing/src/lazy.js +0 -239
- package/src/ngtsc/routing/src/route.d.ts +0 -23
- package/src/ngtsc/routing/src/route.js +0 -77
- package/src/ngtsc/scope/index.js +0 -29
- package/src/ngtsc/scope/src/api.js +0 -20
- package/src/ngtsc/scope/src/component_scope.js +0 -69
- package/src/ngtsc/scope/src/dependency.js +0 -201
- package/src/ngtsc/scope/src/local.js +0 -665
- package/src/ngtsc/scope/src/typecheck.js +0 -120
- package/src/ngtsc/shims/api.js +0 -13
- package/src/ngtsc/shims/index.js +0 -39
- package/src/ngtsc/shims/src/adapter.js +0 -266
- package/src/ngtsc/shims/src/expando.js +0 -147
- package/src/ngtsc/shims/src/factory_generator.js +0 -292
- package/src/ngtsc/shims/src/reference_tagger.js +0 -94
- package/src/ngtsc/shims/src/summary_generator.js +0 -101
- package/src/ngtsc/shims/src/util.js +0 -41
- package/src/ngtsc/sourcemaps/index.js +0 -27
- package/src/ngtsc/sourcemaps/src/content_origin.js +0 -48
- package/src/ngtsc/sourcemaps/src/raw_source_map.js +0 -13
- package/src/ngtsc/sourcemaps/src/segment_marker.js +0 -55
- package/src/ngtsc/sourcemaps/src/source_file.js +0 -519
- package/src/ngtsc/sourcemaps/src/source_file_loader.js +0 -234
- package/src/ngtsc/switch/index.js +0 -23
- package/src/ngtsc/switch/src/switch.js +0 -141
- package/src/ngtsc/transform/index.js +0 -36
- package/src/ngtsc/transform/src/alias.js +0 -46
- package/src/ngtsc/transform/src/api.js +0 -76
- package/src/ngtsc/transform/src/compilation.js +0 -862
- package/src/ngtsc/transform/src/declaration.js +0 -234
- package/src/ngtsc/transform/src/trait.js +0 -111
- package/src/ngtsc/transform/src/transform.js +0 -333
- package/src/ngtsc/transform/src/utils.js +0 -73
- package/src/ngtsc/translator/index.js +0 -37
- package/src/ngtsc/translator/src/api/ast_factory.js +0 -20
- package/src/ngtsc/translator/src/api/import_generator.js +0 -20
- package/src/ngtsc/translator/src/context.js +0 -47
- package/src/ngtsc/translator/src/import_manager.js +0 -77
- package/src/ngtsc/translator/src/translator.js +0 -353
- package/src/ngtsc/translator/src/type_translator.js +0 -223
- package/src/ngtsc/translator/src/typescript_ast_factory.js +0 -251
- package/src/ngtsc/translator/src/typescript_translator.js +0 -34
- package/src/ngtsc/tsc_plugin.js +0 -129
- package/src/ngtsc/typecheck/api/api.js +0 -20
- package/src/ngtsc/typecheck/api/checker.js +0 -44
- package/src/ngtsc/typecheck/api/completion.js +0 -29
- package/src/ngtsc/typecheck/api/context.js +0 -20
- package/src/ngtsc/typecheck/api/index.js +0 -27
- package/src/ngtsc/typecheck/api/scope.js +0 -20
- package/src/ngtsc/typecheck/api/symbols.js +0 -35
- package/src/ngtsc/typecheck/diagnostics/index.js +0 -23
- package/src/ngtsc/typecheck/diagnostics/src/diagnostic.js +0 -141
- package/src/ngtsc/typecheck/diagnostics/src/id.js +0 -37
- package/src/ngtsc/typecheck/extended/api/api.js +0 -124
- package/src/ngtsc/typecheck/extended/api/extended_template_checker.js +0 -20
- package/src/ngtsc/typecheck/extended/api/index.js +0 -23
- package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.js +0 -52
- package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.js +0 -64
- package/src/ngtsc/typecheck/extended/index.js +0 -23
- package/src/ngtsc/typecheck/extended/src/extended_template_checker.js +0 -55
- package/src/ngtsc/typecheck/index.js +0 -29
- package/src/ngtsc/typecheck/src/checker.js +0 -764
- package/src/ngtsc/typecheck/src/comments.js +0 -181
- package/src/ngtsc/typecheck/src/completion.js +0 -232
- package/src/ngtsc/typecheck/src/context.js +0 -424
- package/src/ngtsc/typecheck/src/diagnostics.js +0 -114
- package/src/ngtsc/typecheck/src/dom.js +0 -87
- package/src/ngtsc/typecheck/src/environment.js +0 -160
- package/src/ngtsc/typecheck/src/expression.js +0 -441
- package/src/ngtsc/typecheck/src/line_mappings.js +0 -77
- package/src/ngtsc/typecheck/src/oob.js +0 -181
- package/src/ngtsc/typecheck/src/shim.js +0 -52
- package/src/ngtsc/typecheck/src/source.js +0 -91
- package/src/ngtsc/typecheck/src/tcb_util.js +0 -165
- package/src/ngtsc/typecheck/src/template_semantics.js +0 -52
- package/src/ngtsc/typecheck/src/template_symbol_builder.js +0 -546
- package/src/ngtsc/typecheck/src/ts_util.js +0 -202
- package/src/ngtsc/typecheck/src/type_check_block.js +0 -2210
- package/src/ngtsc/typecheck/src/type_check_file.js +0 -115
- package/src/ngtsc/typecheck/src/type_constructor.js +0 -255
- package/src/ngtsc/typecheck/src/type_emitter.js +0 -164
- package/src/ngtsc/typecheck/src/type_parameter_emitter.js +0 -115
- package/src/ngtsc/util/src/path.js +0 -33
- package/src/ngtsc/util/src/typescript.js +0 -176
- package/src/ngtsc/util/src/visitor.js +0 -119
- package/src/ngtsc/xi18n/index.js +0 -22
- package/src/ngtsc/xi18n/src/context.js +0 -20
- package/src/perform_compile.js +0 -322
- package/src/perform_watch.js +0 -263
- package/src/tooling.js +0 -47
- package/src/transformers/api.js +0 -42
- package/src/transformers/compiler_host.js +0 -623
- package/src/transformers/downlevel_decorators_transform.js +0 -612
- package/src/transformers/entry_points.js +0 -25
- package/src/transformers/i18n.js +0 -76
- package/src/transformers/inline_resources.js +0 -287
- package/src/transformers/lower_expressions.js +0 -365
- package/src/transformers/metadata_cache.js +0 -96
- package/src/transformers/metadata_reader.js +0 -120
- package/src/transformers/node_emitter.js +0 -643
- package/src/transformers/node_emitter_transform.js +0 -88
- package/src/transformers/patch_alias_reference_resolution.js +0 -129
- package/src/transformers/program.js +0 -1000
- package/src/transformers/r3_metadata_transform.js +0 -73
- package/src/transformers/r3_transform.js +0 -44
- package/src/transformers/util.js +0 -122
- package/src/typescript_support.js +0 -74
- package/src/version.js +0 -28
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
(function (factory) {
|
|
2
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
-
var v = factory(require, exports);
|
|
4
|
-
if (v !== undefined) module.exports = v;
|
|
5
|
-
}
|
|
6
|
-
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define("@angular/compiler-cli/src/ngtsc/typecheck/src/type_check_file", ["require", "exports", "tslib", "typescript", "@angular/compiler-cli/src/ngtsc/file_system", "@angular/compiler-cli/src/ngtsc/imports", "@angular/compiler-cli/src/ngtsc/translator", "@angular/compiler-cli/src/ngtsc/typecheck/src/environment", "@angular/compiler-cli/src/ngtsc/typecheck/src/type_check_block"], factory);
|
|
8
|
-
}
|
|
9
|
-
})(function (require, exports) {
|
|
10
|
-
"use strict";
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.typeCheckFilePath = exports.TypeCheckFile = void 0;
|
|
13
|
-
var tslib_1 = require("tslib");
|
|
14
|
-
/**
|
|
15
|
-
* @license
|
|
16
|
-
* Copyright Google LLC All Rights Reserved.
|
|
17
|
-
*
|
|
18
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
19
|
-
* found in the LICENSE file at https://angular.io/license
|
|
20
|
-
*/
|
|
21
|
-
var ts = require("typescript");
|
|
22
|
-
var file_system_1 = require("@angular/compiler-cli/src/ngtsc/file_system");
|
|
23
|
-
var imports_1 = require("@angular/compiler-cli/src/ngtsc/imports");
|
|
24
|
-
var translator_1 = require("@angular/compiler-cli/src/ngtsc/translator");
|
|
25
|
-
var environment_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/src/environment");
|
|
26
|
-
var type_check_block_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/src/type_check_block");
|
|
27
|
-
/**
|
|
28
|
-
* An `Environment` representing the single type-checking file into which most (if not all) Type
|
|
29
|
-
* Check Blocks (TCBs) will be generated.
|
|
30
|
-
*
|
|
31
|
-
* The `TypeCheckFile` hosts multiple TCBs and allows the sharing of declarations (e.g. type
|
|
32
|
-
* constructors) between them. Rather than return such declarations via `getPreludeStatements()`, it
|
|
33
|
-
* hoists them to the top of the generated `ts.SourceFile`.
|
|
34
|
-
*/
|
|
35
|
-
var TypeCheckFile = /** @class */ (function (_super) {
|
|
36
|
-
tslib_1.__extends(TypeCheckFile, _super);
|
|
37
|
-
function TypeCheckFile(fileName, config, refEmitter, reflector, compilerHost) {
|
|
38
|
-
var _this = _super.call(this, config, new translator_1.ImportManager(new imports_1.NoopImportRewriter(), 'i'), refEmitter, reflector, ts.createSourceFile(compilerHost.getCanonicalFileName(fileName), '', ts.ScriptTarget.Latest, true)) || this;
|
|
39
|
-
_this.fileName = fileName;
|
|
40
|
-
_this.nextTcbId = 1;
|
|
41
|
-
_this.tcbStatements = [];
|
|
42
|
-
return _this;
|
|
43
|
-
}
|
|
44
|
-
TypeCheckFile.prototype.addTypeCheckBlock = function (ref, meta, domSchemaChecker, oobRecorder, genericContextBehavior) {
|
|
45
|
-
var fnId = ts.createIdentifier("_tcb" + this.nextTcbId++);
|
|
46
|
-
var fn = type_check_block_1.generateTypeCheckBlock(this, ref, fnId, meta, domSchemaChecker, oobRecorder, genericContextBehavior);
|
|
47
|
-
this.tcbStatements.push(fn);
|
|
48
|
-
};
|
|
49
|
-
TypeCheckFile.prototype.render = function (removeComments) {
|
|
50
|
-
var e_1, _a, e_2, _b, e_3, _c;
|
|
51
|
-
var source = this.importManager.getAllImports(this.contextFile.fileName)
|
|
52
|
-
.map(function (i) { return "import * as " + i.qualifier.text + " from '" + i.specifier + "';"; })
|
|
53
|
-
.join('\n') +
|
|
54
|
-
'\n\n';
|
|
55
|
-
var printer = ts.createPrinter({ removeComments: removeComments });
|
|
56
|
-
source += '\n';
|
|
57
|
-
try {
|
|
58
|
-
for (var _d = tslib_1.__values(this.pipeInstStatements), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
59
|
-
var stmt = _e.value;
|
|
60
|
-
source += printer.printNode(ts.EmitHint.Unspecified, stmt, this.contextFile) + '\n';
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
64
|
-
finally {
|
|
65
|
-
try {
|
|
66
|
-
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
67
|
-
}
|
|
68
|
-
finally { if (e_1) throw e_1.error; }
|
|
69
|
-
}
|
|
70
|
-
try {
|
|
71
|
-
for (var _f = tslib_1.__values(this.typeCtorStatements), _g = _f.next(); !_g.done; _g = _f.next()) {
|
|
72
|
-
var stmt = _g.value;
|
|
73
|
-
source += printer.printNode(ts.EmitHint.Unspecified, stmt, this.contextFile) + '\n';
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
77
|
-
finally {
|
|
78
|
-
try {
|
|
79
|
-
if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
|
|
80
|
-
}
|
|
81
|
-
finally { if (e_2) throw e_2.error; }
|
|
82
|
-
}
|
|
83
|
-
source += '\n';
|
|
84
|
-
try {
|
|
85
|
-
for (var _h = tslib_1.__values(this.tcbStatements), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
86
|
-
var stmt = _j.value;
|
|
87
|
-
source += printer.printNode(ts.EmitHint.Unspecified, stmt, this.contextFile) + '\n';
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
91
|
-
finally {
|
|
92
|
-
try {
|
|
93
|
-
if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
|
|
94
|
-
}
|
|
95
|
-
finally { if (e_3) throw e_3.error; }
|
|
96
|
-
}
|
|
97
|
-
// Ensure the template type-checking file is an ES module. Otherwise, it's interpreted as some
|
|
98
|
-
// kind of global namespace in TS, which forces a full re-typecheck of the user's program that
|
|
99
|
-
// is somehow more expensive than the initial parse.
|
|
100
|
-
source += '\nexport const IS_A_MODULE = true;\n';
|
|
101
|
-
return source;
|
|
102
|
-
};
|
|
103
|
-
TypeCheckFile.prototype.getPreludeStatements = function () {
|
|
104
|
-
return [];
|
|
105
|
-
};
|
|
106
|
-
return TypeCheckFile;
|
|
107
|
-
}(environment_1.Environment));
|
|
108
|
-
exports.TypeCheckFile = TypeCheckFile;
|
|
109
|
-
function typeCheckFilePath(rootDirs) {
|
|
110
|
-
var shortest = rootDirs.concat([]).sort(function (a, b) { return a.length - b.length; })[0];
|
|
111
|
-
return file_system_1.join(shortest, '__ng_typecheck__.ts');
|
|
112
|
-
}
|
|
113
|
-
exports.typeCheckFilePath = typeCheckFilePath;
|
|
114
|
-
});
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV9jaGVja19maWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90eXBlY2hlY2svc3JjL3R5cGVfY2hlY2tfZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0lBQUE7Ozs7OztPQU1HO0lBQ0gsK0JBQWlDO0lBRWpDLDJFQUF1RDtJQUN2RCxtRUFBOEU7SUFFOUUseUVBQStDO0lBSS9DLHlGQUEwQztJQUUxQyxtR0FBcUY7SUFJckY7Ozs7Ozs7T0FPRztJQUNIO1FBQW1DLHlDQUFXO1FBSTVDLHVCQUNhLFFBQXdCLEVBQUUsTUFBMEIsRUFBRSxVQUE0QixFQUMzRixTQUF5QixFQUFFLFlBQTJEO1lBRjFGLFlBR0Usa0JBQ0ksTUFBTSxFQUFFLElBQUksMEJBQWEsQ0FBQyxJQUFJLDRCQUFrQixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFDL0UsRUFBRSxDQUFDLGdCQUFnQixDQUNmLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FDeEY7WUFOWSxjQUFRLEdBQVIsUUFBUSxDQUFnQjtZQUo3QixlQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsbUJBQWEsR0FBbUIsRUFBRSxDQUFDOztRQVMzQyxDQUFDO1FBRUQseUNBQWlCLEdBQWpCLFVBQ0ksR0FBcUQsRUFBRSxJQUE0QixFQUNuRixnQkFBa0MsRUFBRSxXQUF3QyxFQUM1RSxzQkFBaUQ7WUFDbkQsSUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQU8sSUFBSSxDQUFDLFNBQVMsRUFBSSxDQUFDLENBQUM7WUFDNUQsSUFBTSxFQUFFLEdBQUcseUNBQXNCLENBQzdCLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsOEJBQU0sR0FBTixVQUFPLGNBQXVCOztZQUM1QixJQUFJLE1BQU0sR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztpQkFDdEQsR0FBRyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsaUJBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLGVBQVUsQ0FBQyxDQUFDLFNBQVMsT0FBSSxFQUF4RCxDQUF3RCxDQUFDO2lCQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNoQyxNQUFNLENBQUM7WUFDWCxJQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUMsY0FBYyxnQkFBQSxFQUFDLENBQUMsQ0FBQztZQUNuRCxNQUFNLElBQUksSUFBSSxDQUFDOztnQkFDZixLQUFtQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFBLGdCQUFBLDRCQUFFO29CQUF2QyxJQUFNLElBQUksV0FBQTtvQkFDYixNQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDckY7Ozs7Ozs7Ozs7Z0JBQ0QsS0FBbUIsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQSxnQkFBQSw0QkFBRTtvQkFBdkMsSUFBTSxJQUFJLFdBQUE7b0JBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQ3JGOzs7Ozs7Ozs7WUFDRCxNQUFNLElBQUksSUFBSSxDQUFDOztnQkFDZixLQUFtQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQSxnQkFBQSw0QkFBRTtvQkFBbEMsSUFBTSxJQUFJLFdBQUE7b0JBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQ3JGOzs7Ozs7Ozs7WUFFRCw4RkFBOEY7WUFDOUYsOEZBQThGO1lBQzlGLG9EQUFvRDtZQUNwRCxNQUFNLElBQUksc0NBQXNDLENBQUM7WUFFakQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVRLDRDQUFvQixHQUE3QjtZQUNFLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNILG9CQUFDO0lBQUQsQ0FBQyxBQXBERCxDQUFtQyx5QkFBVyxHQW9EN0M7SUFwRFksc0NBQWE7SUFzRDFCLFNBQWdCLGlCQUFpQixDQUFDLFFBQTBCO1FBQzFELElBQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBbkIsQ0FBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sa0JBQUksQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBSEQsOENBR0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0Fic29sdXRlRnNQYXRoLCBqb2lufSBmcm9tICcuLi8uLi9maWxlX3N5c3RlbSc7XG5pbXBvcnQge05vb3BJbXBvcnRSZXdyaXRlciwgUmVmZXJlbmNlLCBSZWZlcmVuY2VFbWl0dGVyfSBmcm9tICcuLi8uLi9pbXBvcnRzJztcbmltcG9ydCB7Q2xhc3NEZWNsYXJhdGlvbiwgUmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uLy4uL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtJbXBvcnRNYW5hZ2VyfSBmcm9tICcuLi8uLi90cmFuc2xhdG9yJztcbmltcG9ydCB7VHlwZUNoZWNrQmxvY2tNZXRhZGF0YSwgVHlwZUNoZWNraW5nQ29uZmlnfSBmcm9tICcuLi9hcGknO1xuXG5pbXBvcnQge0RvbVNjaGVtYUNoZWNrZXJ9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7RW52aXJvbm1lbnR9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtPdXRPZkJhbmREaWFnbm9zdGljUmVjb3JkZXJ9IGZyb20gJy4vb29iJztcbmltcG9ydCB7Z2VuZXJhdGVUeXBlQ2hlY2tCbG9jaywgVGNiR2VuZXJpY0NvbnRleHRCZWhhdmlvcn0gZnJvbSAnLi90eXBlX2NoZWNrX2Jsb2NrJztcblxuXG5cbi8qKlxuICogQW4gYEVudmlyb25tZW50YCByZXByZXNlbnRpbmcgdGhlIHNpbmdsZSB0eXBlLWNoZWNraW5nIGZpbGUgaW50byB3aGljaCBtb3N0IChpZiBub3QgYWxsKSBUeXBlXG4gKiBDaGVjayBCbG9ja3MgKFRDQnMpIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICpcbiAqIFRoZSBgVHlwZUNoZWNrRmlsZWAgaG9zdHMgbXVsdGlwbGUgVENCcyBhbmQgYWxsb3dzIHRoZSBzaGFyaW5nIG9mIGRlY2xhcmF0aW9ucyAoZS5nLiB0eXBlXG4gKiBjb25zdHJ1Y3RvcnMpIGJldHdlZW4gdGhlbS4gUmF0aGVyIHRoYW4gcmV0dXJuIHN1Y2ggZGVjbGFyYXRpb25zIHZpYSBgZ2V0UHJlbHVkZVN0YXRlbWVudHMoKWAsIGl0XG4gKiBob2lzdHMgdGhlbSB0byB0aGUgdG9wIG9mIHRoZSBnZW5lcmF0ZWQgYHRzLlNvdXJjZUZpbGVgLlxuICovXG5leHBvcnQgY2xhc3MgVHlwZUNoZWNrRmlsZSBleHRlbmRzIEVudmlyb25tZW50IHtcbiAgcHJpdmF0ZSBuZXh0VGNiSWQgPSAxO1xuICBwcml2YXRlIHRjYlN0YXRlbWVudHM6IHRzLlN0YXRlbWVudFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICByZWFkb25seSBmaWxlTmFtZTogQWJzb2x1dGVGc1BhdGgsIGNvbmZpZzogVHlwZUNoZWNraW5nQ29uZmlnLCByZWZFbWl0dGVyOiBSZWZlcmVuY2VFbWl0dGVyLFxuICAgICAgcmVmbGVjdG9yOiBSZWZsZWN0aW9uSG9zdCwgY29tcGlsZXJIb3N0OiBQaWNrPHRzLkNvbXBpbGVySG9zdCwgJ2dldENhbm9uaWNhbEZpbGVOYW1lJz4pIHtcbiAgICBzdXBlcihcbiAgICAgICAgY29uZmlnLCBuZXcgSW1wb3J0TWFuYWdlcihuZXcgTm9vcEltcG9ydFJld3JpdGVyKCksICdpJyksIHJlZkVtaXR0ZXIsIHJlZmxlY3RvcixcbiAgICAgICAgdHMuY3JlYXRlU291cmNlRmlsZShcbiAgICAgICAgICAgIGNvbXBpbGVySG9zdC5nZXRDYW5vbmljYWxGaWxlTmFtZShmaWxlTmFtZSksICcnLCB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LCB0cnVlKSk7XG4gIH1cblxuICBhZGRUeXBlQ2hlY2tCbG9jayhcbiAgICAgIHJlZjogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb248dHMuQ2xhc3NEZWNsYXJhdGlvbj4+LCBtZXRhOiBUeXBlQ2hlY2tCbG9ja01ldGFkYXRhLFxuICAgICAgZG9tU2NoZW1hQ2hlY2tlcjogRG9tU2NoZW1hQ2hlY2tlciwgb29iUmVjb3JkZXI6IE91dE9mQmFuZERpYWdub3N0aWNSZWNvcmRlcixcbiAgICAgIGdlbmVyaWNDb250ZXh0QmVoYXZpb3I6IFRjYkdlbmVyaWNDb250ZXh0QmVoYXZpb3IpOiB2b2lkIHtcbiAgICBjb25zdCBmbklkID0gdHMuY3JlYXRlSWRlbnRpZmllcihgX3RjYiR7dGhpcy5uZXh0VGNiSWQrK31gKTtcbiAgICBjb25zdCBmbiA9IGdlbmVyYXRlVHlwZUNoZWNrQmxvY2soXG4gICAgICAgIHRoaXMsIHJlZiwgZm5JZCwgbWV0YSwgZG9tU2NoZW1hQ2hlY2tlciwgb29iUmVjb3JkZXIsIGdlbmVyaWNDb250ZXh0QmVoYXZpb3IpO1xuICAgIHRoaXMudGNiU3RhdGVtZW50cy5wdXNoKGZuKTtcbiAgfVxuXG4gIHJlbmRlcihyZW1vdmVDb21tZW50czogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgbGV0IHNvdXJjZTogc3RyaW5nID0gdGhpcy5pbXBvcnRNYW5hZ2VyLmdldEFsbEltcG9ydHModGhpcy5jb250ZXh0RmlsZS5maWxlTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChpID0+IGBpbXBvcnQgKiBhcyAke2kucXVhbGlmaWVyLnRleHR9IGZyb20gJyR7aS5zcGVjaWZpZXJ9JztgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignXFxuJykgK1xuICAgICAgICAnXFxuXFxuJztcbiAgICBjb25zdCBwcmludGVyID0gdHMuY3JlYXRlUHJpbnRlcih7cmVtb3ZlQ29tbWVudHN9KTtcbiAgICBzb3VyY2UgKz0gJ1xcbic7XG4gICAgZm9yIChjb25zdCBzdG10IG9mIHRoaXMucGlwZUluc3RTdGF0ZW1lbnRzKSB7XG4gICAgICBzb3VyY2UgKz0gcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIHN0bXQsIHRoaXMuY29udGV4dEZpbGUpICsgJ1xcbic7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RtdCBvZiB0aGlzLnR5cGVDdG9yU3RhdGVtZW50cykge1xuICAgICAgc291cmNlICs9IHByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBzdG10LCB0aGlzLmNvbnRleHRGaWxlKSArICdcXG4nO1xuICAgIH1cbiAgICBzb3VyY2UgKz0gJ1xcbic7XG4gICAgZm9yIChjb25zdCBzdG10IG9mIHRoaXMudGNiU3RhdGVtZW50cykge1xuICAgICAgc291cmNlICs9IHByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBzdG10LCB0aGlzLmNvbnRleHRGaWxlKSArICdcXG4nO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0aGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBmaWxlIGlzIGFuIEVTIG1vZHVsZS4gT3RoZXJ3aXNlLCBpdCdzIGludGVycHJldGVkIGFzIHNvbWVcbiAgICAvLyBraW5kIG9mIGdsb2JhbCBuYW1lc3BhY2UgaW4gVFMsIHdoaWNoIGZvcmNlcyBhIGZ1bGwgcmUtdHlwZWNoZWNrIG9mIHRoZSB1c2VyJ3MgcHJvZ3JhbSB0aGF0XG4gICAgLy8gaXMgc29tZWhvdyBtb3JlIGV4cGVuc2l2ZSB0aGFuIHRoZSBpbml0aWFsIHBhcnNlLlxuICAgIHNvdXJjZSArPSAnXFxuZXhwb3J0IGNvbnN0IElTX0FfTU9EVUxFID0gdHJ1ZTtcXG4nO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFByZWx1ZGVTdGF0ZW1lbnRzKCk6IHRzLlN0YXRlbWVudFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVDaGVja0ZpbGVQYXRoKHJvb3REaXJzOiBBYnNvbHV0ZUZzUGF0aFtdKTogQWJzb2x1dGVGc1BhdGgge1xuICBjb25zdCBzaG9ydGVzdCA9IHJvb3REaXJzLmNvbmNhdChbXSkuc29ydCgoYSwgYikgPT4gYS5sZW5ndGggLSBiLmxlbmd0aClbMF07XG4gIHJldHVybiBqb2luKHNob3J0ZXN0LCAnX19uZ190eXBlY2hlY2tfXy50cycpO1xufVxuIl19
|
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
(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/typecheck/src/type_constructor", ["require", "exports", "tslib", "typescript", "@angular/compiler-cli/src/ngtsc/typecheck/src/tcb_util", "@angular/compiler-cli/src/ngtsc/typecheck/src/ts_util"], factory);
|
|
15
|
-
}
|
|
16
|
-
})(function (require, exports) {
|
|
17
|
-
"use strict";
|
|
18
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.requiresInlineTypeCtor = exports.generateInlineTypeCtor = exports.generateTypeCtorDeclarationFn = void 0;
|
|
20
|
-
var tslib_1 = require("tslib");
|
|
21
|
-
var ts = require("typescript");
|
|
22
|
-
var tcb_util_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/src/tcb_util");
|
|
23
|
-
var ts_util_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/src/ts_util");
|
|
24
|
-
function generateTypeCtorDeclarationFn(node, meta, nodeTypeRef, typeParams, reflector) {
|
|
25
|
-
if (requiresInlineTypeCtor(node, reflector)) {
|
|
26
|
-
throw new Error(node.name.text + " requires an inline type constructor");
|
|
27
|
-
}
|
|
28
|
-
var rawTypeArgs = typeParams !== undefined ? generateGenericArgs(typeParams) : undefined;
|
|
29
|
-
var rawType = ts.createTypeReferenceNode(nodeTypeRef, rawTypeArgs);
|
|
30
|
-
var initParam = constructTypeCtorParameter(node, meta, rawType);
|
|
31
|
-
var typeParameters = typeParametersWithDefaultTypes(typeParams);
|
|
32
|
-
if (meta.body) {
|
|
33
|
-
var fnType = ts.createFunctionTypeNode(
|
|
34
|
-
/* typeParameters */ typeParameters,
|
|
35
|
-
/* parameters */ [initParam],
|
|
36
|
-
/* type */ rawType);
|
|
37
|
-
var decl = ts.createVariableDeclaration(
|
|
38
|
-
/* name */ meta.fnName,
|
|
39
|
-
/* type */ fnType,
|
|
40
|
-
/* body */ ts.createNonNullExpression(ts.createNull()));
|
|
41
|
-
var declList = ts.createVariableDeclarationList([decl], ts.NodeFlags.Const);
|
|
42
|
-
return ts.createVariableStatement(
|
|
43
|
-
/* modifiers */ undefined,
|
|
44
|
-
/* declarationList */ declList);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
return ts.createFunctionDeclaration(
|
|
48
|
-
/* decorators */ undefined,
|
|
49
|
-
/* modifiers */ [ts.createModifier(ts.SyntaxKind.DeclareKeyword)],
|
|
50
|
-
/* asteriskToken */ undefined,
|
|
51
|
-
/* name */ meta.fnName,
|
|
52
|
-
/* typeParameters */ typeParameters,
|
|
53
|
-
/* parameters */ [initParam],
|
|
54
|
-
/* type */ rawType,
|
|
55
|
-
/* body */ undefined);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
exports.generateTypeCtorDeclarationFn = generateTypeCtorDeclarationFn;
|
|
59
|
-
/**
|
|
60
|
-
* Generate an inline type constructor for the given class and metadata.
|
|
61
|
-
*
|
|
62
|
-
* An inline type constructor is a specially shaped TypeScript static method, intended to be placed
|
|
63
|
-
* within a directive class itself, that permits type inference of any generic type parameters of
|
|
64
|
-
* the class from the types of expressions bound to inputs or outputs, and the types of elements
|
|
65
|
-
* that match queries performed by the directive. It also catches any errors in the types of these
|
|
66
|
-
* expressions. This method is never called at runtime, but is used in type-check blocks to
|
|
67
|
-
* construct directive types.
|
|
68
|
-
*
|
|
69
|
-
* An inline type constructor for NgFor looks like:
|
|
70
|
-
*
|
|
71
|
-
* static ngTypeCtor<T>(init: Pick<NgForOf<T>, 'ngForOf'|'ngForTrackBy'|'ngForTemplate'>):
|
|
72
|
-
* NgForOf<T>;
|
|
73
|
-
*
|
|
74
|
-
* A typical constructor would be:
|
|
75
|
-
*
|
|
76
|
-
* NgForOf.ngTypeCtor(init: {
|
|
77
|
-
* ngForOf: ['foo', 'bar'],
|
|
78
|
-
* ngForTrackBy: null as any,
|
|
79
|
-
* ngForTemplate: null as any,
|
|
80
|
-
* }); // Infers a type of NgForOf<string>.
|
|
81
|
-
*
|
|
82
|
-
* Any inputs declared on the type for which no property binding is present are assigned a value of
|
|
83
|
-
* type `any`, to avoid producing any type errors for unset inputs.
|
|
84
|
-
*
|
|
85
|
-
* Inline type constructors are used when the type being created has bounded generic types which
|
|
86
|
-
* make writing a declared type constructor (via `generateTypeCtorDeclarationFn`) difficult or
|
|
87
|
-
* impossible.
|
|
88
|
-
*
|
|
89
|
-
* @param node the `ClassDeclaration<ts.ClassDeclaration>` for which a type constructor will be
|
|
90
|
-
* generated.
|
|
91
|
-
* @param meta additional metadata required to generate the type constructor.
|
|
92
|
-
* @returns a `ts.MethodDeclaration` for the type constructor.
|
|
93
|
-
*/
|
|
94
|
-
function generateInlineTypeCtor(node, meta) {
|
|
95
|
-
// Build rawType, a `ts.TypeNode` of the class with its generic parameters passed through from
|
|
96
|
-
// the definition without any type bounds. For example, if the class is
|
|
97
|
-
// `FooDirective<T extends Bar>`, its rawType would be `FooDirective<T>`.
|
|
98
|
-
var rawTypeArgs = node.typeParameters !== undefined ? generateGenericArgs(node.typeParameters) : undefined;
|
|
99
|
-
var rawType = ts.createTypeReferenceNode(node.name, rawTypeArgs);
|
|
100
|
-
var initParam = constructTypeCtorParameter(node, meta, rawType);
|
|
101
|
-
// If this constructor is being generated into a .ts file, then it needs a fake body. The body
|
|
102
|
-
// is set to a return of `null!`. If the type constructor is being generated into a .d.ts file,
|
|
103
|
-
// it needs no body.
|
|
104
|
-
var body = undefined;
|
|
105
|
-
if (meta.body) {
|
|
106
|
-
body = ts.createBlock([
|
|
107
|
-
ts.createReturn(ts.createNonNullExpression(ts.createNull())),
|
|
108
|
-
]);
|
|
109
|
-
}
|
|
110
|
-
// Create the type constructor method declaration.
|
|
111
|
-
return ts.createMethod(
|
|
112
|
-
/* decorators */ undefined,
|
|
113
|
-
/* modifiers */ [ts.createModifier(ts.SyntaxKind.StaticKeyword)],
|
|
114
|
-
/* asteriskToken */ undefined,
|
|
115
|
-
/* name */ meta.fnName,
|
|
116
|
-
/* questionToken */ undefined,
|
|
117
|
-
/* typeParameters */ typeParametersWithDefaultTypes(node.typeParameters),
|
|
118
|
-
/* parameters */ [initParam],
|
|
119
|
-
/* type */ rawType,
|
|
120
|
-
/* body */ body);
|
|
121
|
-
}
|
|
122
|
-
exports.generateInlineTypeCtor = generateInlineTypeCtor;
|
|
123
|
-
function constructTypeCtorParameter(node, meta, rawType) {
|
|
124
|
-
var e_1, _a;
|
|
125
|
-
// initType is the type of 'init', the single argument to the type constructor method.
|
|
126
|
-
// If the Directive has any inputs, its initType will be:
|
|
127
|
-
//
|
|
128
|
-
// Pick<rawType, 'inputA'|'inputB'>
|
|
129
|
-
//
|
|
130
|
-
// Pick here is used to select only those fields from which the generic type parameters of the
|
|
131
|
-
// directive will be inferred.
|
|
132
|
-
//
|
|
133
|
-
// In the special case there are no inputs, initType is set to {}.
|
|
134
|
-
var initType = null;
|
|
135
|
-
var keys = meta.fields.inputs;
|
|
136
|
-
var plainKeys = [];
|
|
137
|
-
var coercedKeys = [];
|
|
138
|
-
try {
|
|
139
|
-
for (var keys_1 = tslib_1.__values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
|
|
140
|
-
var key = keys_1_1.value;
|
|
141
|
-
if (!meta.coercedInputFields.has(key)) {
|
|
142
|
-
plainKeys.push(ts.createLiteralTypeNode(ts.createStringLiteral(key)));
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
coercedKeys.push(ts.createPropertySignature(
|
|
146
|
-
/* modifiers */ undefined,
|
|
147
|
-
/* name */ key,
|
|
148
|
-
/* questionToken */ undefined,
|
|
149
|
-
/* type */ ts_util_1.tsCreateTypeQueryForCoercedInput(rawType.typeName, key),
|
|
150
|
-
/* initializer */ undefined));
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
155
|
-
finally {
|
|
156
|
-
try {
|
|
157
|
-
if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
|
|
158
|
-
}
|
|
159
|
-
finally { if (e_1) throw e_1.error; }
|
|
160
|
-
}
|
|
161
|
-
if (plainKeys.length > 0) {
|
|
162
|
-
// Construct a union of all the field names.
|
|
163
|
-
var keyTypeUnion = ts.createUnionTypeNode(plainKeys);
|
|
164
|
-
// Construct the Pick<rawType, keyTypeUnion>.
|
|
165
|
-
initType = ts.createTypeReferenceNode('Pick', [rawType, keyTypeUnion]);
|
|
166
|
-
}
|
|
167
|
-
if (coercedKeys.length > 0) {
|
|
168
|
-
var coercedLiteral = ts.createTypeLiteralNode(coercedKeys);
|
|
169
|
-
initType = initType !== null ? ts.createIntersectionTypeNode([initType, coercedLiteral]) :
|
|
170
|
-
coercedLiteral;
|
|
171
|
-
}
|
|
172
|
-
if (initType === null) {
|
|
173
|
-
// Special case - no inputs, outputs, or other fields which could influence the result type.
|
|
174
|
-
initType = ts.createTypeLiteralNode([]);
|
|
175
|
-
}
|
|
176
|
-
// Create the 'init' parameter itself.
|
|
177
|
-
return ts.createParameter(
|
|
178
|
-
/* decorators */ undefined,
|
|
179
|
-
/* modifiers */ undefined,
|
|
180
|
-
/* dotDotDotToken */ undefined,
|
|
181
|
-
/* name */ 'init',
|
|
182
|
-
/* questionToken */ undefined,
|
|
183
|
-
/* type */ initType,
|
|
184
|
-
/* initializer */ undefined);
|
|
185
|
-
}
|
|
186
|
-
function generateGenericArgs(params) {
|
|
187
|
-
return params.map(function (param) { return ts.createTypeReferenceNode(param.name, undefined); });
|
|
188
|
-
}
|
|
189
|
-
function requiresInlineTypeCtor(node, host) {
|
|
190
|
-
// The class requires an inline type constructor if it has generic type bounds that can not be
|
|
191
|
-
// emitted into a different context.
|
|
192
|
-
return !tcb_util_1.checkIfGenericTypeBoundsAreContextFree(node, host);
|
|
193
|
-
}
|
|
194
|
-
exports.requiresInlineTypeCtor = requiresInlineTypeCtor;
|
|
195
|
-
/**
|
|
196
|
-
* Add a default `= any` to type parameters that don't have a default value already.
|
|
197
|
-
*
|
|
198
|
-
* TypeScript uses the default type of a type parameter whenever inference of that parameter fails.
|
|
199
|
-
* This can happen when inferring a complex type from 'any'. For example, if `NgFor`'s inference is
|
|
200
|
-
* done with the TCB code:
|
|
201
|
-
*
|
|
202
|
-
* ```
|
|
203
|
-
* class NgFor<T> {
|
|
204
|
-
* ngForOf: T[];
|
|
205
|
-
* }
|
|
206
|
-
*
|
|
207
|
-
* declare function ctor<T>(o: Pick<NgFor<T>, 'ngForOf'|'ngForTrackBy'|'ngForTemplate'>): NgFor<T>;
|
|
208
|
-
* ```
|
|
209
|
-
*
|
|
210
|
-
* An invocation looks like:
|
|
211
|
-
*
|
|
212
|
-
* ```
|
|
213
|
-
* var _t1 = ctor({ngForOf: [1, 2], ngForTrackBy: null as any, ngForTemplate: null as any});
|
|
214
|
-
* ```
|
|
215
|
-
*
|
|
216
|
-
* This correctly infers the type `NgFor<number>` for `_t1`, since `T` is inferred from the
|
|
217
|
-
* assignment of type `number[]` to `ngForOf`'s type `T[]`. However, if `any` is passed instead:
|
|
218
|
-
*
|
|
219
|
-
* ```
|
|
220
|
-
* var _t2 = ctor({ngForOf: [1, 2] as any, ngForTrackBy: null as any, ngForTemplate: null as any});
|
|
221
|
-
* ```
|
|
222
|
-
*
|
|
223
|
-
* then inference for `T` fails (it cannot be inferred from `T[] = any`). In this case, `T` takes
|
|
224
|
-
* the type `{}`, and so `_t2` is inferred as `NgFor<{}>`. This is obviously wrong.
|
|
225
|
-
*
|
|
226
|
-
* Adding a default type to the generic declaration in the constructor solves this problem, as the
|
|
227
|
-
* default type will be used in the event that inference fails.
|
|
228
|
-
*
|
|
229
|
-
* ```
|
|
230
|
-
* declare function ctor<T = any>(o: Pick<NgFor<T>, 'ngForOf'>): NgFor<T>;
|
|
231
|
-
*
|
|
232
|
-
* var _t3 = ctor({ngForOf: [1, 2] as any});
|
|
233
|
-
* ```
|
|
234
|
-
*
|
|
235
|
-
* This correctly infers `T` as `any`, and therefore `_t3` as `NgFor<any>`.
|
|
236
|
-
*/
|
|
237
|
-
function typeParametersWithDefaultTypes(params) {
|
|
238
|
-
if (params === undefined) {
|
|
239
|
-
return undefined;
|
|
240
|
-
}
|
|
241
|
-
return params.map(function (param) {
|
|
242
|
-
if (param.default === undefined) {
|
|
243
|
-
return ts.updateTypeParameterDeclaration(
|
|
244
|
-
/* node */ param,
|
|
245
|
-
/* name */ param.name,
|
|
246
|
-
/* constraint */ param.constraint,
|
|
247
|
-
/* defaultType */ ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword));
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
250
|
-
return param;
|
|
251
|
-
}
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV9jb25zdHJ1Y3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL3NyYy90eXBlX2NvbnN0cnVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCwrQkFBaUM7SUFJakMsbUZBQWtFO0lBRWxFLGlGQUEyRDtJQUUzRCxTQUFnQiw2QkFBNkIsQ0FDekMsSUFBMkMsRUFBRSxJQUFzQixFQUFFLFdBQTBCLEVBQy9GLFVBQW1ELEVBQUUsU0FBeUI7UUFDaEYsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUkseUNBQXNDLENBQUMsQ0FBQztTQUMxRTtRQUVELElBQU0sV0FBVyxHQUFHLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDM0YsSUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVyRSxJQUFNLFNBQVMsR0FBRywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWxFLElBQU0sY0FBYyxHQUFHLDhCQUE4QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLElBQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxzQkFBc0I7WUFDcEMsb0JBQW9CLENBQUMsY0FBYztZQUNuQyxnQkFBZ0IsQ0FBQSxDQUFDLFNBQVMsQ0FBQztZQUMzQixVQUFVLENBQUMsT0FBTyxDQUNyQixDQUFDO1lBRUYsSUFBTSxJ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SyxTQUFTLEVBQUU7WUFDeEIsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBQSxLQUFLO1lBQ3JCLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7Z0JBQy9CLE9BQU8sRUFBRSxDQUFDLDhCQUE4QjtnQkFDcEMsVUFBVSxDQUFDLEtBQUs7Z0JBQ2hCLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSTtnQkFDckIsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFVBQVU7Z0JBQ2pDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7YUFDM0U7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDZDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtDbGFzc0RlY2xhcmF0aW9uLCBSZWZsZWN0aW9uSG9zdH0gZnJvbSAnLi4vLi4vcmVmbGVjdGlvbic7XG5pbXBvcnQge1R5cGVDdG9yTWV0YWRhdGF9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQge2NoZWNrSWZHZW5lcmljVHlwZUJvdW5kc0FyZUNvbnRleHRGcmVlfSBmcm9tICcuL3RjYl91dGlsJztcblxuaW1wb3J0IHt0c0NyZWF0ZVR5cGVRdWVyeUZvckNvZXJjZWRJbnB1dH0gZnJvbSAnLi90c191dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlVHlwZUN0b3JEZWNsYXJhdGlvbkZuKFxuICAgIG5vZGU6IENsYXNzRGVjbGFyYXRpb248dHMuQ2xhc3NEZWNsYXJhdGlvbj4sIG1ldGE6IFR5cGVDdG9yTWV0YWRhdGEsIG5vZGVUeXBlUmVmOiB0cy5FbnRpdHlOYW1lLFxuICAgIHR5cGVQYXJhbXM6IHRzLlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbltdfHVuZGVmaW5lZCwgcmVmbGVjdG9yOiBSZWZsZWN0aW9uSG9zdCk6IHRzLlN0YXRlbWVudCB7XG4gIGlmIChyZXF1aXJlc0lubGluZVR5cGVDdG9yKG5vZGUsIHJlZmxlY3RvcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bm9kZS5uYW1lLnRleHR9IHJlcXVpcmVzIGFuIGlubGluZSB0eXBlIGNvbnN0cnVjdG9yYCk7XG4gIH1cblxuICBjb25zdCByYXdUeXBlQXJncyA9IHR5cGVQYXJhbXMgIT09IHVuZGVmaW5lZCA/IGdlbmVyYXRlR2VuZXJpY0FyZ3ModHlwZVBhcmFtcykgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJhd1R5cGUgPSB0cy5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShub2RlVHlwZVJlZiwgcmF3VHlwZUFyZ3MpO1xuXG4gIGNvbnN0IGluaXRQYXJhbSA9IGNvbnN0cnVjdFR5cGVDdG9yUGFyYW1ldGVyKG5vZGUsIG1ldGEsIHJhd1R5cGUpO1xuXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnNXaXRoRGVmYXVsdFR5cGVzKHR5cGVQYXJhbXMpO1xuXG4gIGlmIChtZXRhLmJvZHkpIHtcbiAgICBjb25zdCBmblR5cGUgPSB0cy5jcmVhdGVGdW5jdGlvblR5cGVOb2RlKFxuICAgICAgICAvKiB0eXBlUGFyYW1ldGVycyAqLyB0eXBlUGFyYW1ldGVycyxcbiAgICAgICAgLyogcGFyYW1ldGVycyAqL1tpbml0UGFyYW1dLFxuICAgICAgICAvKiB0eXBlICovIHJhd1R5cGUsXG4gICAgKTtcblxuICAgIGNvbnN0IGRlY2wgPSB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKFxuICAgICAgICAvKiBuYW1lICovIG1ldGEuZm5OYW1lLFxuICAgICAgICAvKiB0eXBlICovIGZuVHlwZSxcbiAgICAgICAgLyogYm9keSAqLyB0cy5jcmVhdGVOb25OdWxsRXhwcmVzc2lvbih0cy5jcmVhdGVOdWxsKCkpKTtcbiAgICBjb25zdCBkZWNsTGlzdCA9IHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFtkZWNsXSwgdHMuTm9kZUZsYWdzLkNvbnN0KTtcbiAgICByZXR1cm4gdHMuY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQoXG4gICAgICAgIC8qIG1vZGlmaWVycyAqLyB1bmRlZmluZWQsXG4gICAgICAgIC8qIGRlY2xhcmF0aW9uTGlzdCAqLyBkZWNsTGlzdCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRzLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICAgIC8qIGRlY29yYXRvcnMgKi8gdW5kZWZpbmVkLFxuICAgICAgICAvKiBtb2RpZmllcnMgKi9bdHMuY3JlYXRlTW9kaWZpZXIodHMuU3ludGF4S2luZC5EZWNsYXJlS2V5d29yZCldLFxuICAgICAgICAvKiBhc3Rlcmlza1Rva2VuICovIHVuZGVmaW5lZCxcbiAgICAgICAgLyogbmFtZSAqLyBtZXRhLmZuTmFtZSxcbiAgICAgICAgLyogdHlwZVBhcmFtZXRlcnMgKi8gdHlwZVBhcmFtZXRlcnMsXG4gICAgICAgIC8qIHBhcmFtZXRlcnMgKi9baW5pdFBhcmFtXSxcbiAgICAgICAgLyogdHlwZSAqLyByYXdUeXBlLFxuICAgICAgICAvKiBib2R5ICovIHVuZGVmaW5lZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBpbmxpbmUgdHlwZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGdpdmVuIGNsYXNzIGFuZCBtZXRhZGF0YS5cbiAqXG4gKiBBbiBpbmxpbmUgdHlwZSBjb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWxseSBzaGFwZWQgVHlwZVNjcmlwdCBzdGF0aWMgbWV0aG9kLCBpbnRlbmRlZCB0byBiZSBwbGFjZWRcbiAqIHdpdGhpbiBhIGRpcmVjdGl2ZSBjbGFzcyBpdHNlbGYsIHRoYXQgcGVybWl0cyB0eXBlIGluZmVyZW5jZSBvZiBhbnkgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgb2ZcbiAqIHRoZSBjbGFzcyBmcm9tIHRoZSB0eXBlcyBvZiBleHByZXNzaW9ucyBib3VuZCB0byBpbnB1dHMgb3Igb3V0cHV0cywgYW5kIHRoZSB0eXBlcyBvZiBlbGVtZW50c1xuICogdGhhdCBtYXRjaCBxdWVyaWVzIHBlcmZvcm1lZCBieSB0aGUgZGlyZWN0aXZlLiBJdCBhbHNvIGNhdGNoZXMgYW55IGVycm9ycyBpbiB0aGUgdHlwZXMgb2YgdGhlc2VcbiAqIGV4cHJlc3Npb25zLiBUaGlzIG1ldGhvZCBpcyBuZXZlciBjYWxsZWQgYXQgcnVudGltZSwgYnV0IGlzIHVzZWQgaW4gdHlwZS1jaGVjayBibG9ja3MgdG9cbiAqIGNvbnN0cnVjdCBkaXJlY3RpdmUgdHlwZXMuXG4gKlxuICogQW4gaW5saW5lIHR5cGUgY29uc3RydWN0b3IgZm9yIE5nRm9yIGxvb2tzIGxpa2U6XG4gKlxuICogc3RhdGljIG5nVHlwZUN0b3I8VD4oaW5pdDogUGljazxOZ0Zvck9mPFQ+LCAnbmdGb3JPZid8J25nRm9yVHJhY2tCeSd8J25nRm9yVGVtcGxhdGUnPik6XG4gKiAgIE5nRm9yT2Y8VD47XG4gKlxuICogQSB0eXBpY2FsIGNvbnN0cnVjdG9yIHdvdWxkIGJlOlxuICpcbiAqIE5nRm9yT2YubmdUeXBlQ3Rvcihpbml0OiB7XG4gKiAgIG5nRm9yT2Y6IFsnZm9vJywgJ2JhciddLFxuICogICBuZ0ZvclRyYWNrQnk6IG51bGwgYXMgYW55LFxuICogICBuZ0ZvclRlbXBsYXRlOiBudWxsIGFzIGFueSxcbiAqIH0pOyAvLyBJbmZlcnMgYSB0eXBlIG9mIE5nRm9yT2Y8c3RyaW5nPi5cbiAqXG4gKiBBbnkgaW5wdXRzIGRlY2xhcmVkIG9uIHRoZSB0eXBlIGZvciB3aGljaCBubyBwcm9wZXJ0eSBiaW5kaW5nIGlzIHByZXNlbnQgYXJlIGFzc2lnbmVkIGEgdmFsdWUgb2ZcbiAqIHR5cGUgYGFueWAsIHRvIGF2b2lkIHByb2R1Y2luZyBhbnkgdHlwZSBlcnJvcnMgZm9yIHVuc2V0IGlucHV0cy5cbiAqXG4gKiBJbmxpbmUgdHlwZSBjb25zdHJ1Y3RvcnMgYXJlIHVzZWQgd2hlbiB0aGUgdHlwZSBiZWluZyBjcmVhdGVkIGhhcyBib3VuZGVkIGdlbmVyaWMgdHlwZXMgd2hpY2hcbiAqIG1ha2Ugd3JpdGluZyBhIGRlY2xhcmVkIHR5cGUgY29uc3RydWN0b3IgKHZpYSBgZ2VuZXJhdGVUeXBlQ3RvckRlY2xhcmF0aW9uRm5gKSBkaWZmaWN1bHQgb3JcbiAqIGltcG9zc2libGUuXG4gKlxuICogQHBhcmFtIG5vZGUgdGhlIGBDbGFzc0RlY2xhcmF0aW9uPHRzLkNsYXNzRGVjbGFyYXRpb24+YCBmb3Igd2hpY2ggYSB0eXBlIGNvbnN0cnVjdG9yIHdpbGwgYmVcbiAqIGdlbmVyYXRlZC5cbiAqIEBwYXJhbSBtZXRhIGFkZGl0aW9uYWwgbWV0YWRhdGEgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhlIHR5cGUgY29uc3RydWN0b3IuXG4gKiBAcmV0dXJucyBhIGB0cy5NZXRob2REZWNsYXJhdGlvbmAgZm9yIHRoZSB0eXBlIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVJbmxpbmVUeXBlQ3RvcihcbiAgICBub2RlOiBDbGFzc0RlY2xhcmF0aW9uPHRzLkNsYXNzRGVjbGFyYXRpb24+LCBtZXRhOiBUeXBlQ3Rvck1ldGFkYXRhKTogdHMuTWV0aG9kRGVjbGFyYXRpb24ge1xuICAvLyBCdWlsZCByYXdUeXBlLCBhIGB0cy5UeXBlTm9kZWAgb2YgdGhlIGNsYXNzIHdpdGggaXRzIGdlbmVyaWMgcGFyYW1ldGVycyBwYXNzZWQgdGhyb3VnaCBmcm9tXG4gIC8vIHRoZSBkZWZpbml0aW9uIHdpdGhvdXQgYW55IHR5cGUgYm91bmRzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGNsYXNzIGlzXG4gIC8vIGBGb29EaXJlY3RpdmU8VCBleHRlbmRzIEJhcj5gLCBpdHMgcmF3VHlwZSB3b3VsZCBiZSBgRm9vRGlyZWN0aXZlPFQ+YC5cbiAgY29uc3QgcmF3VHlwZUFyZ3MgPVxuICAgICAgbm9kZS50eXBlUGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkID8gZ2VuZXJhdGVHZW5lcmljQXJncyhub2RlLnR5cGVQYXJhbWV0ZXJzKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcmF3VHlwZSA9IHRzLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKG5vZGUubmFtZSwgcmF3VHlwZUFyZ3MpO1xuXG4gIGNvbnN0IGluaXRQYXJhbSA9IGNvbnN0cnVjdFR5cGVDdG9yUGFyYW1ldGVyKG5vZGUsIG1ldGEsIHJhd1R5cGUpO1xuXG4gIC8vIElmIHRoaXMgY29uc3RydWN0b3IgaXMgYmVpbmcgZ2VuZXJhdGVkIGludG8gYSAudHMgZmlsZSwgdGhlbiBpdCBuZWVkcyBhIGZha2UgYm9keS4gVGhlIGJvZHlcbiAgLy8gaXMgc2V0IHRvIGEgcmV0dXJuIG9mIGBudWxsIWAuIElmIHRoZSB0eXBlIGNvbnN0cnVjdG9yIGlzIGJlaW5nIGdlbmVyYXRlZCBpbnRvIGEgLmQudHMgZmlsZSxcbiAgLy8gaXQgbmVlZHMgbm8gYm9keS5cbiAgbGV0IGJvZHk6IHRzLkJsb2NrfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgaWYgKG1ldGEuYm9keSkge1xuICAgIGJvZHkgPSB0cy5jcmVhdGVCbG9jayhbXG4gICAgICB0cy5jcmVhdGVSZXR1cm4odHMuY3JlYXRlTm9uTnVsbEV4cHJlc3Npb24odHMuY3JlYXRlTnVsbCgpKSksXG4gICAgXSk7XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIHR5cGUgY29uc3RydWN0b3IgbWV0aG9kIGRlY2xhcmF0aW9uLlxuICByZXR1cm4gdHMuY3JlYXRlTWV0aG9kKFxuICAgICAgLyogZGVjb3JhdG9ycyAqLyB1bmRlZmluZWQsXG4gICAgICAvKiBtb2RpZmllcnMgKi9bdHMuY3JlYXRlTW9kaWZpZXIodHMuU3ludGF4S2luZC5TdGF0aWNLZXl3b3JkKV0sXG4gICAgICAvKiBhc3Rlcmlza1Rva2VuICovIHVuZGVmaW5lZCxcbiAgICAgIC8qIG5hbWUgKi8gbWV0YS5mbk5hbWUsXG4gICAgICAvKiBxdWVzdGlvblRva2VuICovIHVuZGVmaW5lZCxcbiAgICAgIC8qIHR5cGVQYXJhbWV0ZXJzICovIHR5cGVQYXJhbWV0ZXJzV2l0aERlZmF1bHRUeXBlcyhub2RlLnR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgIC8qIHBhcmFtZXRlcnMgKi9baW5pdFBhcmFtXSxcbiAgICAgIC8qIHR5cGUgKi8gcmF3VHlwZSxcbiAgICAgIC8qIGJvZHkgKi8gYm9keSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0VHlwZUN0b3JQYXJhbWV0ZXIoXG4gICAgbm9kZTogQ2xhc3NEZWNsYXJhdGlvbjx0cy5DbGFzc0RlY2xhcmF0aW9uPiwgbWV0YTogVHlwZUN0b3JNZXRhZGF0YSxcbiAgICByYXdUeXBlOiB0cy5UeXBlUmVmZXJlbmNlTm9kZSk6IHRzLlBhcmFtZXRlckRlY2xhcmF0aW9uIHtcbiAgLy8gaW5pdFR5cGUgaXMgdGhlIHR5cGUgb2YgJ2luaXQnLCB0aGUgc2luZ2xlIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNvbnN0cnVjdG9yIG1ldGhvZC5cbiAgLy8gSWYgdGhlIERpcmVjdGl2ZSBoYXMgYW55IGlucHV0cywgaXRzIGluaXRUeXBlIHdpbGwgYmU6XG4gIC8vXG4gIC8vIFBpY2s8cmF3VHlwZSwgJ2lucHV0QSd8J2lucHV0Qic+XG4gIC8vXG4gIC8vIFBpY2sgaGVyZSBpcyB1c2VkIHRvIHNlbGVjdCBvbmx5IHRob3NlIGZpZWxkcyBmcm9tIHdoaWNoIHRoZSBnZW5lcmljIHR5cGUgcGFyYW1ldGVycyBvZiB0aGVcbiAgLy8gZGlyZWN0aXZlIHdpbGwgYmUgaW5mZXJyZWQuXG4gIC8vXG4gIC8vIEluIHRoZSBzcGVjaWFsIGNhc2UgdGhlcmUgYXJlIG5vIGlucHV0cywgaW5pdFR5cGUgaXMgc2V0IHRvIHt9LlxuICBsZXQgaW5pdFR5cGU6IHRzLlR5cGVOb2RlfG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gbWV0YS5maWVsZHMuaW5wdXRzO1xuICBjb25zdCBwbGFpbktleXM6IHRzLkxpdGVyYWxUeXBlTm9kZVtdID0gW107XG4gIGNvbnN0IGNvZXJjZWRLZXlzOiB0cy5Qcm9wZXJ0eVNpZ25hdHVyZVtdID0gW107XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBpZiAoIW1ldGEuY29lcmNlZElucHV0RmllbGRzLmhhcyhrZXkpKSB7XG4gICAgICBwbGFpbktleXMucHVzaCh0cy5jcmVhdGVMaXRlcmFsVHlwZU5vZGUodHMuY3JlYXRlU3RyaW5nTGl0ZXJhbChrZXkpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZXJjZWRLZXlzLnB1c2godHMuY3JlYXRlUHJvcGVydHlTaWduYXR1cmUoXG4gICAgICAgICAgLyogbW9kaWZpZXJzICovIHVuZGVmaW5lZCxcbiAgICAgICAgICAvKiBuYW1lICovIGtleSxcbiAgICAgICAgICAvKiBxdWVzdGlvblRva2VuICovIHVuZGVmaW5lZCxcbiAgICAgICAgICAvKiB0eXBlICovIHRzQ3JlYXRlVHlwZVF1ZXJ5Rm9yQ29lcmNlZElucHV0KHJhd1R5cGUudHlwZU5hbWUsIGtleSksXG4gICAgICAgICAgLyogaW5pdGlhbGl6ZXIgKi8gdW5kZWZpbmVkKSk7XG4gICAgfVxuICB9XG4gIGlmIChwbGFpbktleXMubGVuZ3RoID4gMCkge1xuICAgIC8vIENvbnN0cnVjdCBhIHVuaW9uIG9mIGFsbCB0aGUgZmllbGQgbmFtZXMuXG4gICAgY29uc3Qga2V5VHlwZVVuaW9uID0gdHMuY3JlYXRlVW5pb25UeXBlTm9kZShwbGFpbktleXMpO1xuXG4gICAgLy8gQ29uc3RydWN0IHRoZSBQaWNrPHJhd1R5cGUsIGtleVR5cGVVbmlvbj4uXG4gICAgaW5pdFR5cGUgPSB0cy5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZSgnUGljaycsIFtyYXdUeXBlLCBrZXlUeXBlVW5pb25dKTtcbiAgfVxuICBpZiAoY29lcmNlZEtleXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGNvZXJjZWRMaXRlcmFsID0gdHMuY3JlYXRlVHlwZUxpdGVyYWxOb2RlKGNvZXJjZWRLZXlzKTtcblxuICAgIGluaXRUeXBlID0gaW5pdFR5cGUgIT09IG51bGwgPyB0cy5jcmVhdGVJbnRlcnNlY3Rpb25UeXBlTm9kZShbaW5pdFR5cGUsIGNvZXJjZWRMaXRlcmFsXSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VyY2VkTGl0ZXJhbDtcbiAgfVxuXG4gIGlmIChpbml0VHlwZSA9PT0gbnVsbCkge1xuICAgIC8vIFNwZWNpYWwgY2FzZSAtIG5vIGlucHV0cywgb3V0cHV0cywgb3Igb3RoZXIgZmllbGRzIHdoaWNoIGNvdWxkIGluZmx1ZW5jZSB0aGUgcmVzdWx0IHR5cGUuXG4gICAgaW5pdFR5cGUgPSB0cy5jcmVhdGVUeXBlTGl0ZXJhbE5vZGUoW10pO1xuICB9XG5cbiAgLy8gQ3JlYXRlIHRoZSAnaW5pdCcgcGFyYW1ldGVyIGl0c2VsZi5cbiAgcmV0dXJuIHRzLmNyZWF0ZVBhcmFtZXRlcihcbiAgICAgIC8qIGRlY29yYXRvcnMgKi8gdW5kZWZpbmVkLFxuICAgICAgLyogbW9kaWZpZXJzICovIHVuZGVmaW5lZCxcbiAgICAgIC8qIGRvdERvdERvdFRva2VuICovIHVuZGVmaW5lZCxcbiAgICAgIC8qIG5hbWUgKi8gJ2luaXQnLFxuICAgICAgLyogcXVlc3Rpb25Ub2tlbiAqLyB1bmRlZmluZWQsXG4gICAgICAvKiB0eXBlICovIGluaXRUeXBlLFxuICAgICAgLyogaW5pdGlhbGl6ZXIgKi8gdW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVHZW5lcmljQXJncyhwYXJhbXM6IFJlYWRvbmx5QXJyYXk8dHMuVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uPik6IHRzLlR5cGVOb2RlW10ge1xuICByZXR1cm4gcGFyYW1zLm1hcChwYXJhbSA9PiB0cy5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShwYXJhbS5uYW1lLCB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVzSW5saW5lVHlwZUN0b3IoXG4gICAgbm9kZTogQ2xhc3NEZWNsYXJhdGlvbjx0cy5DbGFzc0RlY2xhcmF0aW9uPiwgaG9zdDogUmVmbGVjdGlvbkhvc3QpOiBib29sZWFuIHtcbiAgLy8gVGhlIGNsYXNzIHJlcXVpcmVzIGFuIGlubGluZSB0eXBlIGNvbnN0cnVjdG9yIGlmIGl0IGhhcyBnZW5lcmljIHR5cGUgYm91bmRzIHRoYXQgY2FuIG5vdCBiZVxuICAvLyBlbWl0dGVkIGludG8gYSBkaWZmZXJlbnQgY29udGV4dC5cbiAgcmV0dXJuICFjaGVja0lmR2VuZXJpY1R5cGVCb3VuZHNBcmVDb250ZXh0RnJlZShub2RlLCBob3N0KTtcbn1cblxuLyoqXG4gKiBBZGQgYSBkZWZhdWx0IGA9IGFueWAgdG8gdHlwZSBwYXJhbWV0ZXJzIHRoYXQgZG9uJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgYWxyZWFkeS5cbiAqXG4gKiBUeXBlU2NyaXB0IHVzZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiBhIHR5cGUgcGFyYW1ldGVyIHdoZW5ldmVyIGluZmVyZW5jZSBvZiB0aGF0IHBhcmFtZXRlciBmYWlscy5cbiAqIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGluZmVycmluZyBhIGNvbXBsZXggdHlwZSBmcm9tICdhbnknLiBGb3IgZXhhbXBsZSwgaWYgYE5nRm9yYCdzIGluZmVyZW5jZSBpc1xuICogZG9uZSB3aXRoIHRoZSBUQ0IgY29kZTpcbiAqXG4gKiBgYGBcbiAqIGNsYXNzIE5nRm9yPFQ+IHtcbiAqICAgbmdGb3JPZjogVFtdO1xuICogfVxuICpcbiAqIGRlY2xhcmUgZnVuY3Rpb24gY3RvcjxUPihvOiBQaWNrPE5nRm9yPFQ+LCAnbmdGb3JPZid8J25nRm9yVHJhY2tCeSd8J25nRm9yVGVtcGxhdGUnPik6IE5nRm9yPFQ+O1xuICogYGBgXG4gKlxuICogQW4gaW52b2NhdGlvbiBsb29rcyBsaWtlOlxuICpcbiAqIGBgYFxuICogdmFyIF90MSA9IGN0b3Ioe25nRm9yT2Y6IFsxLCAyXSwgbmdGb3JUcmFja0J5OiBudWxsIGFzIGFueSwgbmdGb3JUZW1wbGF0ZTogbnVsbCBhcyBhbnl9KTtcbiAqIGBgYFxuICpcbiAqIFRoaXMgY29ycmVjdGx5IGluZmVycyB0aGUgdHlwZSBgTmdGb3I8bnVtYmVyPmAgZm9yIGBfdDFgLCBzaW5jZSBgVGAgaXMgaW5mZXJyZWQgZnJvbSB0aGVcbiAqIGFzc2lnbm1lbnQgb2YgdHlwZSBgbnVtYmVyW11gIHRvIGBuZ0Zvck9mYCdzIHR5cGUgYFRbXWAuIEhvd2V2ZXIsIGlmIGBhbnlgIGlzIHBhc3NlZCBpbnN0ZWFkOlxuICpcbiAqIGBgYFxuICogdmFyIF90MiA9IGN0b3Ioe25nRm9yT2Y6IFsxLCAyXSBhcyBhbnksIG5nRm9yVHJhY2tCeTogbnVsbCBhcyBhbnksIG5nRm9yVGVtcGxhdGU6IG51bGwgYXMgYW55fSk7XG4gKiBgYGBcbiAqXG4gKiB0aGVuIGluZmVyZW5jZSBmb3IgYFRgIGZhaWxzIChpdCBjYW5ub3QgYmUgaW5mZXJyZWQgZnJvbSBgVFtdID0gYW55YCkuIEluIHRoaXMgY2FzZSwgYFRgIHRha2VzXG4gKiB0aGUgdHlwZSBge31gLCBhbmQgc28gYF90MmAgaXMgaW5mZXJyZWQgYXMgYE5nRm9yPHt9PmAuIFRoaXMgaXMgb2J2aW91c2x5IHdyb25nLlxuICpcbiAqIEFkZGluZyBhIGRlZmF1bHQgdHlwZSB0byB0aGUgZ2VuZXJpYyBkZWNsYXJhdGlvbiBpbiB0aGUgY29uc3RydWN0b3Igc29sdmVzIHRoaXMgcHJvYmxlbSwgYXMgdGhlXG4gKiBkZWZhdWx0IHR5cGUgd2lsbCBiZSB1c2VkIGluIHRoZSBldmVudCB0aGF0IGluZmVyZW5jZSBmYWlscy5cbiAqXG4gKiBgYGBcbiAqIGRlY2xhcmUgZnVuY3Rpb24gY3RvcjxUID0gYW55PihvOiBQaWNrPE5nRm9yPFQ+LCAnbmdGb3JPZic+KTogTmdGb3I8VD47XG4gKlxuICogdmFyIF90MyA9IGN0b3Ioe25nRm9yT2Y6IFsxLCAyXSBhcyBhbnl9KTtcbiAqIGBgYFxuICpcbiAqIFRoaXMgY29ycmVjdGx5IGluZmVycyBgVGAgYXMgYGFueWAsIGFuZCB0aGVyZWZvcmUgYF90M2AgYXMgYE5nRm9yPGFueT5gLlxuICovXG5mdW5jdGlvbiB0eXBlUGFyYW1ldGVyc1dpdGhEZWZhdWx0VHlwZXMocGFyYW1zOiBSZWFkb25seUFycmF5PHRzLlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbj58XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkKTogdHMuVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uW118dW5kZWZpbmVkIHtcbiAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXMubWFwKHBhcmFtID0+IHtcbiAgICBpZiAocGFyYW0uZGVmYXVsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHMudXBkYXRlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKFxuICAgICAgICAgIC8qIG5vZGUgKi8gcGFyYW0sXG4gICAgICAgICAgLyogbmFtZSAqLyBwYXJhbS5uYW1lLFxuICAgICAgICAgIC8qIGNvbnN0cmFpbnQgKi8gcGFyYW0uY29uc3RyYWludCxcbiAgICAgICAgICAvKiBkZWZhdWx0VHlwZSAqLyB0cy5jcmVhdGVLZXl3b3JkVHlwZU5vZGUodHMuU3ludGF4S2luZC5BbnlLZXl3b3JkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYXJhbTtcbiAgICB9XG4gIH0pO1xufVxuIl19
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
(function (factory) {
|
|
2
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
-
var v = factory(require, exports);
|
|
4
|
-
if (v !== undefined) module.exports = v;
|
|
5
|
-
}
|
|
6
|
-
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define("@angular/compiler-cli/src/ngtsc/typecheck/src/type_emitter", ["require", "exports", "typescript", "@angular/compiler-cli/src/ngtsc/imports"], factory);
|
|
8
|
-
}
|
|
9
|
-
})(function (require, exports) {
|
|
10
|
-
"use strict";
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.TypeEmitter = exports.canEmitType = void 0;
|
|
13
|
-
/**
|
|
14
|
-
* @license
|
|
15
|
-
* Copyright Google LLC All Rights Reserved.
|
|
16
|
-
*
|
|
17
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
18
|
-
* found in the LICENSE file at https://angular.io/license
|
|
19
|
-
*/
|
|
20
|
-
var ts = require("typescript");
|
|
21
|
-
var imports_1 = require("@angular/compiler-cli/src/ngtsc/imports");
|
|
22
|
-
var INELIGIBLE = {};
|
|
23
|
-
/**
|
|
24
|
-
* Determines whether the provided type can be emitted, which means that it can be safely emitted
|
|
25
|
-
* into a different location.
|
|
26
|
-
*
|
|
27
|
-
* If this function returns true, a `TypeEmitter` should be able to succeed. Vice versa, if this
|
|
28
|
-
* function returns false, then using the `TypeEmitter` should not be attempted as it is known to
|
|
29
|
-
* fail.
|
|
30
|
-
*/
|
|
31
|
-
function canEmitType(type, resolver) {
|
|
32
|
-
return canEmitTypeWorker(type);
|
|
33
|
-
function canEmitTypeWorker(type) {
|
|
34
|
-
return visitNode(type) !== INELIGIBLE;
|
|
35
|
-
}
|
|
36
|
-
// To determine whether a type can be emitted, we have to recursively look through all type nodes.
|
|
37
|
-
// If an unsupported type node is found at any position within the type, then the `INELIGIBLE`
|
|
38
|
-
// constant is returned to stop the recursive walk as the type as a whole cannot be emitted in
|
|
39
|
-
// that case. Otherwise, the result of visiting all child nodes determines the result. If no
|
|
40
|
-
// ineligible type reference node is found then the walk returns `undefined`, indicating that
|
|
41
|
-
// no type node was visited that could not be emitted.
|
|
42
|
-
function visitNode(node) {
|
|
43
|
-
// `import('module')` type nodes are not supported, as it may require rewriting the module
|
|
44
|
-
// specifier which is currently not done.
|
|
45
|
-
if (ts.isImportTypeNode(node)) {
|
|
46
|
-
return INELIGIBLE;
|
|
47
|
-
}
|
|
48
|
-
// Emitting a type reference node in a different context requires that an import for the type
|
|
49
|
-
// can be created. If a type reference node cannot be emitted, `INELIGIBLE` is returned to stop
|
|
50
|
-
// the walk.
|
|
51
|
-
if (ts.isTypeReferenceNode(node) && !canEmitTypeReference(node)) {
|
|
52
|
-
return INELIGIBLE;
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
return ts.forEachChild(node, visitNode);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
function canEmitTypeReference(type) {
|
|
59
|
-
var reference = resolver(type);
|
|
60
|
-
// If the type could not be resolved, it can not be emitted.
|
|
61
|
-
if (reference === null) {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
// If the type is a reference, consider the type to be eligible for emitting.
|
|
65
|
-
if (reference instanceof imports_1.Reference) {
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
// The type can be emitted if either it does not have any type arguments, or all of them can be
|
|
69
|
-
// emitted.
|
|
70
|
-
return type.typeArguments === undefined || type.typeArguments.every(canEmitTypeWorker);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
exports.canEmitType = canEmitType;
|
|
74
|
-
/**
|
|
75
|
-
* Given a `ts.TypeNode`, this class derives an equivalent `ts.TypeNode` that has been emitted into
|
|
76
|
-
* a different context.
|
|
77
|
-
*
|
|
78
|
-
* For example, consider the following code:
|
|
79
|
-
*
|
|
80
|
-
* ```
|
|
81
|
-
* import {NgIterable} from '@angular/core';
|
|
82
|
-
*
|
|
83
|
-
* class NgForOf<T, U extends NgIterable<T>> {}
|
|
84
|
-
* ```
|
|
85
|
-
*
|
|
86
|
-
* Here, the generic type parameters `T` and `U` can be emitted into a different context, as the
|
|
87
|
-
* type reference to `NgIterable` originates from an absolute module import so that it can be
|
|
88
|
-
* emitted anywhere, using that same module import. The process of emitting translates the
|
|
89
|
-
* `NgIterable` type reference to a type reference that is valid in the context in which it is
|
|
90
|
-
* emitted, for example:
|
|
91
|
-
*
|
|
92
|
-
* ```
|
|
93
|
-
* import * as i0 from '@angular/core';
|
|
94
|
-
* import * as i1 from '@angular/common';
|
|
95
|
-
*
|
|
96
|
-
* const _ctor1: <T, U extends i0.NgIterable<T>>(o: Pick<i1.NgForOf<T, U>, 'ngForOf'>):
|
|
97
|
-
* i1.NgForOf<T, U>;
|
|
98
|
-
* ```
|
|
99
|
-
*
|
|
100
|
-
* Notice how the type reference for `NgIterable` has been translated into a qualified name,
|
|
101
|
-
* referring to the namespace import that was created.
|
|
102
|
-
*/
|
|
103
|
-
var TypeEmitter = /** @class */ (function () {
|
|
104
|
-
function TypeEmitter(resolver, emitReference) {
|
|
105
|
-
this.resolver = resolver;
|
|
106
|
-
this.emitReference = emitReference;
|
|
107
|
-
}
|
|
108
|
-
TypeEmitter.prototype.emitType = function (type) {
|
|
109
|
-
var _this = this;
|
|
110
|
-
var typeReferenceTransformer = function (context) {
|
|
111
|
-
var visitNode = function (node) {
|
|
112
|
-
if (ts.isImportTypeNode(node)) {
|
|
113
|
-
throw new Error('Unable to emit import type');
|
|
114
|
-
}
|
|
115
|
-
if (ts.isTypeReferenceNode(node)) {
|
|
116
|
-
return _this.emitTypeReference(node);
|
|
117
|
-
}
|
|
118
|
-
else if (ts.isLiteralExpression(node)) {
|
|
119
|
-
// TypeScript would typically take the emit text for a literal expression from the source
|
|
120
|
-
// file itself. As the type node is being emitted into a different file, however,
|
|
121
|
-
// TypeScript would extract the literal text from the wrong source file. To mitigate this
|
|
122
|
-
// issue the literal is cloned and explicitly marked as synthesized by setting its text
|
|
123
|
-
// range to a negative range, forcing TypeScript to determine the node's literal text from
|
|
124
|
-
// the synthesized node's text instead of the incorrect source file.
|
|
125
|
-
var clone = ts.getMutableClone(node);
|
|
126
|
-
ts.setTextRange(clone, { pos: -1, end: -1 });
|
|
127
|
-
return clone;
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
return ts.visitEachChild(node, visitNode, context);
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
return function (node) { return ts.visitNode(node, visitNode); };
|
|
134
|
-
};
|
|
135
|
-
return ts.transform(type, [typeReferenceTransformer]).transformed[0];
|
|
136
|
-
};
|
|
137
|
-
TypeEmitter.prototype.emitTypeReference = function (type) {
|
|
138
|
-
var _this = this;
|
|
139
|
-
// Determine the reference that the type corresponds with.
|
|
140
|
-
var reference = this.resolver(type);
|
|
141
|
-
if (reference === null) {
|
|
142
|
-
throw new Error('Unable to emit an unresolved reference');
|
|
143
|
-
}
|
|
144
|
-
// Emit the type arguments, if any.
|
|
145
|
-
var typeArguments = undefined;
|
|
146
|
-
if (type.typeArguments !== undefined) {
|
|
147
|
-
typeArguments = ts.createNodeArray(type.typeArguments.map(function (typeArg) { return _this.emitType(typeArg); }));
|
|
148
|
-
}
|
|
149
|
-
// Emit the type name.
|
|
150
|
-
var typeName = type.typeName;
|
|
151
|
-
if (reference instanceof imports_1.Reference) {
|
|
152
|
-
var emittedType = this.emitReference(reference);
|
|
153
|
-
if (!ts.isTypeReferenceNode(emittedType)) {
|
|
154
|
-
throw new Error("Expected TypeReferenceNode for emitted reference, got " + ts.SyntaxKind[emittedType.kind]);
|
|
155
|
-
}
|
|
156
|
-
typeName = emittedType.typeName;
|
|
157
|
-
}
|
|
158
|
-
return ts.updateTypeReferenceNode(type, typeName, typeArguments);
|
|
159
|
-
};
|
|
160
|
-
return TypeEmitter;
|
|
161
|
-
}());
|
|
162
|
-
exports.TypeEmitter = TypeEmitter;
|
|
163
|
-
});
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV9lbWl0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90eXBlY2hlY2svc3JjL3R5cGVfZW1pdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCwrQkFBaUM7SUFDakMsbUVBQXdDO0lBc0J4QyxJQUFNLFVBQVUsR0FBZSxFQUFnQixDQUFDO0lBRWhEOzs7Ozs7O09BT0c7SUFDSCxTQUFnQixXQUFXLENBQUMsSUFBaUIsRUFBRSxRQUErQjtRQUM1RSxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9CLFNBQVMsaUJBQWlCLENBQUMsSUFBaUI7WUFDMUMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDO1FBQ3hDLENBQUM7UUFFRCxrR0FBa0c7UUFDbEcsOEZBQThGO1FBQzlGLDhGQUE4RjtRQUM5Riw0RkFBNEY7UUFDNUYsNkZBQTZGO1FBQzdGLHNEQUFzRDtRQUN0RCxTQUFTLFNBQVMsQ0FBQyxJQUFhO1lBQzlCLDBGQUEwRjtZQUMxRix5Q0FBeUM7WUFDekMsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sVUFBVSxDQUFDO2FBQ25CO1lBRUQsNkZBQTZGO1lBQzdGLCtGQUErRjtZQUMvRixZQUFZO1lBQ1osSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDL0QsT0FBTyxVQUFVLENBQUM7YUFDbkI7aUJBQU07Z0JBQ0wsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzthQUN6QztRQUNILENBQUM7UUFFRCxTQUFTLG9CQUFvQixDQUFDLElBQTBCO1lB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T0FBTyxDQUFDLEVBQXRCLENBQXNCLENBQUMsQ0FBQyxDQUFDO2FBQy9GO1lBRUQsc0JBQXNCO1lBQ3RCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDN0IsSUFBSSxTQUFTLFlBQVksbUJBQVMsRUFBRTtnQkFDbEMsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFDWixFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUcsQ0FBQyxDQUFDO2lCQUN4QztnQkFFRCxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQzthQUNqQztZQUVELE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNILGtCQUFDO0lBQUQsQ0FBQyxBQXhFRCxJQXdFQztJQXhFWSxrQ0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge1JlZmVyZW5jZX0gZnJvbSAnLi4vLi4vaW1wb3J0cyc7XG5cbi8qKlxuICogQSByZXNvbHZlZCB0eXBlIHJlZmVyZW5jZSBjYW4gZWl0aGVyIGJlIGEgYFJlZmVyZW5jZWAsIHRoZSBvcmlnaW5hbCBgdHMuVHlwZVJlZmVyZW5jZU5vZGVgIGl0c2VsZlxuICogb3IgbnVsbC4gQSB2YWx1ZSBvZiBudWxsIGluZGljYXRlcyB0aGF0IG5vIHJlZmVyZW5jZSBjb3VsZCBiZSByZXNvbHZlZCBvciB0aGF0IHRoZSByZWZlcmVuY2UgY2FuXG4gKiBub3QgYmUgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRUeXBlUmVmZXJlbmNlID0gUmVmZXJlbmNlfHRzLlR5cGVSZWZlcmVuY2VOb2RlfG51bGw7XG5cbi8qKlxuICogQSB0eXBlIHJlZmVyZW5jZSByZXNvbHZlciBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZmluZGluZyB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHR5cGVcbiAqIHJlZmVyZW5jZSBhbmQgdmVyaWZ5aW5nIHdoZXRoZXIgaXQgY2FuIGJlIGVtaXR0ZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFR5cGVSZWZlcmVuY2VSZXNvbHZlciA9ICh0eXBlOiB0cy5UeXBlUmVmZXJlbmNlTm9kZSkgPT4gUmVzb2x2ZWRUeXBlUmVmZXJlbmNlO1xuXG4vKipcbiAqIEEgbWFya2VyIHRvIGluZGljYXRlIHRoYXQgYSB0eXBlIHJlZmVyZW5jZSBpcyBpbmVsaWdpYmxlIGZvciBlbWl0dGluZy4gVGhpcyBuZWVkcyB0byBiZSB0cnV0aHlcbiAqIGFzIGl0J3MgcmV0dXJuZWQgZnJvbSBgdHMuZm9yRWFjaENoaWxkYCwgd2hpY2ggb25seSByZXR1cm5zIHRydXRoeSB2YWx1ZXMuXG4gKi9cbnR5cGUgSU5FTElHSUJMRSA9IHtcbiAgX19icmFuZDogJ2luZWxpZ2libGUnO1xufTtcbmNvbnN0IElORUxJR0lCTEU6IElORUxJR0lCTEUgPSB7fSBhcyBJTkVMSUdJQkxFO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgdHlwZSBjYW4gYmUgZW1pdHRlZCwgd2hpY2ggbWVhbnMgdGhhdCBpdCBjYW4gYmUgc2FmZWx5IGVtaXR0ZWRcbiAqIGludG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uXG4gKlxuICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUsIGEgYFR5cGVFbWl0dGVyYCBzaG91bGQgYmUgYWJsZSB0byBzdWNjZWVkLiBWaWNlIHZlcnNhLCBpZiB0aGlzXG4gKiBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCB0aGVuIHVzaW5nIHRoZSBgVHlwZUVtaXR0ZXJgIHNob3VsZCBub3QgYmUgYXR0ZW1wdGVkIGFzIGl0IGlzIGtub3duIHRvXG4gKiBmYWlsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuRW1pdFR5cGUodHlwZTogdHMuVHlwZU5vZGUsIHJlc29sdmVyOiBUeXBlUmVmZXJlbmNlUmVzb2x2ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNhbkVtaXRUeXBlV29ya2VyKHR5cGUpO1xuXG4gIGZ1bmN0aW9uIGNhbkVtaXRUeXBlV29ya2VyKHR5cGU6IHRzLlR5cGVOb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZpc2l0Tm9kZSh0eXBlKSAhPT0gSU5FTElHSUJMRTtcbiAgfVxuXG4gIC8vIFRvIGRldGVybWluZSB3aGV0aGVyIGEgdHlwZSBjYW4gYmUgZW1pdHRlZCwgd2UgaGF2ZSB0byByZWN1cnNpdmVseSBsb29rIHRocm91Z2ggYWxsIHR5cGUgbm9kZXMuXG4gIC8vIElmIGFuIHVuc3VwcG9ydGVkIHR5cGUgbm9kZSBpcyBmb3VuZCBhdCBhbnkgcG9zaXRpb24gd2l0aGluIHRoZSB0eXBlLCB0aGVuIHRoZSBgSU5FTElHSUJMRWBcbiAgLy8gY29uc3RhbnQgaXMgcmV0dXJuZWQgdG8gc3RvcCB0aGUgcmVjdXJzaXZlIHdhbGsgYXMgdGhlIHR5cGUgYXMgYSB3aG9sZSBjYW5ub3QgYmUgZW1pdHRlZCBpblxuICAvLyB0aGF0IGNhc2UuIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBvZiB2aXNpdGluZyBhbGwgY2hpbGQgbm9kZXMgZGV0ZXJtaW5lcyB0aGUgcmVzdWx0LiBJZiBub1xuICAvLyBpbmVsaWdpYmxlIHR5cGUgcmVmZXJlbmNlIG5vZGUgaXMgZm91bmQgdGhlbiB0aGUgd2FsayByZXR1cm5zIGB1bmRlZmluZWRgLCBpbmRpY2F0aW5nIHRoYXRcbiAgLy8gbm8gdHlwZSBub2RlIHdhcyB2aXNpdGVkIHRoYXQgY291bGQgbm90IGJlIGVtaXR0ZWQuXG4gIGZ1bmN0aW9uIHZpc2l0Tm9kZShub2RlOiB0cy5Ob2RlKTogSU5FTElHSUJMRXx1bmRlZmluZWQge1xuICAgIC8vIGBpbXBvcnQoJ21vZHVsZScpYCB0eXBlIG5vZGVzIGFyZSBub3Qgc3VwcG9ydGVkLCBhcyBpdCBtYXkgcmVxdWlyZSByZXdyaXRpbmcgdGhlIG1vZHVsZVxuICAgIC8vIHNwZWNpZmllciB3aGljaCBpcyBjdXJyZW50bHkgbm90IGRvbmUuXG4gICAgaWYgKHRzLmlzSW1wb3J0VHlwZU5vZGUobm9kZSkpIHtcbiAgICAgIHJldHVybiBJTkVMSUdJQkxFO1xuICAgIH1cblxuICAgIC8vIEVtaXR0aW5nIGEgdHlwZSByZWZlcmVuY2Ugbm9kZSBpbiBhIGRpZmZlcmVudCBjb250ZXh0IHJlcXVpcmVzIHRoYXQgYW4gaW1wb3J0IGZvciB0aGUgdHlwZVxuICAgIC8vIGNhbiBiZSBjcmVhdGVkLiBJZiBhIHR5cGUgcmVmZXJlbmNlIG5vZGUgY2Fubm90IGJlIGVtaXR0ZWQsIGBJTkVMSUdJQkxFYCBpcyByZXR1cm5lZCB0byBzdG9wXG4gICAgLy8gdGhlIHdhbGsuXG4gICAgaWYgKHRzLmlzVHlwZVJlZmVyZW5jZU5vZGUobm9kZSkgJiYgIWNhbkVtaXRUeXBlUmVmZXJlbmNlKG5vZGUpKSB7XG4gICAgICByZXR1cm4gSU5FTElHSUJMRTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbkVtaXRUeXBlUmVmZXJlbmNlKHR5cGU6IHRzLlR5cGVSZWZlcmVuY2VOb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gcmVzb2x2ZXIodHlwZSk7XG5cbiAgICAvLyBJZiB0aGUgdHlwZSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQsIGl0IGNhbiBub3QgYmUgZW1pdHRlZC5cbiAgICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHR5cGUgaXMgYSByZWZlcmVuY2UsIGNvbnNpZGVyIHRoZSB0eXBlIHRvIGJlIGVsaWdpYmxlIGZvciBlbWl0dGluZy5cbiAgICBpZiAocmVmZXJlbmNlIGluc3RhbmNlb2YgUmVmZXJlbmNlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUaGUgdHlwZSBjYW4gYmUgZW1pdHRlZCBpZiBlaXRoZXIgaXQgZG9lcyBub3QgaGF2ZSBhbnkgdHlwZSBhcmd1bWVudHMsIG9yIGFsbCBvZiB0aGVtIGNhbiBiZVxuICAgIC8vIGVtaXR0ZWQuXG4gICAgcmV0dXJuIHR5cGUudHlwZUFyZ3VtZW50cyA9PT0gdW5kZWZpbmVkIHx8IHR5cGUudHlwZUFyZ3VtZW50cy5ldmVyeShjYW5FbWl0VHlwZVdvcmtlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhIGB0cy5UeXBlTm9kZWAsIHRoaXMgY2xhc3MgZGVyaXZlcyBhbiBlcXVpdmFsZW50IGB0cy5UeXBlTm9kZWAgdGhhdCBoYXMgYmVlbiBlbWl0dGVkIGludG9cbiAqIGEgZGlmZmVyZW50IGNvbnRleHQuXG4gKlxuICogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29kZTpcbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7TmdJdGVyYWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogY2xhc3MgTmdGb3JPZjxULCBVIGV4dGVuZHMgTmdJdGVyYWJsZTxUPj4ge31cbiAqIGBgYFxuICpcbiAqIEhlcmUsIHRoZSBnZW5lcmljIHR5cGUgcGFyYW1ldGVycyBgVGAgYW5kIGBVYCBjYW4gYmUgZW1pdHRlZCBpbnRvIGEgZGlmZmVyZW50IGNvbnRleHQsIGFzIHRoZVxuICogdHlwZSByZWZlcmVuY2UgdG8gYE5nSXRlcmFibGVgIG9yaWdpbmF0ZXMgZnJvbSBhbiBhYnNvbHV0ZSBtb2R1bGUgaW1wb3J0IHNvIHRoYXQgaXQgY2FuIGJlXG4gKiBlbWl0dGVkIGFueXdoZXJlLCB1c2luZyB0aGF0IHNhbWUgbW9kdWxlIGltcG9ydC4gVGhlIHByb2Nlc3Mgb2YgZW1pdHRpbmcgdHJhbnNsYXRlcyB0aGVcbiAqIGBOZ0l0ZXJhYmxlYCB0eXBlIHJlZmVyZW5jZSB0byBhIHR5cGUgcmVmZXJlbmNlIHRoYXQgaXMgdmFsaWQgaW4gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXNcbiAqIGVtaXR0ZWQsIGZvciBleGFtcGxlOlxuICpcbiAqIGBgYFxuICogaW1wb3J0ICogYXMgaTAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKiBpbXBvcnQgKiBhcyBpMSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuICpcbiAqIGNvbnN0IF9jdG9yMTogPFQsIFUgZXh0ZW5kcyBpMC5OZ0l0ZXJhYmxlPFQ+PihvOiBQaWNrPGkxLk5nRm9yT2Y8VCwgVT4sICduZ0Zvck9mJz4pOlxuICogaTEuTmdGb3JPZjxULCBVPjtcbiAqIGBgYFxuICpcbiAqIE5vdGljZSBob3cgdGhlIHR5cGUgcmVmZXJlbmNlIGZvciBgTmdJdGVyYWJsZWAgaGFzIGJlZW4gdHJhbnNsYXRlZCBpbnRvIGEgcXVhbGlmaWVkIG5hbWUsXG4gKiByZWZlcnJpbmcgdG8gdGhlIG5hbWVzcGFjZSBpbXBvcnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVFbWl0dGVyIHtcbiAgLyoqXG4gICAqIFJlc29sdmVyIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgYSBgUmVmZXJlbmNlYCBjb3JyZXNwb25kaW5nIHdpdGggYSBgdHMuVHlwZVJlZmVyZW5jZU5vZGVgLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlcjogVHlwZVJlZmVyZW5jZVJlc29sdmVyO1xuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGBSZWZlcmVuY2VgLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIGVtaXR0aW5nIHdvcmsuIEl0IHNob3VsZFxuICAgKiBwcm9kdWNlIGEgYHRzLlR5cGVOb2RlYCB0aGF0IGlzIHZhbGlkIHdpdGhpbiB0aGUgZGVzaXJlZCBjb250ZXh0LlxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0UmVmZXJlbmNlOiAocmVmOiBSZWZlcmVuY2UpID0+IHRzLlR5cGVOb2RlO1xuXG4gIGNvbnN0cnVjdG9yKHJlc29sdmVyOiBUeXBlUmVmZXJlbmNlUmVzb2x2ZXIsIGVtaXRSZWZlcmVuY2U6IChyZWY6IFJlZmVyZW5jZSkgPT4gdHMuVHlwZU5vZGUpIHtcbiAgICB0aGlzLnJlc29sdmVyID0gcmVzb2x2ZXI7XG4gICAgdGhpcy5lbWl0UmVmZXJlbmNlID0gZW1pdFJlZmVyZW5jZTtcbiAgfVxuXG4gIGVtaXRUeXBlKHR5cGU6IHRzLlR5cGVOb2RlKTogdHMuVHlwZU5vZGUge1xuICAgIGNvbnN0IHR5cGVSZWZlcmVuY2VUcmFuc2Zvcm1lcjogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlR5cGVOb2RlPiA9IGNvbnRleHQgPT4ge1xuICAgICAgY29uc3QgdmlzaXROb2RlID0gKG5vZGU6IHRzLk5vZGUpOiB0cy5Ob2RlID0+IHtcbiAgICAgICAgaWYgKHRzLmlzSW1wb3J0VHlwZU5vZGUobm9kZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBlbWl0IGltcG9ydCB0eXBlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHMuaXNUeXBlUmVmZXJlbmNlTm9kZShub2RlKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmVtaXRUeXBlUmVmZXJlbmNlKG5vZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRzLmlzTGl0ZXJhbEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICAgICAgICAvLyBUeXBlU2NyaXB0IHdvdWxkIHR5cGljYWxseSB0YWtlIHRoZSBlbWl0IHRleHQgZm9yIGEgbGl0ZXJhbCBleHByZXNzaW9uIGZyb20gdGhlIHNvdXJjZVxuICAgICAgICAgIC8vIGZpbGUgaXRzZWxmLiBBcyB0aGUgdHlwZSBub2RlIGlzIGJlaW5nIGVtaXR0ZWQgaW50byBhIGRpZmZlcmVudCBmaWxlLCBob3dldmVyLFxuICAgICAgICAgIC8vIFR5cGVTY3JpcHQgd291bGQgZXh0cmFjdCB0aGUgbGl0ZXJhbCB0ZXh0IGZyb20gdGhlIHdyb25nIHNvdXJjZSBmaWxlLiBUbyBtaXRpZ2F0ZSB0aGlzXG4gICAgICAgICAgLy8gaXNzdWUgdGhlIGxpdGVyYWwgaXMgY2xvbmVkIGFuZCBleHBsaWNpdGx5IG1hcmtlZCBhcyBzeW50aGVzaXplZCBieSBzZXR0aW5nIGl0cyB0ZXh0XG4gICAgICAgICAgLy8gcmFuZ2UgdG8gYSBuZWdhdGl2ZSByYW5nZSwgZm9yY2luZyBUeXBlU2NyaXB0IHRvIGRldGVybWluZSB0aGUgbm9kZSdzIGxpdGVyYWwgdGV4dCBmcm9tXG4gICAgICAgICAgLy8gdGhlIHN5bnRoZXNpemVkIG5vZGUncyB0ZXh0IGluc3RlYWQgb2YgdGhlIGluY29ycmVjdCBzb3VyY2UgZmlsZS5cbiAgICAgICAgICBjb25zdCBjbG9uZSA9IHRzLmdldE11dGFibGVDbG9uZShub2RlKTtcbiAgICAgICAgICB0cy5zZXRUZXh0UmFuZ2UoY2xvbmUsIHtwb3M6IC0xLCBlbmQ6IC0xfSk7XG4gICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG5vZGUgPT4gdHMudmlzaXROb2RlKG5vZGUsIHZpc2l0Tm9kZSk7XG4gICAgfTtcbiAgICByZXR1cm4gdHMudHJhbnNmb3JtKHR5cGUsIFt0eXBlUmVmZXJlbmNlVHJhbnNmb3JtZXJdKS50cmFuc2Zvcm1lZFswXTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFR5cGVSZWZlcmVuY2UodHlwZTogdHMuVHlwZVJlZmVyZW5jZU5vZGUpOiB0cy5UeXBlTm9kZSB7XG4gICAgLy8gRGV0ZXJtaW5lIHRoZSByZWZlcmVuY2UgdGhhdCB0aGUgdHlwZSBjb3JyZXNwb25kcyB3aXRoLlxuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMucmVzb2x2ZXIodHlwZSk7XG4gICAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZW1pdCBhbiB1bnJlc29sdmVkIHJlZmVyZW5jZScpO1xuICAgIH1cblxuICAgIC8vIEVtaXQgdGhlIHR5cGUgYXJndW1lbnRzLCBpZiBhbnkuXG4gICAgbGV0IHR5cGVBcmd1bWVudHM6IHRzLk5vZGVBcnJheTx0cy5UeXBlTm9kZT58dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlLnR5cGVBcmd1bWVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHlwZUFyZ3VtZW50cyA9IHRzLmNyZWF0ZU5vZGVBcnJheSh0eXBlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmcgPT4gdGhpcy5lbWl0VHlwZSh0eXBlQXJnKSkpO1xuICAgIH1cblxuICAgIC8vIEVtaXQgdGhlIHR5cGUgbmFtZS5cbiAgICBsZXQgdHlwZU5hbWUgPSB0eXBlLnR5cGVOYW1lO1xuICAgIGlmIChyZWZlcmVuY2UgaW5zdGFuY2VvZiBSZWZlcmVuY2UpIHtcbiAgICAgIGNvbnN0IGVtaXR0ZWRUeXBlID0gdGhpcy5lbWl0UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG4gICAgICBpZiAoIXRzLmlzVHlwZVJlZmVyZW5jZU5vZGUoZW1pdHRlZFR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgVHlwZVJlZmVyZW5jZU5vZGUgZm9yIGVtaXR0ZWQgcmVmZXJlbmNlLCBnb3QgJHtcbiAgICAgICAgICAgIHRzLlN5bnRheEtpbmRbZW1pdHRlZFR5cGUua2luZF19YCk7XG4gICAgICB9XG5cbiAgICAgIHR5cGVOYW1lID0gZW1pdHRlZFR5cGUudHlwZU5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRzLnVwZGF0ZVR5cGVSZWZlcmVuY2VOb2RlKHR5cGUsIHR5cGVOYW1lLCB0eXBlQXJndW1lbnRzKTtcbiAgfVxufVxuIl19
|