@angular/compiler-cli 12.1.0-next.6 → 12.1.3
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/cycles/src/analyzer.d.ts +7 -0
- package/src/ngtsc/cycles/src/analyzer.js +89 -4
- package/src/ngtsc/cycles/src/imports.d.ts +1 -6
- package/src/ngtsc/cycles/src/imports.js +5 -23
- 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/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 +53 -5
- 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 +2 -0
- package/src/ngtsc/transform/src/compilation.js +59 -20
- 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 -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 -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 -496
- 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,158 +0,0 @@
|
|
|
1
|
-
import { __rest } from "tslib";
|
|
2
|
-
import * as t from '@babel/types';
|
|
3
|
-
import { FileLinker, isFatalLinkerError, LinkerEnvironment } from '../../../linker';
|
|
4
|
-
import { BabelAstFactory } from './ast/babel_ast_factory';
|
|
5
|
-
import { BabelAstHost } from './ast/babel_ast_host';
|
|
6
|
-
import { BabelDeclarationScope } from './babel_declaration_scope';
|
|
7
|
-
/**
|
|
8
|
-
* Create a Babel plugin that visits the program, identifying and linking partial declarations.
|
|
9
|
-
*
|
|
10
|
-
* The plugin delegates most of its work to a generic `FileLinker` for each file (`t.Program` in
|
|
11
|
-
* Babel) that is visited.
|
|
12
|
-
*/
|
|
13
|
-
export function createEs2015LinkerPlugin(_a) {
|
|
14
|
-
var { fileSystem, logger } = _a, options = __rest(_a, ["fileSystem", "logger"]);
|
|
15
|
-
let fileLinker = null;
|
|
16
|
-
return {
|
|
17
|
-
visitor: {
|
|
18
|
-
Program: {
|
|
19
|
-
/**
|
|
20
|
-
* Create a new `FileLinker` as we enter each file (`t.Program` in Babel).
|
|
21
|
-
*/
|
|
22
|
-
enter(path) {
|
|
23
|
-
var _a, _b;
|
|
24
|
-
assertNull(fileLinker);
|
|
25
|
-
// Babel can be configured with a `filename` or `relativeFilename` (or both, or neither) -
|
|
26
|
-
// possibly relative to the optional `cwd` path.
|
|
27
|
-
const file = path.hub.file;
|
|
28
|
-
const filename = (_a = file.opts.filename) !== null && _a !== void 0 ? _a : file.opts.filenameRelative;
|
|
29
|
-
if (!filename) {
|
|
30
|
-
throw new Error('No filename (nor filenameRelative) provided by Babel. This is required for the linking of partially compiled directives and components.');
|
|
31
|
-
}
|
|
32
|
-
const sourceUrl = fileSystem.resolve((_b = file.opts.cwd) !== null && _b !== void 0 ? _b : '.', filename);
|
|
33
|
-
const linkerEnvironment = LinkerEnvironment.create(fileSystem, logger, new BabelAstHost(), new BabelAstFactory(sourceUrl), options);
|
|
34
|
-
fileLinker = new FileLinker(linkerEnvironment, sourceUrl, file.code);
|
|
35
|
-
},
|
|
36
|
-
/**
|
|
37
|
-
* On exiting the file, insert any shared constant statements that were generated during
|
|
38
|
-
* linking of the partial declarations.
|
|
39
|
-
*/
|
|
40
|
-
exit() {
|
|
41
|
-
assertNotNull(fileLinker);
|
|
42
|
-
for (const { constantScope, statements } of fileLinker.getConstantStatements()) {
|
|
43
|
-
insertStatements(constantScope, statements);
|
|
44
|
-
}
|
|
45
|
-
fileLinker = null;
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
/**
|
|
49
|
-
* Test each call expression to see if it is a partial declaration; it if is then replace it
|
|
50
|
-
* with the results of linking the declaration.
|
|
51
|
-
*/
|
|
52
|
-
CallExpression(call) {
|
|
53
|
-
if (fileLinker === null) {
|
|
54
|
-
// Any statements that are inserted upon program exit will be visited outside of an active
|
|
55
|
-
// linker context. These call expressions are known not to contain partial declarations,
|
|
56
|
-
// so it's safe to skip visiting those call expressions.
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
try {
|
|
60
|
-
const calleeName = getCalleeName(call);
|
|
61
|
-
if (calleeName === null) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
const args = call.node.arguments;
|
|
65
|
-
if (!fileLinker.isPartialDeclaration(calleeName) || !isExpressionArray(args)) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
const declarationScope = new BabelDeclarationScope(call.scope);
|
|
69
|
-
const replacement = fileLinker.linkPartialDeclaration(calleeName, args, declarationScope);
|
|
70
|
-
call.replaceWith(replacement);
|
|
71
|
-
}
|
|
72
|
-
catch (e) {
|
|
73
|
-
const node = isFatalLinkerError(e) ? e.node : call.node;
|
|
74
|
-
throw buildCodeFrameError(call.hub.file, e.message, node);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Insert the `statements` at the location defined by `path`.
|
|
82
|
-
*
|
|
83
|
-
* The actual insertion strategy depends upon the type of the `path`.
|
|
84
|
-
*/
|
|
85
|
-
function insertStatements(path, statements) {
|
|
86
|
-
if (path.isFunction()) {
|
|
87
|
-
insertIntoFunction(path, statements);
|
|
88
|
-
}
|
|
89
|
-
else if (path.isProgram()) {
|
|
90
|
-
insertIntoProgram(path, statements);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Insert the `statements` at the top of the body of the `fn` function.
|
|
95
|
-
*/
|
|
96
|
-
function insertIntoFunction(fn, statements) {
|
|
97
|
-
const body = fn.get('body');
|
|
98
|
-
body.unshiftContainer('body', statements);
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Insert the `statements` at the top of the `program`, below any import statements.
|
|
102
|
-
*/
|
|
103
|
-
function insertIntoProgram(program, statements) {
|
|
104
|
-
const body = program.get('body');
|
|
105
|
-
const importStatements = body.filter(statement => statement.isImportDeclaration());
|
|
106
|
-
if (importStatements.length === 0) {
|
|
107
|
-
program.unshiftContainer('body', statements);
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
importStatements[importStatements.length - 1].insertAfter(statements);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
function getCalleeName(call) {
|
|
114
|
-
const callee = call.node.callee;
|
|
115
|
-
if (t.isIdentifier(callee)) {
|
|
116
|
-
return callee.name;
|
|
117
|
-
}
|
|
118
|
-
else if (t.isMemberExpression(callee) && t.isIdentifier(callee.property)) {
|
|
119
|
-
return callee.property.name;
|
|
120
|
-
}
|
|
121
|
-
else if (t.isMemberExpression(callee) && t.isStringLiteral(callee.property)) {
|
|
122
|
-
return callee.property.value;
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Return true if all the `nodes` are Babel expressions.
|
|
130
|
-
*/
|
|
131
|
-
function isExpressionArray(nodes) {
|
|
132
|
-
return nodes.every(node => t.isExpression(node));
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Assert that the given `obj` is `null`.
|
|
136
|
-
*/
|
|
137
|
-
function assertNull(obj) {
|
|
138
|
-
if (obj !== null) {
|
|
139
|
-
throw new Error('BUG - expected `obj` to be null');
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Assert that the given `obj` is not `null`.
|
|
144
|
-
*/
|
|
145
|
-
function assertNotNull(obj) {
|
|
146
|
-
if (obj === null) {
|
|
147
|
-
throw new Error('BUG - expected `obj` not to be null');
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Create a string representation of an error that includes the code frame of the `node`.
|
|
152
|
-
*/
|
|
153
|
-
function buildCodeFrameError(file, message, node) {
|
|
154
|
-
const filename = file.opts.filename || '(unknown file)';
|
|
155
|
-
const error = file.buildCodeFrameError(node, message);
|
|
156
|
-
return `${filename}: ${error.message}`;
|
|
157
|
-
}
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMyMDE1X2xpbmtlcl9wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbGlua2VyL2JhYmVsL3NyYy9lczIwMTVfbGlua2VyX3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBU0EsT0FBTyxLQUFLLENBQUMsTUFBTSxjQUFjLENBQUM7QUFFbEMsT0FBTyxFQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRWxGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFDLHFCQUFxQixFQUFvQixNQUFNLDJCQUEyQixDQUFDO0FBSW5GOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEVBQXFEO1FBQXJELEVBQUMsVUFBVSxFQUFFLE1BQU0sT0FBa0MsRUFBN0IsT0FBTyxjQUEvQix3QkFBZ0MsQ0FBRDtJQUV0RSxJQUFJLFVBQVUsR0FBa0UsSUFBSSxDQUFDO0lBRXJGLE9BQU87UUFDTCxPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUU7Z0JBRVA7O21CQUVHO2dCQUNILEtBQUssQ0FBQyxJQUF5Qjs7b0JBQzdCLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDdkIsMEZBQTBGO29CQUMxRixnREFBZ0Q7b0JBQ2hELE1BQU0sSUFBSSxHQUFjLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO29CQUNsRSxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUNiLE1BQU0sSUFBSSxLQUFLLENBQ1gseUlBQXlJ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RztBQUNILFNBQVMsaUJBQWlCLENBQUMsS0FBZTtJQUN4QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxVQUFVLENBQUksR0FBVztJQUNoQyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0tBQ3BEO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxhQUFhLENBQUksR0FBVztJQUNuQyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0tBQ3hEO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxJQUFlLEVBQUUsT0FBZSxFQUFFLElBQVk7SUFDekUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUM7SUFDeEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RCxPQUFPLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge1BsdWdpbk9ian0gZnJvbSAnQGJhYmVsL2NvcmUnO1xuaW1wb3J0IHtOb2RlUGF0aH0gZnJvbSAnQGJhYmVsL3RyYXZlcnNlJztcbmltcG9ydCAqIGFzIHQgZnJvbSAnQGJhYmVsL3R5cGVzJztcblxuaW1wb3J0IHtGaWxlTGlua2VyLCBpc0ZhdGFsTGlua2VyRXJyb3IsIExpbmtlckVudmlyb25tZW50fSBmcm9tICcuLi8uLi8uLi9saW5rZXInO1xuXG5pbXBvcnQge0JhYmVsQXN0RmFjdG9yeX0gZnJvbSAnLi9hc3QvYmFiZWxfYXN0X2ZhY3RvcnknO1xuaW1wb3J0IHtCYWJlbEFzdEhvc3R9IGZyb20gJy4vYXN0L2JhYmVsX2FzdF9ob3N0JztcbmltcG9ydCB7QmFiZWxEZWNsYXJhdGlvblNjb3BlLCBDb25zdGFudFNjb3BlUGF0aH0gZnJvbSAnLi9iYWJlbF9kZWNsYXJhdGlvbl9zY29wZSc7XG5pbXBvcnQge0xpbmtlclBsdWdpbk9wdGlvbnN9IGZyb20gJy4vbGlua2VyX3BsdWdpbl9vcHRpb25zJztcblxuXG4vKipcbiAqIENyZWF0ZSBhIEJhYmVsIHBsdWdpbiB0aGF0IHZpc2l0cyB0aGUgcHJvZ3JhbSwgaWRlbnRpZnlpbmcgYW5kIGxpbmtpbmcgcGFydGlhbCBkZWNsYXJhdGlvbnMuXG4gKlxuICogVGhlIHBsdWdpbiBkZWxlZ2F0ZXMgbW9zdCBvZiBpdHMgd29yayB0byBhIGdlbmVyaWMgYEZpbGVMaW5rZXJgIGZvciBlYWNoIGZpbGUgKGB0LlByb2dyYW1gIGluXG4gKiBCYWJlbCkgdGhhdCBpcyB2aXNpdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXMyMDE1TGlua2VyUGx1Z2luKHtmaWxlU3lzdGVtLCBsb2dnZXIsIC4uLm9wdGlvbnN9OiBMaW5rZXJQbHVnaW5PcHRpb25zKTpcbiAgICBQbHVnaW5PYmoge1xuICBsZXQgZmlsZUxpbmtlcjogRmlsZUxpbmtlcjxDb25zdGFudFNjb3BlUGF0aCwgdC5TdGF0ZW1lbnQsIHQuRXhwcmVzc2lvbj58bnVsbCA9IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICB2aXNpdG9yOiB7XG4gICAgICBQcm9ncmFtOiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZSBhIG5ldyBgRmlsZUxpbmtlcmAgYXMgd2UgZW50ZXIgZWFjaCBmaWxlIChgdC5Qcm9ncmFtYCBpbiBCYWJlbCkuXG4gICAgICAgICAqL1xuICAgICAgICBlbnRlcihwYXRoOiBOb2RlUGF0aDx0LlByb2dyYW0+KTogdm9pZCB7XG4gICAgICAgICAgYXNzZXJ0TnVsbChmaWxlTGlua2VyKTtcbiAgICAgICAgICAvLyBCYWJlbCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIGEgYGZpbGVuYW1lYCBvciBgcmVsYXRpdmVGaWxlbmFtZWAgKG9yIGJvdGgsIG9yIG5laXRoZXIpIC1cbiAgICAgICAgICAvLyBwb3NzaWJseSByZWxhdGl2ZSB0byB0aGUgb3B0aW9uYWwgYGN3ZGAgcGF0aC5cbiAgICAgICAgICBjb25zdCBmaWxlOiBCYWJlbEZpbGUgPSBwYXRoLmh1Yi5maWxlO1xuICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gZmlsZS5vcHRzLmZpbGVuYW1lID8/IGZpbGUub3B0cy5maWxlbmFtZVJlbGF0aXZlO1xuICAgICAgICAgIGlmICghZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnTm8gZmlsZW5hbWUgKG5vciBmaWxlbmFtZVJlbGF0aXZlKSBwcm92aWRlZCBieSBCYWJlbC4gVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIGxpbmtpbmcgb2YgcGFydGlhbGx5IGNvbXBpbGVkIGRpcmVjdGl2ZXMgYW5kIGNvbXBvbmVudHMuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNvdXJjZVVybCA9IGZpbGVTeXN0ZW0ucmVzb2x2ZShmaWxlLm9wdHMuY3dkID8/ICcuJywgZmlsZW5hbWUpO1xuXG4gICAgICAgICAgY29uc3QgbGlua2VyRW52aXJvbm1lbnQgPSBMaW5rZXJFbnZpcm9ubWVudC5jcmVhdGU8dC5TdGF0ZW1lbnQsIHQuRXhwcmVzc2lvbj4oXG4gICAgICAgICAgICAgIGZpbGVTeXN0ZW0sIGxvZ2dlciwgbmV3IEJhYmVsQXN0SG9zdCgpLCBuZXcgQmFiZWxBc3RGYWN0b3J5KHNvdXJjZVVybCksIG9wdGlvbnMpO1xuICAgICAgICAgIGZpbGVMaW5rZXIgPSBuZXcgRmlsZUxpbmtlcihsaW5rZXJFbnZpcm9ubWVudCwgc291cmNlVXJsLCBmaWxlLmNvZGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPbiBleGl0aW5nIHRoZSBmaWxlLCBpbnNlcnQgYW55IHNoYXJlZCBjb25zdGFudCBzdGF0ZW1lbnRzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgZHVyaW5nXG4gICAgICAgICAqIGxpbmtpbmcgb2YgdGhlIHBhcnRpYWwgZGVjbGFyYXRpb25zLlxuICAgICAgICAgKi9cbiAgICAgICAgZXhpdCgpOiB2b2lkIHtcbiAgICAgICAgICBhc3NlcnROb3ROdWxsKGZpbGVMaW5rZXIpO1xuICAgICAgICAgIGZvciAoY29uc3Qge2NvbnN0YW50U2NvcGUsIHN0YXRlbWVudHN9IG9mIGZpbGVMaW5rZXIuZ2V0Q29uc3RhbnRTdGF0ZW1lbnRzKCkpIHtcbiAgICAgICAgICAgIGluc2VydFN0YXRlbWVudHMoY29uc3RhbnRTY29wZSwgc3RhdGVtZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbGVMaW5rZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFRlc3QgZWFjaCBjYWxsIGV4cHJlc3Npb24gdG8gc2VlIGlmIGl0IGlzIGEgcGFydGlhbCBkZWNsYXJhdGlvbjsgaXQgaWYgaXMgdGhlbiByZXBsYWNlIGl0XG4gICAgICAgKiB3aXRoIHRoZSByZXN1bHRzIG9mIGxpbmtpbmcgdGhlIGRlY2xhcmF0aW9uLlxuICAgICAgICovXG4gICAgICBDYWxsRXhwcmVzc2lvbihjYWxsOiBOb2RlUGF0aDx0LkNhbGxFeHByZXNzaW9uPik6IHZvaWQge1xuICAgICAgICBpZiAoZmlsZUxpbmtlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFueSBzdGF0ZW1lbnRzIHRoYXQgYXJlIGluc2VydGVkIHVwb24gcHJvZ3JhbSBleGl0IHdpbGwgYmUgdmlzaXRlZCBvdXRzaWRlIG9mIGFuIGFjdGl2ZVxuICAgICAgICAgIC8vIGxpbmtlciBjb250ZXh0LiBUaGVzZSBjYWxsIGV4cHJlc3Npb25zIGFyZSBrbm93biBub3QgdG8gY29udGFpbiBwYXJ0aWFsIGRlY2xhcmF0aW9ucyxcbiAgICAgICAgICAvLyBzbyBpdCdzIHNhZmUgdG8gc2tpcCB2aXNpdGluZyB0aG9zZSBjYWxsIGV4cHJlc3Npb25zLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2FsbGVlTmFtZSA9IGdldENhbGxlZU5hbWUoY2FsbCk7XG4gICAgICAgICAgaWYgKGNhbGxlZU5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYXJncyA9IGNhbGwubm9kZS5hcmd1bWVudHM7XG4gICAgICAgICAgaWYgKCFmaWxlTGlua2VyLmlzUGFydGlhbERlY2xhcmF0aW9uKGNhbGxlZU5hbWUpIHx8ICFpc0V4cHJlc3Npb25BcnJheShhcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uU2NvcGUgPSBuZXcgQmFiZWxEZWNsYXJhdGlvblNjb3BlKGNhbGwuc2NvcGUpO1xuICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gZmlsZUxpbmtlci5saW5rUGFydGlhbERlY2xhcmF0aW9uKGNhbGxlZU5hbWUsIGFyZ3MsIGRlY2xhcmF0aW9uU2NvcGUpO1xuXG4gICAgICAgICAgY2FsbC5yZXBsYWNlV2l0aChyZXBsYWNlbWVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gaXNGYXRhbExpbmtlckVycm9yKGUpID8gZS5ub2RlIGFzIHQuTm9kZSA6IGNhbGwubm9kZTtcbiAgICAgICAgICB0aHJvdyBidWlsZENvZGVGcmFtZUVycm9yKGNhbGwuaHViLmZpbGUsIGUubWVzc2FnZSwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogSW5zZXJ0IHRoZSBgc3RhdGVtZW50c2AgYXQgdGhlIGxvY2F0aW9uIGRlZmluZWQgYnkgYHBhdGhgLlxuICpcbiAqIFRoZSBhY3R1YWwgaW5zZXJ0aW9uIHN0cmF0ZWd5IGRlcGVuZHMgdXBvbiB0aGUgdHlwZSBvZiB0aGUgYHBhdGhgLlxuICovXG5mdW5jdGlvbiBpbnNlcnRTdGF0ZW1lbnRzKHBhdGg6IENvbnN0YW50U2NvcGVQYXRoLCBzdGF0ZW1lbnRzOiB0LlN0YXRlbWVudFtdKTogdm9pZCB7XG4gIGlmIChwYXRoLmlzRnVuY3Rpb24oKSkge1xuICAgIGluc2VydEludG9GdW5jdGlvbihwYXRoLCBzdGF0ZW1lbnRzKTtcbiAgfSBlbHNlIGlmIChwYXRoLmlzUHJvZ3JhbSgpKSB7XG4gICAgaW5zZXJ0SW50b1Byb2dyYW0ocGF0aCwgc3RhdGVtZW50cyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnNlcnQgdGhlIGBzdGF0ZW1lbnRzYCBhdCB0aGUgdG9wIG9mIHRoZSBib2R5IG9mIHRoZSBgZm5gIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBpbnNlcnRJbnRvRnVuY3Rpb24oZm46IE5vZGVQYXRoPHQuRnVuY3Rpb24+LCBzdGF0ZW1lbnRzOiB0LlN0YXRlbWVudFtdKTogdm9pZCB7XG4gIGNvbnN0IGJvZHkgPSBmbi5nZXQoJ2JvZHknKTtcbiAgYm9keS51bnNoaWZ0Q29udGFpbmVyKCdib2R5Jywgc3RhdGVtZW50cyk7XG59XG5cbi8qKlxuICogSW5zZXJ0IHRoZSBgc3RhdGVtZW50c2AgYXQgdGhlIHRvcCBvZiB0aGUgYHByb2dyYW1gLCBiZWxvdyBhbnkgaW1wb3J0IHN0YXRlbWVudHMuXG4gKi9cbmZ1bmN0aW9uIGluc2VydEludG9Qcm9ncmFtKHByb2dyYW06IE5vZGVQYXRoPHQuUHJvZ3JhbT4sIHN0YXRlbWVudHM6IHQuU3RhdGVtZW50W10pOiB2b2lkIHtcbiAgY29uc3QgYm9keSA9IHByb2dyYW0uZ2V0KCdib2R5Jyk7XG4gIGNvbnN0IGltcG9ydFN0YXRlbWVudHMgPSBib2R5LmZpbHRlcihzdGF0ZW1lbnQgPT4gc3RhdGVtZW50LmlzSW1wb3J0RGVjbGFyYXRpb24oKSk7XG4gIGlmIChpbXBvcnRTdGF0ZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHByb2dyYW0udW5zaGlmdENvbnRhaW5lcignYm9keScsIHN0YXRlbWVudHMpO1xuICB9IGVsc2Uge1xuICAgIGltcG9ydFN0YXRlbWVudHNbaW1wb3J0U3RhdGVtZW50cy5sZW5ndGggLSAxXS5pbnNlcnRBZnRlcihzdGF0ZW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDYWxsZWVOYW1lKGNhbGw6IE5vZGVQYXRoPHQuQ2FsbEV4cHJlc3Npb24+KTogc3RyaW5nfG51bGwge1xuICBjb25zdCBjYWxsZWUgPSBjYWxsLm5vZGUuY2FsbGVlO1xuICBpZiAodC5pc0lkZW50aWZpZXIoY2FsbGVlKSkge1xuICAgIHJldHVybiBjYWxsZWUubmFtZTtcbiAgfSBlbHNlIGlmICh0LmlzTWVtYmVyRXhwcmVzc2lvbihjYWxsZWUpICYmIHQuaXNJZGVudGlmaWVyKGNhbGxlZS5wcm9wZXJ0eSkpIHtcbiAgICByZXR1cm4gY2FsbGVlLnByb3BlcnR5Lm5hbWU7XG4gIH0gZWxzZSBpZiAodC5pc01lbWJlckV4cHJlc3Npb24oY2FsbGVlKSAmJiB0LmlzU3RyaW5nTGl0ZXJhbChjYWxsZWUucHJvcGVydHkpKSB7XG4gICAgcmV0dXJuIGNhbGxlZS5wcm9wZXJ0eS52YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIGFsbCB0aGUgYG5vZGVzYCBhcmUgQmFiZWwgZXhwcmVzc2lvbnMuXG4gKi9cbmZ1bmN0aW9uIGlzRXhwcmVzc2lvbkFycmF5KG5vZGVzOiB0Lk5vZGVbXSk6IG5vZGVzIGlzIHQuRXhwcmVzc2lvbltdIHtcbiAgcmV0dXJuIG5vZGVzLmV2ZXJ5KG5vZGUgPT4gdC5pc0V4cHJlc3Npb24obm9kZSkpO1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSBnaXZlbiBgb2JqYCBpcyBgbnVsbGAuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE51bGw8VD4ob2JqOiBUfG51bGwpOiBhc3NlcnRzIG9iaiBpcyBudWxsIHtcbiAgaWYgKG9iaiAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQlVHIC0gZXhwZWN0ZWQgYG9iamAgdG8gYmUgbnVsbCcpO1xuICB9XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIGdpdmVuIGBvYmpgIGlzIG5vdCBgbnVsbGAuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vdE51bGw8VD4ob2JqOiBUfG51bGwpOiBhc3NlcnRzIG9iaiBpcyBUIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQlVHIC0gZXhwZWN0ZWQgYG9iamAgbm90IHRvIGJlIG51bGwnKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBlcnJvciB0aGF0IGluY2x1ZGVzIHRoZSBjb2RlIGZyYW1lIG9mIHRoZSBgbm9kZWAuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ29kZUZyYW1lRXJyb3IoZmlsZTogQmFiZWxGaWxlLCBtZXNzYWdlOiBzdHJpbmcsIG5vZGU6IHQuTm9kZSk6IHN0cmluZyB7XG4gIGNvbnN0IGZpbGVuYW1lID0gZmlsZS5vcHRzLmZpbGVuYW1lIHx8ICcodW5rbm93biBmaWxlKSc7XG4gIGNvbnN0IGVycm9yID0gZmlsZS5idWlsZENvZGVGcmFtZUVycm9yKG5vZGUsIG1lc3NhZ2UpO1xuICByZXR1cm4gYCR7ZmlsZW5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbn1cblxuLyoqXG4gKiBUaGlzIGludGVyZmFjZSBpcyBtYWtpbmcgdXAgZm9yIHRoZSBmYWN0IHRoYXQgdGhlIEJhYmVsIHR5cGluZ3MgZm9yIGBOb2RlUGF0aC5odWIuZmlsZWAgYXJlXG4gKiBsYWNraW5nLlxuICovXG5pbnRlcmZhY2UgQmFiZWxGaWxlIHtcbiAgY29kZTogc3RyaW5nO1xuICBvcHRzOiB7XG4gICAgZmlsZW5hbWU/OiBzdHJpbmcsXG4gICAgZmlsZW5hbWVSZWxhdGl2ZT86IHN0cmluZyxcbiAgICBjd2Q/OiBzdHJpbmcsXG4gIH07XG5cbiAgYnVpbGRDb2RlRnJhbWVFcnJvcihub2RlOiB0Lk5vZGUsIG1lc3NhZ2U6IHN0cmluZyk6IEVycm9yO1xufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua2VyX3BsdWdpbl9vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL2xpbmtlci9iYWJlbC9zcmMvbGlua2VyX3BsdWdpbl9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7TGlua2VyT3B0aW9uc30gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHtSZWFkb25seUZpbGVTeXN0ZW19IGZyb20gJy4uLy4uLy4uL3NyYy9uZ3RzYy9maWxlX3N5c3RlbSc7XG5pbXBvcnQge0xvZ2dlcn0gZnJvbSAnLi4vLi4vLi4vc3JjL25ndHNjL2xvZ2dpbmcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlclBsdWdpbk9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPExpbmtlck9wdGlvbnM+IHtcbiAgLyoqXG4gICAqIEZpbGUtc3lzdGVtLCB1c2VkIHRvIGxvYWQgdXAgdGhlIGlucHV0IHNvdXJjZS1tYXAgYW5kIGNvbnRlbnQuXG4gICAqL1xuICBmaWxlU3lzdGVtOiBSZWFkb25seUZpbGVTeXN0ZW07XG5cbiAgLyoqXG4gICAqIExvZ2dlciB1c2VkIGJ5IHRoZSBsaW5rZXIuXG4gICAqL1xuICBsb2dnZXI6IExvZ2dlcjtcbn1cbiJdfQ==
|
package/linker/index.mjs
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { assert } from './src/ast/utils';
|
|
2
|
-
export { FatalLinkerError, isFatalLinkerError } from './src/fatal_linker_error';
|
|
3
|
-
export { FileLinker } from './src/file_linker/file_linker';
|
|
4
|
-
export { LinkerEnvironment } from './src/file_linker/linker_environment';
|
|
5
|
-
export { DEFAULT_LINKER_OPTIONS } from './src/file_linker/linker_options';
|
|
6
|
-
export { needsLinking } from './src/file_linker/needs_linking';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbGlua2VyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDekQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFDLHNCQUFzQixFQUFnQixNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuZXhwb3J0IHtBc3RIb3N0LCBSYW5nZX0gZnJvbSAnLi9zcmMvYXN0L2FzdF9ob3N0JztcbmV4cG9ydCB7YXNzZXJ0fSBmcm9tICcuL3NyYy9hc3QvdXRpbHMnO1xuZXhwb3J0IHtGYXRhbExpbmtlckVycm9yLCBpc0ZhdGFsTGlua2VyRXJyb3J9IGZyb20gJy4vc3JjL2ZhdGFsX2xpbmtlcl9lcnJvcic7XG5leHBvcnQge0RlY2xhcmF0aW9uU2NvcGV9IGZyb20gJy4vc3JjL2ZpbGVfbGlua2VyL2RlY2xhcmF0aW9uX3Njb3BlJztcbmV4cG9ydCB7RmlsZUxpbmtlcn0gZnJvbSAnLi9zcmMvZmlsZV9saW5rZXIvZmlsZV9saW5rZXInO1xuZXhwb3J0IHtMaW5rZXJFbnZpcm9ubWVudH0gZnJvbSAnLi9zcmMvZmlsZV9saW5rZXIvbGlua2VyX2Vudmlyb25tZW50JztcbmV4cG9ydCB7REVGQVVMVF9MSU5LRVJfT1BUSU9OUywgTGlua2VyT3B0aW9uc30gZnJvbSAnLi9zcmMvZmlsZV9saW5rZXIvbGlua2VyX29wdGlvbnMnO1xuZXhwb3J0IHtuZWVkc0xpbmtpbmd9IGZyb20gJy4vc3JjL2ZpbGVfbGlua2VyL25lZWRzX2xpbmtpbmcnO1xuIl19
|
package/linker/linker.externs.js
DELETED
|
File without changes
|
|
@@ -1,9 +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
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN0X2hvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbGlua2VyL3NyYy9hc3QvYXN0X2hvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQW4gYWJzdHJhY3Rpb24gZm9yIGdldHRpbmcgaW5mb3JtYXRpb24gZnJvbSBhbiBBU1Qgd2hpbGUgYmVpbmcgYWdub3N0aWMgdG8gdGhlIHVuZGVybHlpbmcgQVNUXG4gKiBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3RIb3N0PFRFeHByZXNzaW9uPiB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHN5bWJvbCByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBub2RlLCBvciBgbnVsbGAgaWYgaXQgaXMgbm90IGFcbiAgICogc3ltYm9sLlxuICAgKi9cbiAgZ2V0U3ltYm9sTmFtZShub2RlOiBURXhwcmVzc2lvbik6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoZSBnaXZlbiBleHByZXNzaW9uIGlzIGEgc3RyaW5nIGxpdGVyYWwsIG9yIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGlzU3RyaW5nTGl0ZXJhbChub2RlOiBURXhwcmVzc2lvbik6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgc3RyaW5nIHZhbHVlIGZyb20gdGhlIGdpdmVuIGV4cHJlc3Npb24sIG9yIHRocm93IGlmIGl0IGlzIG5vdCBhIHN0cmluZyBsaXRlcmFsLlxuICAgKi9cbiAgcGFyc2VTdHJpbmdMaXRlcmFsKHN0cjogVEV4cHJlc3Npb24pOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhlIGdpdmVuIGV4cHJlc3Npb24gaXMgYSBudW1lcmljIGxpdGVyYWwsIG9yIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGlzTnVtZXJpY0xpdGVyYWwobm9kZTogVEV4cHJlc3Npb24pOiBib29sZWFuO1xuICAvKipcbiAgICogUGFyc2UgdGhlIG51bWVyaWMgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiwgb3IgdGhyb3cgaWYgaXQgaXMgbm90IGEgbnVtZXJpYyBsaXRlcmFsLlxuICAgKi9cbiAgcGFyc2VOdW1lcmljTGl0ZXJhbChudW06IFRFeHByZXNzaW9uKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoZSBnaXZlbiBleHByZXNzaW9uIGNhbiBiZSBjb25zaWRlcmVkIGEgYm9vbGVhbiBsaXRlcmFsLCBvciBmYWxzZSBvdGhlcndpc2UuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBhbHNvIGNvdmVyIHRoZSBzcGVjaWFsIGNhc2Ugb2Ygc29tZSBtaW5pZmllZCBjb2RlIHdoZXJlIGB0cnVlYCBhbmRcbiAgICogYGZhbHNlYCBhcmUgcmVwbGFjZWQgYnkgYCEwYCBhbmQgYCExYCByZXNwZWN0aXZlbHkuXG4gICAqL1xuICBpc0Jvb2xlYW5MaXRlcmFsKG5vZGU6IFRFeHByZXNzaW9uKTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFBhcnNlIHRoZSBib29sZWFuIHZhbHVlIGZyb20gdGhlIGdpdmVuIGV4cHJlc3Npb24sIG9yIHRocm93IGlmIGl0IGlzIG5vdCBhIGJvb2xlYW4gbGl0ZXJhbC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgc2hvdWxkIGFsc28gY292ZXIgdGhlIHNwZWNpYWwgY2FzZSBvZiBzb21lIG1pbmlmaWVkIGNvZGUgd2hlcmUgYHRydWVgIGFuZFxuICAgKiBgZmFsc2VgIGFyZSByZXBsYWNlZCBieSBgITBgIGFuZCBgITFgIHJlc3BlY3RpdmVseS5cbiAgICovXG4gIHBhcnNlQm9vbGVhbkxpdGVyYWwoYm9vbDogVEV4cHJlc3Npb24pOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoZSBnaXZlbiBleHByZXNzaW9uIGlzIGFuIGFycmF5IGxpdGVyYWwsIG9yIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGlzQXJyYXlMaXRlcmFsKG5vZGU6IFRFeHByZXNzaW9uKTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFBhcnNlIGFuIGFycmF5IG9mIGV4cHJlc3Npb25zIGZyb20gdGhlIGdpdmVuIGV4cHJlc3Npb24sIG9yIHRocm93IGlmIGl0IGlzIG5vdCBhbiBhcnJheVxuICAgKiBsaXRlcmFsLlxuICAgKi9cbiAgcGFyc2VBcnJheUxpdGVyYWwoYXJyYXk6IFRFeHByZXNzaW9uKTogVEV4cHJlc3Npb25bXTtcblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNPYmplY3RMaXRlcmFsKG5vZGU6IFRFeHByZXNzaW9uKTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFBhcnNlIHRoZSBnaXZlbiBleHByZXNzaW9uIGludG8gYSBtYXAgb2Ygb2JqZWN0IHByb3BlcnR5IG5hbWVzIHRvIHByb3BlcnR5IGV4cHJlc3Npb25zLCBvclxuICAgKiB0aHJvdyBpZiBpdCBpcyBub3QgYW4gb2JqZWN0IGxpdGVyYWwuXG4gICAqL1xuICBwYXJzZU9iamVjdExpdGVyYWwob2JqOiBURXhwcmVzc2lvbik6IE1hcDxzdHJpbmcsIFRFeHByZXNzaW9uPjtcblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBpcyBhIGZ1bmN0aW9uLCBvciBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBpc0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlOiBURXhwcmVzc2lvbik6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBcInZhbHVlXCIgb2YgYSBmdW5jdGlvbiBleHByZXNzaW9uIGJ5IHBhcnNpbmcgaXRzIGJvZHkgZm9yIGEgc2luZ2xlIGByZXR1cm5gXG4gICAqIHN0YXRlbWVudCwgZXh0cmFjdGluZyB0aGUgcmV0dXJuZWQgZXhwcmVzc2lvbiwgb3IgdGhyb3cgaWYgaXQgaXMgbm90IHBvc3NpYmxlLlxuICAgKi9cbiAgcGFyc2VSZXR1cm5WYWx1ZShmbjogVEV4cHJlc3Npb24pOiBURXhwcmVzc2lvbjtcblxuICAvKipcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGV4cHJlc3Npb24gaXMgYSBjYWxsIGV4cHJlc3Npb24sIG9yIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGlzQ2FsbEV4cHJlc3Npb24obm9kZTogVEV4cHJlc3Npb24pOiBib29sZWFuO1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXhwcmVzc2lvbiB0aGF0IGlzIGNhbGxlZCBpbiB0aGUgcHJvdmlkZWQgY2FsbCBleHByZXNzaW9uLCBvciB0aHJvdyBpZiBpdCBpcyBub3RcbiAgICogYSBjYWxsIGV4cHJlc3Npb24uXG4gICAqL1xuICBwYXJzZUNhbGxlZShjYWxsOiBURXhwcmVzc2lvbik6IFRFeHByZXNzaW9uO1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXJndW1lbnQgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm92aWRlZCBjYWxsIGV4cHJlc3Npb24sIG9yIHRocm93IGlmIGl0IGlzIG5vdFxuICAgKiBhIGNhbGwgZXhwcmVzc2lvbi5cbiAgICovXG4gIHBhcnNlQXJndW1lbnRzKGNhbGw6IFRFeHByZXNzaW9uKTogVEV4cHJlc3Npb25bXTtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgbG9jYXRpb24gcmFuZ2Ugb2YgdGhlIGV4cHJlc3Npb24gaW4gdGhlIHNvdXJjZSBmaWxlLCB0byBiZSB1c2VkIGZvciBzb3VyY2UtbWFwcGluZy5cbiAgICovXG4gIGdldFJhbmdlKG5vZGU6IFRFeHByZXNzaW9uKTogUmFuZ2U7XG59XG5cbi8qKlxuICogVGhlIGxvY2F0aW9uIG9mIHRoZSBzdGFydCBhbmQgZW5kIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlIHtcbiAgLyoqIDAtYmFzZWQgY2hhcmFjdGVyIHBvc2l0aW9uIG9mIHRoZSByYW5nZSBzdGFydCBpbiB0aGUgc291cmNlIGZpbGUgdGV4dC4gKi9cbiAgc3RhcnRQb3M6IG51bWJlcjtcbiAgLyoqIDAtYmFzZWQgbGluZSBpbmRleCBvZiB0aGUgcmFuZ2Ugc3RhcnQgaW4gdGhlIHNvdXJjZSBmaWxlIHRleHQuICovXG4gIHN0YXJ0TGluZTogbnVtYmVyO1xuICAvKiogMC1iYXNlZCBjb2x1bW4gcG9zaXRpb24gb2YgdGhlIHJhbmdlIHN0YXJ0IGluIHRoZSBzb3VyY2UgZmlsZSB0ZXh0LiAqL1xuICBzdGFydENvbDogbnVtYmVyO1xuICAvKiogMC1iYXNlZCBjaGFyYWN0ZXIgcG9zaXRpb24gb2YgdGhlIHJhbmdlIGVuZCBpbiB0aGUgc291cmNlIGZpbGUgdGV4dC4gKi9cbiAgZW5kUG9zOiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -1,256 +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 * as o from '@angular/compiler';
|
|
9
|
-
import { FatalLinkerError } from '../fatal_linker_error';
|
|
10
|
-
/**
|
|
11
|
-
* This helper class wraps an object expression along with an `AstHost` object, exposing helper
|
|
12
|
-
* methods that make it easier to extract the properties of the object.
|
|
13
|
-
*
|
|
14
|
-
* The generic `T` is used as reference type of the expected structure that is represented by this
|
|
15
|
-
* object. It does not achieve full type-safety for the provided operations in correspondence with
|
|
16
|
-
* `T`; its main goal is to provide references to a documented type and ensure that the properties
|
|
17
|
-
* that are read from the object are present.
|
|
18
|
-
*
|
|
19
|
-
* Unfortunately, the generic types are unable to prevent reading an optional property from the
|
|
20
|
-
* object without first having called `has` to ensure that the property exists. This is one example
|
|
21
|
-
* of where full type-safety is not achieved.
|
|
22
|
-
*/
|
|
23
|
-
export class AstObject {
|
|
24
|
-
constructor(expression, obj, host) {
|
|
25
|
-
this.expression = expression;
|
|
26
|
-
this.obj = obj;
|
|
27
|
-
this.host = host;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Create a new `AstObject` from the given `expression` and `host`.
|
|
31
|
-
*/
|
|
32
|
-
static parse(expression, host) {
|
|
33
|
-
const obj = host.parseObjectLiteral(expression);
|
|
34
|
-
return new AstObject(expression, obj, host);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Returns true if the object has a property called `propertyName`.
|
|
38
|
-
*/
|
|
39
|
-
has(propertyName) {
|
|
40
|
-
return this.obj.has(propertyName);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Returns the number value of the property called `propertyName`.
|
|
44
|
-
*
|
|
45
|
-
* Throws an error if there is no such property or the property is not a number.
|
|
46
|
-
*/
|
|
47
|
-
getNumber(propertyName) {
|
|
48
|
-
return this.host.parseNumericLiteral(this.getRequiredProperty(propertyName));
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Returns the string value of the property called `propertyName`.
|
|
52
|
-
*
|
|
53
|
-
* Throws an error if there is no such property or the property is not a string.
|
|
54
|
-
*/
|
|
55
|
-
getString(propertyName) {
|
|
56
|
-
return this.host.parseStringLiteral(this.getRequiredProperty(propertyName));
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Returns the boolean value of the property called `propertyName`.
|
|
60
|
-
*
|
|
61
|
-
* Throws an error if there is no such property or the property is not a boolean.
|
|
62
|
-
*/
|
|
63
|
-
getBoolean(propertyName) {
|
|
64
|
-
return this.host.parseBooleanLiteral(this.getRequiredProperty(propertyName));
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Returns the nested `AstObject` parsed from the property called `propertyName`.
|
|
68
|
-
*
|
|
69
|
-
* Throws an error if there is no such property or the property is not an object.
|
|
70
|
-
*/
|
|
71
|
-
getObject(propertyName) {
|
|
72
|
-
const expr = this.getRequiredProperty(propertyName);
|
|
73
|
-
const obj = this.host.parseObjectLiteral(expr);
|
|
74
|
-
return new AstObject(expr, obj, this.host);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Returns an array of `AstValue` objects parsed from the property called `propertyName`.
|
|
78
|
-
*
|
|
79
|
-
* Throws an error if there is no such property or the property is not an array.
|
|
80
|
-
*/
|
|
81
|
-
getArray(propertyName) {
|
|
82
|
-
const arr = this.host.parseArrayLiteral(this.getRequiredProperty(propertyName));
|
|
83
|
-
return arr.map(entry => new AstValue(entry, this.host));
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Returns a `WrappedNodeExpr` object that wraps the expression at the property called
|
|
87
|
-
* `propertyName`.
|
|
88
|
-
*
|
|
89
|
-
* Throws an error if there is no such property.
|
|
90
|
-
*/
|
|
91
|
-
getOpaque(propertyName) {
|
|
92
|
-
return new o.WrappedNodeExpr(this.getRequiredProperty(propertyName));
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Returns the raw `TExpression` value of the property called `propertyName`.
|
|
96
|
-
*
|
|
97
|
-
* Throws an error if there is no such property.
|
|
98
|
-
*/
|
|
99
|
-
getNode(propertyName) {
|
|
100
|
-
return this.getRequiredProperty(propertyName);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Returns an `AstValue` that wraps the value of the property called `propertyName`.
|
|
104
|
-
*
|
|
105
|
-
* Throws an error if there is no such property.
|
|
106
|
-
*/
|
|
107
|
-
getValue(propertyName) {
|
|
108
|
-
return new AstValue(this.getRequiredProperty(propertyName), this.host);
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Converts the AstObject to a raw JavaScript object, mapping each property value (as an
|
|
112
|
-
* `AstValue`) to the generic type (`T`) via the `mapper` function.
|
|
113
|
-
*/
|
|
114
|
-
toLiteral(mapper) {
|
|
115
|
-
const result = {};
|
|
116
|
-
for (const [key, expression] of this.obj) {
|
|
117
|
-
result[key] = mapper(new AstValue(expression, this.host));
|
|
118
|
-
}
|
|
119
|
-
return result;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Converts the AstObject to a JavaScript Map, mapping each property value (as an
|
|
123
|
-
* `AstValue`) to the generic type (`T`) via the `mapper` function.
|
|
124
|
-
*/
|
|
125
|
-
toMap(mapper) {
|
|
126
|
-
const result = new Map();
|
|
127
|
-
for (const [key, expression] of this.obj) {
|
|
128
|
-
result.set(key, mapper(new AstValue(expression, this.host)));
|
|
129
|
-
}
|
|
130
|
-
return result;
|
|
131
|
-
}
|
|
132
|
-
getRequiredProperty(propertyName) {
|
|
133
|
-
if (!this.obj.has(propertyName)) {
|
|
134
|
-
throw new FatalLinkerError(this.expression, `Expected property '${propertyName}' to be present.`);
|
|
135
|
-
}
|
|
136
|
-
return this.obj.get(propertyName);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* This helper class wraps an `expression`, exposing methods that use the `host` to give
|
|
141
|
-
* access to the underlying value of the wrapped expression.
|
|
142
|
-
*
|
|
143
|
-
* The generic `T` is used as reference type of the expected type that is represented by this value.
|
|
144
|
-
* It does not achieve full type-safety for the provided operations in correspondence with `T`; its
|
|
145
|
-
* main goal is to provide references to a documented type.
|
|
146
|
-
*/
|
|
147
|
-
export class AstValue {
|
|
148
|
-
constructor(expression, host) {
|
|
149
|
-
this.expression = expression;
|
|
150
|
-
this.host = host;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Get the name of the symbol represented by the given expression node, or `null` if it is not a
|
|
154
|
-
* symbol.
|
|
155
|
-
*/
|
|
156
|
-
getSymbolName() {
|
|
157
|
-
return this.host.getSymbolName(this.expression);
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Is this value a number?
|
|
161
|
-
*/
|
|
162
|
-
isNumber() {
|
|
163
|
-
return this.host.isNumericLiteral(this.expression);
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Parse the number from this value, or error if it is not a number.
|
|
167
|
-
*/
|
|
168
|
-
getNumber() {
|
|
169
|
-
return this.host.parseNumericLiteral(this.expression);
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Is this value a string?
|
|
173
|
-
*/
|
|
174
|
-
isString() {
|
|
175
|
-
return this.host.isStringLiteral(this.expression);
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Parse the string from this value, or error if it is not a string.
|
|
179
|
-
*/
|
|
180
|
-
getString() {
|
|
181
|
-
return this.host.parseStringLiteral(this.expression);
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Is this value a boolean?
|
|
185
|
-
*/
|
|
186
|
-
isBoolean() {
|
|
187
|
-
return this.host.isBooleanLiteral(this.expression);
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Parse the boolean from this value, or error if it is not a boolean.
|
|
191
|
-
*/
|
|
192
|
-
getBoolean() {
|
|
193
|
-
return this.host.parseBooleanLiteral(this.expression);
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Is this value an object literal?
|
|
197
|
-
*/
|
|
198
|
-
isObject() {
|
|
199
|
-
return this.host.isObjectLiteral(this.expression);
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Parse this value into an `AstObject`, or error if it is not an object literal.
|
|
203
|
-
*/
|
|
204
|
-
getObject() {
|
|
205
|
-
return AstObject.parse(this.expression, this.host);
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Is this value an array literal?
|
|
209
|
-
*/
|
|
210
|
-
isArray() {
|
|
211
|
-
return this.host.isArrayLiteral(this.expression);
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Parse this value into an array of `AstValue` objects, or error if it is not an array literal.
|
|
215
|
-
*/
|
|
216
|
-
getArray() {
|
|
217
|
-
const arr = this.host.parseArrayLiteral(this.expression);
|
|
218
|
-
return arr.map(entry => new AstValue(entry, this.host));
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Is this value a function expression?
|
|
222
|
-
*/
|
|
223
|
-
isFunction() {
|
|
224
|
-
return this.host.isFunctionExpression(this.expression);
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Extract the return value as an `AstValue` from this value as a function expression, or error if
|
|
228
|
-
* it is not a function expression.
|
|
229
|
-
*/
|
|
230
|
-
getFunctionReturnValue() {
|
|
231
|
-
return new AstValue(this.host.parseReturnValue(this.expression), this.host);
|
|
232
|
-
}
|
|
233
|
-
isCallExpression() {
|
|
234
|
-
return this.host.isCallExpression(this.expression);
|
|
235
|
-
}
|
|
236
|
-
getCallee() {
|
|
237
|
-
return new AstValue(this.host.parseCallee(this.expression), this.host);
|
|
238
|
-
}
|
|
239
|
-
getArguments() {
|
|
240
|
-
const args = this.host.parseArguments(this.expression);
|
|
241
|
-
return args.map(arg => new AstValue(arg, this.host));
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Return the `TExpression` of this value wrapped in a `WrappedNodeExpr`.
|
|
245
|
-
*/
|
|
246
|
-
getOpaque() {
|
|
247
|
-
return new o.WrappedNodeExpr(this.expression);
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Get the range of the location of this value in the original source.
|
|
251
|
-
*/
|
|
252
|
-
getRange() {
|
|
253
|
-
return this.host.getRange(this.expression);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN0X3ZhbHVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL2xpbmtlci9zcmMvYXN0L2FzdF92YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEtBQUssQ0FBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBb0N2RDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQVVwQixZQUNhLFVBQXVCLEVBQVUsR0FBNkIsRUFDL0QsSUFBMEI7UUFEekIsZUFBVSxHQUFWLFVBQVUsQ0FBYTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQTBCO1FBQy9ELFNBQUksR0FBSixJQUFJLENBQXNCO0lBQUcsQ0FBQztJQVgxQzs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQWdDLFVBQXVCLEVBQUUsSUFBMEI7UUFFN0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBTUQ7O09BRUc7SUFDSCxHQUFHLENBQUMsWUFBNEI7UUFDOUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBaUUsWUFBZTtRQUV2RixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTLENBQWlFLFlBQWU7UUFFdkYsT0FBTyxJQUFJLENBQUMs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Q0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxZQUFZO1FBQ1YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCAqIGFzIG8gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtGYXRhbExpbmtlckVycm9yfSBmcm9tICcuLi9mYXRhbF9saW5rZXJfZXJyb3InO1xuaW1wb3J0IHtBc3RIb3N0LCBSYW5nZX0gZnJvbSAnLi9hc3RfaG9zdCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBvbmx5IHRob3NlIHR5cGVzIGluIGBUYCB0aGF0IGFyZSBvYmplY3QgdHlwZXMuXG4gKi9cbnR5cGUgT2JqZWN0VHlwZTxUPiA9IEV4dHJhY3Q8VCwgb2JqZWN0PjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSB2YWx1ZSB0eXBlIG9mIGFuIG9iamVjdCBsaXRlcmFsLlxuICovXG50eXBlIE9iamVjdFZhbHVlVHlwZTxUPiA9IFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBpbmZlciBSPj8gUiA6IG5ldmVyO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHZhbHVlIHR5cGUgb2YgYW4gYXJyYXkgbGl0ZXJhbC5cbiAqL1xudHlwZSBBcnJheVZhbHVlVHlwZTxUPiA9IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBSPj8gUiA6IG5ldmVyO1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBgVGhpc2AgaGFzIGl0cyBnZW5lcmljIHR5cGUgYEFjdHVhbGAgY29uZm9ybSB0byB0aGUgZXhwZWN0ZWQgZ2VuZXJpYyB0eXBlIGluXG4gKiBgRXhwZWN0ZWRgLCB0byBkaXNhbGxvdyBjYWxsaW5nIGEgbWV0aG9kIGlmIHRoZSBnZW5lcmljIHR5cGUgZG9lcyBub3QgY29uZm9ybS5cbiAqL1xudHlwZSBDb25mb3Jtc1RvPFRoaXMsIEFjdHVhbCwgRXhwZWN0ZWQ+ID0gQWN0dWFsIGV4dGVuZHMgRXhwZWN0ZWQgPyBUaGlzIDogbmV2ZXI7XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGBUaGlzYCBpcyBhbiBgQXN0VmFsdWVgIHdob3NlIGdlbmVyaWMgdHlwZSBjb25mb3JtcyB0byBgRXhwZWN0ZWRgLCB0byBkaXNhbGxvd1xuICogY2FsbGluZyBhIG1ldGhvZCBpZiB0aGUgdmFsdWUncyB0eXBlIGRvZXMgbm90IGNvbmZvcm0uXG4gKi9cbnR5cGUgSGFzVmFsdWVUeXBlPFRoaXMsIEV4cGVjdGVkPiA9XG4gICAgVGhpcyBleHRlbmRzIEFzdFZhbHVlPGluZmVyIEFjdHVhbCwgYW55Pj8gQ29uZm9ybXNUbzxUaGlzLCBBY3R1YWwsIEV4cGVjdGVkPjogbmV2ZXI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBvbmx5IHRoZSBzdHJpbmcga2V5cyBvZiB0eXBlIGBUYC5cbiAqL1xudHlwZSBQcm9wZXJ0eUtleTxUPiA9IGtleW9mIFQmc3RyaW5nO1xuXG4vKipcbiAqIFRoaXMgaGVscGVyIGNsYXNzIHdyYXBzIGFuIG9iamVjdCBleHByZXNzaW9uIGFsb25nIHdpdGggYW4gYEFzdEhvc3RgIG9iamVjdCwgZXhwb3NpbmcgaGVscGVyXG4gKiBtZXRob2RzIHRoYXQgbWFrZSBpdCBlYXNpZXIgdG8gZXh0cmFjdCB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIFRoZSBnZW5lcmljIGBUYCBpcyB1c2VkIGFzIHJlZmVyZW5jZSB0eXBlIG9mIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmUgdGhhdCBpcyByZXByZXNlbnRlZCBieSB0aGlzXG4gKiBvYmplY3QuIEl0IGRvZXMgbm90IGFjaGlldmUgZnVsbCB0eXBlLXNhZmV0eSBmb3IgdGhlIHByb3ZpZGVkIG9wZXJhdGlvbnMgaW4gY29ycmVzcG9uZGVuY2Ugd2l0aFxuICogYFRgOyBpdHMgbWFpbiBnb2FsIGlzIHRvIHByb3ZpZGUgcmVmZXJlbmNlcyB0byBhIGRvY3VtZW50ZWQgdHlwZSBhbmQgZW5zdXJlIHRoYXQgdGhlIHByb3BlcnRpZXNcbiAqIHRoYXQgYXJlIHJlYWQgZnJvbSB0aGUgb2JqZWN0IGFyZSBwcmVzZW50LlxuICpcbiAqIFVuZm9ydHVuYXRlbHksIHRoZSBnZW5lcmljIHR5cGVzIGFyZSB1bmFibGUgdG8gcHJldmVudCByZWFkaW5nIGFuIG9wdGlvbmFsIHByb3BlcnR5IGZyb20gdGhlXG4gKiBvYmplY3Qgd2l0aG91dCBmaXJzdCBoYXZpbmcgY2FsbGVkIGBoYXNgIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9wZXJ0eSBleGlzdHMuIFRoaXMgaXMgb25lIGV4YW1wbGVcbiAqIG9mIHdoZXJlIGZ1bGwgdHlwZS1zYWZldHkgaXMgbm90IGFjaGlldmVkLlxuICovXG5leHBvcnQgY2xhc3MgQXN0T2JqZWN0PFQgZXh0ZW5kcyBvYmplY3QsIFRFeHByZXNzaW9uPiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgYEFzdE9iamVjdGAgZnJvbSB0aGUgZ2l2ZW4gYGV4cHJlc3Npb25gIGFuZCBgaG9zdGAuXG4gICAqL1xuICBzdGF0aWMgcGFyc2U8VCBleHRlbmRzIG9iamVjdCwgVEV4cHJlc3Npb24+KGV4cHJlc3Npb246IFRFeHByZXNzaW9uLCBob3N0OiBBc3RIb3N0PFRFeHByZXNzaW9uPik6XG4gICAgICBBc3RPYmplY3Q8VCwgVEV4cHJlc3Npb24+IHtcbiAgICBjb25zdCBvYmogPSBob3N0LnBhcnNlT2JqZWN0TGl0ZXJhbChleHByZXNzaW9uKTtcbiAgICByZXR1cm4gbmV3IEFzdE9iamVjdChleHByZXNzaW9uLCBvYmosIGhvc3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAgIHJlYWRvbmx5IGV4cHJlc3Npb246IFRFeHByZXNzaW9uLCBwcml2YXRlIG9iajogTWFwPHN0cmluZywgVEV4cHJlc3Npb24+LFxuICAgICAgcHJpdmF0ZSBob3N0OiBBc3RIb3N0PFRFeHByZXNzaW9uPikge31cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaGFzIGEgcHJvcGVydHkgY2FsbGVkIGBwcm9wZXJ0eU5hbWVgLlxuICAgKi9cbiAgaGFzKHByb3BlcnR5TmFtZTogUHJvcGVydHlLZXk8VD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vYmouaGFzKHByb3BlcnR5TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBjYWxsZWQgYHByb3BlcnR5TmFtZWAuXG4gICAqXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBzdWNoIHByb3BlcnR5IG9yIHRoZSBwcm9wZXJ0eSBpcyBub3QgYSBudW1iZXIuXG4gICAqL1xuICBnZXROdW1iZXI8SyBleHRlbmRzIFByb3BlcnR5S2V5PFQ+Pih0aGlzOiBDb25mb3Jtc1RvPHRoaXMsIFRbS10sIG51bWJlcj4sIHByb3BlcnR5TmFtZTogSyk6XG4gICAgICBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmhvc3QucGFyc2VOdW1lcmljTGl0ZXJhbCh0aGlzLmdldFJlcXVpcmVkUHJvcGVydHkocHJvcGVydHlOYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBjYWxsZWQgYHByb3BlcnR5TmFtZWAuXG4gICAqXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBzdWNoIHByb3BlcnR5IG9yIHRoZSBwcm9wZXJ0eSBpcyBub3QgYSBzdHJpbmcuXG4gICAqL1xuICBnZXRTdHJpbmc8SyBleHRlbmRzIFByb3BlcnR5S2V5PFQ+Pih0aGlzOiBDb25mb3Jtc1RvPHRoaXMsIFRbS10sIHN0cmluZz4sIHByb3BlcnR5TmFtZTogSyk6XG4gICAgICBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmhvc3QucGFyc2VTdHJpbmdMaXRlcmFsKHRoaXMuZ2V0UmVxdWlyZWRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBjYWxsZWQgYHByb3BlcnR5TmFtZWAuXG4gICAqXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBzdWNoIHByb3BlcnR5IG9yIHRoZSBwcm9wZXJ0eSBpcyBub3QgYSBib29sZWFuLlxuICAgKi9cbiAgZ2V0Qm9vbGVhbjxLIGV4dGVuZHMgUHJvcGVydHlLZXk8VD4+KHRoaXM6IENvbmZvcm1zVG88dGhpcywgVFtLXSwgYm9vbGVhbj4sIHByb3BlcnR5TmFtZTogSyk6XG4gICAgICBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0LnBhcnNlQm9vbGVhbkxpdGVyYWwodGhpcy5nZXRSZXF1aXJlZFByb3BlcnR5KHByb3BlcnR5TmFtZSkpIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuZXN0ZWQgYEFzdE9iamVjdGAgcGFyc2VkIGZyb20gdGhlIHByb3BlcnR5IGNhbGxlZCBgcHJvcGVydHlOYW1lYC5cbiAgICpcbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIHN1Y2ggcHJvcGVydHkgb3IgdGhlIHByb3BlcnR5IGlzIG5vdCBhbiBvYmplY3QuXG4gICAqL1xuICBnZXRPYmplY3Q8SyBleHRlbmRzIFByb3BlcnR5S2V5PFQ+Pih0aGlzOiBDb25mb3Jtc1RvPHRoaXMsIFRbS10sIG9iamVjdD4sIHByb3BlcnR5TmFtZTogSyk6XG4gICAgICBBc3RPYmplY3Q8T2JqZWN0VHlwZTxUW0tdPiwgVEV4cHJlc3Npb24+IHtcbiAgICBjb25zdCBleHByID0gdGhpcy5nZXRSZXF1aXJlZFByb3BlcnR5KHByb3BlcnR5TmFtZSk7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5ob3N0LnBhcnNlT2JqZWN0TGl0ZXJhbChleHByKTtcbiAgICByZXR1cm4gbmV3IEFzdE9iamVjdChleHByLCBvYmosIHRoaXMuaG9zdCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBgQXN0VmFsdWVgIG9iamVjdHMgcGFyc2VkIGZyb20gdGhlIHByb3BlcnR5IGNhbGxlZCBgcHJvcGVydHlOYW1lYC5cbiAgICpcbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIHN1Y2ggcHJvcGVydHkgb3IgdGhlIHByb3BlcnR5IGlzIG5vdCBhbiBhcnJheS5cbiAgICovXG4gIGdldEFycmF5PEsgZXh0ZW5kcyBQcm9wZXJ0eUtleTxUPj4odGhpczogQ29uZm9ybXNUbzx0aGlzLCBUW0tdLCB1bmtub3duW10+LCBwcm9wZXJ0eU5hbWU6IEspOlxuICAgICAgQXN0VmFsdWU8QXJyYXlWYWx1ZVR5cGU8VFtLXT4sIFRFeHByZXNzaW9uPltdIHtcbiAgICBjb25zdCBhcnIgPSB0aGlzLmhvc3QucGFyc2VBcnJheUxpdGVyYWwodGhpcy5nZXRSZXF1aXJlZFByb3BlcnR5KHByb3BlcnR5TmFtZSkpO1xuICAgIHJldHVybiBhcnIubWFwKGVudHJ5ID0+IG5ldyBBc3RWYWx1ZShlbnRyeSwgdGhpcy5ob3N0KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGBXcmFwcGVkTm9kZUV4cHJgIG9iamVjdCB0aGF0IHdyYXBzIHRoZSBleHByZXNzaW9uIGF0IHRoZSBwcm9wZXJ0eSBjYWxsZWRcbiAgICogYHByb3BlcnR5TmFtZWAuXG4gICAqXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBzdWNoIHByb3BlcnR5LlxuICAgKi9cbiAgZ2V0T3BhcXVlKHByb3BlcnR5TmFtZTogUHJvcGVydHlLZXk8VD4pOiBvLldyYXBwZWROb2RlRXhwcjxURXhwcmVzc2lvbj4ge1xuICAgIHJldHVybiBuZXcgby5XcmFwcGVkTm9kZUV4cHIodGhpcy5nZXRSZXF1aXJlZFByb3BlcnR5KHByb3BlcnR5TmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJhdyBgVEV4cHJlc3Npb25gIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBjYWxsZWQgYHByb3BlcnR5TmFtZWAuXG4gICAqXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBzdWNoIHByb3BlcnR5LlxuICAgKi9cbiAgZ2V0Tm9kZShwcm9wZXJ0eU5hbWU6IFByb3BlcnR5S2V5PFQ+KTogVEV4cHJlc3Npb24ge1xuICAgIHJldHVybiB0aGlzLmdldFJlcXVpcmVkUHJvcGVydHkocHJvcGVydHlOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGBBc3RWYWx1ZWAgdGhhdCB3cmFwcyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGNhbGxlZCBgcHJvcGVydHlOYW1lYC5cbiAgICpcbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIHN1Y2ggcHJvcGVydHkuXG4gICAqL1xuICBnZXRWYWx1ZTxLIGV4dGVuZHMgUHJvcGVydHlLZXk8VD4+KHByb3BlcnR5TmFtZTogSyk6IEFzdFZhbHVlPFRbS10sIFRFeHByZXNzaW9uPiB7XG4gICAgcmV0dXJuIG5ldyBBc3RWYWx1ZSh0aGlzLmdldFJlcXVpcmVkUHJvcGVydHkocHJvcGVydHlOYW1lKSwgdGhpcy5ob3N0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgQXN0T2JqZWN0IHRvIGEgcmF3IEphdmFTY3JpcHQgb2JqZWN0LCBtYXBwaW5nIGVhY2ggcHJvcGVydHkgdmFsdWUgKGFzIGFuXG4gICAqIGBBc3RWYWx1ZWApIHRvIHRoZSBnZW5lcmljIHR5cGUgKGBUYCkgdmlhIHRoZSBgbWFwcGVyYCBmdW5jdGlvbi5cbiAgICovXG4gIHRvTGl0ZXJhbDxWPihtYXBwZXI6ICh2YWx1ZTogQXN0VmFsdWU8T2JqZWN0VmFsdWVUeXBlPFQ+LCBURXhwcmVzc2lvbj4pID0+IFYpOiBSZWNvcmQ8c3RyaW5nLCBWPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBWPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgZXhwcmVzc2lvbl0gb2YgdGhpcy5vYmopIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWFwcGVyKG5ldyBBc3RWYWx1ZShleHByZXNzaW9uLCB0aGlzLmhvc3QpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgQXN0T2JqZWN0IHRvIGEgSmF2YVNjcmlwdCBNYXAsIG1hcHBpbmcgZWFjaCBwcm9wZXJ0eSB2YWx1ZSAoYXMgYW5cbiAgICogYEFzdFZhbHVlYCkgdG8gdGhlIGdlbmVyaWMgdHlwZSAoYFRgKSB2aWEgdGhlIGBtYXBwZXJgIGZ1bmN0aW9uLlxuICAgKi9cbiAgdG9NYXA8Vj4obWFwcGVyOiAodmFsdWU6IEFzdFZhbHVlPE9iamVjdFZhbHVlVHlwZTxUPiwgVEV4cHJlc3Npb24+KSA9PiBWKTogTWFwPHN0cmluZywgVj4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBWPigpO1xuICAgIGZvciAoY29uc3QgW2tleSwgZXhwcmVzc2lvbl0gb2YgdGhpcy5vYmopIHtcbiAgICAgIHJlc3VsdC5zZXQoa2V5LCBtYXBwZXIobmV3IEFzdFZhbHVlKGV4cHJlc3Npb24sIHRoaXMuaG9zdCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVxdWlyZWRQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IFByb3BlcnR5S2V5PFQ+KTogVEV4cHJlc3Npb24ge1xuICAgIGlmICghdGhpcy5vYmouaGFzKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiwgYEV4cGVjdGVkIHByb3BlcnR5ICcke3Byb3BlcnR5TmFtZX0nIHRvIGJlIHByZXNlbnQuYCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9iai5nZXQocHJvcGVydHlOYW1lKSE7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGhlbHBlciBjbGFzcyB3cmFwcyBhbiBgZXhwcmVzc2lvbmAsIGV4cG9zaW5nIG1ldGhvZHMgdGhhdCB1c2UgdGhlIGBob3N0YCB0byBnaXZlXG4gKiBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgdmFsdWUgb2YgdGhlIHdyYXBwZWQgZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZ2VuZXJpYyBgVGAgaXMgdXNlZCBhcyByZWZlcmVuY2UgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgdHlwZSB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoaXMgdmFsdWUuXG4gKiBJdCBkb2VzIG5vdCBhY2hpZXZlIGZ1bGwgdHlwZS1zYWZldHkgZm9yIHRoZSBwcm92aWRlZCBvcGVyYXRpb25zIGluIGNvcnJlc3BvbmRlbmNlIHdpdGggYFRgOyBpdHNcbiAqIG1haW4gZ29hbCBpcyB0byBwcm92aWRlIHJlZmVyZW5jZXMgdG8gYSBkb2N1bWVudGVkIHR5cGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBBc3RWYWx1ZTxULCBURXhwcmVzc2lvbj4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBleHByZXNzaW9uOiBURXhwcmVzc2lvbiwgcHJpdmF0ZSBob3N0OiBBc3RIb3N0PFRFeHByZXNzaW9uPikge31cblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBzeW1ib2wgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGV4cHJlc3Npb24gbm9kZSwgb3IgYG51bGxgIGlmIGl0IGlzIG5vdCBhXG4gICAqIHN5bWJvbC5cbiAgICovXG4gIGdldFN5bWJvbE5hbWUoKTogc3RyaW5nfG51bGwge1xuICAgIHJldHVybiB0aGlzLmhvc3QuZ2V0U3ltYm9sTmFtZSh0aGlzLmV4cHJlc3Npb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgdmFsdWUgYSBudW1iZXI/XG4gICAqL1xuICBpc051bWJlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0LmlzTnVtZXJpY0xpdGVyYWwodGhpcy5leHByZXNzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgbnVtYmVyIGZyb20gdGhpcyB2YWx1ZSwgb3IgZXJyb3IgaWYgaXQgaXMgbm90IGEgbnVtYmVyLlxuICAgKi9cbiAgZ2V0TnVtYmVyKHRoaXM6IEhhc1ZhbHVlVHlwZTx0aGlzLCBudW1iZXI+KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0LnBhcnNlTnVtZXJpY0xpdGVyYWwodGhpcy5leHByZXNzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB0aGlzIHZhbHVlIGEgc3RyaW5nP1xuICAgKi9cbiAgaXNTdHJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdC5pc1N0cmluZ0xpdGVyYWwodGhpcy5leHByZXNzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgc3RyaW5nIGZyb20gdGhpcyB2YWx1ZSwgb3IgZXJyb3IgaWYgaXQgaXMgbm90IGEgc3RyaW5nLlxuICAgKi9cbiAgZ2V0U3RyaW5nKHRoaXM6IEhhc1ZhbHVlVHlwZTx0aGlzLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0LnBhcnNlU3RyaW5nTGl0ZXJhbCh0aGlzLmV4cHJlc3Npb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgdmFsdWUgYSBib29sZWFuP1xuICAgKi9cbiAgaXNCb29sZWFuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhvc3QuaXNCb29sZWFuTGl0ZXJhbCh0aGlzLmV4cHJlc3Npb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSBib29sZWFuIGZyb20gdGhpcyB2YWx1ZSwgb3IgZXJyb3IgaWYgaXQgaXMgbm90IGEgYm9vbGVhbi5cbiAgICovXG4gIGdldEJvb2xlYW4odGhpczogSGFzVmFsdWVUeXBlPHRoaXMsIGJvb2xlYW4+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdC5wYXJzZUJvb2xlYW5MaXRlcmFsKHRoaXMuZXhwcmVzc2lvbik7XG4gIH1cblxuICAvKipcbiAgICogSXMgdGhpcyB2YWx1ZSBhbiBvYmplY3QgbGl0ZXJhbD9cbiAgICovXG4gIGlzT2JqZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhvc3QuaXNPYmplY3RMaXRlcmFsKHRoaXMuZXhwcmVzc2lvbik7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdGhpcyB2YWx1ZSBpbnRvIGFuIGBBc3RPYmplY3RgLCBvciBlcnJvciBpZiBpdCBpcyBub3QgYW4gb2JqZWN0IGxpdGVyYWwuXG4gICAqL1xuICBnZXRPYmplY3QodGhpczogSGFzVmFsdWVUeXBlPHRoaXMsIG9iamVjdD4pOiBBc3RPYmplY3Q8T2JqZWN0VHlwZTxUPiwgVEV4cHJlc3Npb24+IHtcbiAgICByZXR1cm4gQXN0T2JqZWN0LnBhcnNlKHRoaXMuZXhwcmVzc2lvbiwgdGhpcy5ob3N0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB0aGlzIHZhbHVlIGFuIGFycmF5IGxpdGVyYWw/XG4gICAqL1xuICBpc0FycmF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhvc3QuaXNBcnJheUxpdGVyYWwodGhpcy5leHByZXNzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGlzIHZhbHVlIGludG8gYW4gYXJyYXkgb2YgYEFzdFZhbHVlYCBvYmplY3RzLCBvciBlcnJvciBpZiBpdCBpcyBub3QgYW4gYXJyYXkgbGl0ZXJhbC5cbiAgICovXG4gIGdldEFycmF5KHRoaXM6IEhhc1ZhbHVlVHlwZTx0aGlzLCB1bmtub3duW10+KTogQXN0VmFsdWU8QXJyYXlWYWx1ZVR5cGU8VD4sIFRFeHByZXNzaW9uPltdIHtcbiAgICBjb25zdCBhcnIgPSB0aGlzLmhvc3QucGFyc2VBcnJheUxpdGVyYWwodGhpcy5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gYXJyLm1hcChlbnRyeSA9PiBuZXcgQXN0VmFsdWUoZW50cnksIHRoaXMuaG9zdCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgdmFsdWUgYSBmdW5jdGlvbiBleHByZXNzaW9uP1xuICAgKi9cbiAgaXNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0LmlzRnVuY3Rpb25FeHByZXNzaW9uKHRoaXMuZXhwcmVzc2lvbik7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCB0aGUgcmV0dXJuIHZhbHVlIGFzIGFuIGBBc3RWYWx1ZWAgZnJvbSB0aGlzIHZhbHVlIGFzIGEgZnVuY3Rpb24gZXhwcmVzc2lvbiwgb3IgZXJyb3IgaWZcbiAgICogaXQgaXMgbm90IGEgZnVuY3Rpb24gZXhwcmVzc2lvbi5cbiAgICovXG4gIGdldEZ1bmN0aW9uUmV0dXJuVmFsdWU8Uj4odGhpczogSGFzVmFsdWVUeXBlPHRoaXMsIEZ1bmN0aW9uPik6IEFzdFZhbHVlPFIsIFRFeHByZXNzaW9uPiB7XG4gICAgcmV0dXJuIG5ldyBBc3RWYWx1ZSh0aGlzLmhvc3QucGFyc2VSZXR1cm5WYWx1ZSh0aGlzLmV4cHJlc3Npb24pLCB0aGlzLmhvc3QpO1xuICB9XG5cbiAgaXNDYWxsRXhwcmVzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0LmlzQ2FsbEV4cHJlc3Npb24odGhpcy5leHByZXNzaW9uKTtcbiAgfVxuXG4gIGdldENhbGxlZSgpOiBBc3RWYWx1ZTx1bmtub3duLCBURXhwcmVzc2lvbj4ge1xuICAgIHJldHVybiBuZXcgQXN0VmFsdWUodGhpcy5ob3N0LnBhcnNlQ2FsbGVlKHRoaXMuZXhwcmVzc2lvbiksIHRoaXMuaG9zdCk7XG4gIH1cblxuICBnZXRBcmd1bWVudHMoKTogQXN0VmFsdWU8dW5rbm93biwgVEV4cHJlc3Npb24+W10ge1xuICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmhvc3QucGFyc2VBcmd1bWVudHModGhpcy5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gYXJncy5tYXAoYXJnID0+IG5ldyBBc3RWYWx1ZShhcmcsIHRoaXMuaG9zdCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgYFRFeHByZXNzaW9uYCBvZiB0aGlzIHZhbHVlIHdyYXBwZWQgaW4gYSBgV3JhcHBlZE5vZGVFeHByYC5cbiAgICovXG4gIGdldE9wYXF1ZSgpOiBvLldyYXBwZWROb2RlRXhwcjxURXhwcmVzc2lvbj4ge1xuICAgIHJldHVybiBuZXcgby5XcmFwcGVkTm9kZUV4cHIodGhpcy5leHByZXNzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJhbmdlIG9mIHRoZSBsb2NhdGlvbiBvZiB0aGlzIHZhbHVlIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gICAqL1xuICBnZXRSYW5nZSgpOiBSYW5nZSB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdC5nZXRSYW5nZSh0aGlzLmV4cHJlc3Npb24pO1xuICB9XG59XG4iXX0=
|