@angular/compiler-cli 12.1.1 → 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_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/entry_point_manifest.js +1 -1
- 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.js +1 -1
- 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/src/compiler.js +1 -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 +30 -4
- package/src/ngtsc/indexer/src/template.js +1 -1
- package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
- package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
- 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/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 +21 -1
- 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.js +25 -6
- package/src/ngtsc/util/src/visitor.d.ts +1 -1
- package/src/ngtsc/util/src/visitor.js +1 -8
- 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 -255
- 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 -1068
- 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 -917
- 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 -271
- 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 -174
- package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -94
- package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
- package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -719
- 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 -271
- 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 -514
- 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 -485
- 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 -127
- package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -93
- 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/ngtsc/xi18n/index.mjs +0 -9
- package/src/ngtsc/xi18n/src/context.mjs +0 -9
- package/src/ngtsc/xi18n/xi18n.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/i18n.mjs +0 -59
- 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 -887
- 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,159 +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 { AbsoluteSourceSpan } from '@angular/compiler';
|
|
9
|
-
import * as ts from 'typescript';
|
|
10
|
-
const parseSpanComment = /^(\d+),(\d+)$/;
|
|
11
|
-
/**
|
|
12
|
-
* Reads the trailing comments and finds the first match which is a span comment (i.e. 4,10) on a
|
|
13
|
-
* node and returns it as an `AbsoluteSourceSpan`.
|
|
14
|
-
*
|
|
15
|
-
* Will return `null` if no trailing comments on the node match the expected form of a source span.
|
|
16
|
-
*/
|
|
17
|
-
export function readSpanComment(node, sourceFile = node.getSourceFile()) {
|
|
18
|
-
return ts.forEachTrailingCommentRange(sourceFile.text, node.getEnd(), (pos, end, kind) => {
|
|
19
|
-
if (kind !== ts.SyntaxKind.MultiLineCommentTrivia) {
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
const commentText = sourceFile.text.substring(pos + 2, end - 2);
|
|
23
|
-
const match = commentText.match(parseSpanComment);
|
|
24
|
-
if (match === null) {
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
return new AbsoluteSourceSpan(+match[1], +match[2]);
|
|
28
|
-
}) || null;
|
|
29
|
-
}
|
|
30
|
-
/** Used to identify what type the comment is. */
|
|
31
|
-
export var CommentTriviaType;
|
|
32
|
-
(function (CommentTriviaType) {
|
|
33
|
-
CommentTriviaType["DIAGNOSTIC"] = "D";
|
|
34
|
-
CommentTriviaType["EXPRESSION_TYPE_IDENTIFIER"] = "T";
|
|
35
|
-
})(CommentTriviaType || (CommentTriviaType = {}));
|
|
36
|
-
/** Identifies what the TCB expression is for (for example, a directive declaration). */
|
|
37
|
-
export var ExpressionIdentifier;
|
|
38
|
-
(function (ExpressionIdentifier) {
|
|
39
|
-
ExpressionIdentifier["DIRECTIVE"] = "DIR";
|
|
40
|
-
ExpressionIdentifier["COMPONENT_COMPLETION"] = "COMPCOMP";
|
|
41
|
-
ExpressionIdentifier["EVENT_PARAMETER"] = "EP";
|
|
42
|
-
})(ExpressionIdentifier || (ExpressionIdentifier = {}));
|
|
43
|
-
/** Tags the node with the given expression identifier. */
|
|
44
|
-
export function addExpressionIdentifier(node, identifier) {
|
|
45
|
-
ts.addSyntheticTrailingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, `${CommentTriviaType.EXPRESSION_TYPE_IDENTIFIER}:${identifier}`,
|
|
46
|
-
/* hasTrailingNewLine */ false);
|
|
47
|
-
}
|
|
48
|
-
const IGNORE_FOR_DIAGNOSTICS_MARKER = `${CommentTriviaType.DIAGNOSTIC}:ignore`;
|
|
49
|
-
/**
|
|
50
|
-
* Tag the `ts.Node` with an indication that any errors arising from the evaluation of the node
|
|
51
|
-
* should be ignored.
|
|
52
|
-
*/
|
|
53
|
-
export function markIgnoreDiagnostics(node) {
|
|
54
|
-
ts.addSyntheticTrailingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, IGNORE_FOR_DIAGNOSTICS_MARKER,
|
|
55
|
-
/* hasTrailingNewLine */ false);
|
|
56
|
-
}
|
|
57
|
-
/** Returns true if the node has a marker that indicates diagnostics errors should be ignored. */
|
|
58
|
-
export function hasIgnoreForDiagnosticsMarker(node, sourceFile) {
|
|
59
|
-
return ts.forEachTrailingCommentRange(sourceFile.text, node.getEnd(), (pos, end, kind) => {
|
|
60
|
-
if (kind !== ts.SyntaxKind.MultiLineCommentTrivia) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
const commentText = sourceFile.text.substring(pos + 2, end - 2);
|
|
64
|
-
return commentText === IGNORE_FOR_DIAGNOSTICS_MARKER;
|
|
65
|
-
}) === true;
|
|
66
|
-
}
|
|
67
|
-
function makeRecursiveVisitor(visitor) {
|
|
68
|
-
function recursiveVisitor(node) {
|
|
69
|
-
const res = visitor(node);
|
|
70
|
-
return res !== null ? res : node.forEachChild(recursiveVisitor);
|
|
71
|
-
}
|
|
72
|
-
return recursiveVisitor;
|
|
73
|
-
}
|
|
74
|
-
function getSpanFromOptions(opts) {
|
|
75
|
-
let withSpan = null;
|
|
76
|
-
if (opts.withSpan !== undefined) {
|
|
77
|
-
if (opts.withSpan instanceof AbsoluteSourceSpan) {
|
|
78
|
-
withSpan = opts.withSpan;
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
withSpan = { start: opts.withSpan.start.offset, end: opts.withSpan.end.offset };
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return withSpan;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Given a `ts.Node` with finds the first node whose matching the criteria specified
|
|
88
|
-
* by the `FindOptions`.
|
|
89
|
-
*
|
|
90
|
-
* Returns `null` when no `ts.Node` matches the given conditions.
|
|
91
|
-
*/
|
|
92
|
-
export function findFirstMatchingNode(tcb, opts) {
|
|
93
|
-
var _a;
|
|
94
|
-
const withSpan = getSpanFromOptions(opts);
|
|
95
|
-
const withExpressionIdentifier = opts.withExpressionIdentifier;
|
|
96
|
-
const sf = tcb.getSourceFile();
|
|
97
|
-
const visitor = makeRecursiveVisitor(node => {
|
|
98
|
-
if (!opts.filter(node)) {
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
if (withSpan !== null) {
|
|
102
|
-
const comment = readSpanComment(node, sf);
|
|
103
|
-
if (comment === null || withSpan.start !== comment.start || withSpan.end !== comment.end) {
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
if (withExpressionIdentifier !== undefined &&
|
|
108
|
-
!hasExpressionIdentifier(sf, node, withExpressionIdentifier)) {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
return node;
|
|
112
|
-
});
|
|
113
|
-
return (_a = tcb.forEachChild(visitor)) !== null && _a !== void 0 ? _a : null;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Given a `ts.Node` with source span comments, finds the first node whose source span comment
|
|
117
|
-
* matches the given `sourceSpan`. Additionally, the `filter` function allows matching only
|
|
118
|
-
* `ts.Nodes` of a given type, which provides the ability to select only matches of a given type
|
|
119
|
-
* when there may be more than one.
|
|
120
|
-
*
|
|
121
|
-
* Returns `null` when no `ts.Node` matches the given conditions.
|
|
122
|
-
*/
|
|
123
|
-
export function findAllMatchingNodes(tcb, opts) {
|
|
124
|
-
const withSpan = getSpanFromOptions(opts);
|
|
125
|
-
const withExpressionIdentifier = opts.withExpressionIdentifier;
|
|
126
|
-
const results = [];
|
|
127
|
-
const stack = [tcb];
|
|
128
|
-
const sf = tcb.getSourceFile();
|
|
129
|
-
while (stack.length > 0) {
|
|
130
|
-
const node = stack.pop();
|
|
131
|
-
if (!opts.filter(node)) {
|
|
132
|
-
stack.push(...node.getChildren());
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
if (withSpan !== null) {
|
|
136
|
-
const comment = readSpanComment(node, sf);
|
|
137
|
-
if (comment === null || withSpan.start !== comment.start || withSpan.end !== comment.end) {
|
|
138
|
-
stack.push(...node.getChildren());
|
|
139
|
-
continue;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
if (withExpressionIdentifier !== undefined &&
|
|
143
|
-
!hasExpressionIdentifier(sf, node, withExpressionIdentifier)) {
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
results.push(node);
|
|
147
|
-
}
|
|
148
|
-
return results;
|
|
149
|
-
}
|
|
150
|
-
export function hasExpressionIdentifier(sourceFile, node, identifier) {
|
|
151
|
-
return ts.forEachTrailingCommentRange(sourceFile.text, node.getEnd(), (pos, end, kind) => {
|
|
152
|
-
if (kind !== ts.SyntaxKind.MultiLineCommentTrivia) {
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
const commentText = sourceFile.text.substring(pos + 2, end - 2);
|
|
156
|
-
return commentText === `${CommentTriviaType.EXPRESSION_TYPE_IDENTIFIER}:${identifier}`;
|
|
157
|
-
}) || false;
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3R5cGVjaGVjay9zcmMvY29tbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGtCQUFrQixFQUFrQixNQUFNLG1CQUFtQixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO0FBRXpDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsSUFBYSxFQUFFLGFBQTRCLElBQUksQ0FBQyxhQUFhLEVBQUU7SUFDakUsT0FBTyxFQUFFLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3ZGLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUU7WUFDakQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQyxJQUFJLElB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QUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3ZGLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUU7WUFDakQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sV0FBVyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsMEJBQTBCLElBQUksVUFBVSxFQUFFLENBQUM7SUFDekYsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0Fic29sdXRlU291cmNlU3BhbiwgUGFyc2VTb3VyY2VTcGFufSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuY29uc3QgcGFyc2VTcGFuQ29tbWVudCA9IC9eKFxcZCspLChcXGQrKSQvO1xuXG4vKipcbiAqIFJlYWRzIHRoZSB0cmFpbGluZyBjb21tZW50cyBhbmQgZmluZHMgdGhlIGZpcnN0IG1hdGNoIHdoaWNoIGlzIGEgc3BhbiBjb21tZW50IChpLmUuIDQsMTApIG9uIGFcbiAqIG5vZGUgYW5kIHJldHVybnMgaXQgYXMgYW4gYEFic29sdXRlU291cmNlU3BhbmAuXG4gKlxuICogV2lsbCByZXR1cm4gYG51bGxgIGlmIG5vIHRyYWlsaW5nIGNvbW1lbnRzIG9uIHRoZSBub2RlIG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtIG9mIGEgc291cmNlIHNwYW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3BhbkNvbW1lbnQoXG4gICAgbm9kZTogdHMuTm9kZSwgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSA9IG5vZGUuZ2V0U291cmNlRmlsZSgpKTogQWJzb2x1dGVTb3VyY2VTcGFufG51bGwge1xuICByZXR1cm4gdHMuZm9yRWFjaFRyYWlsaW5nQ29tbWVudFJhbmdlKHNvdXJjZUZpbGUudGV4dCwgbm9kZS5nZXRFbmQoKSwgKHBvcywgZW5kLCBraW5kKSA9PiB7XG4gICAgaWYgKGtpbmQgIT09IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbW1lbnRUZXh0ID0gc291cmNlRmlsZS50ZXh0LnN1YnN0cmluZyhwb3MgKyAyLCBlbmQgLSAyKTtcbiAgICBjb25zdCBtYXRjaCA9IGNvbW1lbnRUZXh0Lm1hdGNoKHBhcnNlU3BhbkNvbW1lbnQpO1xuICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBYnNvbHV0ZVNvdXJjZVNwYW4oK21hdGNoWzFdLCArbWF0Y2hbMl0pO1xuICB9KSB8fCBudWxsO1xufVxuXG4vKiogVXNlZCB0byBpZGVudGlmeSB3aGF0IHR5cGUgdGhlIGNvbW1lbnQgaXMuICovXG5leHBvcnQgZW51bSBDb21tZW50VHJpdmlhVHlwZSB7XG4gIERJQUdOT1NUSUMgPSAnRCcsXG4gIEVYUFJFU1NJT05fVFlQRV9JREVOVElGSUVSID0gJ1QnLFxufVxuXG4vKiogSWRlbnRpZmllcyB3aGF0IHRoZSBUQ0IgZXhwcmVzc2lvbiBpcyBmb3IgKGZvciBleGFtcGxlLCBhIGRpcmVjdGl2ZSBkZWNsYXJhdGlvbikuICovXG5leHBvcnQgZW51bSBFeHByZXNzaW9uSWRlbnRpZmllciB7XG4gIERJUkVDVElWRSA9ICdESVInLFxuICBDT01QT05FTlRfQ09NUExFVElPTiA9ICdDT01QQ09NUCcsXG4gIEVWRU5UX1BBUkFNRVRFUiA9ICdFUCcsXG59XG5cbi8qKiBUYWdzIHRoZSBub2RlIHdpdGggdGhlIGdpdmVuIGV4cHJlc3Npb24gaWRlbnRpZmllci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFeHByZXNzaW9uSWRlbnRpZmllcihub2RlOiB0cy5Ob2RlLCBpZGVudGlmaWVyOiBFeHByZXNzaW9uSWRlbnRpZmllcikge1xuICB0cy5hZGRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnQoXG4gICAgICBub2RlLCB0cy5TeW50YXhLaW5kLk11bHRpTGluZUNvbW1lbnRUcml2aWEsXG4gICAgICBgJHtDb21tZW50VHJpdmlhVHlwZS5FWFBSRVNTSU9OX1RZUEVfSURFTlRJRklFUn06JHtpZGVudGlmaWVyfWAsXG4gICAgICAvKiBoYXNUcmFpbGluZ05ld0xpbmUgKi8gZmFsc2UpO1xufVxuXG5jb25zdCBJR05PUkVfRk9SX0RJQUdOT1NUSUNTX01BUktFUiA9IGAke0NvbW1lbnRUcml2aWFUeXBlLkRJQUdOT1NUSUN9Omlnbm9yZWA7XG5cbi8qKlxuICogVGFnIHRoZSBgdHMuTm9kZWAgd2l0aCBhbiBpbmRpY2F0aW9uIHRoYXQgYW55IGVycm9ycyBhcmlzaW5nIGZyb20gdGhlIGV2YWx1YXRpb24gb2YgdGhlIG5vZGVcbiAqIHNob3VsZCBiZSBpZ25vcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya0lnbm9yZURpYWdub3N0aWNzKG5vZGU6IHRzLk5vZGUpOiB2b2lkIHtcbiAgdHMuYWRkU3ludGhldGljVHJhaWxpbmdDb21tZW50KFxuICAgICAgbm9kZSwgdHMuU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhLCBJR05PUkVfRk9SX0RJQUdOT1NUSUNTX01BUktFUixcbiAgICAgIC8qIGhhc1RyYWlsaW5nTmV3TGluZSAqLyBmYWxzZSk7XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIG5vZGUgaGFzIGEgbWFya2VyIHRoYXQgaW5kaWNhdGVzIGRpYWdub3N0aWNzIGVycm9ycyBzaG91bGQgYmUgaWdub3JlZC4gICovXG5leHBvcnQgZnVuY3Rpb24gaGFzSWdub3JlRm9yRGlhZ25vc3RpY3NNYXJrZXIobm9kZTogdHMuTm9kZSwgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHMuZm9yRWFjaFRyYWlsaW5nQ29tbWVudFJhbmdlKHNvdXJjZUZpbGUudGV4dCwgbm9kZS5nZXRFbmQoKSwgKHBvcywgZW5kLCBraW5kKSA9PiB7XG4gICAgaWYgKGtpbmQgIT09IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbW1lbnRUZXh0ID0gc291cmNlRmlsZS50ZXh0LnN1YnN0cmluZyhwb3MgKyAyLCBlbmQgLSAyKTtcbiAgICByZXR1cm4gY29tbWVudFRleHQgPT09IElHTk9SRV9GT1JfRElBR05PU1RJQ1NfTUFSS0VSO1xuICB9KSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWFrZVJlY3Vyc2l2ZVZpc2l0b3I8VCBleHRlbmRzIHRzLk5vZGU+KHZpc2l0b3I6IChub2RlOiB0cy5Ob2RlKSA9PiBUIHwgbnVsbCk6XG4gICAgKG5vZGU6IHRzLk5vZGUpID0+IFQgfCB1bmRlZmluZWQge1xuICBmdW5jdGlvbiByZWN1cnNpdmVWaXNpdG9yKG5vZGU6IHRzLk5vZGUpOiBUfHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVzID0gdmlzaXRvcihub2RlKTtcbiAgICByZXR1cm4gcmVzICE9PSBudWxsID8gcmVzIDogbm9kZS5mb3JFYWNoQ2hpbGQocmVjdXJzaXZlVmlzaXRvcik7XG4gIH1cbiAgcmV0dXJuIHJlY3Vyc2l2ZVZpc2l0b3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmluZE9wdGlvbnM8VCBleHRlbmRzIHRzLk5vZGU+IHtcbiAgZmlsdGVyOiAobm9kZTogdHMuTm9kZSkgPT4gbm9kZSBpcyBUO1xuICB3aXRoRXhwcmVzc2lvbklkZW50aWZpZXI/OiBFeHByZXNzaW9uSWRlbnRpZmllcjtcbiAgd2l0aFNwYW4/OiBBYnNvbHV0ZVNvdXJjZVNwYW58UGFyc2VTb3VyY2VTcGFuO1xufVxuXG5mdW5jdGlvbiBnZXRTcGFuRnJvbU9wdGlvbnMob3B0czogRmluZE9wdGlvbnM8dHMuTm9kZT4pIHtcbiAgbGV0IHdpdGhTcGFuOiB7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXJ9fG51bGwgPSBudWxsO1xuICBpZiAob3B0cy53aXRoU3BhbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKG9wdHMud2l0aFNwYW4gaW5zdGFuY2VvZiBBYnNvbHV0ZVNvdXJjZVNwYW4pIHtcbiAgICAgIHdpdGhTcGFuID0gb3B0cy53aXRoU3BhbjtcbiAgICB9IGVsc2Uge1xuICAgICAgd2l0aFNwYW4gPSB7c3RhcnQ6IG9wdHMud2l0aFNwYW4uc3RhcnQub2Zmc2V0LCBlbmQ6IG9wdHMud2l0aFNwYW4uZW5kLm9mZnNldH07XG4gICAgfVxuICB9XG4gIHJldHVybiB3aXRoU3Bhbjtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGB0cy5Ob2RlYCB3aXRoIGZpbmRzIHRoZSBmaXJzdCBub2RlIHdob3NlIG1hdGNoaW5nIHRoZSBjcml0ZXJpYSBzcGVjaWZpZWRcbiAqIGJ5IHRoZSBgRmluZE9wdGlvbnNgLlxuICpcbiAqIFJldHVybnMgYG51bGxgIHdoZW4gbm8gYHRzLk5vZGVgIG1hdGNoZXMgdGhlIGdpdmVuIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlyc3RNYXRjaGluZ05vZGU8VCBleHRlbmRzIHRzLk5vZGU+KHRjYjogdHMuTm9kZSwgb3B0czogRmluZE9wdGlvbnM8VD4pOiBUfFxuICAgIG51bGwge1xuICBjb25zdCB3aXRoU3BhbiA9IGdldFNwYW5Gcm9tT3B0aW9ucyhvcHRzKTtcbiAgY29uc3Qgd2l0aEV4cHJlc3Npb25JZGVudGlmaWVyID0gb3B0cy53aXRoRXhwcmVzc2lvbklkZW50aWZpZXI7XG4gIGNvbnN0IHNmID0gdGNiLmdldFNvdXJjZUZpbGUoKTtcbiAgY29uc3QgdmlzaXRvciA9IG1ha2VSZWN1cnNpdmVWaXNpdG9yPFQ+KG5vZGUgPT4ge1xuICAgIGlmICghb3B0cy5maWx0ZXIobm9kZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAod2l0aFNwYW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnQgPSByZWFkU3BhbkNvbW1lbnQobm9kZSwgc2YpO1xuICAgICAgaWYgKGNvbW1lbnQgPT09IG51bGwgfHwgd2l0aFNwYW4uc3RhcnQgIT09IGNvbW1lbnQuc3RhcnQgfHwgd2l0aFNwYW4uZW5kICE9PSBjb21tZW50LmVuZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHdpdGhFeHByZXNzaW9uSWRlbnRpZmllciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICFoYXNFeHByZXNzaW9uSWRlbnRpZmllcihzZiwgbm9kZSwgd2l0aEV4cHJlc3Npb25JZGVudGlmaWVyKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9KTtcbiAgcmV0dXJuIHRjYi5mb3JFYWNoQ2hpbGQodmlzaXRvcikgPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGB0cy5Ob2RlYCB3aXRoIHNvdXJjZSBzcGFuIGNvbW1lbnRzLCBmaW5kcyB0aGUgZmlyc3Qgbm9kZSB3aG9zZSBzb3VyY2Ugc3BhbiBjb21tZW50XG4gKiBtYXRjaGVzIHRoZSBnaXZlbiBgc291cmNlU3BhbmAuIEFkZGl0aW9uYWxseSwgdGhlIGBmaWx0ZXJgIGZ1bmN0aW9uIGFsbG93cyBtYXRjaGluZyBvbmx5XG4gKiBgdHMuTm9kZXNgIG9mIGEgZ2l2ZW4gdHlwZSwgd2hpY2ggcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gc2VsZWN0IG9ubHkgbWF0Y2hlcyBvZiBhIGdpdmVuIHR5cGVcbiAqIHdoZW4gdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgd2hlbiBubyBgdHMuTm9kZWAgbWF0Y2hlcyB0aGUgZ2l2ZW4gY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBbGxNYXRjaGluZ05vZGVzPFQgZXh0ZW5kcyB0cy5Ob2RlPih0Y2I6IHRzLk5vZGUsIG9wdHM6IEZpbmRPcHRpb25zPFQ+KTogVFtdIHtcbiAgY29uc3Qgd2l0aFNwYW4gPSBnZXRTcGFuRnJvbU9wdGlvbnMob3B0cyk7XG4gIGNvbnN0IHdpdGhFeHByZXNzaW9uSWRlbnRpZmllciA9IG9wdHMud2l0aEV4cHJlc3Npb25JZGVudGlmaWVyO1xuICBjb25zdCByZXN1bHRzOiBUW10gPSBbXTtcbiAgY29uc3Qgc3RhY2s6IHRzLk5vZGVbXSA9IFt0Y2JdO1xuICBjb25zdCBzZiA9IHRjYi5nZXRTb3VyY2VGaWxlKCk7XG5cbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlID0gc3RhY2sucG9wKCkhO1xuXG4gICAgaWYgKCFvcHRzLmZpbHRlcihub2RlKSkge1xuICAgICAgc3RhY2sucHVzaCguLi5ub2RlLmdldENoaWxkcmVuKCkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICh3aXRoU3BhbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29tbWVudCA9IHJlYWRTcGFuQ29tbWVudChub2RlLCBzZik7XG4gICAgICBpZiAoY29tbWVudCA9PT0gbnVsbCB8fCB3aXRoU3Bhbi5zdGFydCAhPT0gY29tbWVudC5zdGFydCB8fCB3aXRoU3Bhbi5lbmQgIT09IGNvbW1lbnQuZW5kKSB7XG4gICAgICAgIHN0YWNrLnB1c2goLi4ubm9kZS5nZXRDaGlsZHJlbigpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh3aXRoRXhwcmVzc2lvbklkZW50aWZpZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAhaGFzRXhwcmVzc2lvbklkZW50aWZpZXIoc2YsIG5vZGUsIHdpdGhFeHByZXNzaW9uSWRlbnRpZmllcikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc3VsdHMucHVzaChub2RlKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRXhwcmVzc2lvbklkZW50aWZpZXIoXG4gICAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgbm9kZTogdHMuTm9kZSwgaWRlbnRpZmllcjogRXhwcmVzc2lvbklkZW50aWZpZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRzLmZvckVhY2hUcmFpbGluZ0NvbW1lbnRSYW5nZShzb3VyY2VGaWxlLnRleHQsIG5vZGUuZ2V0RW5kKCksIChwb3MsIGVuZCwga2luZCkgPT4ge1xuICAgIGlmIChraW5kICE9PSB0cy5TeW50YXhLaW5kLk11bHRpTGluZUNvbW1lbnRUcml2aWEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY29tbWVudFRleHQgPSBzb3VyY2VGaWxlLnRleHQuc3Vic3RyaW5nKHBvcyArIDIsIGVuZCAtIDIpO1xuICAgIHJldHVybiBjb21tZW50VGV4dCA9PT0gYCR7Q29tbWVudFRyaXZpYVR5cGUuRVhQUkVTU0lPTl9UWVBFX0lERU5USUZJRVJ9OiR7aWRlbnRpZmllcn1gO1xuICB9KSB8fCBmYWxzZTtcbn1cbiJdfQ==
|
|
@@ -1,155 +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 { TmplAstReference } from '@angular/compiler';
|
|
9
|
-
import { EmptyExpr, MethodCall, PropertyRead, PropertyWrite, SafeMethodCall, SafePropertyRead } from '@angular/compiler/src/compiler';
|
|
10
|
-
import * as ts from 'typescript';
|
|
11
|
-
import { CompletionKind } from '../api';
|
|
12
|
-
import { ExpressionIdentifier, findFirstMatchingNode } from './comments';
|
|
13
|
-
/**
|
|
14
|
-
* Powers autocompletion for a specific component.
|
|
15
|
-
*
|
|
16
|
-
* Internally caches autocompletion results, and must be discarded if the component template or
|
|
17
|
-
* surrounding TS program have changed.
|
|
18
|
-
*/
|
|
19
|
-
export class CompletionEngine {
|
|
20
|
-
constructor(tcb, data, shimPath) {
|
|
21
|
-
this.tcb = tcb;
|
|
22
|
-
this.data = data;
|
|
23
|
-
this.shimPath = shimPath;
|
|
24
|
-
/**
|
|
25
|
-
* Cache of completions for various levels of the template, including the root template (`null`).
|
|
26
|
-
* Memoizes `getTemplateContextCompletions`.
|
|
27
|
-
*/
|
|
28
|
-
this.templateContextCache = new Map();
|
|
29
|
-
this.expressionCompletionCache = new Map();
|
|
30
|
-
// Find the component completion expression within the TCB. This looks like: `ctx. /* ... */;`
|
|
31
|
-
const globalRead = findFirstMatchingNode(this.tcb, {
|
|
32
|
-
filter: ts.isPropertyAccessExpression,
|
|
33
|
-
withExpressionIdentifier: ExpressionIdentifier.COMPONENT_COMPLETION
|
|
34
|
-
});
|
|
35
|
-
if (globalRead !== null) {
|
|
36
|
-
this.componentContext = {
|
|
37
|
-
shimPath: this.shimPath,
|
|
38
|
-
// `globalRead.name` is an empty `ts.Identifier`, so its start position immediately follows
|
|
39
|
-
// the `.` in `ctx.`. TS autocompletion APIs can then be used to access completion results
|
|
40
|
-
// for the component context.
|
|
41
|
-
positionInShimFile: globalRead.name.getStart(),
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this.componentContext = null;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Get global completions within the given template context and AST node.
|
|
50
|
-
*
|
|
51
|
-
* @param context the given template context - either a `TmplAstTemplate` embedded view, or `null`
|
|
52
|
-
* for the root
|
|
53
|
-
* template context.
|
|
54
|
-
* @param node the given AST node
|
|
55
|
-
*/
|
|
56
|
-
getGlobalCompletions(context, node) {
|
|
57
|
-
if (this.componentContext === null) {
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
const templateContext = this.getTemplateContextCompletions(context);
|
|
61
|
-
if (templateContext === null) {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
let nodeContext = null;
|
|
65
|
-
if (node instanceof EmptyExpr) {
|
|
66
|
-
const nodeLocation = findFirstMatchingNode(this.tcb, {
|
|
67
|
-
filter: ts.isIdentifier,
|
|
68
|
-
withSpan: node.sourceSpan,
|
|
69
|
-
});
|
|
70
|
-
if (nodeLocation !== null) {
|
|
71
|
-
nodeContext = {
|
|
72
|
-
shimPath: this.shimPath,
|
|
73
|
-
positionInShimFile: nodeLocation.getStart(),
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
componentContext: this.componentContext,
|
|
79
|
-
templateContext,
|
|
80
|
-
nodeContext,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
getExpressionCompletionLocation(expr) {
|
|
84
|
-
if (this.expressionCompletionCache.has(expr)) {
|
|
85
|
-
return this.expressionCompletionCache.get(expr);
|
|
86
|
-
}
|
|
87
|
-
// Completion works inside property reads and method calls.
|
|
88
|
-
let tsExpr = null;
|
|
89
|
-
if (expr instanceof PropertyRead || expr instanceof MethodCall ||
|
|
90
|
-
expr instanceof PropertyWrite) {
|
|
91
|
-
// Non-safe navigation operations are trivial: `foo.bar` or `foo.bar()`
|
|
92
|
-
tsExpr = findFirstMatchingNode(this.tcb, {
|
|
93
|
-
filter: ts.isPropertyAccessExpression,
|
|
94
|
-
withSpan: expr.nameSpan,
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
else if (expr instanceof SafePropertyRead || expr instanceof SafeMethodCall) {
|
|
98
|
-
// Safe navigation operations are a little more complex, and involve a ternary. Completion
|
|
99
|
-
// happens in the "true" case of the ternary.
|
|
100
|
-
const ternaryExpr = findFirstMatchingNode(this.tcb, {
|
|
101
|
-
filter: ts.isParenthesizedExpression,
|
|
102
|
-
withSpan: expr.sourceSpan,
|
|
103
|
-
});
|
|
104
|
-
if (ternaryExpr === null || !ts.isConditionalExpression(ternaryExpr.expression)) {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
const whenTrue = ternaryExpr.expression.whenTrue;
|
|
108
|
-
if (expr instanceof SafePropertyRead && ts.isPropertyAccessExpression(whenTrue)) {
|
|
109
|
-
tsExpr = whenTrue;
|
|
110
|
-
}
|
|
111
|
-
else if (expr instanceof SafeMethodCall && ts.isCallExpression(whenTrue) &&
|
|
112
|
-
ts.isPropertyAccessExpression(whenTrue.expression)) {
|
|
113
|
-
tsExpr = whenTrue.expression;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (tsExpr === null) {
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
const res = {
|
|
120
|
-
shimPath: this.shimPath,
|
|
121
|
-
positionInShimFile: tsExpr.name.getEnd(),
|
|
122
|
-
};
|
|
123
|
-
this.expressionCompletionCache.set(expr, res);
|
|
124
|
-
return res;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Get global completions within the given template context - either a `TmplAstTemplate` embedded
|
|
128
|
-
* view, or `null` for the root context.
|
|
129
|
-
*/
|
|
130
|
-
getTemplateContextCompletions(context) {
|
|
131
|
-
if (this.templateContextCache.has(context)) {
|
|
132
|
-
return this.templateContextCache.get(context);
|
|
133
|
-
}
|
|
134
|
-
const templateContext = new Map();
|
|
135
|
-
// The bound template already has details about the references and variables in scope in the
|
|
136
|
-
// `context` template - they just need to be converted to `Completion`s.
|
|
137
|
-
for (const node of this.data.boundTarget.getEntitiesInTemplateScope(context)) {
|
|
138
|
-
if (node instanceof TmplAstReference) {
|
|
139
|
-
templateContext.set(node.name, {
|
|
140
|
-
kind: CompletionKind.Reference,
|
|
141
|
-
node,
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
templateContext.set(node.name, {
|
|
146
|
-
kind: CompletionKind.Variable,
|
|
147
|
-
node,
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
this.templateContextCache.set(context, templateContext);
|
|
152
|
-
return templateContext;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL3NyYy9jb21wbGV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRSxPQUFPLEVBQU0sU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBYyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RKLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR2pDLE9BQU8sRUFBQyxjQUFjLEVBQTBFLE1BQU0sUUFBUSxDQUFDO0FBRS9HLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUd2RTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFjM0IsWUFBb0IsR0FBWSxFQUFVLElBQWtCLEVBQVUsUUFBd0I7UUFBMUUsUUFBRyxHQUFILEdBQUcsQ0FBUztRQUFVLFNBQUksR0FBSixJQUFJLENBQWM7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQVg5Rjs7O1dBR0c7UUFDSyx5QkFBb0IsR0FDeEIsSUFBSSxHQUFHLEVBQTZFLENBQUM7UUFFakYsOEJBQXlCLEdBQzdCLElBQUksR0FBRyxFQUF5RSxDQUFDO1FBSW5GLDhGQUE4RjtRQUM5RixNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2pELE1BQU0sRUFBRSxFQUFFLENBQUMsMEJBQTBCO1lBQ3JDLHdCQUF3QixFQUFFLG9CQUFvQixDQUFDLG9CQUFvQjtTQUNwRSxDQUFDLENBQUM7UUFFSCxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDdkIsSUFB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YyxDQUFDLFFBQVE7b0JBQzdCLElBQUk7aUJBQ0wsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1RtcGxBc3RSZWZlcmVuY2UsIFRtcGxBc3RUZW1wbGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtBU1QsIEVtcHR5RXhwciwgTWV0aG9kQ2FsbCwgUHJvcGVydHlSZWFkLCBQcm9wZXJ0eVdyaXRlLCBTYWZlTWV0aG9kQ2FsbCwgU2FmZVByb3BlcnR5UmVhZCwgVG1wbEFzdE5vZGV9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9jb21waWxlcic7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aH0gZnJvbSAnLi4vLi4vZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtDb21wbGV0aW9uS2luZCwgR2xvYmFsQ29tcGxldGlvbiwgUmVmZXJlbmNlQ29tcGxldGlvbiwgU2hpbUxvY2F0aW9uLCBWYXJpYWJsZUNvbXBsZXRpb259IGZyb20gJy4uL2FwaSc7XG5cbmltcG9ydCB7RXhwcmVzc2lvbklkZW50aWZpZXIsIGZpbmRGaXJzdE1hdGNoaW5nTm9kZX0gZnJvbSAnLi9jb21tZW50cyc7XG5pbXBvcnQge1RlbXBsYXRlRGF0YX0gZnJvbSAnLi9jb250ZXh0JztcblxuLyoqXG4gKiBQb3dlcnMgYXV0b2NvbXBsZXRpb24gZm9yIGEgc3BlY2lmaWMgY29tcG9uZW50LlxuICpcbiAqIEludGVybmFsbHkgY2FjaGVzIGF1dG9jb21wbGV0aW9uIHJlc3VsdHMsIGFuZCBtdXN0IGJlIGRpc2NhcmRlZCBpZiB0aGUgY29tcG9uZW50IHRlbXBsYXRlIG9yXG4gKiBzdXJyb3VuZGluZyBUUyBwcm9ncmFtIGhhdmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBsZXRpb25FbmdpbmUge1xuICBwcml2YXRlIGNvbXBvbmVudENvbnRleHQ6IFNoaW1Mb2NhdGlvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBDYWNoZSBvZiBjb21wbGV0aW9ucyBmb3IgdmFyaW91cyBsZXZlbHMgb2YgdGhlIHRlbXBsYXRlLCBpbmNsdWRpbmcgdGhlIHJvb3QgdGVtcGxhdGUgKGBudWxsYCkuXG4gICAqIE1lbW9pemVzIGBnZXRUZW1wbGF0ZUNvbnRleHRDb21wbGV0aW9uc2AuXG4gICAqL1xuICBwcml2YXRlIHRlbXBsYXRlQ29udGV4dENhY2hlID1cbiAgICAgIG5ldyBNYXA8VG1wbEFzdFRlbXBsYXRlfG51bGwsIE1hcDxzdHJpbmcsIFJlZmVyZW5jZUNvbXBsZXRpb258VmFyaWFibGVDb21wbGV0aW9uPj4oKTtcblxuICBwcml2YXRlIGV4cHJlc3Npb25Db21wbGV0aW9uQ2FjaGUgPVxuICAgICAgbmV3IE1hcDxQcm9wZXJ0eVJlYWR8U2FmZVByb3BlcnR5UmVhZHxNZXRob2RDYWxsfFNhZmVNZXRob2RDYWxsLCBTaGltTG9jYXRpb24+KCk7XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRjYjogdHMuTm9kZSwgcHJpdmF0ZSBkYXRhOiBUZW1wbGF0ZURhdGEsIHByaXZhdGUgc2hpbVBhdGg6IEFic29sdXRlRnNQYXRoKSB7XG4gICAgLy8gRmluZCB0aGUgY29tcG9uZW50IGNvbXBsZXRpb24gZXhwcmVzc2lvbiB3aXRoaW4gdGhlIFRDQi4gVGhpcyBsb29rcyBsaWtlOiBgY3R4LiAvKiAuLi4gKi87YFxuICAgIGNvbnN0IGdsb2JhbFJlYWQgPSBmaW5kRmlyc3RNYXRjaGluZ05vZGUodGhpcy50Y2IsIHtcbiAgICAgIGZpbHRlcjogdHMuaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sXG4gICAgICB3aXRoRXhwcmVzc2lvbklkZW50aWZpZXI6IEV4cHJlc3Npb25JZGVudGlmaWVyLkNPTVBPTkVOVF9DT01QTEVUSU9OXG4gICAgfSk7XG5cbiAgICBpZiAoZ2xvYmFsUmVhZCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jb21wb25lbnRDb250ZXh0ID0ge1xuICAgICAgICBzaGltUGF0aDogdGhpcy5zaGltUGF0aCxcbiAgICAgICAgLy8gYGdsb2JhbFJlYWQubmFtZWAgaXMgYW4gZW1wdHkgYHRzLklkZW50aWZpZXJgLCBzbyBpdHMgc3RhcnQgcG9zaXRpb24gaW1tZWRpYXRlbHkgZm9sbG93c1xuICAgICAgICAvLyB0aGUgYC5gIGluIGBjdHguYC4gVFMgYXV0b2NvbXBsZXRpb24gQVBJcyBjYW4gdGhlbiBiZSB1c2VkIHRvIGFjY2VzcyBjb21wbGV0aW9uIHJlc3VsdHNcbiAgICAgICAgLy8gZm9yIHRoZSBjb21wb25lbnQgY29udGV4dC5cbiAgICAgICAgcG9zaXRpb25JblNoaW1GaWxlOiBnbG9iYWxSZWFkLm5hbWUuZ2V0U3RhcnQoKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29tcG9uZW50Q29udGV4dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBnbG9iYWwgY29tcGxldGlvbnMgd2l0aGluIHRoZSBnaXZlbiB0ZW1wbGF0ZSBjb250ZXh0IGFuZCBBU1Qgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgdGhlIGdpdmVuIHRlbXBsYXRlIGNvbnRleHQgLSBlaXRoZXIgYSBgVG1wbEFzdFRlbXBsYXRlYCBlbWJlZGRlZCB2aWV3LCBvciBgbnVsbGBcbiAgICogICAgIGZvciB0aGUgcm9vdFxuICAgKiB0ZW1wbGF0ZSBjb250ZXh0LlxuICAgKiBAcGFyYW0gbm9kZSB0aGUgZ2l2ZW4gQVNUIG5vZGVcbiAgICovXG4gIGdldEdsb2JhbENvbXBsZXRpb25zKGNvbnRleHQ6IFRtcGxBc3RUZW1wbGF0ZXxudWxsLCBub2RlOiBBU1R8VG1wbEFzdE5vZGUpOiBHbG9iYWxDb21wbGV0aW9uXG4gICAgICB8bnVsbCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50Q29udGV4dCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGVDb250ZXh0ID0gdGhpcy5nZXRUZW1wbGF0ZUNvbnRleHRDb21wbGV0aW9ucyhjb250ZXh0KTtcbiAgICBpZiAodGVtcGxhdGVDb250ZXh0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbm9kZUNvbnRleHQ6IFNoaW1Mb2NhdGlvbnxudWxsID0gbnVsbDtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVtcHR5RXhwcikge1xuICAgICAgY29uc3Qgbm9kZUxvY2F0aW9uID0gZmluZEZpcnN0TWF0Y2hpbmdOb2RlKHRoaXMudGNiLCB7XG4gICAgICAgIGZpbHRlcjogdHMuaXNJZGVudGlmaWVyLFxuICAgICAgICB3aXRoU3Bhbjogbm9kZS5zb3VyY2VTcGFuLFxuICAgICAgfSk7XG4gICAgICBpZiAobm9kZUxvY2F0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGVDb250ZXh0ID0ge1xuICAgICAgICAgIHNoaW1QYXRoOiB0aGlzLnNoaW1QYXRoLFxuICAgICAgICAgIHBvc2l0aW9uSW5TaGltRmlsZTogbm9kZUxvY2F0aW9uLmdldFN0YXJ0KCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBvbmVudENvbnRleHQ6IHRoaXMuY29tcG9uZW50Q29udGV4dCxcbiAgICAgIHRlbXBsYXRlQ29udGV4dCxcbiAgICAgIG5vZGVDb250ZXh0LFxuICAgIH07XG4gIH1cblxuICBnZXRFeHByZXNzaW9uQ29tcGxldGlvbkxvY2F0aW9uKGV4cHI6IFByb3BlcnR5UmVhZHxQcm9wZXJ0eVdyaXRlfE1ldGhvZENhbGx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FmZU1ldGhvZENhbGwpOiBTaGltTG9jYXRpb258bnVsbCB7XG4gICAgaWYgKHRoaXMuZXhwcmVzc2lvbkNvbXBsZXRpb25DYWNoZS5oYXMoZXhwcikpIHtcbiAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25Db21wbGV0aW9uQ2FjaGUuZ2V0KGV4cHIpITtcbiAgICB9XG5cbiAgICAvLyBDb21wbGV0aW9uIHdvcmtzIGluc2lkZSBwcm9wZXJ0eSByZWFkcyBhbmQgbWV0aG9kIGNhbGxzLlxuICAgIGxldCB0c0V4cHI6IHRzLlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbnxudWxsID0gbnVsbDtcbiAgICBpZiAoZXhwciBpbnN0YW5jZW9mIFByb3BlcnR5UmVhZCB8fCBleHByIGluc3RhbmNlb2YgTWV0aG9kQ2FsbCB8fFxuICAgICAgICBleHByIGluc3RhbmNlb2YgUHJvcGVydHlXcml0ZSkge1xuICAgICAgLy8gTm9uLXNhZmUgbmF2aWdhdGlvbiBvcGVyYXRpb25zIGFyZSB0cml2aWFsOiBgZm9vLmJhcmAgb3IgYGZvby5iYXIoKWBcbiAgICAgIHRzRXhwciA9IGZpbmRGaXJzdE1hdGNoaW5nTm9kZSh0aGlzLnRjYiwge1xuICAgICAgICBmaWx0ZXI6IHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLFxuICAgICAgICB3aXRoU3BhbjogZXhwci5uYW1lU3BhbixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZXhwciBpbnN0YW5jZW9mIFNhZmVQcm9wZXJ0eVJlYWQgfHwgZXhwciBpbnN0YW5jZW9mIFNhZmVNZXRob2RDYWxsKSB7XG4gICAgICAvLyBTYWZlIG5hdmlnYXRpb24gb3BlcmF0aW9ucyBhcmUgYSBsaXR0bGUgbW9yZSBjb21wbGV4LCBhbmQgaW52b2x2ZSBhIHRlcm5hcnkuIENvbXBsZXRpb25cbiAgICAgIC8vIGhhcHBlbnMgaW4gdGhlIFwidHJ1ZVwiIGNhc2Ugb2YgdGhlIHRlcm5hcnkuXG4gICAgICBjb25zdCB0ZXJuYXJ5RXhwciA9IGZpbmRGaXJzdE1hdGNoaW5nTm9kZSh0aGlzLnRjYiwge1xuICAgICAgICBmaWx0ZXI6IHRzLmlzUGFyZW50aGVzaXplZEV4cHJlc3Npb24sXG4gICAgICAgIHdpdGhTcGFuOiBleHByLnNvdXJjZVNwYW4sXG4gICAgICB9KTtcbiAgICAgIGlmICh0ZXJuYXJ5RXhwciA9PT0gbnVsbCB8fCAhdHMuaXNDb25kaXRpb25hbEV4cHJlc3Npb24odGVybmFyeUV4cHIuZXhwcmVzc2lvbikpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB3aGVuVHJ1ZSA9IHRlcm5hcnlFeHByLmV4cHJlc3Npb24ud2hlblRydWU7XG5cbiAgICAgIGlmIChleHByIGluc3RhbmNlb2YgU2FmZVByb3BlcnR5UmVhZCAmJiB0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbih3aGVuVHJ1ZSkpIHtcbiAgICAgICAgdHNFeHByID0gd2hlblRydWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGV4cHIgaW5zdGFuY2VvZiBTYWZlTWV0aG9kQ2FsbCAmJiB0cy5pc0NhbGxFeHByZXNzaW9uKHdoZW5UcnVlKSAmJlxuICAgICAgICAgIHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKHdoZW5UcnVlLmV4cHJlc3Npb24pKSB7XG4gICAgICAgIHRzRXhwciA9IHdoZW5UcnVlLmV4cHJlc3Npb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRzRXhwciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzOiBTaGltTG9jYXRpb24gPSB7XG4gICAgICBzaGltUGF0aDogdGhpcy5zaGltUGF0aCxcbiAgICAgIHBvc2l0aW9uSW5TaGltRmlsZTogdHNFeHByLm5hbWUuZ2V0RW5kKCksXG4gICAgfTtcbiAgICB0aGlzLmV4cHJlc3Npb25Db21wbGV0aW9uQ2FjaGUuc2V0KGV4cHIsIHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZ2xvYmFsIGNvbXBsZXRpb25zIHdpdGhpbiB0aGUgZ2l2ZW4gdGVtcGxhdGUgY29udGV4dCAtIGVpdGhlciBhIGBUbXBsQXN0VGVtcGxhdGVgIGVtYmVkZGVkXG4gICAqIHZpZXcsIG9yIGBudWxsYCBmb3IgdGhlIHJvb3QgY29udGV4dC5cbiAgICovXG4gIHByaXZhdGUgZ2V0VGVtcGxhdGVDb250ZXh0Q29tcGxldGlvbnMoY29udGV4dDogVG1wbEFzdFRlbXBsYXRlfG51bGwpOlxuICAgICAgTWFwPHN0cmluZywgUmVmZXJlbmNlQ29tcGxldGlvbnxWYXJpYWJsZUNvbXBsZXRpb24+fG51bGwge1xuICAgIGlmICh0aGlzLnRlbXBsYXRlQ29udGV4dENhY2hlLmhhcyhjb250ZXh0KSkge1xuICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVDb250ZXh0Q2FjaGUuZ2V0KGNvbnRleHQpITtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wbGF0ZUNvbnRleHQgPSBuZXcgTWFwPHN0cmluZywgUmVmZXJlbmNlQ29tcGxldGlvbnxWYXJpYWJsZUNvbXBsZXRpb24+KCk7XG5cbiAgICAvLyBUaGUgYm91bmQgdGVtcGxhdGUgYWxyZWFkeSBoYXMgZGV0YWlscyBhYm91dCB0aGUgcmVmZXJlbmNlcyBhbmQgdmFyaWFibGVzIGluIHNjb3BlIGluIHRoZVxuICAgIC8vIGBjb250ZXh0YCB0ZW1wbGF0ZSAtIHRoZXkganVzdCBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byBgQ29tcGxldGlvbmBzLlxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmRhdGEuYm91bmRUYXJnZXQuZ2V0RW50aXRpZXNJblRlbXBsYXRlU2NvcGUoY29udGV4dCkpIHtcbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgVG1wbEFzdFJlZmVyZW5jZSkge1xuICAgICAgICB0ZW1wbGF0ZUNvbnRleHQuc2V0KG5vZGUubmFtZSwge1xuICAgICAgICAgIGtpbmQ6IENvbXBsZXRpb25LaW5kLlJlZmVyZW5jZSxcbiAgICAgICAgICBub2RlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlbXBsYXRlQ29udGV4dC5zZXQobm9kZS5uYW1lLCB7XG4gICAgICAgICAga2luZDogQ29tcGxldGlvbktpbmQuVmFyaWFibGUsXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50ZW1wbGF0ZUNvbnRleHRDYWNoZS5zZXQoY29udGV4dCwgdGVtcGxhdGVDb250ZXh0KTtcbiAgICByZXR1cm4gdGVtcGxhdGVDb250ZXh0O1xuICB9XG59XG4iXX0=
|