@angular/compiler-cli 12.1.0-next.5 → 12.1.2
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/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
- package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +2 -3
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
- package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
- package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
- package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
- package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
- package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +1 -1
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +1 -1
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +1 -1
- package/ngcc/src/execution/tasks/queues/serial_task_queue.js +1 -1
- package/ngcc/src/host/commonjs_host.js +1 -1
- package/ngcc/src/host/esm2015_host.js +1 -1
- package/ngcc/src/host/esm5_host.js +1 -1
- package/ngcc/src/host/umd_host.js +1 -1
- package/ngcc/src/packages/build_marker.d.ts +1 -1
- package/ngcc/src/packages/build_marker.js +1 -1
- package/ngcc/src/packages/configuration.d.ts +7 -0
- package/ngcc/src/packages/configuration.js +8 -3
- package/ngcc/src/packages/entry_point_manifest.js +2 -2
- package/ngcc/src/packages/ngcc_compiler_host.js +1 -1
- package/ngcc/src/rendering/commonjs_rendering_formatter.js +1 -1
- package/ngcc/src/rendering/esm5_rendering_formatter.js +1 -1
- package/ngcc/src/rendering/umd_rendering_formatter.js +1 -1
- package/ngcc/src/writing/new_entry_point_file_writer.js +1 -1
- package/package.json +2 -2
- package/src/ngtsc/annotations/src/component.d.ts +2 -0
- package/src/ngtsc/annotations/src/component.js +6 -2
- package/src/ngtsc/annotations/src/directive.js +1 -1
- package/src/ngtsc/annotations/src/ng_module.js +1 -1
- package/src/ngtsc/annotations/src/pipe.js +1 -1
- package/src/ngtsc/core/api/src/public_options.d.ts +12 -0
- package/src/ngtsc/core/api/src/public_options.js +1 -1
- package/src/ngtsc/core/src/compiler.d.ts +5 -0
- package/src/ngtsc/core/src/compiler.js +10 -1
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +1 -1
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
- package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
- package/src/ngtsc/incremental/src/incremental.js +36 -6
- package/src/ngtsc/incremental/src/state.d.ts +5 -3
- package/src/ngtsc/incremental/src/state.js +1 -1
- package/src/ngtsc/indexer/src/template.js +1 -1
- package/src/ngtsc/metadata/src/dts.js +2 -3
- package/src/ngtsc/metadata/src/inheritance.js +2 -7
- package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
- package/src/ngtsc/partial_evaluator/src/diagnostics.js +4 -1
- package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +19 -1
- package/src/ngtsc/partial_evaluator/src/dynamic.js +12 -4
- package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +2 -0
- package/src/ngtsc/partial_evaluator/src/interpreter.js +48 -1
- package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
- package/src/ngtsc/program.d.ts +1 -0
- package/src/ngtsc/program.js +26 -2
- package/src/ngtsc/program_driver/src/api.d.ts +20 -1
- package/src/ngtsc/program_driver/src/api.js +3 -2
- package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
- package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
- package/src/ngtsc/reflection/src/typescript.js +4 -1
- package/src/ngtsc/transform/src/api.d.ts +6 -0
- package/src/ngtsc/transform/src/api.js +1 -1
- package/src/ngtsc/transform/src/compilation.d.ts +3 -0
- package/src/ngtsc/transform/src/compilation.js +124 -53
- package/src/ngtsc/transform/src/transform.js +1 -1
- package/src/ngtsc/typecheck/src/context.d.ts +2 -1
- package/src/ngtsc/typecheck/src/context.js +11 -3
- package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
- package/src/ngtsc/typecheck/src/template_symbol_builder.js +36 -4
- package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
- package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
- package/src/ngtsc/typecheck/src/type_emitter.d.ts +2 -1
- package/src/ngtsc/typecheck/src/type_emitter.js +54 -48
- package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +2 -0
- package/src/ngtsc/typecheck/src/type_parameter_emitter.js +21 -7
- package/src/ngtsc/util/src/visitor.d.ts +1 -1
- package/src/ngtsc/util/src/visitor.js +1 -8
- package/src/ngtsc/xi18n/index.d.ts +9 -0
- package/src/ngtsc/xi18n/index.js +22 -0
- package/src/ngtsc/xi18n/src/context.d.ts +26 -0
- package/src/ngtsc/xi18n/src/context.js +20 -0
- package/src/transformers/api.d.ts +0 -3
- package/src/transformers/api.js +1 -1
- package/src/transformers/i18n.d.ts +14 -0
- package/src/transformers/i18n.js +76 -0
- package/src/transformers/program.d.ts +0 -4
- package/src/transformers/program.js +5 -56
- package/src/version.js +1 -1
- package/compiler-cli.externs.js +0 -0
- package/index.mjs +0 -20
- package/linker/babel/babel.externs.js +0 -0
- package/linker/babel/index.mjs +0 -11
- package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
- package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
- package/linker/babel/src/babel_declaration_scope.mjs +0 -52
- package/linker/babel/src/babel_plugin.mjs +0 -23
- package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
- package/linker/babel/src/linker_plugin_options.mjs +0 -2
- package/linker/index.mjs +0 -7
- package/linker/linker.externs.js +0 -0
- package/linker/src/ast/ast_host.mjs +0 -9
- package/linker/src/ast/ast_value.mjs +0 -256
- package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
- package/linker/src/ast/utils.mjs +0 -17
- package/linker/src/fatal_linker_error.mjs +0 -30
- package/linker/src/file_linker/declaration_scope.mjs +0 -9
- package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
- package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
- package/linker/src/file_linker/file_linker.mjs +0 -70
- package/linker/src/file_linker/get_source_file.mjs +0 -28
- package/linker/src/file_linker/linker_environment.mjs +0 -23
- package/linker/src/file_linker/linker_options.mjs +0 -16
- package/linker/src/file_linker/needs_linking.mjs +0 -27
- package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
- package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
- package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
- package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
- package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
- package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
- package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
- package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
- package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
- package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
- package/linker/src/file_linker/translator.mjs +0 -23
- package/linker/src/linker_import_generator.mjs +0 -28
- package/ngcc/index.mjs +0 -16
- package/ngcc/main-ivy-ngcc.mjs +0 -12
- package/ngcc/main-ngcc.mjs +0 -32
- package/ngcc/ngcc.externs.js +0 -0
- package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
- package/ngcc/src/analysis/migration_host.mjs +0 -80
- package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
- package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
- package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
- package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
- package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
- package/ngcc/src/analysis/types.mjs +0 -2
- package/ngcc/src/analysis/util.mjs +0 -19
- package/ngcc/src/command_line_options.mjs +0 -142
- package/ngcc/src/constants.mjs +0 -10
- package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
- package/ngcc/src/dependencies/dependency_host.mjs +0 -102
- package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
- package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
- package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
- package/ngcc/src/dependencies/module_resolver.mjs +0 -233
- package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
- package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
- package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
- package/ngcc/src/entry_point_finder/interface.mjs +0 -2
- package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
- package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
- package/ngcc/src/entry_point_finder/utils.mjs +0 -176
- package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
- package/ngcc/src/execution/api.mjs +0 -2
- package/ngcc/src/execution/cluster/api.mjs +0 -9
- package/ngcc/src/execution/cluster/executor.mjs +0 -27
- package/ngcc/src/execution/cluster/master.mjs +0 -261
- package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
- package/ngcc/src/execution/cluster/utils.mjs +0 -59
- package/ngcc/src/execution/cluster/worker.mjs +0 -81
- package/ngcc/src/execution/create_compile_function.mjs +0 -62
- package/ngcc/src/execution/single_process_executor.mjs +0 -57
- package/ngcc/src/execution/tasks/api.mjs +0 -22
- package/ngcc/src/execution/tasks/completion.mjs +0 -61
- package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
- package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
- package/ngcc/src/execution/tasks/utils.mjs +0 -114
- package/ngcc/src/host/commonjs_host.mjs +0 -220
- package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
- package/ngcc/src/host/delegating_host.mjs +0 -140
- package/ngcc/src/host/esm2015_host.mjs +0 -2293
- package/ngcc/src/host/esm5_host.mjs +0 -721
- package/ngcc/src/host/ngcc_host.mjs +0 -15
- package/ngcc/src/host/umd_host.mjs +0 -486
- package/ngcc/src/host/utils.mjs +0 -12
- package/ngcc/src/locking/async_locker.mjs +0 -76
- package/ngcc/src/locking/lock_file.mjs +0 -4
- package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
- package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
- package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
- package/ngcc/src/locking/sync_locker.mjs +0 -52
- package/ngcc/src/main.mjs +0 -134
- package/ngcc/src/migrations/migration.mjs +0 -2
- package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
- package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
- package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
- package/ngcc/src/migrations/utils.mjs +0 -117
- package/ngcc/src/ngcc_options.mjs +0 -119
- package/ngcc/src/packages/build_marker.mjs +0 -84
- package/ngcc/src/packages/bundle_program.mjs +0 -52
- package/ngcc/src/packages/configuration.mjs +0 -250
- package/ngcc/src/packages/entry_point.mjs +0 -239
- package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
- package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
- package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
- package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
- package/ngcc/src/packages/source_file_cache.mjs +0 -187
- package/ngcc/src/packages/transformer.mjs +0 -140
- package/ngcc/src/path_mappings.mjs +0 -13
- package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
- package/ngcc/src/rendering/dts_renderer.mjs +0 -139
- package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
- package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
- package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
- package/ngcc/src/rendering/renderer.mjs +0 -170
- package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
- package/ngcc/src/rendering/source_maps.mjs +0 -54
- package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
- package/ngcc/src/rendering/utils.mjs +0 -20
- package/ngcc/src/utils.mjs +0 -144
- package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
- package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
- package/ngcc/src/writing/cleaning/utils.mjs +0 -16
- package/ngcc/src/writing/file_writer.mjs +0 -2
- package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
- package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
- package/ngcc/src/writing/package_json_updater.mjs +0 -144
- package/src/diagnostics/translate_diagnostics.mjs +0 -47
- package/src/diagnostics/typescript_version.mjs +0 -79
- package/src/extract_i18n.mjs +0 -46
- package/src/language_services.mjs +0 -18
- package/src/main.mjs +0 -185
- package/src/metadata/bundle_index_host.mjs +0 -107
- package/src/metadata/bundler.mjs +0 -556
- package/src/metadata/collector.mjs +0 -701
- package/src/metadata/evaluator.mjs +0 -643
- package/src/metadata/index.mjs +0 -11
- package/src/metadata/index_writer.mjs +0 -44
- package/src/metadata/schema.mjs +0 -102
- package/src/metadata/symbols.mjs +0 -117
- package/src/ngtsc/annotations/annotations.externs.js +0 -0
- package/src/ngtsc/annotations/index.mjs +0 -15
- package/src/ngtsc/annotations/src/api.mjs +0 -9
- package/src/ngtsc/annotations/src/component.mjs +0 -1064
- package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
- package/src/ngtsc/annotations/src/directive.mjs +0 -692
- package/src/ngtsc/annotations/src/factory.mjs +0 -17
- package/src/ngtsc/annotations/src/injectable.mjs +0 -260
- package/src/ngtsc/annotations/src/metadata.mjs +0 -145
- package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
- package/src/ngtsc/annotations/src/pipe.mjs +0 -151
- package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
- package/src/ngtsc/annotations/src/util.mjs +0 -495
- package/src/ngtsc/core/api/index.mjs +0 -12
- package/src/ngtsc/core/api/src/adapter.mjs +0 -9
- package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
- package/src/ngtsc/core/api/src/options.mjs +0 -9
- package/src/ngtsc/core/api/src/public_options.mjs +0 -9
- package/src/ngtsc/core/api.externs.js +0 -0
- package/src/ngtsc/core/core.externs.js +0 -0
- package/src/ngtsc/core/index.mjs +0 -10
- package/src/ngtsc/core/src/compiler.mjs +0 -908
- package/src/ngtsc/core/src/config.mjs +0 -15
- package/src/ngtsc/core/src/host.mjs +0 -229
- package/src/ngtsc/cycles/cycles.externs.js +0 -0
- package/src/ngtsc/cycles/index.mjs +0 -10
- package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
- package/src/ngtsc/cycles/src/imports.mjs +0 -152
- package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
- package/src/ngtsc/diagnostics/index.mjs +0 -11
- package/src/ngtsc/diagnostics/src/error.mjs +0 -51
- package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
- package/src/ngtsc/diagnostics/src/util.mjs +0 -21
- package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
- package/src/ngtsc/entry_point/index.mjs +0 -12
- package/src/ngtsc/entry_point/src/generator.mjs +0 -35
- package/src/ngtsc/entry_point/src/logic.mjs +0 -35
- package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
- package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
- package/src/ngtsc/file_system/file_system.externs.js +0 -0
- package/src/ngtsc/file_system/index.mjs +0 -13
- package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
- package/src/ngtsc/file_system/src/helpers.mjs +0 -99
- package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
- package/src/ngtsc/file_system/src/logical.mjs +0 -84
- package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
- package/src/ngtsc/file_system/src/types.mjs +0 -9
- package/src/ngtsc/file_system/src/util.mjs +0 -22
- package/src/ngtsc/file_system/testing/index.mjs +0 -13
- package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
- package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
- package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
- package/src/ngtsc/imports/imports.externs.js +0 -0
- package/src/ngtsc/imports/index.mjs +0 -14
- package/src/ngtsc/imports/src/alias.mjs +0 -137
- package/src/ngtsc/imports/src/core.mjs +0 -78
- package/src/ngtsc/imports/src/default.mjs +0 -135
- package/src/ngtsc/imports/src/emitter.mjs +0 -266
- package/src/ngtsc/imports/src/find_export.mjs +0 -56
- package/src/ngtsc/imports/src/reexport.mjs +0 -9
- package/src/ngtsc/imports/src/references.mjs +0 -137
- package/src/ngtsc/imports/src/resolver.mjs +0 -24
- package/src/ngtsc/incremental/api.externs.js +0 -0
- package/src/ngtsc/incremental/api.mjs +0 -9
- package/src/ngtsc/incremental/incremental.externs.js +0 -0
- package/src/ngtsc/incremental/index.mjs +0 -12
- package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
- package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
- package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
- package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
- package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
- package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
- package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
- package/src/ngtsc/incremental/src/incremental.mjs +0 -267
- package/src/ngtsc/incremental/src/noop.mjs +0 -13
- package/src/ngtsc/incremental/src/state.mjs +0 -17
- package/src/ngtsc/incremental/src/strategy.mjs +0 -76
- package/src/ngtsc/indexer/index.mjs +0 -11
- package/src/ngtsc/indexer/indexer.externs.js +0 -0
- package/src/ngtsc/indexer/src/api.mjs +0 -30
- package/src/ngtsc/indexer/src/context.mjs +0 -25
- package/src/ngtsc/indexer/src/template.mjs +0 -303
- package/src/ngtsc/indexer/src/transform.mjs +0 -51
- package/src/ngtsc/logging/index.mjs +0 -10
- package/src/ngtsc/logging/logging.externs.js +0 -0
- package/src/ngtsc/logging/src/console_logger.mjs +0 -43
- package/src/ngtsc/logging/src/logger.mjs +0 -15
- package/src/ngtsc/logging/testing/index.mjs +0 -9
- package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
- package/src/ngtsc/logging/testing/testing.externs.js +0 -0
- package/src/ngtsc/metadata/index.mjs +0 -15
- package/src/ngtsc/metadata/metadata.externs.js +0 -0
- package/src/ngtsc/metadata/src/api.mjs +0 -13
- package/src/ngtsc/metadata/src/dts.mjs +0 -143
- package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
- package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
- package/src/ngtsc/metadata/src/registry.mjs +0 -80
- package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
- package/src/ngtsc/metadata/src/util.mjs +0 -200
- package/src/ngtsc/partial_evaluator/index.mjs +0 -12
- package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
- package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
- package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -171
- package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -86
- package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
- package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -683
- package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
- package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
- package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
- package/src/ngtsc/perf/index.mjs +0 -11
- package/src/ngtsc/perf/perf.externs.js +0 -0
- package/src/ngtsc/perf/src/api.mjs +0 -278
- package/src/ngtsc/perf/src/clock.mjs +0 -15
- package/src/ngtsc/perf/src/noop.mjs +0 -21
- package/src/ngtsc/perf/src/recorder.mjs +0 -125
- package/src/ngtsc/program.mjs +0 -247
- package/src/ngtsc/program_driver/index.mjs +0 -10
- package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
- package/src/ngtsc/program_driver/src/api.mjs +0 -22
- package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
- package/src/ngtsc/reflection/index.mjs +0 -12
- package/src/ngtsc/reflection/reflection.externs.js +0 -0
- package/src/ngtsc/reflection/src/host.mjs +0 -73
- package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
- package/src/ngtsc/reflection/src/typescript.mjs +0 -608
- package/src/ngtsc/reflection/src/util.mjs +0 -21
- package/src/ngtsc/resource/index.mjs +0 -9
- package/src/ngtsc/resource/resource.externs.js +0 -0
- package/src/ngtsc/resource/src/loader.mjs +0 -242
- package/src/ngtsc/routing/index.mjs +0 -11
- package/src/ngtsc/routing/routing.externs.js +0 -0
- package/src/ngtsc/routing/src/analyzer.mjs +0 -69
- package/src/ngtsc/routing/src/lazy.mjs +0 -168
- package/src/ngtsc/routing/src/route.mjs +0 -51
- package/src/ngtsc/scope/index.mjs +0 -12
- package/src/ngtsc/scope/scope.externs.js +0 -0
- package/src/ngtsc/scope/src/api.mjs +0 -9
- package/src/ngtsc/scope/src/component_scope.mjs +0 -31
- package/src/ngtsc/scope/src/dependency.mjs +0 -134
- package/src/ngtsc/scope/src/local.mjs +0 -531
- package/src/ngtsc/scope/src/typecheck.mjs +0 -83
- package/src/ngtsc/shims/api.externs.js +0 -0
- package/src/ngtsc/shims/api.mjs +0 -2
- package/src/ngtsc/shims/index.mjs +0 -14
- package/src/ngtsc/shims/shims.externs.js +0 -0
- package/src/ngtsc/shims/src/adapter.mjs +0 -188
- package/src/ngtsc/shims/src/expando.mjs +0 -102
- package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
- package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
- package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
- package/src/ngtsc/shims/src/util.mjs +0 -26
- package/src/ngtsc/sourcemaps/index.mjs +0 -11
- package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
- package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
- package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
- package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
- package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
- package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
- package/src/ngtsc/switch/index.mjs +0 -9
- package/src/ngtsc/switch/src/switch.mjs +0 -115
- package/src/ngtsc/switch/switch.externs.js +0 -0
- package/src/ngtsc/transform/index.mjs +0 -14
- package/src/ngtsc/transform/src/alias.mjs +0 -30
- package/src/ngtsc/transform/src/api.mjs +0 -63
- package/src/ngtsc/transform/src/compilation.mjs +0 -485
- package/src/ngtsc/transform/src/declaration.mjs +0 -182
- package/src/ngtsc/transform/src/trait.mjs +0 -95
- package/src/ngtsc/transform/src/transform.mjs +0 -298
- package/src/ngtsc/transform/src/utils.mjs +0 -57
- package/src/ngtsc/transform/transform.externs.js +0 -0
- package/src/ngtsc/translator/index.mjs +0 -14
- package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
- package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
- package/src/ngtsc/translator/src/context.mjs +0 -24
- package/src/ngtsc/translator/src/import_manager.mjs +0 -48
- package/src/ngtsc/translator/src/translator.mjs +0 -317
- package/src/ngtsc/translator/src/type_translator.mjs +0 -204
- package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
- package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
- package/src/ngtsc/translator/translator.externs.js +0 -0
- package/src/ngtsc/tsc_plugin.mjs +0 -98
- package/src/ngtsc/typecheck/api/api.externs.js +0 -0
- package/src/ngtsc/typecheck/api/api.mjs +0 -9
- package/src/ngtsc/typecheck/api/checker.mjs +0 -31
- package/src/ngtsc/typecheck/api/completion.mjs +0 -16
- package/src/ngtsc/typecheck/api/context.mjs +0 -9
- package/src/ngtsc/typecheck/api/index.mjs +0 -14
- package/src/ngtsc/typecheck/api/scope.mjs +0 -9
- package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
- package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
- package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
- package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
- package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
- package/src/ngtsc/typecheck/index.mjs +0 -12
- package/src/ngtsc/typecheck/src/checker.mjs +0 -591
- package/src/ngtsc/typecheck/src/comments.mjs +0 -159
- package/src/ngtsc/typecheck/src/completion.mjs +0 -155
- package/src/ngtsc/typecheck/src/context.mjs +0 -350
- package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
- package/src/ngtsc/typecheck/src/dom.mjs +0 -68
- package/src/ngtsc/typecheck/src/environment.mjs +0 -146
- package/src/ngtsc/typecheck/src/expression.mjs +0 -412
- package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
- package/src/ngtsc/typecheck/src/oob.mjs +0 -112
- package/src/ngtsc/typecheck/src/shim.mjs +0 -37
- package/src/ngtsc/typecheck/src/source.mjs +0 -74
- package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
- package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
- package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -472
- package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
- package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
- package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
- package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
- package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -140
- package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -80
- package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
- package/src/ngtsc/util/src/path.mjs +0 -18
- package/src/ngtsc/util/src/typescript.mjs +0 -143
- package/src/ngtsc/util/src/visitor.mjs +0 -107
- package/src/ngtsc/util/util.externs.js +0 -0
- package/src/perform_compile.mjs +0 -275
- package/src/perform_watch.mjs +0 -247
- package/src/tooling.mjs +0 -32
- package/src/transformers/api.mjs +0 -27
- package/src/transformers/compiler_host.mjs +0 -593
- package/src/transformers/downlevel_decorators_transform.mjs +0 -507
- package/src/transformers/entry_points.mjs +0 -10
- package/src/transformers/inline_resources.mjs +0 -269
- package/src/transformers/lower_expressions.mjs +0 -336
- package/src/transformers/metadata_cache.mjs +0 -53
- package/src/transformers/metadata_reader.mjs +0 -104
- package/src/transformers/node_emitter.mjs +0 -606
- package/src/transformers/node_emitter_transform.mjs +0 -78
- package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
- package/src/transformers/program.mjs +0 -935
- package/src/transformers/r3_metadata_transform.mjs +0 -46
- package/src/transformers/r3_transform.mjs +0 -29
- package/src/transformers/util.mjs +0 -89
- package/src/typescript_support.mjs +0 -57
- package/src/version.mjs +0 -15
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { compileComponentFromMetadata, DEFAULT_INTERPOLATION_CONFIG, InterpolationConfig, makeBindingParser, parseTemplate } from '@angular/compiler';
|
|
9
|
-
import { ChangeDetectionStrategy, ViewEncapsulation } from '@angular/compiler/src/core';
|
|
10
|
-
import { FatalLinkerError } from '../../fatal_linker_error';
|
|
11
|
-
import { toR3DirectiveMeta } from './partial_directive_linker_1';
|
|
12
|
-
import { extractForwardRef } from './util';
|
|
13
|
-
/**
|
|
14
|
-
* A `PartialLinker` that is designed to process `ɵɵngDeclareComponent()` call expressions.
|
|
15
|
-
*/
|
|
16
|
-
export class PartialComponentLinkerVersion1 {
|
|
17
|
-
constructor(getSourceFile, sourceUrl, code) {
|
|
18
|
-
this.getSourceFile = getSourceFile;
|
|
19
|
-
this.sourceUrl = sourceUrl;
|
|
20
|
-
this.code = code;
|
|
21
|
-
}
|
|
22
|
-
linkPartialDeclaration(constantPool, metaObj) {
|
|
23
|
-
const meta = this.toR3ComponentMeta(metaObj);
|
|
24
|
-
const def = compileComponentFromMetadata(meta, constantPool, makeBindingParser());
|
|
25
|
-
return def.expression;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* This function derives the `R3ComponentMetadata` from the provided AST object.
|
|
29
|
-
*/
|
|
30
|
-
toR3ComponentMeta(metaObj) {
|
|
31
|
-
const interpolation = parseInterpolationConfig(metaObj);
|
|
32
|
-
const templateSource = metaObj.getValue('template');
|
|
33
|
-
const isInline = metaObj.has('isInline') ? metaObj.getBoolean('isInline') : false;
|
|
34
|
-
const templateInfo = this.getTemplateInfo(templateSource, isInline);
|
|
35
|
-
const template = parseTemplate(templateInfo.code, templateInfo.sourceUrl, {
|
|
36
|
-
escapedString: templateInfo.isEscaped,
|
|
37
|
-
interpolationConfig: interpolation,
|
|
38
|
-
range: templateInfo.range,
|
|
39
|
-
enableI18nLegacyMessageIdFormat: false,
|
|
40
|
-
preserveWhitespaces: metaObj.has('preserveWhitespaces') ? metaObj.getBoolean('preserveWhitespaces') : false,
|
|
41
|
-
// We normalize line endings if the template is was inline.
|
|
42
|
-
i18nNormalizeLineEndingsInICUs: isInline,
|
|
43
|
-
});
|
|
44
|
-
if (template.errors !== null) {
|
|
45
|
-
const errors = template.errors.map(err => err.toString()).join('\n');
|
|
46
|
-
throw new FatalLinkerError(templateSource.expression, `Errors found in the template:\n${errors}`);
|
|
47
|
-
}
|
|
48
|
-
let declarationListEmitMode = 0 /* Direct */;
|
|
49
|
-
const collectUsedDirectives = (directives) => {
|
|
50
|
-
return directives.map(directive => {
|
|
51
|
-
const directiveExpr = directive.getObject();
|
|
52
|
-
const type = directiveExpr.getValue('type');
|
|
53
|
-
const selector = directiveExpr.getString('selector');
|
|
54
|
-
const { expression: typeExpr, isForwardRef } = extractForwardRef(type);
|
|
55
|
-
if (isForwardRef) {
|
|
56
|
-
declarationListEmitMode = 1 /* Closure */;
|
|
57
|
-
}
|
|
58
|
-
return {
|
|
59
|
-
type: typeExpr,
|
|
60
|
-
selector: selector,
|
|
61
|
-
inputs: directiveExpr.has('inputs') ?
|
|
62
|
-
directiveExpr.getArray('inputs').map(input => input.getString()) :
|
|
63
|
-
[],
|
|
64
|
-
outputs: directiveExpr.has('outputs') ?
|
|
65
|
-
directiveExpr.getArray('outputs').map(input => input.getString()) :
|
|
66
|
-
[],
|
|
67
|
-
exportAs: directiveExpr.has('exportAs') ?
|
|
68
|
-
directiveExpr.getArray('exportAs').map(exportAs => exportAs.getString()) :
|
|
69
|
-
null,
|
|
70
|
-
};
|
|
71
|
-
});
|
|
72
|
-
};
|
|
73
|
-
let directives = [];
|
|
74
|
-
if (metaObj.has('components')) {
|
|
75
|
-
directives.push(...collectUsedDirectives(metaObj.getArray('components')));
|
|
76
|
-
}
|
|
77
|
-
if (metaObj.has('directives')) {
|
|
78
|
-
directives.push(...collectUsedDirectives(metaObj.getArray('directives')));
|
|
79
|
-
}
|
|
80
|
-
let pipes = new Map();
|
|
81
|
-
if (metaObj.has('pipes')) {
|
|
82
|
-
pipes = metaObj.getObject('pipes').toMap(pipe => {
|
|
83
|
-
const { expression: pipeType, isForwardRef } = extractForwardRef(pipe);
|
|
84
|
-
if (isForwardRef) {
|
|
85
|
-
declarationListEmitMode = 1 /* Closure */;
|
|
86
|
-
}
|
|
87
|
-
return pipeType;
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
return Object.assign(Object.assign({}, toR3DirectiveMeta(metaObj, this.code, this.sourceUrl)), { viewProviders: metaObj.has('viewProviders') ? metaObj.getOpaque('viewProviders') : null, template: {
|
|
91
|
-
nodes: template.nodes,
|
|
92
|
-
ngContentSelectors: template.ngContentSelectors,
|
|
93
|
-
}, declarationListEmitMode, styles: metaObj.has('styles') ? metaObj.getArray('styles').map(entry => entry.getString()) :
|
|
94
|
-
[], encapsulation: metaObj.has('encapsulation') ?
|
|
95
|
-
parseEncapsulation(metaObj.getValue('encapsulation')) :
|
|
96
|
-
ViewEncapsulation.Emulated, interpolation, changeDetection: metaObj.has('changeDetection') ?
|
|
97
|
-
parseChangeDetectionStrategy(metaObj.getValue('changeDetection')) :
|
|
98
|
-
ChangeDetectionStrategy.Default, animations: metaObj.has('animations') ? metaObj.getOpaque('animations') : null, relativeContextFilePath: this.sourceUrl, i18nUseExternalIds: false, pipes,
|
|
99
|
-
directives });
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Update the range to remove the start and end chars, which should be quotes around the template.
|
|
103
|
-
*/
|
|
104
|
-
getTemplateInfo(templateNode, isInline) {
|
|
105
|
-
const range = templateNode.getRange();
|
|
106
|
-
if (!isInline) {
|
|
107
|
-
// If not marked as inline, then we try to get the template info from the original external
|
|
108
|
-
// template file, via source-mapping.
|
|
109
|
-
const externalTemplate = this.tryExternalTemplate(range);
|
|
110
|
-
if (externalTemplate !== null) {
|
|
111
|
-
return externalTemplate;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
// Either the template is marked inline or we failed to find the original external template.
|
|
115
|
-
// So just use the literal string from the partially compiled component declaration.
|
|
116
|
-
return this.templateFromPartialCode(templateNode, range);
|
|
117
|
-
}
|
|
118
|
-
tryExternalTemplate(range) {
|
|
119
|
-
const sourceFile = this.getSourceFile();
|
|
120
|
-
if (sourceFile === null) {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
const pos = sourceFile.getOriginalLocation(range.startLine, range.startCol);
|
|
124
|
-
// Only interested if the original location is in an "external" template file:
|
|
125
|
-
// * the file is different to the current file
|
|
126
|
-
// * the file does not end in `.js` or `.ts` (we expect it to be something like `.html`).
|
|
127
|
-
// * the range starts at the beginning of the file
|
|
128
|
-
if (pos === null || pos.file === this.sourceUrl || /\.[jt]s$/.test(pos.file) ||
|
|
129
|
-
pos.line !== 0 || pos.column !== 0) {
|
|
130
|
-
return null;
|
|
131
|
-
}
|
|
132
|
-
const templateContents = sourceFile.sources.find(src => (src === null || src === void 0 ? void 0 : src.sourcePath) === pos.file).contents;
|
|
133
|
-
return {
|
|
134
|
-
code: templateContents,
|
|
135
|
-
sourceUrl: pos.file,
|
|
136
|
-
range: { startPos: 0, startLine: 0, startCol: 0, endPos: templateContents.length },
|
|
137
|
-
isEscaped: false,
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
templateFromPartialCode(templateNode, { startPos, endPos, startLine, startCol }) {
|
|
141
|
-
if (!/["'`]/.test(this.code[startPos]) || this.code[startPos] !== this.code[endPos - 1]) {
|
|
142
|
-
throw new FatalLinkerError(templateNode.expression, `Expected the template string to be wrapped in quotes but got: ${this.code.substring(startPos, endPos)}`);
|
|
143
|
-
}
|
|
144
|
-
return {
|
|
145
|
-
code: this.code,
|
|
146
|
-
sourceUrl: this.sourceUrl,
|
|
147
|
-
range: { startPos: startPos + 1, endPos: endPos - 1, startLine, startCol: startCol + 1 },
|
|
148
|
-
isEscaped: true,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Extract an `InterpolationConfig` from the component declaration.
|
|
154
|
-
*/
|
|
155
|
-
function parseInterpolationConfig(metaObj) {
|
|
156
|
-
if (!metaObj.has('interpolation')) {
|
|
157
|
-
return DEFAULT_INTERPOLATION_CONFIG;
|
|
158
|
-
}
|
|
159
|
-
const interpolationExpr = metaObj.getValue('interpolation');
|
|
160
|
-
const values = interpolationExpr.getArray().map(entry => entry.getString());
|
|
161
|
-
if (values.length !== 2) {
|
|
162
|
-
throw new FatalLinkerError(interpolationExpr.expression, 'Unsupported interpolation config, expected an array containing exactly two strings');
|
|
163
|
-
}
|
|
164
|
-
return InterpolationConfig.fromArray(values);
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Determines the `ViewEncapsulation` mode from the AST value's symbol name.
|
|
168
|
-
*/
|
|
169
|
-
function parseEncapsulation(encapsulation) {
|
|
170
|
-
const symbolName = encapsulation.getSymbolName();
|
|
171
|
-
if (symbolName === null) {
|
|
172
|
-
throw new FatalLinkerError(encapsulation.expression, 'Expected encapsulation to have a symbol name');
|
|
173
|
-
}
|
|
174
|
-
const enumValue = ViewEncapsulation[symbolName];
|
|
175
|
-
if (enumValue === undefined) {
|
|
176
|
-
throw new FatalLinkerError(encapsulation.expression, 'Unsupported encapsulation');
|
|
177
|
-
}
|
|
178
|
-
return enumValue;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Determines the `ChangeDetectionStrategy` from the AST value's symbol name.
|
|
182
|
-
*/
|
|
183
|
-
function parseChangeDetectionStrategy(changeDetectionStrategy) {
|
|
184
|
-
const symbolName = changeDetectionStrategy.getSymbolName();
|
|
185
|
-
if (symbolName === null) {
|
|
186
|
-
throw new FatalLinkerError(changeDetectionStrategy.expression, 'Expected change detection strategy to have a symbol name');
|
|
187
|
-
}
|
|
188
|
-
const enumValue = ChangeDetectionStrategy[symbolName];
|
|
189
|
-
if (enumValue === undefined) {
|
|
190
|
-
throw new FatalLinkerError(changeDetectionStrategy.expression, 'Unsupported change detection strategy');
|
|
191
|
-
}
|
|
192
|
-
return enumValue;
|
|
193
|
-
}
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbF9jb21wb25lbnRfbGlua2VyXzEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbGlua2VyL3NyYy9maWxlX2xpbmtlci9wYXJ0aWFsX2xpbmtlcnMvcGFydGlhbF9jb21wb25lbnRfbGlua2VyXzEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFDLDRCQUE0QixFQUF5Qyw0QkFBNEIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQWlJLE1BQU0sbUJBQW1CLENBQUM7QUFDM1QsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFNdEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFHMUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFFL0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXpDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDhCQUE4QjtJQUV6QyxZQUNxQixhQUE4QixFQUFVLFNBQXlCLEVBQzFFLElBQVk7UUFESCxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUMxRSxTQUFJLEdBQUosSUFBSSxDQUFRO0lBQUcsQ0FBQztJQUU1QixzQkFBc0IsQ0FDbEIsWUFBMEIsRUFDMUIsT0FBcUQ7UUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxHQUFHLDRCQUE0QixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7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QUFVLEtBQUssSUFBSSxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSxnQkFBZ0IsQ0FDdEIsdUJBQXVCLENBQUMsVUFBVSxFQUNsQywwREFBMEQsQ0FBQyxDQUFDO0tBQ2pFO0lBQ0QsTUFBTSxTQUFTLEdBQUcsdUJBQXVCLENBQUMsVUFBa0QsQ0FBQyxDQUFDO0lBQzlGLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtRQUMzQixNQUFNLElBQUksZ0JBQWdCLENBQ3RCLHVCQUF1QixDQUFDLFVBQVUsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO0tBQ2xGO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtjb21waWxlQ29tcG9uZW50RnJvbU1ldGFkYXRhLCBDb25zdGFudFBvb2wsIERlY2xhcmF0aW9uTGlzdEVtaXRNb2RlLCBERUZBVUxUX0lOVEVSUE9MQVRJT05fQ09ORklHLCBJbnRlcnBvbGF0aW9uQ29uZmlnLCBtYWtlQmluZGluZ1BhcnNlciwgcGFyc2VUZW1wbGF0ZSwgUjNDb21wb25lbnRNZXRhZGF0YSwgUjNEZWNsYXJlQ29tcG9uZW50TWV0YWRhdGEsIFIzRGVjbGFyZVVzZWREaXJlY3RpdmVNZXRhZGF0YSwgUjNQYXJ0aWFsRGVjbGFyYXRpb24sIFIzVXNlZERpcmVjdGl2ZU1ldGFkYXRhfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXIvc3JjL2NvcmUnO1xuaW1wb3J0ICogYXMgbyBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvb3V0cHV0L291dHB1dF9hc3QnO1xuXG5pbXBvcnQge0Fic29sdXRlRnNQYXRofSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtSYW5nZX0gZnJvbSAnLi4vLi4vYXN0L2FzdF9ob3N0JztcbmltcG9ydCB7QXN0T2JqZWN0LCBBc3RWYWx1ZX0gZnJvbSAnLi4vLi4vYXN0L2FzdF92YWx1ZSc7XG5pbXBvcnQge0ZhdGFsTGlua2VyRXJyb3J9IGZyb20gJy4uLy4uL2ZhdGFsX2xpbmtlcl9lcnJvcic7XG5pbXBvcnQge0dldFNvdXJjZUZpbGVGbn0gZnJvbSAnLi4vZ2V0X3NvdXJjZV9maWxlJztcblxuaW1wb3J0IHt0b1IzRGlyZWN0aXZlTWV0YX0gZnJvbSAnLi9wYXJ0aWFsX2RpcmVjdGl2ZV9saW5rZXJfMSc7XG5pbXBvcnQge1BhcnRpYWxMaW5rZXJ9IGZyb20gJy4vcGFydGlhbF9saW5rZXInO1xuaW1wb3J0IHtleHRyYWN0Rm9yd2FyZFJlZn0gZnJvbSAnLi91dGlsJztcblxuLyoqXG4gKiBBIGBQYXJ0aWFsTGlua2VyYCB0aGF0IGlzIGRlc2lnbmVkIHRvIHByb2Nlc3MgYMm1ybVuZ0RlY2xhcmVDb21wb25lbnQoKWAgY2FsbCBleHByZXNzaW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcnRpYWxDb21wb25lbnRMaW5rZXJWZXJzaW9uMTxUU3RhdGVtZW50LCBURXhwcmVzc2lvbj4gaW1wbGVtZW50c1xuICAgIFBhcnRpYWxMaW5rZXI8VEV4cHJlc3Npb24+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGdldFNvdXJjZUZpbGU6IEdldFNvdXJjZUZpbGVGbiwgcHJpdmF0ZSBzb3VyY2VVcmw6IEFic29sdXRlRnNQYXRoLFxuICAgICAgcHJpdmF0ZSBjb2RlOiBzdHJpbmcpIHt9XG5cbiAgbGlua1BhcnRpYWxEZWNsYXJhdGlvbihcbiAgICAgIGNvbnN0YW50UG9vbDogQ29uc3RhbnRQb29sLFxuICAgICAgbWV0YU9iajogQXN0T2JqZWN0PFIzUGFydGlhbERlY2xhcmF0aW9uLCBURXhwcmVzc2lvbj4pOiBvLkV4cHJlc3Npb24ge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnRvUjNDb21wb25lbnRNZXRhKG1ldGFPYmopO1xuICAgIGNvbnN0IGRlZiA9IGNvbXBpbGVDb21wb25lbnRGcm9tTWV0YWRhdGEobWV0YSwgY29uc3RhbnRQb29sLCBtYWtlQmluZGluZ1BhcnNlcigpKTtcbiAgICByZXR1cm4gZGVmLmV4cHJlc3Npb247XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBkZXJpdmVzIHRoZSBgUjNDb21wb25lbnRNZXRhZGF0YWAgZnJvbSB0aGUgcHJvdmlkZWQgQVNUIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgdG9SM0NvbXBvbmVudE1ldGEobWV0YU9iajogQXN0T2JqZWN0PFIzRGVjbGFyZUNvbXBvbmVudE1ldGFkYXRhLCBURXhwcmVzc2lvbj4pOlxuICAgICAgUjNDb21wb25lbnRNZXRhZGF0YSB7XG4gICAgY29uc3QgaW50ZXJwb2xhdGlvbiA9IHBhcnNlSW50ZXJwb2xhdGlvbkNvbmZpZyhtZXRhT2JqKTtcbiAgICBjb25zdCB0ZW1wbGF0ZVNvdXJjZSA9IG1ldGFPYmouZ2V0VmFsdWUoJ3RlbXBsYXRlJyk7XG4gICAgY29uc3QgaXNJbmxpbmUgPSBtZXRhT2JqLmhhcygnaXNJbmxpbmUnKSA/IG1ldGFPYmouZ2V0Qm9vbGVhbignaXNJbmxpbmUnKSA6IGZhbHNlO1xuICAgIGNvbnN0IHRlbXBsYXRlSW5mbyA9IHRoaXMuZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlU291cmNlLCBpc0lubGluZSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHBhcnNlVGVtcGxhdGUodGVtcGxhdGVJbmZvLmNvZGUsIHRlbXBsYXRlSW5mby5zb3VyY2VVcmwsIHtcbiAgICAgIGVzY2FwZWRTdHJpbmc6IHRlbXBsYXRlSW5mby5pc0VzY2FwZWQsXG4gICAgICBpbnRlcnBvbGF0aW9uQ29uZmlnOiBpbnRlcnBvbGF0aW9uLFxuICAgICAgcmFuZ2U6IHRlbXBsYXRlSW5mby5yYW5nZSxcbiAgICAgIGVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlczpcbiAgICAgICAgICBtZXRhT2JqLmhhcygncHJlc2VydmVXaGl0ZXNwYWNlcycpID8gbWV0YU9iai5nZXRCb29sZWFuKCdwcmVzZXJ2ZVdoaXRlc3BhY2VzJykgOiBmYWxzZSxcbiAgICAgIC8vIFdlIG5vcm1hbGl6ZSBsaW5lIGVuZGluZ3MgaWYgdGhlIHRlbXBsYXRlIGlzIHdhcyBpbmxpbmUuXG4gICAgICBpMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXM6IGlzSW5saW5lLFxuICAgIH0pO1xuICAgIGlmICh0ZW1wbGF0ZS5lcnJvcnMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IHRlbXBsYXRlLmVycm9ycy5tYXAoZXJyID0+IGVyci50b1N0cmluZygpKS5qb2luKCdcXG4nKTtcbiAgICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICAgIHRlbXBsYXRlU291cmNlLmV4cHJlc3Npb24sIGBFcnJvcnMgZm91bmQgaW4gdGhlIHRlbXBsYXRlOlxcbiR7ZXJyb3JzfWApO1xuICAgIH1cblxuICAgIGxldCBkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSA9IERlY2xhcmF0aW9uTGlzdEVtaXRNb2RlLkRpcmVjdDtcblxuICAgIGNvbnN0IGNvbGxlY3RVc2VkRGlyZWN0aXZlcyA9XG4gICAgICAgIChkaXJlY3RpdmVzOiBBc3RWYWx1ZTxSM0RlY2xhcmVVc2VkRGlyZWN0aXZlTWV0YWRhdGEsIFRFeHByZXNzaW9uPltdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZXMubWFwKGRpcmVjdGl2ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3RpdmVFeHByID0gZGlyZWN0aXZlLmdldE9iamVjdCgpO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IGRpcmVjdGl2ZUV4cHIuZ2V0VmFsdWUoJ3R5cGUnKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gZGlyZWN0aXZlRXhwci5nZXRTdHJpbmcoJ3NlbGVjdG9yJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHtleHByZXNzaW9uOiB0eXBlRXhwciwgaXNGb3J3YXJkUmVmfSA9IGV4dHJhY3RGb3J3YXJkUmVmKHR5cGUpO1xuICAgICAgICAgICAgaWYgKGlzRm9yd2FyZFJlZikge1xuICAgICAgICAgICAgICBkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSA9IERlY2xhcmF0aW9uTGlzdEVtaXRNb2RlLkNsb3N1cmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGU6IHR5cGVFeHByLFxuICAgICAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICAgICAgICAgIGlucHV0czogZGlyZWN0aXZlRXhwci5oYXMoJ2lucHV0cycpID9cbiAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZUV4cHIuZ2V0QXJyYXkoJ2lucHV0cycpLm1hcChpbnB1dCA9PiBpbnB1dC5nZXRTdHJpbmcoKSkgOlxuICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgIG91dHB1dHM6IGRpcmVjdGl2ZUV4cHIuaGFzKCdvdXRwdXRzJykgP1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlRXhwci5nZXRBcnJheSgnb3V0cHV0cycpLm1hcChpbnB1dCA9PiBpbnB1dC5nZXRTdHJpbmcoKSkgOlxuICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgIGV4cG9ydEFzOiBkaXJlY3RpdmVFeHByLmhhcygnZXhwb3J0QXMnKSA/XG4gICAgICAgICAgICAgICAgICBkaXJlY3RpdmVFeHByLmdldEFycmF5KCdleHBvcnRBcycpLm1hcChleHBvcnRBcyA9PiBleHBvcnRBcy5nZXRTdHJpbmcoKSkgOlxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICBsZXQgZGlyZWN0aXZlczogUjNVc2VkRGlyZWN0aXZlTWV0YWRhdGFbXSA9IFtdO1xuICAgIGlmIChtZXRhT2JqLmhhcygnY29tcG9uZW50cycpKSB7XG4gICAgICBkaXJlY3RpdmVzLnB1c2goLi4uY29sbGVjdFVzZWREaXJlY3RpdmVzKG1ldGFPYmouZ2V0QXJyYXkoJ2NvbXBvbmVudHMnKSkpO1xuICAgIH1cbiAgICBpZiAobWV0YU9iai5oYXMoJ2RpcmVjdGl2ZXMnKSkge1xuICAgICAgZGlyZWN0aXZlcy5wdXNoKC4uLmNvbGxlY3RVc2VkRGlyZWN0aXZlcyhtZXRhT2JqLmdldEFycmF5KCdkaXJlY3RpdmVzJykpKTtcbiAgICB9XG5cbiAgICBsZXQgcGlwZXMgPSBuZXcgTWFwPHN0cmluZywgby5FeHByZXNzaW9uPigpO1xuICAgIGlmIChtZXRhT2JqLmhhcygncGlwZXMnKSkge1xuICAgICAgcGlwZXMgPSBtZXRhT2JqLmdldE9iamVjdCgncGlwZXMnKS50b01hcChwaXBlID0+IHtcbiAgICAgICAgY29uc3Qge2V4cHJlc3Npb246IHBpcGVUeXBlLCBpc0ZvcndhcmRSZWZ9ID0gZXh0cmFjdEZvcndhcmRSZWYocGlwZSk7XG4gICAgICAgIGlmIChpc0ZvcndhcmRSZWYpIHtcbiAgICAgICAgICBkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSA9IERlY2xhcmF0aW9uTGlzdEVtaXRNb2RlLkNsb3N1cmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVUeXBlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRvUjNEaXJlY3RpdmVNZXRhKG1ldGFPYmosIHRoaXMuY29kZSwgdGhpcy5zb3VyY2VVcmwpLFxuICAgICAgdmlld1Byb3ZpZGVyczogbWV0YU9iai5oYXMoJ3ZpZXdQcm92aWRlcnMnKSA/IG1ldGFPYmouZ2V0T3BhcXVlKCd2aWV3UHJvdmlkZXJzJykgOiBudWxsLFxuICAgICAgdGVtcGxhdGU6IHtcbiAgICAgICAgbm9kZXM6IHRlbXBsYXRlLm5vZGVzLFxuICAgICAgICBuZ0NvbnRlbnRTZWxlY3RvcnM6IHRlbXBsYXRlLm5nQ29udGVudFNlbGVjdG9ycyxcbiAgICAgIH0sXG4gICAgICBkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSxcbiAgICAgIHN0eWxlczogbWV0YU9iai5oYXMoJ3N0eWxlcycpID8gbWV0YU9iai5nZXRBcnJheSgnc3R5bGVzJykubWFwKGVudHJ5ID0+IGVudHJ5LmdldFN0cmluZygpKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdLFxuICAgICAgZW5jYXBzdWxhdGlvbjogbWV0YU9iai5oYXMoJ2VuY2Fwc3VsYXRpb24nKSA/XG4gICAgICAgICAgcGFyc2VFbmNhcHN1bGF0aW9uKG1ldGFPYmouZ2V0VmFsdWUoJ2VuY2Fwc3VsYXRpb24nKSkgOlxuICAgICAgICAgIFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICAgICAgaW50ZXJwb2xhdGlvbixcbiAgICAgIGNoYW5nZURldGVjdGlvbjogbWV0YU9iai5oYXMoJ2NoYW5nZURldGVjdGlvbicpID9cbiAgICAgICAgICBwYXJzZUNoYW5nZURldGVjdGlvblN0cmF0ZWd5KG1ldGFPYmouZ2V0VmFsdWUoJ2NoYW5nZURldGVjdGlvbicpKSA6XG4gICAgICAgICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbiAgICAgIGFuaW1hdGlvbnM6IG1ldGFPYmouaGFzKCdhbmltYXRpb25zJykgPyBtZXRhT2JqLmdldE9wYXF1ZSgnYW5pbWF0aW9ucycpIDogbnVsbCxcbiAgICAgIHJlbGF0aXZlQ29udGV4dEZpbGVQYXRoOiB0aGlzLnNvdXJjZVVybCxcbiAgICAgIGkxOG5Vc2VFeHRlcm5hbElkczogZmFsc2UsXG4gICAgICBwaXBlcyxcbiAgICAgIGRpcmVjdGl2ZXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHJhbmdlIHRvIHJlbW92ZSB0aGUgc3RhcnQgYW5kIGVuZCBjaGFycywgd2hpY2ggc2hvdWxkIGJlIHF1b3RlcyBhcm91bmQgdGhlIHRlbXBsYXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGVOb2RlOiBBc3RWYWx1ZTx1bmtub3duLCBURXhwcmVzc2lvbj4sIGlzSW5saW5lOiBib29sZWFuKTpcbiAgICAgIFRlbXBsYXRlSW5mbyB7XG4gICAgY29uc3QgcmFuZ2UgPSB0ZW1wbGF0ZU5vZGUuZ2V0UmFuZ2UoKTtcblxuICAgIGlmICghaXNJbmxpbmUpIHtcbiAgICAgIC8vIElmIG5vdCBtYXJrZWQgYXMgaW5saW5lLCB0aGVuIHdlIHRyeSB0byBnZXQgdGhlIHRlbXBsYXRlIGluZm8gZnJvbSB0aGUgb3JpZ2luYWwgZXh0ZXJuYWxcbiAgICAgIC8vIHRlbXBsYXRlIGZpbGUsIHZpYSBzb3VyY2UtbWFwcGluZy5cbiAgICAgIGNvbnN0IGV4dGVybmFsVGVtcGxhdGUgPSB0aGlzLnRyeUV4dGVybmFsVGVtcGxhdGUocmFuZ2UpO1xuICAgICAgaWYgKGV4dGVybmFsVGVtcGxhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVybmFsVGVtcGxhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRWl0aGVyIHRoZSB0ZW1wbGF0ZSBpcyBtYXJrZWQgaW5saW5lIG9yIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBvcmlnaW5hbCBleHRlcm5hbCB0ZW1wbGF0ZS5cbiAgICAvLyBTbyBqdXN0IHVzZSB0aGUgbGl0ZXJhbCBzdHJpbmcgZnJvbSB0aGUgcGFydGlhbGx5IGNvbXBpbGVkIGNvbXBvbmVudCBkZWNsYXJhdGlvbi5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZUZyb21QYXJ0aWFsQ29kZSh0ZW1wbGF0ZU5vZGUsIHJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJ5RXh0ZXJuYWxUZW1wbGF0ZShyYW5nZTogUmFuZ2UpOiBUZW1wbGF0ZUluZm98bnVsbCB7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IHRoaXMuZ2V0U291cmNlRmlsZSgpO1xuICAgIGlmIChzb3VyY2VGaWxlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwb3MgPSBzb3VyY2VGaWxlLmdldE9yaWdpbmFsTG9jYXRpb24ocmFuZ2Uuc3RhcnRMaW5lLCByYW5nZS5zdGFydENvbCk7XG4gICAgLy8gT25seSBpbnRlcmVzdGVkIGlmIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBpcyBpbiBhbiBcImV4dGVybmFsXCIgdGVtcGxhdGUgZmlsZTpcbiAgICAvLyAqIHRoZSBmaWxlIGlzIGRpZmZlcmVudCB0byB0aGUgY3VycmVudCBmaWxlXG4gICAgLy8gKiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gYC5qc2Agb3IgYC50c2AgKHdlIGV4cGVjdCBpdCB0byBiZSBzb21ldGhpbmcgbGlrZSBgLmh0bWxgKS5cbiAgICAvLyAqIHRoZSByYW5nZSBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZVxuICAgIGlmIChwb3MgPT09IG51bGwgfHwgcG9zLmZpbGUgPT09IHRoaXMuc291cmNlVXJsIHx8IC9cXC5banRdcyQvLnRlc3QocG9zLmZpbGUpIHx8XG4gICAgICAgIHBvcy5saW5lICE9PSAwIHx8IHBvcy5jb2x1bW4gIT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlQ29udGVudHMgPSBzb3VyY2VGaWxlLnNvdXJjZXMuZmluZChzcmMgPT4gc3JjPy5zb3VyY2VQYXRoID09PSBwb3MuZmlsZSkhLmNvbnRlbnRzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IHRlbXBsYXRlQ29udGVudHMsXG4gICAgICBzb3VyY2VVcmw6IHBvcy5maWxlLFxuICAgICAgcmFuZ2U6IHtzdGFydFBvczogMCwgc3RhcnRMaW5lOiAwLCBzdGFydENvbDogMCwgZW5kUG9zOiB0ZW1wbGF0ZUNvbnRlbnRzLmxlbmd0aH0sXG4gICAgICBpc0VzY2FwZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRlbXBsYXRlRnJvbVBhcnRpYWxDb2RlKFxuICAgICAgdGVtcGxhdGVOb2RlOiBBc3RWYWx1ZTx1bmtub3duLCBURXhwcmVzc2lvbj4sXG4gICAgICB7c3RhcnRQb3MsIGVuZFBvcywgc3RhcnRMaW5lLCBzdGFydENvbH06IFJhbmdlKTogVGVtcGxhdGVJbmZvIHtcbiAgICBpZiAoIS9bXCInYF0vLnRlc3QodGhpcy5jb2RlW3N0YXJ0UG9zXSkgfHwgdGhpcy5jb2RlW3N0YXJ0UG9zXSAhPT0gdGhpcy5jb2RlW2VuZFBvcyAtIDFdKSB7XG4gICAgICB0aHJvdyBuZXcgRmF0YWxMaW5rZXJFcnJvcihcbiAgICAgICAgICB0ZW1wbGF0ZU5vZGUuZXhwcmVzc2lvbixcbiAgICAgICAgICBgRXhwZWN0ZWQgdGhlIHRlbXBsYXRlIHN0cmluZyB0byBiZSB3cmFwcGVkIGluIHF1b3RlcyBidXQgZ290OiAke1xuICAgICAgICAgICAgICB0aGlzLmNvZGUuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MpfWApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc291cmNlVXJsOiB0aGlzLnNvdXJjZVVybCxcbiAgICAgIHJhbmdlOiB7c3RhcnRQb3M6IHN0YXJ0UG9zICsgMSwgZW5kUG9zOiBlbmRQb3MgLSAxLCBzdGFydExpbmUsIHN0YXJ0Q29sOiBzdGFydENvbCArIDF9LFxuICAgICAgaXNFc2NhcGVkOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cblxuaW50ZXJmYWNlIFRlbXBsYXRlSW5mbyB7XG4gIGNvZGU6IHN0cmluZztcbiAgc291cmNlVXJsOiBzdHJpbmc7XG4gIHJhbmdlOiBSYW5nZTtcbiAgaXNFc2NhcGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYW4gYEludGVycG9sYXRpb25Db25maWdgIGZyb20gdGhlIGNvbXBvbmVudCBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gcGFyc2VJbnRlcnBvbGF0aW9uQ29uZmlnPFRFeHByZXNzaW9uPihcbiAgICBtZXRhT2JqOiBBc3RPYmplY3Q8UjNEZWNsYXJlQ29tcG9uZW50TWV0YWRhdGEsIFRFeHByZXNzaW9uPik6IEludGVycG9sYXRpb25Db25maWcge1xuICBpZiAoIW1ldGFPYmouaGFzKCdpbnRlcnBvbGF0aW9uJykpIHtcbiAgICByZXR1cm4gREVGQVVMVF9JTlRFUlBPTEFUSU9OX0NPTkZJRztcbiAgfVxuXG4gIGNvbnN0IGludGVycG9sYXRpb25FeHByID0gbWV0YU9iai5nZXRWYWx1ZSgnaW50ZXJwb2xhdGlvbicpO1xuICBjb25zdCB2YWx1ZXMgPSBpbnRlcnBvbGF0aW9uRXhwci5nZXRBcnJheSgpLm1hcChlbnRyeSA9PiBlbnRyeS5nZXRTdHJpbmcoKSk7XG4gIGlmICh2YWx1ZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoXG4gICAgICAgIGludGVycG9sYXRpb25FeHByLmV4cHJlc3Npb24sXG4gICAgICAgICdVbnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGNvbmZpZywgZXhwZWN0ZWQgYW4gYXJyYXkgY29udGFpbmluZyBleGFjdGx5IHR3byBzdHJpbmdzJyk7XG4gIH1cbiAgcmV0dXJuIEludGVycG9sYXRpb25Db25maWcuZnJvbUFycmF5KHZhbHVlcyBhcyBbc3RyaW5nLCBzdHJpbmddKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBgVmlld0VuY2Fwc3VsYXRpb25gIG1vZGUgZnJvbSB0aGUgQVNUIHZhbHVlJ3Mgc3ltYm9sIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRW5jYXBzdWxhdGlvbjxURXhwcmVzc2lvbj4oZW5jYXBzdWxhdGlvbjogQXN0VmFsdWU8Vmlld0VuY2Fwc3VsYXRpb24sIFRFeHByZXNzaW9uPik6XG4gICAgVmlld0VuY2Fwc3VsYXRpb24ge1xuICBjb25zdCBzeW1ib2xOYW1lID0gZW5jYXBzdWxhdGlvbi5nZXRTeW1ib2xOYW1lKCk7XG4gIGlmIChzeW1ib2xOYW1lID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoXG4gICAgICAgIGVuY2Fwc3VsYXRpb24uZXhwcmVzc2lvbiwgJ0V4cGVjdGVkIGVuY2Fwc3VsYXRpb24gdG8gaGF2ZSBhIHN5bWJvbCBuYW1lJyk7XG4gIH1cbiAgY29uc3QgZW51bVZhbHVlID0gVmlld0VuY2Fwc3VsYXRpb25bc3ltYm9sTmFtZSBhcyBrZXlvZiB0eXBlb2YgVmlld0VuY2Fwc3VsYXRpb25dO1xuICBpZiAoZW51bVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRmF0YWxMaW5rZXJFcnJvcihlbmNhcHN1bGF0aW9uLmV4cHJlc3Npb24sICdVbnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uJyk7XG4gIH1cbiAgcmV0dXJuIGVudW1WYWx1ZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lgIGZyb20gdGhlIEFTVCB2YWx1ZSdzIHN5bWJvbCBuYW1lLlxuICovXG5mdW5jdGlvbiBwYXJzZUNoYW5nZURldGVjdGlvblN0cmF0ZWd5PFRFeHByZXNzaW9uPihcbiAgICBjaGFuZ2VEZXRlY3Rpb25TdHJhdGVneTogQXN0VmFsdWU8Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFRFeHByZXNzaW9uPik6XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kge1xuICBjb25zdCBzeW1ib2xOYW1lID0gY2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuZ2V0U3ltYm9sTmFtZSgpO1xuICBpZiAoc3ltYm9sTmFtZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICBjaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5leHByZXNzaW9uLFxuICAgICAgICAnRXhwZWN0ZWQgY2hhbmdlIGRldGVjdGlvbiBzdHJhdGVneSB0byBoYXZlIGEgc3ltYm9sIG5hbWUnKTtcbiAgfVxuICBjb25zdCBlbnVtVmFsdWUgPSBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVtzeW1ib2xOYW1lIGFzIGtleW9mIHR5cGVvZiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneV07XG4gIGlmIChlbnVtVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICBjaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5leHByZXNzaW9uLCAnVW5zdXBwb3J0ZWQgY2hhbmdlIGRldGVjdGlvbiBzdHJhdGVneScpO1xuICB9XG4gIHJldHVybiBlbnVtVmFsdWU7XG59XG4iXX0=
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { compileDirectiveFromMetadata, makeBindingParser, ParseLocation, ParseSourceFile, ParseSourceSpan } from '@angular/compiler';
|
|
9
|
-
import { FatalLinkerError } from '../../fatal_linker_error';
|
|
10
|
-
import { wrapReference } from './util';
|
|
11
|
-
/**
|
|
12
|
-
* A `PartialLinker` that is designed to process `ɵɵngDeclareDirective()` call expressions.
|
|
13
|
-
*/
|
|
14
|
-
export class PartialDirectiveLinkerVersion1 {
|
|
15
|
-
constructor(sourceUrl, code) {
|
|
16
|
-
this.sourceUrl = sourceUrl;
|
|
17
|
-
this.code = code;
|
|
18
|
-
}
|
|
19
|
-
linkPartialDeclaration(constantPool, metaObj) {
|
|
20
|
-
const meta = toR3DirectiveMeta(metaObj, this.code, this.sourceUrl);
|
|
21
|
-
const def = compileDirectiveFromMetadata(meta, constantPool, makeBindingParser());
|
|
22
|
-
return def.expression;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Derives the `R3DirectiveMetadata` structure from the AST object.
|
|
27
|
-
*/
|
|
28
|
-
export function toR3DirectiveMeta(metaObj, code, sourceUrl) {
|
|
29
|
-
const typeExpr = metaObj.getValue('type');
|
|
30
|
-
const typeName = typeExpr.getSymbolName();
|
|
31
|
-
if (typeName === null) {
|
|
32
|
-
throw new FatalLinkerError(typeExpr.expression, 'Unsupported type, its name could not be determined');
|
|
33
|
-
}
|
|
34
|
-
return {
|
|
35
|
-
typeSourceSpan: createSourceSpan(typeExpr.getRange(), code, sourceUrl),
|
|
36
|
-
type: wrapReference(typeExpr.getOpaque()),
|
|
37
|
-
typeArgumentCount: 0,
|
|
38
|
-
internalType: metaObj.getOpaque('type'),
|
|
39
|
-
deps: null,
|
|
40
|
-
host: toHostMetadata(metaObj),
|
|
41
|
-
inputs: metaObj.has('inputs') ? metaObj.getObject('inputs').toLiteral(toInputMapping) : {},
|
|
42
|
-
outputs: metaObj.has('outputs') ?
|
|
43
|
-
metaObj.getObject('outputs').toLiteral(value => value.getString()) :
|
|
44
|
-
{},
|
|
45
|
-
queries: metaObj.has('queries') ?
|
|
46
|
-
metaObj.getArray('queries').map(entry => toQueryMetadata(entry.getObject())) :
|
|
47
|
-
[],
|
|
48
|
-
viewQueries: metaObj.has('viewQueries') ?
|
|
49
|
-
metaObj.getArray('viewQueries').map(entry => toQueryMetadata(entry.getObject())) :
|
|
50
|
-
[],
|
|
51
|
-
providers: metaObj.has('providers') ? metaObj.getOpaque('providers') : null,
|
|
52
|
-
fullInheritance: false,
|
|
53
|
-
selector: metaObj.has('selector') ? metaObj.getString('selector') : null,
|
|
54
|
-
exportAs: metaObj.has('exportAs') ?
|
|
55
|
-
metaObj.getArray('exportAs').map(entry => entry.getString()) :
|
|
56
|
-
null,
|
|
57
|
-
lifecycle: {
|
|
58
|
-
usesOnChanges: metaObj.has('usesOnChanges') ? metaObj.getBoolean('usesOnChanges') : false,
|
|
59
|
-
},
|
|
60
|
-
name: typeName,
|
|
61
|
-
usesInheritance: metaObj.has('usesInheritance') ? metaObj.getBoolean('usesInheritance') : false,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Decodes the AST value for a single input to its representation as used in the metadata.
|
|
66
|
-
*/
|
|
67
|
-
function toInputMapping(value) {
|
|
68
|
-
if (value.isString()) {
|
|
69
|
-
return value.getString();
|
|
70
|
-
}
|
|
71
|
-
const values = value.getArray().map(innerValue => innerValue.getString());
|
|
72
|
-
if (values.length !== 2) {
|
|
73
|
-
throw new FatalLinkerError(value.expression, 'Unsupported input, expected a string or an array containing exactly two strings');
|
|
74
|
-
}
|
|
75
|
-
return values;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Extracts the host metadata configuration from the AST metadata object.
|
|
79
|
-
*/
|
|
80
|
-
function toHostMetadata(metaObj) {
|
|
81
|
-
if (!metaObj.has('host')) {
|
|
82
|
-
return {
|
|
83
|
-
attributes: {},
|
|
84
|
-
listeners: {},
|
|
85
|
-
properties: {},
|
|
86
|
-
specialAttributes: {},
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
const host = metaObj.getObject('host');
|
|
90
|
-
const specialAttributes = {};
|
|
91
|
-
if (host.has('styleAttribute')) {
|
|
92
|
-
specialAttributes.styleAttr = host.getString('styleAttribute');
|
|
93
|
-
}
|
|
94
|
-
if (host.has('classAttribute')) {
|
|
95
|
-
specialAttributes.classAttr = host.getString('classAttribute');
|
|
96
|
-
}
|
|
97
|
-
return {
|
|
98
|
-
attributes: host.has('attributes') ?
|
|
99
|
-
host.getObject('attributes').toLiteral(value => value.getOpaque()) :
|
|
100
|
-
{},
|
|
101
|
-
listeners: host.has('listeners') ?
|
|
102
|
-
host.getObject('listeners').toLiteral(value => value.getString()) :
|
|
103
|
-
{},
|
|
104
|
-
properties: host.has('properties') ?
|
|
105
|
-
host.getObject('properties').toLiteral(value => value.getString()) :
|
|
106
|
-
{},
|
|
107
|
-
specialAttributes,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Extracts the metadata for a single query from an AST object.
|
|
112
|
-
*/
|
|
113
|
-
function toQueryMetadata(obj) {
|
|
114
|
-
let predicate;
|
|
115
|
-
const predicateExpr = obj.getValue('predicate');
|
|
116
|
-
if (predicateExpr.isArray()) {
|
|
117
|
-
predicate = predicateExpr.getArray().map(entry => entry.getString());
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
predicate = predicateExpr.getOpaque();
|
|
121
|
-
}
|
|
122
|
-
return {
|
|
123
|
-
propertyName: obj.getString('propertyName'),
|
|
124
|
-
first: obj.has('first') ? obj.getBoolean('first') : false,
|
|
125
|
-
predicate,
|
|
126
|
-
descendants: obj.has('descendants') ? obj.getBoolean('descendants') : false,
|
|
127
|
-
emitDistinctChangesOnly: obj.has('emitDistinctChangesOnly') ? obj.getBoolean('emitDistinctChangesOnly') : true,
|
|
128
|
-
read: obj.has('read') ? obj.getOpaque('read') : null,
|
|
129
|
-
static: obj.has('static') ? obj.getBoolean('static') : false,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
export function createSourceSpan(range, code, sourceUrl) {
|
|
133
|
-
const sourceFile = new ParseSourceFile(code, sourceUrl);
|
|
134
|
-
const startLocation = new ParseLocation(sourceFile, range.startPos, range.startLine, range.startCol);
|
|
135
|
-
return new ParseSourceSpan(startLocation, startLocation.moveBy(range.endPos - range.startPos));
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbF9kaXJlY3RpdmVfbGlua2VyXzEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbGlua2VyL3NyYy9maWxlX2xpbmtlci9wYXJ0aWFsX2xpbmtlcnMvcGFydGlhbF9kaXJlY3RpdmVfbGlua2VyXzEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFDLDRCQUE0QixFQUFnQixpQkFBaUIsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBaUksTUFBTSxtQkFBbUIsQ0FBQztBQU1qUixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUcxRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXJDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDhCQUE4QjtJQUN6QyxZQUFvQixTQUF5QixFQUFVLElBQVk7UUFBL0MsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO0lBQUcsQ0FBQztJQUV2RSxzQkFBc0IsQ0FDbEIsWUFBMEIsRUFDMUIsT0FBcUQ7UUFDdkQsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sR0FBRyxHQUFHLDRCQUE0QixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDN0IsT0FBMkQsRUFBRSxJQUFZLEVBQ3pFLFNBQXlCO0lBQzNCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFD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QUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDakcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtjb21waWxlRGlyZWN0aXZlRnJvbU1ldGFkYXRhLCBDb25zdGFudFBvb2wsIG1ha2VCaW5kaW5nUGFyc2VyLCBQYXJzZUxvY2F0aW9uLCBQYXJzZVNvdXJjZUZpbGUsIFBhcnNlU291cmNlU3BhbiwgUjNEZWNsYXJlRGlyZWN0aXZlTWV0YWRhdGEsIFIzRGVjbGFyZVF1ZXJ5TWV0YWRhdGEsIFIzRGlyZWN0aXZlTWV0YWRhdGEsIFIzSG9zdE1ldGFkYXRhLCBSM1BhcnRpYWxEZWNsYXJhdGlvbiwgUjNRdWVyeU1ldGFkYXRhfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQgKiBhcyBvIGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9vdXRwdXQvb3V0cHV0X2FzdCc7XG5cbmltcG9ydCB7QWJzb2x1dGVGc1BhdGh9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9uZ3RzYy9maWxlX3N5c3RlbSc7XG5pbXBvcnQge1JhbmdlfSBmcm9tICcuLi8uLi9hc3QvYXN0X2hvc3QnO1xuaW1wb3J0IHtBc3RPYmplY3QsIEFzdFZhbHVlfSBmcm9tICcuLi8uLi9hc3QvYXN0X3ZhbHVlJztcbmltcG9ydCB7RmF0YWxMaW5rZXJFcnJvcn0gZnJvbSAnLi4vLi4vZmF0YWxfbGlua2VyX2Vycm9yJztcblxuaW1wb3J0IHtQYXJ0aWFsTGlua2VyfSBmcm9tICcuL3BhcnRpYWxfbGlua2VyJztcbmltcG9ydCB7d3JhcFJlZmVyZW5jZX0gZnJvbSAnLi91dGlsJztcblxuLyoqXG4gKiBBIGBQYXJ0aWFsTGlua2VyYCB0aGF0IGlzIGRlc2lnbmVkIHRvIHByb2Nlc3MgYMm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoKWAgY2FsbCBleHByZXNzaW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcnRpYWxEaXJlY3RpdmVMaW5rZXJWZXJzaW9uMTxURXhwcmVzc2lvbj4gaW1wbGVtZW50cyBQYXJ0aWFsTGlua2VyPFRFeHByZXNzaW9uPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc291cmNlVXJsOiBBYnNvbHV0ZUZzUGF0aCwgcHJpdmF0ZSBjb2RlOiBzdHJpbmcpIHt9XG5cbiAgbGlua1BhcnRpYWxEZWNsYXJhdGlvbihcbiAgICAgIGNvbnN0YW50UG9vbDogQ29uc3RhbnRQb29sLFxuICAgICAgbWV0YU9iajogQXN0T2JqZWN0PFIzUGFydGlhbERlY2xhcmF0aW9uLCBURXhwcmVzc2lvbj4pOiBvLkV4cHJlc3Npb24ge1xuICAgIGNvbnN0IG1ldGEgPSB0b1IzRGlyZWN0aXZlTWV0YShtZXRhT2JqLCB0aGlzLmNvZGUsIHRoaXMuc291cmNlVXJsKTtcbiAgICBjb25zdCBkZWYgPSBjb21waWxlRGlyZWN0aXZlRnJvbU1ldGFkYXRhKG1ldGEsIGNvbnN0YW50UG9vbCwgbWFrZUJpbmRpbmdQYXJzZXIoKSk7XG4gICAgcmV0dXJuIGRlZi5leHByZXNzaW9uO1xuICB9XG59XG5cbi8qKlxuICogRGVyaXZlcyB0aGUgYFIzRGlyZWN0aXZlTWV0YWRhdGFgIHN0cnVjdHVyZSBmcm9tIHRoZSBBU1Qgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9SM0RpcmVjdGl2ZU1ldGE8VEV4cHJlc3Npb24+KFxuICAgIG1ldGFPYmo6IEFzdE9iamVjdDxSM0RlY2xhcmVEaXJlY3RpdmVNZXRhZGF0YSwgVEV4cHJlc3Npb24+LCBjb2RlOiBzdHJpbmcsXG4gICAgc291cmNlVXJsOiBBYnNvbHV0ZUZzUGF0aCk6IFIzRGlyZWN0aXZlTWV0YWRhdGEge1xuICBjb25zdCB0eXBlRXhwciA9IG1ldGFPYmouZ2V0VmFsdWUoJ3R5cGUnKTtcbiAgY29uc3QgdHlwZU5hbWUgPSB0eXBlRXhwci5nZXRTeW1ib2xOYW1lKCk7XG4gIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICB0eXBlRXhwci5leHByZXNzaW9uLCAnVW5zdXBwb3J0ZWQgdHlwZSwgaXRzIG5hbWUgY291bGQgbm90IGJlIGRldGVybWluZWQnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZVNvdXJjZVNwYW46IGNyZWF0ZVNvdXJjZVNwYW4odHlwZUV4cHIuZ2V0UmFuZ2UoKSwgY29kZSwgc291cmNlVXJsKSxcbiAgICB0eXBlOiB3cmFwUmVmZXJlbmNlKHR5cGVFeHByLmdldE9wYXF1ZSgpKSxcbiAgICB0eXBlQXJndW1lbnRDb3VudDogMCxcbiAgICBpbnRlcm5hbFR5cGU6IG1ldGFPYmouZ2V0T3BhcXVlKCd0eXBlJyksXG4gICAgZGVwczogbnVsbCxcbiAgICBob3N0OiB0b0hvc3RNZXRhZGF0YShtZXRhT2JqKSxcbiAgICBpbnB1dHM6IG1ldGFPYmouaGFzKCdpbnB1dHMnKSA/IG1ldGFPYmouZ2V0T2JqZWN0KCdpbnB1dHMnKS50b0xpdGVyYWwodG9JbnB1dE1hcHBpbmcpIDoge30sXG4gICAgb3V0cHV0czogbWV0YU9iai5oYXMoJ291dHB1dHMnKSA/XG4gICAgICAgIG1ldGFPYmouZ2V0T2JqZWN0KCdvdXRwdXRzJykudG9MaXRlcmFsKHZhbHVlID0+IHZhbHVlLmdldFN0cmluZygpKSA6XG4gICAgICAgIHt9LFxuICAgIHF1ZXJpZXM6IG1ldGFPYmouaGFzKCdxdWVyaWVzJykgP1xuICAgICAgICBtZXRhT2JqLmdldEFycmF5KCdxdWVyaWVzJykubWFwKGVudHJ5ID0+IHRvUXVlcnlNZXRhZGF0YShlbnRyeS5nZXRPYmplY3QoKSkpIDpcbiAgICAgICAgW10sXG4gICAgdmlld1F1ZXJpZXM6IG1ldGFPYmouaGFzKCd2aWV3UXVlcmllcycpID9cbiAgICAgICAgbWV0YU9iai5nZXRBcnJheSgndmlld1F1ZXJpZXMnKS5tYXAoZW50cnkgPT4gdG9RdWVyeU1ldGFkYXRhKGVudHJ5LmdldE9iamVjdCgpKSkgOlxuICAgICAgICBbXSxcbiAgICBwcm92aWRlcnM6IG1ldGFPYmouaGFzKCdwcm92aWRlcnMnKSA/IG1ldGFPYmouZ2V0T3BhcXVlKCdwcm92aWRlcnMnKSA6IG51bGwsXG4gICAgZnVsbEluaGVyaXRhbmNlOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogbWV0YU9iai5oYXMoJ3NlbGVjdG9yJykgPyBtZXRhT2JqLmdldFN0cmluZygnc2VsZWN0b3InKSA6IG51bGwsXG4gICAgZXhwb3J0QXM6IG1ldGFPYmouaGFzKCdleHBvcnRBcycpID9cbiAgICAgICAgbWV0YU9iai5nZXRBcnJheSgnZXhwb3J0QXMnKS5tYXAoZW50cnkgPT4gZW50cnkuZ2V0U3RyaW5nKCkpIDpcbiAgICAgICAgbnVsbCxcbiAgICBsaWZlY3ljbGU6IHtcbiAgICAgIHVzZXNPbkNoYW5nZXM6IG1ldGFPYmouaGFzKCd1c2VzT25DaGFuZ2VzJykgPyBtZXRhT2JqLmdldEJvb2xlYW4oJ3VzZXNPbkNoYW5nZXMnKSA6IGZhbHNlLFxuICAgIH0sXG4gICAgbmFtZTogdHlwZU5hbWUsXG4gICAgdXNlc0luaGVyaXRhbmNlOiBtZXRhT2JqLmhhcygndXNlc0luaGVyaXRhbmNlJykgPyBtZXRhT2JqLmdldEJvb2xlYW4oJ3VzZXNJbmhlcml0YW5jZScpIDogZmFsc2UsXG4gIH07XG59XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgQVNUIHZhbHVlIGZvciBhIHNpbmdsZSBpbnB1dCB0byBpdHMgcmVwcmVzZW50YXRpb24gYXMgdXNlZCBpbiB0aGUgbWV0YWRhdGEuXG4gKi9cbmZ1bmN0aW9uIHRvSW5wdXRNYXBwaW5nPFRFeHByZXNzaW9uPih2YWx1ZTogQXN0VmFsdWU8c3RyaW5nfFtzdHJpbmcsIHN0cmluZ10sIFRFeHByZXNzaW9uPik6XG4gICAgc3RyaW5nfFtzdHJpbmcsIHN0cmluZ10ge1xuICBpZiAodmFsdWUuaXNTdHJpbmcoKSkge1xuICAgIHJldHVybiB2YWx1ZS5nZXRTdHJpbmcoKTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlcyA9IHZhbHVlLmdldEFycmF5KCkubWFwKGlubmVyVmFsdWUgPT4gaW5uZXJWYWx1ZS5nZXRTdHJpbmcoKSk7XG4gIGlmICh2YWx1ZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoXG4gICAgICAgIHZhbHVlLmV4cHJlc3Npb24sXG4gICAgICAgICdVbnN1cHBvcnRlZCBpbnB1dCwgZXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gYXJyYXkgY29udGFpbmluZyBleGFjdGx5IHR3byBzdHJpbmdzJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcyBhcyBbc3RyaW5nLCBzdHJpbmddO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBob3N0IG1ldGFkYXRhIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVNUIG1ldGFkYXRhIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gdG9Ib3N0TWV0YWRhdGE8VEV4cHJlc3Npb24+KG1ldGFPYmo6IEFzdE9iamVjdDxSM0RlY2xhcmVEaXJlY3RpdmVNZXRhZGF0YSwgVEV4cHJlc3Npb24+KTpcbiAgICBSM0hvc3RNZXRhZGF0YSB7XG4gIGlmICghbWV0YU9iai5oYXMoJ2hvc3QnKSkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIGxpc3RlbmVyczoge30sXG4gICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgIHNwZWNpYWxBdHRyaWJ1dGVzOiB7fSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgaG9zdCA9IG1ldGFPYmouZ2V0T2JqZWN0KCdob3N0Jyk7XG5cbiAgY29uc3Qgc3BlY2lhbEF0dHJpYnV0ZXM6IFIzSG9zdE1ldGFkYXRhWydzcGVjaWFsQXR0cmlidXRlcyddID0ge307XG4gIGlmIChob3N0Lmhhcygnc3R5bGVBdHRyaWJ1dGUnKSkge1xuICAgIHNwZWNpYWxBdHRyaWJ1dGVzLnN0eWxlQXR0ciA9IGhvc3QuZ2V0U3RyaW5nKCdzdHlsZUF0dHJpYnV0ZScpO1xuICB9XG4gIGlmIChob3N0LmhhcygnY2xhc3NBdHRyaWJ1dGUnKSkge1xuICAgIHNwZWNpYWxBdHRyaWJ1dGVzLmNsYXNzQXR0ciA9IGhvc3QuZ2V0U3RyaW5nKCdjbGFzc0F0dHJpYnV0ZScpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzOiBob3N0LmhhcygnYXR0cmlidXRlcycpID9cbiAgICAgICAgaG9zdC5nZXRPYmplY3QoJ2F0dHJpYnV0ZXMnKS50b0xpdGVyYWwodmFsdWUgPT4gdmFsdWUuZ2V0T3BhcXVlKCkpIDpcbiAgICAgICAge30sXG4gICAgbGlzdGVuZXJzOiBob3N0LmhhcygnbGlzdGVuZXJzJykgP1xuICAgICAgICBob3N0LmdldE9iamVjdCgnbGlzdGVuZXJzJykudG9MaXRlcmFsKHZhbHVlID0+IHZhbHVlLmdldFN0cmluZygpKSA6XG4gICAgICAgIHt9LFxuICAgIHByb3BlcnRpZXM6IGhvc3QuaGFzKCdwcm9wZXJ0aWVzJykgP1xuICAgICAgICBob3N0LmdldE9iamVjdCgncHJvcGVydGllcycpLnRvTGl0ZXJhbCh2YWx1ZSA9PiB2YWx1ZS5nZXRTdHJpbmcoKSkgOlxuICAgICAgICB7fSxcbiAgICBzcGVjaWFsQXR0cmlidXRlcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgbWV0YWRhdGEgZm9yIGEgc2luZ2xlIHF1ZXJ5IGZyb20gYW4gQVNUIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gdG9RdWVyeU1ldGFkYXRhPFRFeHByZXNzaW9uPihvYmo6IEFzdE9iamVjdDxSM0RlY2xhcmVRdWVyeU1ldGFkYXRhLCBURXhwcmVzc2lvbj4pOlxuICAgIFIzUXVlcnlNZXRhZGF0YSB7XG4gIGxldCBwcmVkaWNhdGU6IFIzUXVlcnlNZXRhZGF0YVsncHJlZGljYXRlJ107XG4gIGNvbnN0IHByZWRpY2F0ZUV4cHIgPSBvYmouZ2V0VmFsdWUoJ3ByZWRpY2F0ZScpO1xuICBpZiAocHJlZGljYXRlRXhwci5pc0FycmF5KCkpIHtcbiAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGVFeHByLmdldEFycmF5KCkubWFwKGVudHJ5ID0+IGVudHJ5LmdldFN0cmluZygpKTtcbiAgfSBlbHNlIHtcbiAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGVFeHByLmdldE9wYXF1ZSgpO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvcGVydHlOYW1lOiBvYmouZ2V0U3RyaW5nKCdwcm9wZXJ0eU5hbWUnKSxcbiAgICBmaXJzdDogb2JqLmhhcygnZmlyc3QnKSA/IG9iai5nZXRCb29sZWFuKCdmaXJzdCcpIDogZmFsc2UsXG4gICAgcHJlZGljYXRlLFxuICAgIGRlc2NlbmRhbnRzOiBvYmouaGFzKCdkZXNjZW5kYW50cycpID8gb2JqLmdldEJvb2xlYW4oJ2Rlc2NlbmRhbnRzJykgOiBmYWxzZSxcbiAgICBlbWl0RGlzdGluY3RDaGFuZ2VzT25seTpcbiAgICAgICAgb2JqLmhhcygnZW1pdERpc3RpbmN0Q2hhbmdlc09ubHknKSA/IG9iai5nZXRCb29sZWFuKCdlbWl0RGlzdGluY3RDaGFuZ2VzT25seScpIDogdHJ1ZSxcbiAgICByZWFkOiBvYmouaGFzKCdyZWFkJykgPyBvYmouZ2V0T3BhcXVlKCdyZWFkJykgOiBudWxsLFxuICAgIHN0YXRpYzogb2JqLmhhcygnc3RhdGljJykgPyBvYmouZ2V0Qm9vbGVhbignc3RhdGljJykgOiBmYWxzZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNvdXJjZVNwYW4ocmFuZ2U6IFJhbmdlLCBjb2RlOiBzdHJpbmcsIHNvdXJjZVVybDogc3RyaW5nKTogUGFyc2VTb3VyY2VTcGFuIHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IG5ldyBQYXJzZVNvdXJjZUZpbGUoY29kZSwgc291cmNlVXJsKTtcbiAgY29uc3Qgc3RhcnRMb2NhdGlvbiA9XG4gICAgICBuZXcgUGFyc2VMb2NhdGlvbihzb3VyY2VGaWxlLCByYW5nZS5zdGFydFBvcywgcmFuZ2Uuc3RhcnRMaW5lLCByYW5nZS5zdGFydENvbCk7XG4gIHJldHVybiBuZXcgUGFyc2VTb3VyY2VTcGFuKHN0YXJ0TG9jYXRpb24sIHN0YXJ0TG9jYXRpb24ubW92ZUJ5KHJhbmdlLmVuZFBvcyAtIHJhbmdlLnN0YXJ0UG9zKSk7XG59XG4iXX0=
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { compileFactoryFunction, FactoryTarget } from '@angular/compiler';
|
|
9
|
-
import { FatalLinkerError } from '../../fatal_linker_error';
|
|
10
|
-
import { getDependency, parseEnum, wrapReference } from './util';
|
|
11
|
-
/**
|
|
12
|
-
* A `PartialLinker` that is designed to process `ɵɵngDeclareFactory()` call expressions.
|
|
13
|
-
*/
|
|
14
|
-
export class PartialFactoryLinkerVersion1 {
|
|
15
|
-
linkPartialDeclaration(constantPool, metaObj) {
|
|
16
|
-
const meta = toR3FactoryMeta(metaObj);
|
|
17
|
-
const def = compileFactoryFunction(meta);
|
|
18
|
-
return def.expression;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Derives the `R3FactoryMetadata` structure from the AST object.
|
|
23
|
-
*/
|
|
24
|
-
export function toR3FactoryMeta(metaObj) {
|
|
25
|
-
const typeExpr = metaObj.getValue('type');
|
|
26
|
-
const typeName = typeExpr.getSymbolName();
|
|
27
|
-
if (typeName === null) {
|
|
28
|
-
throw new FatalLinkerError(typeExpr.expression, 'Unsupported type, its name could not be determined');
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
name: typeName,
|
|
32
|
-
type: wrapReference(typeExpr.getOpaque()),
|
|
33
|
-
internalType: metaObj.getOpaque('type'),
|
|
34
|
-
typeArgumentCount: 0,
|
|
35
|
-
target: parseEnum(metaObj.getValue('target'), FactoryTarget),
|
|
36
|
-
deps: getDependencies(metaObj, 'deps'),
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
function getDependencies(metaObj, propName) {
|
|
40
|
-
if (!metaObj.has(propName)) {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
const deps = metaObj.getValue(propName);
|
|
44
|
-
if (deps.isArray()) {
|
|
45
|
-
return deps.getArray().map(dep => getDependency(dep.getObject()));
|
|
46
|
-
}
|
|
47
|
-
if (deps.isString()) {
|
|
48
|
-
return 'invalid';
|
|
49
|
-
}
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbF9mYWN0b3J5X2xpbmtlcl8xLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL2xpbmtlci9zcmMvZmlsZV9saW5rZXIvcGFydGlhbF9saW5rZXJzL3BhcnRpYWxfZmFjdG9yeV9saW5rZXJfMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUMsc0JBQXNCLEVBQWdCLGFBQWEsRUFBMEYsTUFBTSxtQkFBbUIsQ0FBQztBQUkvSyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUcxRCxPQUFPLEVBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFL0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLHNCQUFzQixDQUNsQixZQUEwQixFQUMxQixPQUFxRDtRQUN2RCxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsTUFBTSxHQUFHLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsT0FBeUQ7SUFDM0QsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUMsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO1FBQ3JCLE1BQU0sSUFBSSxnQkFBZ0IsQ0FDdEIsUUFBUSxDQUFDLFVBQVUsRUFBRSxvREFBb0QsQ0FBQyxDQUFDO0tBQ2hGO0lBRUQsT0FBTztRQUNMLElBQUksRUFBRSxRQUFRO1FBQ2QsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDekMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLGlCQUFpQixFQUFFLENBQUM7UUFDcEIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQztRQUM1RCxJQUFJLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7S0FDdkMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FDcEIsT0FBeUQsRUFDekQsUUFBd0M7SUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDMUIsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUNELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbkU7SUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNuQixPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtjb21waWxlRmFjdG9yeUZ1bmN0aW9uLCBDb25zdGFudFBvb2wsIEZhY3RvcnlUYXJnZXQsIFIzRGVjbGFyZUZhY3RvcnlNZXRhZGF0YSwgUjNEZXBlbmRlbmN5TWV0YWRhdGEsIFIzRmFjdG9yeU1ldGFkYXRhLCBSM1BhcnRpYWxEZWNsYXJhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgbyBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvb3V0cHV0L291dHB1dF9hc3QnO1xuXG5pbXBvcnQge0FzdE9iamVjdH0gZnJvbSAnLi4vLi4vYXN0L2FzdF92YWx1ZSc7XG5pbXBvcnQge0ZhdGFsTGlua2VyRXJyb3J9IGZyb20gJy4uLy4uL2ZhdGFsX2xpbmtlcl9lcnJvcic7XG5cbmltcG9ydCB7UGFydGlhbExpbmtlcn0gZnJvbSAnLi9wYXJ0aWFsX2xpbmtlcic7XG5pbXBvcnQge2dldERlcGVuZGVuY3ksIHBhcnNlRW51bSwgd3JhcFJlZmVyZW5jZX0gZnJvbSAnLi91dGlsJztcblxuLyoqXG4gKiBBIGBQYXJ0aWFsTGlua2VyYCB0aGF0IGlzIGRlc2lnbmVkIHRvIHByb2Nlc3MgYMm1ybVuZ0RlY2xhcmVGYWN0b3J5KClgIGNhbGwgZXhwcmVzc2lvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXJ0aWFsRmFjdG9yeUxpbmtlclZlcnNpb24xPFRFeHByZXNzaW9uPiBpbXBsZW1lbnRzIFBhcnRpYWxMaW5rZXI8VEV4cHJlc3Npb24+IHtcbiAgbGlua1BhcnRpYWxEZWNsYXJhdGlvbihcbiAgICAgIGNvbnN0YW50UG9vbDogQ29uc3RhbnRQb29sLFxuICAgICAgbWV0YU9iajogQXN0T2JqZWN0PFIzUGFydGlhbERlY2xhcmF0aW9uLCBURXhwcmVzc2lvbj4pOiBvLkV4cHJlc3Npb24ge1xuICAgIGNvbnN0IG1ldGEgPSB0b1IzRmFjdG9yeU1ldGEobWV0YU9iaik7XG4gICAgY29uc3QgZGVmID0gY29tcGlsZUZhY3RvcnlGdW5jdGlvbihtZXRhKTtcbiAgICByZXR1cm4gZGVmLmV4cHJlc3Npb247XG4gIH1cbn1cblxuLyoqXG4gKiBEZXJpdmVzIHRoZSBgUjNGYWN0b3J5TWV0YWRhdGFgIHN0cnVjdHVyZSBmcm9tIHRoZSBBU1Qgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9SM0ZhY3RvcnlNZXRhPFRFeHByZXNzaW9uPihcbiAgICBtZXRhT2JqOiBBc3RPYmplY3Q8UjNEZWNsYXJlRmFjdG9yeU1ldGFkYXRhLCBURXhwcmVzc2lvbj4pOiBSM0ZhY3RvcnlNZXRhZGF0YSB7XG4gIGNvbnN0IHR5cGVFeHByID0gbWV0YU9iai5nZXRWYWx1ZSgndHlwZScpO1xuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVFeHByLmdldFN5bWJvbE5hbWUoKTtcbiAgaWYgKHR5cGVOYW1lID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoXG4gICAgICAgIHR5cGVFeHByLmV4cHJlc3Npb24sICdVbnN1cHBvcnRlZCB0eXBlLCBpdHMgbmFtZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCcpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiB0eXBlTmFtZSxcbiAgICB0eXBlOiB3cmFwUmVmZXJlbmNlKHR5cGVFeHByLmdldE9wYXF1ZSgpKSxcbiAgICBpbnRlcm5hbFR5cGU6IG1ldGFPYmouZ2V0T3BhcXVlKCd0eXBlJyksXG4gICAgdHlwZUFyZ3VtZW50Q291bnQ6IDAsXG4gICAgdGFyZ2V0OiBwYXJzZUVudW0obWV0YU9iai5nZXRWYWx1ZSgndGFyZ2V0JyksIEZhY3RvcnlUYXJnZXQpLFxuICAgIGRlcHM6IGdldERlcGVuZGVuY2llcyhtZXRhT2JqLCAnZGVwcycpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREZXBlbmRlbmNpZXM8VEV4cHJlc3Npb24+KFxuICAgIG1ldGFPYmo6IEFzdE9iamVjdDxSM0RlY2xhcmVGYWN0b3J5TWV0YWRhdGEsIFRFeHByZXNzaW9uPixcbiAgICBwcm9wTmFtZToga2V5b2YgUjNEZWNsYXJlRmFjdG9yeU1ldGFkYXRhKTogUjNEZXBlbmRlbmN5TWV0YWRhdGFbXXxudWxsfCdpbnZhbGlkJyB7XG4gIGlmICghbWV0YU9iai5oYXMocHJvcE5hbWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgZGVwcyA9IG1ldGFPYmouZ2V0VmFsdWUocHJvcE5hbWUpO1xuICBpZiAoZGVwcy5pc0FycmF5KCkpIHtcbiAgICByZXR1cm4gZGVwcy5nZXRBcnJheSgpLm1hcChkZXAgPT4gZ2V0RGVwZW5kZW5jeShkZXAuZ2V0T2JqZWN0KCkpKTtcbiAgfVxuICBpZiAoZGVwcy5pc1N0cmluZygpKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { compileInjectable, createR3ProviderExpression } from '@angular/compiler';
|
|
9
|
-
import * as o from '@angular/compiler/src/output/output_ast';
|
|
10
|
-
import { FatalLinkerError } from '../../fatal_linker_error';
|
|
11
|
-
import { extractForwardRef, getDependency, wrapReference } from './util';
|
|
12
|
-
/**
|
|
13
|
-
* A `PartialLinker` that is designed to process `ɵɵngDeclareInjectable()` call expressions.
|
|
14
|
-
*/
|
|
15
|
-
export class PartialInjectableLinkerVersion1 {
|
|
16
|
-
linkPartialDeclaration(constantPool, metaObj) {
|
|
17
|
-
const meta = toR3InjectableMeta(metaObj);
|
|
18
|
-
const def = compileInjectable(meta, /* resolveForwardRefs */ false);
|
|
19
|
-
return def.expression;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Derives the `R3InjectableMetadata` structure from the AST object.
|
|
24
|
-
*/
|
|
25
|
-
export function toR3InjectableMeta(metaObj) {
|
|
26
|
-
const typeExpr = metaObj.getValue('type');
|
|
27
|
-
const typeName = typeExpr.getSymbolName();
|
|
28
|
-
if (typeName === null) {
|
|
29
|
-
throw new FatalLinkerError(typeExpr.expression, 'Unsupported type, its name could not be determined');
|
|
30
|
-
}
|
|
31
|
-
const meta = {
|
|
32
|
-
name: typeName,
|
|
33
|
-
type: wrapReference(typeExpr.getOpaque()),
|
|
34
|
-
internalType: typeExpr.getOpaque(),
|
|
35
|
-
typeArgumentCount: 0,
|
|
36
|
-
providedIn: metaObj.has('providedIn') ? extractForwardRef(metaObj.getValue('providedIn')) :
|
|
37
|
-
createR3ProviderExpression(o.literal(null), false),
|
|
38
|
-
};
|
|
39
|
-
if (metaObj.has('useClass')) {
|
|
40
|
-
meta.useClass = extractForwardRef(metaObj.getValue('useClass'));
|
|
41
|
-
}
|
|
42
|
-
if (metaObj.has('useFactory')) {
|
|
43
|
-
meta.useFactory = metaObj.getOpaque('useFactory');
|
|
44
|
-
}
|
|
45
|
-
if (metaObj.has('useExisting')) {
|
|
46
|
-
meta.useExisting = extractForwardRef(metaObj.getValue('useExisting'));
|
|
47
|
-
}
|
|
48
|
-
if (metaObj.has('useValue')) {
|
|
49
|
-
meta.useValue = extractForwardRef(metaObj.getValue('useValue'));
|
|
50
|
-
}
|
|
51
|
-
if (metaObj.has('deps')) {
|
|
52
|
-
meta.deps = metaObj.getArray('deps').map(dep => getDependency(dep.getObject()));
|
|
53
|
-
}
|
|
54
|
-
return meta;
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbF9pbmplY3RhYmxlX2xpbmtlcl8xLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL2xpbmtlci9zcmMvZmlsZV9saW5rZXIvcGFydGlhbF9saW5rZXJzL3BhcnRpYWxfaW5qZWN0YWJsZV9saW5rZXJfMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUMsaUJBQWlCLEVBQWdCLDBCQUEwQixFQUEwRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZLLE9BQU8sS0FBSyxDQUFDLE1BQU0seUNBQXlDLENBQUM7QUFHN0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFHMUQsT0FBTyxFQUFDLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFdkU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sK0JBQStCO0lBQzFDLHNCQUFzQixDQUNsQixZQUEwQixFQUMxQixPQUFxRDtRQUN2RCxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEUsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUM5QixPQUE0RDtJQUM5RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDckIsTUFBTSxJQUFJLGdCQUFnQixDQUN0QixRQUFRLENBQUMsVUFBVSxFQUFFLG9EQUFvRCxDQUFDLENBQUM7S0FDaEY7SUFFRCxNQUFNLElBQUksR0FBeUI7UUFDakMsSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN6QyxZQUFZLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRTtRQUNsQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3BCLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRCwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQztLQUMzRixDQUFDO0lBRUYsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0tBQ2pFO0lBQ0QsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUNuRDtJQUNELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztLQUN2RTtJQUNELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUNqRTtJQUVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDakY7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7Y29tcGlsZUluamVjdGFibGUsIENvbnN0YW50UG9vbCwgY3JlYXRlUjNQcm92aWRlckV4cHJlc3Npb24sIFIzRGVjbGFyZUluamVjdGFibGVNZXRhZGF0YSwgUjNJbmplY3RhYmxlTWV0YWRhdGEsIFIzUGFydGlhbERlY2xhcmF0aW9ufSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQgKiBhcyBvIGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9vdXRwdXQvb3V0cHV0X2FzdCc7XG5cbmltcG9ydCB7QXN0T2JqZWN0fSBmcm9tICcuLi8uLi9hc3QvYXN0X3ZhbHVlJztcbmltcG9ydCB7RmF0YWxMaW5rZXJFcnJvcn0gZnJvbSAnLi4vLi4vZmF0YWxfbGlua2VyX2Vycm9yJztcblxuaW1wb3J0IHtQYXJ0aWFsTGlua2VyfSBmcm9tICcuL3BhcnRpYWxfbGlua2VyJztcbmltcG9ydCB7ZXh0cmFjdEZvcndhcmRSZWYsIGdldERlcGVuZGVuY3ksIHdyYXBSZWZlcmVuY2V9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQSBgUGFydGlhbExpbmtlcmAgdGhhdCBpcyBkZXNpZ25lZCB0byBwcm9jZXNzIGDJtcm1bmdEZWNsYXJlSW5qZWN0YWJsZSgpYCBjYWxsIGV4cHJlc3Npb25zLlxuICovXG5leHBvcnQgY2xhc3MgUGFydGlhbEluamVjdGFibGVMaW5rZXJWZXJzaW9uMTxURXhwcmVzc2lvbj4gaW1wbGVtZW50cyBQYXJ0aWFsTGlua2VyPFRFeHByZXNzaW9uPiB7XG4gIGxpbmtQYXJ0aWFsRGVjbGFyYXRpb24oXG4gICAgICBjb25zdGFudFBvb2w6IENvbnN0YW50UG9vbCxcbiAgICAgIG1ldGFPYmo6IEFzdE9iamVjdDxSM1BhcnRpYWxEZWNsYXJhdGlvbiwgVEV4cHJlc3Npb24+KTogby5FeHByZXNzaW9uIHtcbiAgICBjb25zdCBtZXRhID0gdG9SM0luamVjdGFibGVNZXRhKG1ldGFPYmopO1xuICAgIGNvbnN0IGRlZiA9IGNvbXBpbGVJbmplY3RhYmxlKG1ldGEsIC8qIHJlc29sdmVGb3J3YXJkUmVmcyAqLyBmYWxzZSk7XG4gICAgcmV0dXJuIGRlZi5leHByZXNzaW9uO1xuICB9XG59XG5cbi8qKlxuICogRGVyaXZlcyB0aGUgYFIzSW5qZWN0YWJsZU1ldGFkYXRhYCBzdHJ1Y3R1cmUgZnJvbSB0aGUgQVNUIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUjNJbmplY3RhYmxlTWV0YTxURXhwcmVzc2lvbj4oXG4gICAgbWV0YU9iajogQXN0T2JqZWN0PFIzRGVjbGFyZUluamVjdGFibGVNZXRhZGF0YSwgVEV4cHJlc3Npb24+KTogUjNJbmplY3RhYmxlTWV0YWRhdGEge1xuICBjb25zdCB0eXBlRXhwciA9IG1ldGFPYmouZ2V0VmFsdWUoJ3R5cGUnKTtcbiAgY29uc3QgdHlwZU5hbWUgPSB0eXBlRXhwci5nZXRTeW1ib2xOYW1lKCk7XG4gIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICB0eXBlRXhwci5leHByZXNzaW9uLCAnVW5zdXBwb3J0ZWQgdHlwZSwgaXRzIG5hbWUgY291bGQgbm90IGJlIGRldGVybWluZWQnKTtcbiAgfVxuXG4gIGNvbnN0IG1ldGE6IFIzSW5qZWN0YWJsZU1ldGFkYXRhID0ge1xuICAgIG5hbWU6IHR5cGVOYW1lLFxuICAgIHR5cGU6IHdyYXBSZWZlcmVuY2UodHlwZUV4cHIuZ2V0T3BhcXVlKCkpLFxuICAgIGludGVybmFsVHlwZTogdHlwZUV4cHIuZ2V0T3BhcXVlKCksXG4gICAgdHlwZUFyZ3VtZW50Q291bnQ6IDAsXG4gICAgcHJvdmlkZWRJbjogbWV0YU9iai5oYXMoJ3Byb3ZpZGVkSW4nKSA/IGV4dHJhY3RGb3J3YXJkUmVmKG1ldGFPYmouZ2V0VmFsdWUoJ3Byb3ZpZGVkSW4nKSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVSM1Byb3ZpZGVyRXhwcmVzc2lvbihvLmxpdGVyYWwobnVsbCksIGZhbHNlKSxcbiAgfTtcblxuICBpZiAobWV0YU9iai5oYXMoJ3VzZUNsYXNzJykpIHtcbiAgICBtZXRhLnVzZUNsYXNzID0gZXh0cmFjdEZvcndhcmRSZWYobWV0YU9iai5nZXRWYWx1ZSgndXNlQ2xhc3MnKSk7XG4gIH1cbiAgaWYgKG1ldGFPYmouaGFzKCd1c2VGYWN0b3J5JykpIHtcbiAgICBtZXRhLnVzZUZhY3RvcnkgPSBtZXRhT2JqLmdldE9wYXF1ZSgndXNlRmFjdG9yeScpO1xuICB9XG4gIGlmIChtZXRhT2JqLmhhcygndXNlRXhpc3RpbmcnKSkge1xuICAgIG1ldGEudXNlRXhpc3RpbmcgPSBleHRyYWN0Rm9yd2FyZFJlZihtZXRhT2JqLmdldFZhbHVlKCd1c2VFeGlzdGluZycpKTtcbiAgfVxuICBpZiAobWV0YU9iai5oYXMoJ3VzZVZhbHVlJykpIHtcbiAgICBtZXRhLnVzZVZhbHVlID0gZXh0cmFjdEZvcndhcmRSZWYobWV0YU9iai5nZXRWYWx1ZSgndXNlVmFsdWUnKSk7XG4gIH1cblxuICBpZiAobWV0YU9iai5oYXMoJ2RlcHMnKSkge1xuICAgIG1ldGEuZGVwcyA9IG1ldGFPYmouZ2V0QXJyYXkoJ2RlcHMnKS5tYXAoZGVwID0+IGdldERlcGVuZGVuY3koZGVwLmdldE9iamVjdCgpKSk7XG4gIH1cblxuICByZXR1cm4gbWV0YTtcbn1cbiJdfQ==
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { compileInjector } from '@angular/compiler';
|
|
9
|
-
import { FatalLinkerError } from '../../fatal_linker_error';
|
|
10
|
-
import { wrapReference } from './util';
|
|
11
|
-
/**
|
|
12
|
-
* A `PartialLinker` that is designed to process `ɵɵngDeclareInjector()` call expressions.
|
|
13
|
-
*/
|
|
14
|
-
export class PartialInjectorLinkerVersion1 {
|
|
15
|
-
linkPartialDeclaration(constantPool, metaObj) {
|
|
16
|
-
const meta = toR3InjectorMeta(metaObj);
|
|
17
|
-
const def = compileInjector(meta);
|
|
18
|
-
return def.expression;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Derives the `R3InjectorMetadata` structure from the AST object.
|
|
23
|
-
*/
|
|
24
|
-
export function toR3InjectorMeta(metaObj) {
|
|
25
|
-
const typeExpr = metaObj.getValue('type');
|
|
26
|
-
const typeName = typeExpr.getSymbolName();
|
|
27
|
-
if (typeName === null) {
|
|
28
|
-
throw new FatalLinkerError(typeExpr.expression, 'Unsupported type, its name could not be determined');
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
name: typeName,
|
|
32
|
-
type: wrapReference(typeExpr.getOpaque()),
|
|
33
|
-
internalType: metaObj.getOpaque('type'),
|
|
34
|
-
providers: metaObj.has('providers') ? metaObj.getOpaque('providers') : null,
|
|
35
|
-
imports: metaObj.has('imports') ? metaObj.getArray('imports').map(i => i.getOpaque()) : [],
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbF9pbmplY3Rvcl9saW5rZXJfMS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9saW5rZXIvc3JjL2ZpbGVfbGlua2VyL3BhcnRpYWxfbGlua2Vycy9wYXJ0aWFsX2luamVjdG9yX2xpbmtlcl8xLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBQyxlQUFlLEVBQW9GLE1BQU0sbUJBQW1CLENBQUM7QUFJckksT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFHMUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVyQzs7R0FFRztBQUNILE1BQU0sT0FBTyw2QkFBNkI7SUFDeEMsc0JBQXNCLENBQ2xCLFlBQTBCLEVBQzFCLE9BQXFEO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLE9BQTBEO0lBQzVELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFDLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtRQUNyQixNQUFNLElBQUksZ0JBQWdCLENBQ3RCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsb0RBQW9ELENBQUMsQ0FBQztLQUNoRjtJQUVELE9BQU87UUFDTCxJQUFJLEVBQUUsUUFBUTtRQUNkLElBQUksRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pDLFlBQVksRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN2QyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUMzRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtLQUMzRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtjb21waWxlSW5qZWN0b3IsIENvbnN0YW50UG9vbCwgUjNEZWNsYXJlSW5qZWN0b3JNZXRhZGF0YSwgUjNJbmplY3Rvck1ldGFkYXRhLCBSM1BhcnRpYWxEZWNsYXJhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgbyBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvb3V0cHV0L291dHB1dF9hc3QnO1xuXG5pbXBvcnQge0FzdE9iamVjdH0gZnJvbSAnLi4vLi4vYXN0L2FzdF92YWx1ZSc7XG5pbXBvcnQge0ZhdGFsTGlua2VyRXJyb3J9IGZyb20gJy4uLy4uL2ZhdGFsX2xpbmtlcl9lcnJvcic7XG5cbmltcG9ydCB7UGFydGlhbExpbmtlcn0gZnJvbSAnLi9wYXJ0aWFsX2xpbmtlcic7XG5pbXBvcnQge3dyYXBSZWZlcmVuY2V9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQSBgUGFydGlhbExpbmtlcmAgdGhhdCBpcyBkZXNpZ25lZCB0byBwcm9jZXNzIGDJtcm1bmdEZWNsYXJlSW5qZWN0b3IoKWAgY2FsbCBleHByZXNzaW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcnRpYWxJbmplY3RvckxpbmtlclZlcnNpb24xPFRFeHByZXNzaW9uPiBpbXBsZW1lbnRzIFBhcnRpYWxMaW5rZXI8VEV4cHJlc3Npb24+IHtcbiAgbGlua1BhcnRpYWxEZWNsYXJhdGlvbihcbiAgICAgIGNvbnN0YW50UG9vbDogQ29uc3RhbnRQb29sLFxuICAgICAgbWV0YU9iajogQXN0T2JqZWN0PFIzUGFydGlhbERlY2xhcmF0aW9uLCBURXhwcmVzc2lvbj4pOiBvLkV4cHJlc3Npb24ge1xuICAgIGNvbnN0IG1ldGEgPSB0b1IzSW5qZWN0b3JNZXRhKG1ldGFPYmopO1xuICAgIGNvbnN0IGRlZiA9IGNvbXBpbGVJbmplY3RvcihtZXRhKTtcbiAgICByZXR1cm4gZGVmLmV4cHJlc3Npb247XG4gIH1cbn1cblxuLyoqXG4gKiBEZXJpdmVzIHRoZSBgUjNJbmplY3Rvck1ldGFkYXRhYCBzdHJ1Y3R1cmUgZnJvbSB0aGUgQVNUIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUjNJbmplY3Rvck1ldGE8VEV4cHJlc3Npb24+KFxuICAgIG1ldGFPYmo6IEFzdE9iamVjdDxSM0RlY2xhcmVJbmplY3Rvck1ldGFkYXRhLCBURXhwcmVzc2lvbj4pOiBSM0luamVjdG9yTWV0YWRhdGEge1xuICBjb25zdCB0eXBlRXhwciA9IG1ldGFPYmouZ2V0VmFsdWUoJ3R5cGUnKTtcbiAgY29uc3QgdHlwZU5hbWUgPSB0eXBlRXhwci5nZXRTeW1ib2xOYW1lKCk7XG4gIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICB0eXBlRXhwci5leHByZXNzaW9uLCAnVW5zdXBwb3J0ZWQgdHlwZSwgaXRzIG5hbWUgY291bGQgbm90IGJlIGRldGVybWluZWQnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogdHlwZU5hbWUsXG4gICAgdHlwZTogd3JhcFJlZmVyZW5jZSh0eXBlRXhwci5nZXRPcGFxdWUoKSksXG4gICAgaW50ZXJuYWxUeXBlOiBtZXRhT2JqLmdldE9wYXF1ZSgndHlwZScpLFxuICAgIHByb3ZpZGVyczogbWV0YU9iai5oYXMoJ3Byb3ZpZGVycycpID8gbWV0YU9iai5nZXRPcGFxdWUoJ3Byb3ZpZGVycycpIDogbnVsbCxcbiAgICBpbXBvcnRzOiBtZXRhT2JqLmhhcygnaW1wb3J0cycpID8gbWV0YU9iai5nZXRBcnJheSgnaW1wb3J0cycpLm1hcChpID0+IGkuZ2V0T3BhcXVlKCkpIDogW10sXG4gIH07XG59XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbF9saW5rZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbGlua2VyL3NyYy9maWxlX2xpbmtlci9wYXJ0aWFsX2xpbmtlcnMvcGFydGlhbF9saW5rZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtDb25zdGFudFBvb2wsIFIzUGFydGlhbERlY2xhcmF0aW9ufSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQgKiBhcyBvIGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9vdXRwdXQvb3V0cHV0X2FzdCc7XG5cbmltcG9ydCB7QXN0T2JqZWN0fSBmcm9tICcuLi8uLi9hc3QvYXN0X3ZhbHVlJztcblxuLyoqXG4gKiBBbiBpbnRlcmZhY2UgZm9yIGNsYXNzZXMgdGhhdCBjYW4gbGluayBwYXJ0aWFsIGRlY2xhcmF0aW9ucyBpbnRvIGZ1bGwgZGVmaW5pdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGlhbExpbmtlcjxURXhwcmVzc2lvbj4ge1xuICAvKipcbiAgICogTGluayB0aGUgcGFydGlhbCBkZWNsYXJhdGlvbiBgbWV0YU9iamAgaW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYSBmdWxsIGRlZmluaXRpb24gZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIG1ldGFPYmogQW4gb2JqZWN0IHRoYXQgZml0cyBvbmUgb2YgdGhlIGBSM0RlY2xhcmVEaXJlY3RpdmVNZXRhZGF0YWAgb3JcbiAgICogICAgIGBSM0RlY2xhcmVDb21wb25lbnRNZXRhZGF0YWAgaW50ZXJmYWNlcy5cbiAgICovXG4gIGxpbmtQYXJ0aWFsRGVjbGFyYXRpb24oXG4gICAgICBjb25zdGFudFBvb2w6IENvbnN0YW50UG9vbCxcbiAgICAgIG1ldGFPYmo6IEFzdE9iamVjdDxSM1BhcnRpYWxEZWNsYXJhdGlvbiwgVEV4cHJlc3Npb24+KTogby5FeHByZXNzaW9uO1xufVxuIl19
|