@angular/compiler-cli 12.1.0-next.5 → 12.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
- package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +2 -3
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
- package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
- package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
- package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
- package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
- package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +1 -1
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +1 -1
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +1 -1
- package/ngcc/src/execution/tasks/queues/serial_task_queue.js +1 -1
- package/ngcc/src/host/commonjs_host.js +1 -1
- package/ngcc/src/host/esm2015_host.js +1 -1
- package/ngcc/src/host/esm5_host.js +1 -1
- package/ngcc/src/host/umd_host.js +1 -1
- package/ngcc/src/packages/build_marker.d.ts +1 -1
- package/ngcc/src/packages/build_marker.js +1 -1
- package/ngcc/src/packages/configuration.d.ts +7 -0
- package/ngcc/src/packages/configuration.js +8 -3
- package/ngcc/src/packages/entry_point_manifest.js +2 -2
- package/ngcc/src/packages/ngcc_compiler_host.js +1 -1
- package/ngcc/src/rendering/commonjs_rendering_formatter.js +1 -1
- package/ngcc/src/rendering/esm5_rendering_formatter.js +1 -1
- package/ngcc/src/rendering/umd_rendering_formatter.js +1 -1
- package/ngcc/src/writing/new_entry_point_file_writer.js +1 -1
- package/package.json +2 -2
- package/src/ngtsc/annotations/src/component.d.ts +2 -0
- package/src/ngtsc/annotations/src/component.js +6 -2
- package/src/ngtsc/annotations/src/directive.js +1 -1
- package/src/ngtsc/annotations/src/ng_module.js +1 -1
- package/src/ngtsc/annotations/src/pipe.js +1 -1
- package/src/ngtsc/core/api/src/public_options.d.ts +12 -0
- package/src/ngtsc/core/api/src/public_options.js +1 -1
- package/src/ngtsc/core/src/compiler.d.ts +5 -0
- package/src/ngtsc/core/src/compiler.js +10 -1
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +1 -1
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
- package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
- package/src/ngtsc/incremental/src/incremental.js +36 -6
- package/src/ngtsc/incremental/src/state.d.ts +5 -3
- package/src/ngtsc/incremental/src/state.js +1 -1
- package/src/ngtsc/indexer/src/template.js +1 -1
- package/src/ngtsc/metadata/src/dts.js +2 -3
- package/src/ngtsc/metadata/src/inheritance.js +2 -7
- package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
- package/src/ngtsc/partial_evaluator/src/diagnostics.js +4 -1
- package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +19 -1
- package/src/ngtsc/partial_evaluator/src/dynamic.js +12 -4
- package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +2 -0
- package/src/ngtsc/partial_evaluator/src/interpreter.js +48 -1
- package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
- package/src/ngtsc/program.d.ts +1 -0
- package/src/ngtsc/program.js +26 -2
- package/src/ngtsc/program_driver/src/api.d.ts +20 -1
- package/src/ngtsc/program_driver/src/api.js +3 -2
- package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
- package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
- package/src/ngtsc/reflection/src/typescript.js +4 -1
- package/src/ngtsc/transform/src/api.d.ts +6 -0
- package/src/ngtsc/transform/src/api.js +1 -1
- package/src/ngtsc/transform/src/compilation.d.ts +3 -0
- package/src/ngtsc/transform/src/compilation.js +124 -53
- package/src/ngtsc/transform/src/transform.js +1 -1
- package/src/ngtsc/typecheck/src/context.d.ts +2 -1
- package/src/ngtsc/typecheck/src/context.js +11 -3
- package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
- package/src/ngtsc/typecheck/src/template_symbol_builder.js +36 -4
- package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
- package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
- package/src/ngtsc/typecheck/src/type_emitter.d.ts +2 -1
- package/src/ngtsc/typecheck/src/type_emitter.js +54 -48
- package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +2 -0
- package/src/ngtsc/typecheck/src/type_parameter_emitter.js +21 -7
- package/src/ngtsc/util/src/visitor.d.ts +1 -1
- package/src/ngtsc/util/src/visitor.js +1 -8
- package/src/ngtsc/xi18n/index.d.ts +9 -0
- package/src/ngtsc/xi18n/index.js +22 -0
- package/src/ngtsc/xi18n/src/context.d.ts +26 -0
- package/src/ngtsc/xi18n/src/context.js +20 -0
- package/src/transformers/api.d.ts +0 -3
- package/src/transformers/api.js +1 -1
- package/src/transformers/i18n.d.ts +14 -0
- package/src/transformers/i18n.js +76 -0
- package/src/transformers/program.d.ts +0 -4
- package/src/transformers/program.js +5 -56
- package/src/version.js +1 -1
- package/compiler-cli.externs.js +0 -0
- package/index.mjs +0 -20
- package/linker/babel/babel.externs.js +0 -0
- package/linker/babel/index.mjs +0 -11
- package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
- package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
- package/linker/babel/src/babel_declaration_scope.mjs +0 -52
- package/linker/babel/src/babel_plugin.mjs +0 -23
- package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
- package/linker/babel/src/linker_plugin_options.mjs +0 -2
- package/linker/index.mjs +0 -7
- package/linker/linker.externs.js +0 -0
- package/linker/src/ast/ast_host.mjs +0 -9
- package/linker/src/ast/ast_value.mjs +0 -256
- package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
- package/linker/src/ast/utils.mjs +0 -17
- package/linker/src/fatal_linker_error.mjs +0 -30
- package/linker/src/file_linker/declaration_scope.mjs +0 -9
- package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
- package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
- package/linker/src/file_linker/file_linker.mjs +0 -70
- package/linker/src/file_linker/get_source_file.mjs +0 -28
- package/linker/src/file_linker/linker_environment.mjs +0 -23
- package/linker/src/file_linker/linker_options.mjs +0 -16
- package/linker/src/file_linker/needs_linking.mjs +0 -27
- package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
- package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
- package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
- package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
- package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
- package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
- package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
- package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
- package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
- package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
- package/linker/src/file_linker/translator.mjs +0 -23
- package/linker/src/linker_import_generator.mjs +0 -28
- package/ngcc/index.mjs +0 -16
- package/ngcc/main-ivy-ngcc.mjs +0 -12
- package/ngcc/main-ngcc.mjs +0 -32
- package/ngcc/ngcc.externs.js +0 -0
- package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
- package/ngcc/src/analysis/migration_host.mjs +0 -80
- package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
- package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
- package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
- package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
- package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
- package/ngcc/src/analysis/types.mjs +0 -2
- package/ngcc/src/analysis/util.mjs +0 -19
- package/ngcc/src/command_line_options.mjs +0 -142
- package/ngcc/src/constants.mjs +0 -10
- package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
- package/ngcc/src/dependencies/dependency_host.mjs +0 -102
- package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
- package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
- package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
- package/ngcc/src/dependencies/module_resolver.mjs +0 -233
- package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
- package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
- package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
- package/ngcc/src/entry_point_finder/interface.mjs +0 -2
- package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
- package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
- package/ngcc/src/entry_point_finder/utils.mjs +0 -176
- package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
- package/ngcc/src/execution/api.mjs +0 -2
- package/ngcc/src/execution/cluster/api.mjs +0 -9
- package/ngcc/src/execution/cluster/executor.mjs +0 -27
- package/ngcc/src/execution/cluster/master.mjs +0 -261
- package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
- package/ngcc/src/execution/cluster/utils.mjs +0 -59
- package/ngcc/src/execution/cluster/worker.mjs +0 -81
- package/ngcc/src/execution/create_compile_function.mjs +0 -62
- package/ngcc/src/execution/single_process_executor.mjs +0 -57
- package/ngcc/src/execution/tasks/api.mjs +0 -22
- package/ngcc/src/execution/tasks/completion.mjs +0 -61
- package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
- package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
- package/ngcc/src/execution/tasks/utils.mjs +0 -114
- package/ngcc/src/host/commonjs_host.mjs +0 -220
- package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
- package/ngcc/src/host/delegating_host.mjs +0 -140
- package/ngcc/src/host/esm2015_host.mjs +0 -2293
- package/ngcc/src/host/esm5_host.mjs +0 -721
- package/ngcc/src/host/ngcc_host.mjs +0 -15
- package/ngcc/src/host/umd_host.mjs +0 -486
- package/ngcc/src/host/utils.mjs +0 -12
- package/ngcc/src/locking/async_locker.mjs +0 -76
- package/ngcc/src/locking/lock_file.mjs +0 -4
- package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
- package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
- package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
- package/ngcc/src/locking/sync_locker.mjs +0 -52
- package/ngcc/src/main.mjs +0 -134
- package/ngcc/src/migrations/migration.mjs +0 -2
- package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
- package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
- package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
- package/ngcc/src/migrations/utils.mjs +0 -117
- package/ngcc/src/ngcc_options.mjs +0 -119
- package/ngcc/src/packages/build_marker.mjs +0 -84
- package/ngcc/src/packages/bundle_program.mjs +0 -52
- package/ngcc/src/packages/configuration.mjs +0 -250
- package/ngcc/src/packages/entry_point.mjs +0 -239
- package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
- package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
- package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
- package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
- package/ngcc/src/packages/source_file_cache.mjs +0 -187
- package/ngcc/src/packages/transformer.mjs +0 -140
- package/ngcc/src/path_mappings.mjs +0 -13
- package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
- package/ngcc/src/rendering/dts_renderer.mjs +0 -139
- package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
- package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
- package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
- package/ngcc/src/rendering/renderer.mjs +0 -170
- package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
- package/ngcc/src/rendering/source_maps.mjs +0 -54
- package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
- package/ngcc/src/rendering/utils.mjs +0 -20
- package/ngcc/src/utils.mjs +0 -144
- package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
- package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
- package/ngcc/src/writing/cleaning/utils.mjs +0 -16
- package/ngcc/src/writing/file_writer.mjs +0 -2
- package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
- package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
- package/ngcc/src/writing/package_json_updater.mjs +0 -144
- package/src/diagnostics/translate_diagnostics.mjs +0 -47
- package/src/diagnostics/typescript_version.mjs +0 -79
- package/src/extract_i18n.mjs +0 -46
- package/src/language_services.mjs +0 -18
- package/src/main.mjs +0 -185
- package/src/metadata/bundle_index_host.mjs +0 -107
- package/src/metadata/bundler.mjs +0 -556
- package/src/metadata/collector.mjs +0 -701
- package/src/metadata/evaluator.mjs +0 -643
- package/src/metadata/index.mjs +0 -11
- package/src/metadata/index_writer.mjs +0 -44
- package/src/metadata/schema.mjs +0 -102
- package/src/metadata/symbols.mjs +0 -117
- package/src/ngtsc/annotations/annotations.externs.js +0 -0
- package/src/ngtsc/annotations/index.mjs +0 -15
- package/src/ngtsc/annotations/src/api.mjs +0 -9
- package/src/ngtsc/annotations/src/component.mjs +0 -1064
- package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
- package/src/ngtsc/annotations/src/directive.mjs +0 -692
- package/src/ngtsc/annotations/src/factory.mjs +0 -17
- package/src/ngtsc/annotations/src/injectable.mjs +0 -260
- package/src/ngtsc/annotations/src/metadata.mjs +0 -145
- package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
- package/src/ngtsc/annotations/src/pipe.mjs +0 -151
- package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
- package/src/ngtsc/annotations/src/util.mjs +0 -495
- package/src/ngtsc/core/api/index.mjs +0 -12
- package/src/ngtsc/core/api/src/adapter.mjs +0 -9
- package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
- package/src/ngtsc/core/api/src/options.mjs +0 -9
- package/src/ngtsc/core/api/src/public_options.mjs +0 -9
- package/src/ngtsc/core/api.externs.js +0 -0
- package/src/ngtsc/core/core.externs.js +0 -0
- package/src/ngtsc/core/index.mjs +0 -10
- package/src/ngtsc/core/src/compiler.mjs +0 -908
- package/src/ngtsc/core/src/config.mjs +0 -15
- package/src/ngtsc/core/src/host.mjs +0 -229
- package/src/ngtsc/cycles/cycles.externs.js +0 -0
- package/src/ngtsc/cycles/index.mjs +0 -10
- package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
- package/src/ngtsc/cycles/src/imports.mjs +0 -152
- package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
- package/src/ngtsc/diagnostics/index.mjs +0 -11
- package/src/ngtsc/diagnostics/src/error.mjs +0 -51
- package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
- package/src/ngtsc/diagnostics/src/util.mjs +0 -21
- package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
- package/src/ngtsc/entry_point/index.mjs +0 -12
- package/src/ngtsc/entry_point/src/generator.mjs +0 -35
- package/src/ngtsc/entry_point/src/logic.mjs +0 -35
- package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
- package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
- package/src/ngtsc/file_system/file_system.externs.js +0 -0
- package/src/ngtsc/file_system/index.mjs +0 -13
- package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
- package/src/ngtsc/file_system/src/helpers.mjs +0 -99
- package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
- package/src/ngtsc/file_system/src/logical.mjs +0 -84
- package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
- package/src/ngtsc/file_system/src/types.mjs +0 -9
- package/src/ngtsc/file_system/src/util.mjs +0 -22
- package/src/ngtsc/file_system/testing/index.mjs +0 -13
- package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
- package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
- package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
- package/src/ngtsc/imports/imports.externs.js +0 -0
- package/src/ngtsc/imports/index.mjs +0 -14
- package/src/ngtsc/imports/src/alias.mjs +0 -137
- package/src/ngtsc/imports/src/core.mjs +0 -78
- package/src/ngtsc/imports/src/default.mjs +0 -135
- package/src/ngtsc/imports/src/emitter.mjs +0 -266
- package/src/ngtsc/imports/src/find_export.mjs +0 -56
- package/src/ngtsc/imports/src/reexport.mjs +0 -9
- package/src/ngtsc/imports/src/references.mjs +0 -137
- package/src/ngtsc/imports/src/resolver.mjs +0 -24
- package/src/ngtsc/incremental/api.externs.js +0 -0
- package/src/ngtsc/incremental/api.mjs +0 -9
- package/src/ngtsc/incremental/incremental.externs.js +0 -0
- package/src/ngtsc/incremental/index.mjs +0 -12
- package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
- package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
- package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
- package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
- package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
- package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
- package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
- package/src/ngtsc/incremental/src/incremental.mjs +0 -267
- package/src/ngtsc/incremental/src/noop.mjs +0 -13
- package/src/ngtsc/incremental/src/state.mjs +0 -17
- package/src/ngtsc/incremental/src/strategy.mjs +0 -76
- package/src/ngtsc/indexer/index.mjs +0 -11
- package/src/ngtsc/indexer/indexer.externs.js +0 -0
- package/src/ngtsc/indexer/src/api.mjs +0 -30
- package/src/ngtsc/indexer/src/context.mjs +0 -25
- package/src/ngtsc/indexer/src/template.mjs +0 -303
- package/src/ngtsc/indexer/src/transform.mjs +0 -51
- package/src/ngtsc/logging/index.mjs +0 -10
- package/src/ngtsc/logging/logging.externs.js +0 -0
- package/src/ngtsc/logging/src/console_logger.mjs +0 -43
- package/src/ngtsc/logging/src/logger.mjs +0 -15
- package/src/ngtsc/logging/testing/index.mjs +0 -9
- package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
- package/src/ngtsc/logging/testing/testing.externs.js +0 -0
- package/src/ngtsc/metadata/index.mjs +0 -15
- package/src/ngtsc/metadata/metadata.externs.js +0 -0
- package/src/ngtsc/metadata/src/api.mjs +0 -13
- package/src/ngtsc/metadata/src/dts.mjs +0 -143
- package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
- package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
- package/src/ngtsc/metadata/src/registry.mjs +0 -80
- package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
- package/src/ngtsc/metadata/src/util.mjs +0 -200
- package/src/ngtsc/partial_evaluator/index.mjs +0 -12
- package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
- package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
- package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -171
- package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -86
- package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
- package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -683
- package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
- package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
- package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
- package/src/ngtsc/perf/index.mjs +0 -11
- package/src/ngtsc/perf/perf.externs.js +0 -0
- package/src/ngtsc/perf/src/api.mjs +0 -278
- package/src/ngtsc/perf/src/clock.mjs +0 -15
- package/src/ngtsc/perf/src/noop.mjs +0 -21
- package/src/ngtsc/perf/src/recorder.mjs +0 -125
- package/src/ngtsc/program.mjs +0 -247
- package/src/ngtsc/program_driver/index.mjs +0 -10
- package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
- package/src/ngtsc/program_driver/src/api.mjs +0 -22
- package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
- package/src/ngtsc/reflection/index.mjs +0 -12
- package/src/ngtsc/reflection/reflection.externs.js +0 -0
- package/src/ngtsc/reflection/src/host.mjs +0 -73
- package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
- package/src/ngtsc/reflection/src/typescript.mjs +0 -608
- package/src/ngtsc/reflection/src/util.mjs +0 -21
- package/src/ngtsc/resource/index.mjs +0 -9
- package/src/ngtsc/resource/resource.externs.js +0 -0
- package/src/ngtsc/resource/src/loader.mjs +0 -242
- package/src/ngtsc/routing/index.mjs +0 -11
- package/src/ngtsc/routing/routing.externs.js +0 -0
- package/src/ngtsc/routing/src/analyzer.mjs +0 -69
- package/src/ngtsc/routing/src/lazy.mjs +0 -168
- package/src/ngtsc/routing/src/route.mjs +0 -51
- package/src/ngtsc/scope/index.mjs +0 -12
- package/src/ngtsc/scope/scope.externs.js +0 -0
- package/src/ngtsc/scope/src/api.mjs +0 -9
- package/src/ngtsc/scope/src/component_scope.mjs +0 -31
- package/src/ngtsc/scope/src/dependency.mjs +0 -134
- package/src/ngtsc/scope/src/local.mjs +0 -531
- package/src/ngtsc/scope/src/typecheck.mjs +0 -83
- package/src/ngtsc/shims/api.externs.js +0 -0
- package/src/ngtsc/shims/api.mjs +0 -2
- package/src/ngtsc/shims/index.mjs +0 -14
- package/src/ngtsc/shims/shims.externs.js +0 -0
- package/src/ngtsc/shims/src/adapter.mjs +0 -188
- package/src/ngtsc/shims/src/expando.mjs +0 -102
- package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
- package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
- package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
- package/src/ngtsc/shims/src/util.mjs +0 -26
- package/src/ngtsc/sourcemaps/index.mjs +0 -11
- package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
- package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
- package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
- package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
- package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
- package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
- package/src/ngtsc/switch/index.mjs +0 -9
- package/src/ngtsc/switch/src/switch.mjs +0 -115
- package/src/ngtsc/switch/switch.externs.js +0 -0
- package/src/ngtsc/transform/index.mjs +0 -14
- package/src/ngtsc/transform/src/alias.mjs +0 -30
- package/src/ngtsc/transform/src/api.mjs +0 -63
- package/src/ngtsc/transform/src/compilation.mjs +0 -485
- package/src/ngtsc/transform/src/declaration.mjs +0 -182
- package/src/ngtsc/transform/src/trait.mjs +0 -95
- package/src/ngtsc/transform/src/transform.mjs +0 -298
- package/src/ngtsc/transform/src/utils.mjs +0 -57
- package/src/ngtsc/transform/transform.externs.js +0 -0
- package/src/ngtsc/translator/index.mjs +0 -14
- package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
- package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
- package/src/ngtsc/translator/src/context.mjs +0 -24
- package/src/ngtsc/translator/src/import_manager.mjs +0 -48
- package/src/ngtsc/translator/src/translator.mjs +0 -317
- package/src/ngtsc/translator/src/type_translator.mjs +0 -204
- package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
- package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
- package/src/ngtsc/translator/translator.externs.js +0 -0
- package/src/ngtsc/tsc_plugin.mjs +0 -98
- package/src/ngtsc/typecheck/api/api.externs.js +0 -0
- package/src/ngtsc/typecheck/api/api.mjs +0 -9
- package/src/ngtsc/typecheck/api/checker.mjs +0 -31
- package/src/ngtsc/typecheck/api/completion.mjs +0 -16
- package/src/ngtsc/typecheck/api/context.mjs +0 -9
- package/src/ngtsc/typecheck/api/index.mjs +0 -14
- package/src/ngtsc/typecheck/api/scope.mjs +0 -9
- package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
- package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
- package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
- package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
- package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
- package/src/ngtsc/typecheck/index.mjs +0 -12
- package/src/ngtsc/typecheck/src/checker.mjs +0 -591
- package/src/ngtsc/typecheck/src/comments.mjs +0 -159
- package/src/ngtsc/typecheck/src/completion.mjs +0 -155
- package/src/ngtsc/typecheck/src/context.mjs +0 -350
- package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
- package/src/ngtsc/typecheck/src/dom.mjs +0 -68
- package/src/ngtsc/typecheck/src/environment.mjs +0 -146
- package/src/ngtsc/typecheck/src/expression.mjs +0 -412
- package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
- package/src/ngtsc/typecheck/src/oob.mjs +0 -112
- package/src/ngtsc/typecheck/src/shim.mjs +0 -37
- package/src/ngtsc/typecheck/src/source.mjs +0 -74
- package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
- package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
- package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -472
- package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
- package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
- package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
- package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
- package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -140
- package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -80
- package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
- package/src/ngtsc/util/src/path.mjs +0 -18
- package/src/ngtsc/util/src/typescript.mjs +0 -143
- package/src/ngtsc/util/src/visitor.mjs +0 -107
- package/src/ngtsc/util/util.externs.js +0 -0
- package/src/perform_compile.mjs +0 -275
- package/src/perform_watch.mjs +0 -247
- package/src/tooling.mjs +0 -32
- package/src/transformers/api.mjs +0 -27
- package/src/transformers/compiler_host.mjs +0 -593
- package/src/transformers/downlevel_decorators_transform.mjs +0 -507
- package/src/transformers/entry_points.mjs +0 -10
- package/src/transformers/inline_resources.mjs +0 -269
- package/src/transformers/lower_expressions.mjs +0 -336
- package/src/transformers/metadata_cache.mjs +0 -53
- package/src/transformers/metadata_reader.mjs +0 -104
- package/src/transformers/node_emitter.mjs +0 -606
- package/src/transformers/node_emitter_transform.mjs +0 -78
- package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
- package/src/transformers/program.mjs +0 -935
- package/src/transformers/r3_metadata_transform.mjs +0 -46
- package/src/transformers/r3_transform.mjs +0 -29
- package/src/transformers/util.mjs +0 -89
- package/src/typescript_support.mjs +0 -57
- package/src/version.mjs +0 -15
|
@@ -1,21 +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 ts from 'typescript';
|
|
9
|
-
export function isNamedClassDeclaration(node) {
|
|
10
|
-
return ts.isClassDeclaration(node) && isIdentifier(node.name);
|
|
11
|
-
}
|
|
12
|
-
export function isNamedFunctionDeclaration(node) {
|
|
13
|
-
return ts.isFunctionDeclaration(node) && isIdentifier(node.name);
|
|
14
|
-
}
|
|
15
|
-
export function isNamedVariableDeclaration(node) {
|
|
16
|
-
return ts.isVariableDeclaration(node) && isIdentifier(node.name);
|
|
17
|
-
}
|
|
18
|
-
function isIdentifier(node) {
|
|
19
|
-
return node !== undefined && ts.isIdentifier(node);
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdqQyxNQUFNLFVBQVUsdUJBQXVCLENBQUMsSUFBYTtJQUVuRCxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsSUFBYTtJQUV0RCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsSUFBYTtJQUV0RCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUF1QjtJQUMzQyxPQUFPLElBQUksS0FBSyxTQUFTLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtDbGFzc0RlY2xhcmF0aW9ufSBmcm9tICcuL2hvc3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOYW1lZENsYXNzRGVjbGFyYXRpb24obm9kZTogdHMuTm9kZSk6XG4gICAgbm9kZSBpcyBDbGFzc0RlY2xhcmF0aW9uPHRzLkNsYXNzRGVjbGFyYXRpb24+IHtcbiAgcmV0dXJuIHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSAmJiBpc0lkZW50aWZpZXIobm9kZS5uYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmFtZWRGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGU6IHRzLk5vZGUpOlxuICAgIG5vZGUgaXMgQ2xhc3NEZWNsYXJhdGlvbjx0cy5GdW5jdGlvbkRlY2xhcmF0aW9uPiB7XG4gIHJldHVybiB0cy5pc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSkgJiYgaXNJZGVudGlmaWVyKG5vZGUubmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkVmFyaWFibGVEZWNsYXJhdGlvbihub2RlOiB0cy5Ob2RlKTpcbiAgICBub2RlIGlzIENsYXNzRGVjbGFyYXRpb248dHMuVmFyaWFibGVEZWNsYXJhdGlvbj4ge1xuICByZXR1cm4gdHMuaXNWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpICYmIGlzSWRlbnRpZmllcihub2RlLm5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc0lkZW50aWZpZXIobm9kZTogdHMuTm9kZXx1bmRlZmluZWQpOiBub2RlIGlzIHRzLklkZW50aWZpZXIge1xuICByZXR1cm4gbm9kZSAhPT0gdW5kZWZpbmVkICYmIHRzLmlzSWRlbnRpZmllcihub2RlKTtcbn1cbiJdfQ==
|
|
@@ -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 { AdapterResourceLoader } from './src/loader';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3Jlc291cmNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQge0FkYXB0ZXJSZXNvdXJjZUxvYWRlcn0gZnJvbSAnLi9zcmMvbG9hZGVyJztcbiJdfQ==
|
|
File without changes
|
|
@@ -1,242 +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 { __awaiter } from "tslib";
|
|
9
|
-
import * as ts from 'typescript';
|
|
10
|
-
import { join } from '../../file_system';
|
|
11
|
-
const CSS_PREPROCESSOR_EXT = /(\.scss|\.sass|\.less|\.styl)$/;
|
|
12
|
-
const RESOURCE_MARKER = '.$ngresource$';
|
|
13
|
-
const RESOURCE_MARKER_TS = RESOURCE_MARKER + '.ts';
|
|
14
|
-
/**
|
|
15
|
-
* `ResourceLoader` which delegates to an `NgCompilerAdapter`'s resource loading methods.
|
|
16
|
-
*/
|
|
17
|
-
export class AdapterResourceLoader {
|
|
18
|
-
constructor(adapter, options) {
|
|
19
|
-
this.adapter = adapter;
|
|
20
|
-
this.options = options;
|
|
21
|
-
this.cache = new Map();
|
|
22
|
-
this.fetching = new Map();
|
|
23
|
-
this.lookupResolutionHost = createLookupResolutionHost(this.adapter);
|
|
24
|
-
this.canPreload = !!this.adapter.readResource;
|
|
25
|
-
this.canPreprocess = !!this.adapter.transformResource;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Resolve the url of a resource relative to the file that contains the reference to it.
|
|
29
|
-
* The return value of this method can be used in the `load()` and `preload()` methods.
|
|
30
|
-
*
|
|
31
|
-
* Uses the provided CompilerHost if it supports mapping resources to filenames.
|
|
32
|
-
* Otherwise, uses a fallback mechanism that searches the module resolution candidates.
|
|
33
|
-
*
|
|
34
|
-
* @param url The, possibly relative, url of the resource.
|
|
35
|
-
* @param fromFile The path to the file that contains the URL of the resource.
|
|
36
|
-
* @returns A resolved url of resource.
|
|
37
|
-
* @throws An error if the resource cannot be resolved.
|
|
38
|
-
*/
|
|
39
|
-
resolve(url, fromFile) {
|
|
40
|
-
let resolvedUrl = null;
|
|
41
|
-
if (this.adapter.resourceNameToFileName) {
|
|
42
|
-
resolvedUrl = this.adapter.resourceNameToFileName(url, fromFile, (url, fromFile) => this.fallbackResolve(url, fromFile));
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
resolvedUrl = this.fallbackResolve(url, fromFile);
|
|
46
|
-
}
|
|
47
|
-
if (resolvedUrl === null) {
|
|
48
|
-
throw new Error(`HostResourceResolver: could not resolve ${url} in context of ${fromFile})`);
|
|
49
|
-
}
|
|
50
|
-
return resolvedUrl;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Preload the specified resource, asynchronously.
|
|
54
|
-
*
|
|
55
|
-
* Once the resource is loaded, its value is cached so it can be accessed synchronously via the
|
|
56
|
-
* `load()` method.
|
|
57
|
-
*
|
|
58
|
-
* @param resolvedUrl The url (resolved by a call to `resolve()`) of the resource to preload.
|
|
59
|
-
* @param context Information about the resource such as the type and containing file.
|
|
60
|
-
* @returns A Promise that is resolved once the resource has been loaded or `undefined` if the
|
|
61
|
-
* file has already been loaded.
|
|
62
|
-
* @throws An Error if pre-loading is not available.
|
|
63
|
-
*/
|
|
64
|
-
preload(resolvedUrl, context) {
|
|
65
|
-
if (!this.adapter.readResource) {
|
|
66
|
-
throw new Error('HostResourceLoader: the CompilerHost provided does not support pre-loading resources.');
|
|
67
|
-
}
|
|
68
|
-
if (this.cache.has(resolvedUrl)) {
|
|
69
|
-
return undefined;
|
|
70
|
-
}
|
|
71
|
-
else if (this.fetching.has(resolvedUrl)) {
|
|
72
|
-
return this.fetching.get(resolvedUrl);
|
|
73
|
-
}
|
|
74
|
-
let result = this.adapter.readResource(resolvedUrl);
|
|
75
|
-
if (this.adapter.transformResource && context.type === 'style') {
|
|
76
|
-
const resourceContext = {
|
|
77
|
-
type: 'style',
|
|
78
|
-
containingFile: context.containingFile,
|
|
79
|
-
resourceFile: resolvedUrl,
|
|
80
|
-
};
|
|
81
|
-
result = Promise.resolve(result).then((str) => __awaiter(this, void 0, void 0, function* () {
|
|
82
|
-
const transformResult = yield this.adapter.transformResource(str, resourceContext);
|
|
83
|
-
return transformResult === null ? str : transformResult.content;
|
|
84
|
-
}));
|
|
85
|
-
}
|
|
86
|
-
if (typeof result === 'string') {
|
|
87
|
-
this.cache.set(resolvedUrl, result);
|
|
88
|
-
return undefined;
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
const fetchCompletion = result.then(str => {
|
|
92
|
-
this.fetching.delete(resolvedUrl);
|
|
93
|
-
this.cache.set(resolvedUrl, str);
|
|
94
|
-
});
|
|
95
|
-
this.fetching.set(resolvedUrl, fetchCompletion);
|
|
96
|
-
return fetchCompletion;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Preprocess the content data of an inline resource, asynchronously.
|
|
101
|
-
*
|
|
102
|
-
* @param data The existing content data from the inline resource.
|
|
103
|
-
* @param context Information regarding the resource such as the type and containing file.
|
|
104
|
-
* @returns A Promise that resolves to the processed data. If no processing occurs, the
|
|
105
|
-
* same data string that was passed to the function will be resolved.
|
|
106
|
-
*/
|
|
107
|
-
preprocessInline(data, context) {
|
|
108
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
-
if (!this.adapter.transformResource || context.type !== 'style') {
|
|
110
|
-
return data;
|
|
111
|
-
}
|
|
112
|
-
const transformResult = yield this.adapter.transformResource(data, { type: 'style', containingFile: context.containingFile, resourceFile: null });
|
|
113
|
-
if (transformResult === null) {
|
|
114
|
-
return data;
|
|
115
|
-
}
|
|
116
|
-
return transformResult.content;
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Load the resource at the given url, synchronously.
|
|
121
|
-
*
|
|
122
|
-
* The contents of the resource may have been cached by a previous call to `preload()`.
|
|
123
|
-
*
|
|
124
|
-
* @param resolvedUrl The url (resolved by a call to `resolve()`) of the resource to load.
|
|
125
|
-
* @returns The contents of the resource.
|
|
126
|
-
*/
|
|
127
|
-
load(resolvedUrl) {
|
|
128
|
-
if (this.cache.has(resolvedUrl)) {
|
|
129
|
-
return this.cache.get(resolvedUrl);
|
|
130
|
-
}
|
|
131
|
-
const result = this.adapter.readResource ? this.adapter.readResource(resolvedUrl) :
|
|
132
|
-
this.adapter.readFile(resolvedUrl);
|
|
133
|
-
if (typeof result !== 'string') {
|
|
134
|
-
throw new Error(`HostResourceLoader: loader(${resolvedUrl}) returned a Promise`);
|
|
135
|
-
}
|
|
136
|
-
this.cache.set(resolvedUrl, result);
|
|
137
|
-
return result;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Invalidate the entire resource cache.
|
|
141
|
-
*/
|
|
142
|
-
invalidate() {
|
|
143
|
-
this.cache.clear();
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Attempt to resolve `url` in the context of `fromFile`, while respecting the rootDirs
|
|
147
|
-
* option from the tsconfig. First, normalize the file name.
|
|
148
|
-
*/
|
|
149
|
-
fallbackResolve(url, fromFile) {
|
|
150
|
-
let candidateLocations;
|
|
151
|
-
if (url.startsWith('/')) {
|
|
152
|
-
// This path is not really an absolute path, but instead the leading '/' means that it's
|
|
153
|
-
// rooted in the project rootDirs. So look for it according to the rootDirs.
|
|
154
|
-
candidateLocations = this.getRootedCandidateLocations(url);
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
// This path is a "relative" path and can be resolved as such. To make this easier on the
|
|
158
|
-
// downstream resolver, the './' prefix is added if missing to distinguish these paths from
|
|
159
|
-
// absolute node_modules paths.
|
|
160
|
-
if (!url.startsWith('.')) {
|
|
161
|
-
url = `./${url}`;
|
|
162
|
-
}
|
|
163
|
-
candidateLocations = this.getResolvedCandidateLocations(url, fromFile);
|
|
164
|
-
}
|
|
165
|
-
for (const candidate of candidateLocations) {
|
|
166
|
-
if (this.adapter.fileExists(candidate)) {
|
|
167
|
-
return candidate;
|
|
168
|
-
}
|
|
169
|
-
else if (CSS_PREPROCESSOR_EXT.test(candidate)) {
|
|
170
|
-
/**
|
|
171
|
-
* If the user specified styleUrl points to *.scss, but the Sass compiler was run before
|
|
172
|
-
* Angular, then the resource may have been generated as *.css. Simply try the resolution
|
|
173
|
-
* again.
|
|
174
|
-
*/
|
|
175
|
-
const cssFallbackUrl = candidate.replace(CSS_PREPROCESSOR_EXT, '.css');
|
|
176
|
-
if (this.adapter.fileExists(cssFallbackUrl)) {
|
|
177
|
-
return cssFallbackUrl;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return null;
|
|
182
|
-
}
|
|
183
|
-
getRootedCandidateLocations(url) {
|
|
184
|
-
// The path already starts with '/', so add a '.' to make it relative.
|
|
185
|
-
const segment = ('.' + url);
|
|
186
|
-
return this.adapter.rootDirs.map(rootDir => join(rootDir, segment));
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* TypeScript provides utilities to resolve module names, but not resource files (which aren't
|
|
190
|
-
* a part of the ts.Program). However, TypeScript's module resolution can be used creatively
|
|
191
|
-
* to locate where resource files should be expected to exist. Since module resolution returns
|
|
192
|
-
* a list of file names that were considered, the loader can enumerate the possible locations
|
|
193
|
-
* for the file by setting up a module resolution for it that will fail.
|
|
194
|
-
*/
|
|
195
|
-
getResolvedCandidateLocations(url, fromFile) {
|
|
196
|
-
// clang-format off
|
|
197
|
-
const failedLookup = ts.resolveModuleName(url + RESOURCE_MARKER, fromFile, this.options, this.lookupResolutionHost);
|
|
198
|
-
// clang-format on
|
|
199
|
-
if (failedLookup.failedLookupLocations === undefined) {
|
|
200
|
-
throw new Error(`Internal error: expected to find failedLookupLocations during resolution of resource '${url}' in context of ${fromFile}`);
|
|
201
|
-
}
|
|
202
|
-
return failedLookup.failedLookupLocations
|
|
203
|
-
.filter(candidate => candidate.endsWith(RESOURCE_MARKER_TS))
|
|
204
|
-
.map(candidate => candidate.slice(0, -RESOURCE_MARKER_TS.length));
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Derives a `ts.ModuleResolutionHost` from a compiler adapter that recognizes the special resource
|
|
209
|
-
* marker and does not go to the filesystem for these requests, as they are known not to exist.
|
|
210
|
-
*/
|
|
211
|
-
function createLookupResolutionHost(adapter) {
|
|
212
|
-
var _a, _b, _c;
|
|
213
|
-
return {
|
|
214
|
-
directoryExists(directoryName) {
|
|
215
|
-
if (directoryName.includes(RESOURCE_MARKER)) {
|
|
216
|
-
return false;
|
|
217
|
-
}
|
|
218
|
-
else if (adapter.directoryExists !== undefined) {
|
|
219
|
-
return adapter.directoryExists(directoryName);
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
// TypeScript's module resolution logic assumes that the directory exists when no host
|
|
223
|
-
// implementation is available.
|
|
224
|
-
return true;
|
|
225
|
-
}
|
|
226
|
-
},
|
|
227
|
-
fileExists(fileName) {
|
|
228
|
-
if (fileName.includes(RESOURCE_MARKER)) {
|
|
229
|
-
return false;
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
return adapter.fileExists(fileName);
|
|
233
|
-
}
|
|
234
|
-
},
|
|
235
|
-
readFile: adapter.readFile.bind(adapter),
|
|
236
|
-
getCurrentDirectory: adapter.getCurrentDirectory.bind(adapter),
|
|
237
|
-
getDirectories: (_a = adapter.getDirectories) === null || _a === void 0 ? void 0 : _a.bind(adapter),
|
|
238
|
-
realpath: (_b = adapter.realpath) === null || _b === void 0 ? void 0 : _b.bind(adapter),
|
|
239
|
-
trace: (_c = adapter.trace) === null || _c === void 0 ? void 0 : _c.bind(adapter),
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9yZXNvdXJjZS9zcmMvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUlqQyxPQUFPLEVBQWlCLElBQUksRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBR3BFLE1BQU0sb0JBQW9CLEdBQUcsZ0NBQWdDLENBQUM7QUFFOUQsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUVuRDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFRaEMsWUFBb0IsT0FBMEIsRUFBVSxPQUEyQjtRQUEvRCxZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBUDNFLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNsQyxhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7UUFDNUMseUJBQW9CLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhFLGVBQVUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDekMsa0JBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUVxQyxDQUFDO0lBRXZGOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsT0FBTyxDQUFDLEdBQVcsRUFBRSxRQUFnQjtRQUNuQyxJQUFJLFdBQVcsR0FBZ0IsSUFBSSxDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtZQUN2QyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8s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RUFBRTtnQkFDdEMsT0FBTyxLQUFLLENBQUM7YUFDZDtpQkFBTTtnQkFDTCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDckM7UUFDSCxDQUFDO1FBQ0QsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM5RCxjQUFjLEVBQUUsTUFBQSxPQUFPLENBQUMsY0FBYywwQ0FBRSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3JELFFBQVEsRUFBRSxNQUFBLE9BQU8sQ0FBQyxRQUFRLDBDQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDekMsS0FBSyxFQUFFLE1BQUEsT0FBTyxDQUFDLEtBQUssMENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztLQUNwQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtSZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VMb2FkZXJDb250ZXh0fSBmcm9tICcuLi8uLi9hbm5vdGF0aW9ucyc7XG5pbXBvcnQge05nQ29tcGlsZXJBZGFwdGVyLCBSZXNvdXJjZUhvc3RDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2FwaSc7XG5pbXBvcnQge0Fic29sdXRlRnNQYXRoLCBqb2luLCBQYXRoU2VnbWVudH0gZnJvbSAnLi4vLi4vZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtSZXF1aXJlZERlbGVnYXRpb25zfSBmcm9tICcuLi8uLi91dGlsL3NyYy90eXBlc2NyaXB0JztcblxuY29uc3QgQ1NTX1BSRVBST0NFU1NPUl9FWFQgPSAvKFxcLnNjc3N8XFwuc2Fzc3xcXC5sZXNzfFxcLnN0eWwpJC87XG5cbmNvbnN0IFJFU09VUkNFX01BUktFUiA9ICcuJG5ncmVzb3VyY2UkJztcbmNvbnN0IFJFU09VUkNFX01BUktFUl9UUyA9IFJFU09VUkNFX01BUktFUiArICcudHMnO1xuXG4vKipcbiAqIGBSZXNvdXJjZUxvYWRlcmAgd2hpY2ggZGVsZWdhdGVzIHRvIGFuIGBOZ0NvbXBpbGVyQWRhcHRlcmAncyByZXNvdXJjZSBsb2FkaW5nIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBZGFwdGVyUmVzb3VyY2VMb2FkZXIgaW1wbGVtZW50cyBSZXNvdXJjZUxvYWRlciB7XG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIGZldGNoaW5nID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG4gIHByaXZhdGUgbG9va3VwUmVzb2x1dGlvbkhvc3QgPSBjcmVhdGVMb29rdXBSZXNvbHV0aW9uSG9zdCh0aGlzLmFkYXB0ZXIpO1xuXG4gIGNhblByZWxvYWQgPSAhIXRoaXMuYWRhcHRlci5yZWFkUmVzb3VyY2U7XG4gIGNhblByZXByb2Nlc3MgPSAhIXRoaXMuYWRhcHRlci50cmFuc2Zvcm1SZXNvdXJjZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFkYXB0ZXI6IE5nQ29tcGlsZXJBZGFwdGVyLCBwcml2YXRlIG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucykge31cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgdXJsIG9mIGEgcmVzb3VyY2UgcmVsYXRpdmUgdG8gdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgcmVmZXJlbmNlIHRvIGl0LlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGluIHRoZSBgbG9hZCgpYCBhbmQgYHByZWxvYWQoKWAgbWV0aG9kcy5cbiAgICpcbiAgICogVXNlcyB0aGUgcHJvdmlkZWQgQ29tcGlsZXJIb3N0IGlmIGl0IHN1cHBvcnRzIG1hcHBpbmcgcmVzb3VyY2VzIHRvIGZpbGVuYW1lcy5cbiAgICogT3RoZXJ3aXNlLCB1c2VzIGEgZmFsbGJhY2sgbWVjaGFuaXNtIHRoYXQgc2VhcmNoZXMgdGhlIG1vZHVsZSByZXNvbHV0aW9uIGNhbmRpZGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB1cmwgVGhlLCBwb3NzaWJseSByZWxhdGl2ZSwgdXJsIG9mIHRoZSByZXNvdXJjZS5cbiAgICogQHBhcmFtIGZyb21GaWxlIFRoZSBwYXRoIHRvIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIFVSTCBvZiB0aGUgcmVzb3VyY2UuXG4gICAqIEByZXR1cm5zIEEgcmVzb2x2ZWQgdXJsIG9mIHJlc291cmNlLlxuICAgKiBAdGhyb3dzIEFuIGVycm9yIGlmIHRoZSByZXNvdXJjZSBjYW5ub3QgYmUgcmVzb2x2ZWQuXG4gICAqL1xuICByZXNvbHZlKHVybDogc3RyaW5nLCBmcm9tRmlsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzb2x2ZWRVcmw6IHN0cmluZ3xudWxsID0gbnVsbDtcbiAgICBpZiAodGhpcy5hZGFwdGVyLnJlc291cmNlTmFtZVRvRmlsZU5hbWUpIHtcbiAgICAgIHJlc29sdmVkVXJsID0gdGhpcy5hZGFwdGVyLnJlc291cmNlTmFtZVRvRmlsZU5hbWUoXG4gICAgICAgICAgdXJsLCBmcm9tRmlsZSwgKHVybDogc3RyaW5nLCBmcm9tRmlsZTogc3RyaW5nKSA9PiB0aGlzLmZhbGxiYWNrUmVzb2x2ZSh1cmwsIGZyb21GaWxlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVkVXJsID0gdGhpcy5mYWxsYmFja1Jlc29sdmUodXJsLCBmcm9tRmlsZSk7XG4gICAgfVxuICAgIGlmIChyZXNvbHZlZFVybCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIb3N0UmVzb3VyY2VSZXNvbHZlcjogY291bGQgbm90IHJlc29sdmUgJHt1cmx9IGluIGNvbnRleHQgb2YgJHtmcm9tRmlsZX0pYCk7XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlZFVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVsb2FkIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UsIGFzeW5jaHJvbm91c2x5LlxuICAgKlxuICAgKiBPbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQsIGl0cyB2YWx1ZSBpcyBjYWNoZWQgc28gaXQgY2FuIGJlIGFjY2Vzc2VkIHN5bmNocm9ub3VzbHkgdmlhIHRoZVxuICAgKiBgbG9hZCgpYCBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSByZXNvbHZlZFVybCBUaGUgdXJsIChyZXNvbHZlZCBieSBhIGNhbGwgdG8gYHJlc29sdmUoKWApIG9mIHRoZSByZXNvdXJjZSB0byBwcmVsb2FkLlxuICAgKiBAcGFyYW0gY29udGV4dCBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVzb3VyY2Ugc3VjaCBhcyB0aGUgdHlwZSBhbmQgY29udGFpbmluZyBmaWxlLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBvbmNlIHRoZSByZXNvdXJjZSBoYXMgYmVlbiBsb2FkZWQgb3IgYHVuZGVmaW5lZGAgaWYgdGhlXG4gICAqIGZpbGUgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuXG4gICAqIEB0aHJvd3MgQW4gRXJyb3IgaWYgcHJlLWxvYWRpbmcgaXMgbm90IGF2YWlsYWJsZS5cbiAgICovXG4gIHByZWxvYWQocmVzb2x2ZWRVcmw6IHN0cmluZywgY29udGV4dDogUmVzb3VyY2VMb2FkZXJDb250ZXh0KTogUHJvbWlzZTx2b2lkPnx1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5hZGFwdGVyLnJlYWRSZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdIb3N0UmVzb3VyY2VMb2FkZXI6IHRoZSBDb21waWxlckhvc3QgcHJvdmlkZWQgZG9lcyBub3Qgc3VwcG9ydCBwcmUtbG9hZGluZyByZXNvdXJjZXMuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhyZXNvbHZlZFVybCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZldGNoaW5nLmhhcyhyZXNvbHZlZFVybCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoaW5nLmdldChyZXNvbHZlZFVybCk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuYWRhcHRlci5yZWFkUmVzb3VyY2UocmVzb2x2ZWRVcmwpO1xuXG4gICAgaWYgKHRoaXMuYWRhcHRlci50cmFuc2Zvcm1SZXNvdXJjZSAmJiBjb250ZXh0LnR5cGUgPT09ICdzdHlsZScpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlQ29udGV4dDogUmVzb3VyY2VIb3N0Q29udGV4dCA9IHtcbiAgICAgICAgdHlwZTogJ3N0eWxlJyxcbiAgICAgICAgY29udGFpbmluZ0ZpbGU6IGNvbnRleHQuY29udGFpbmluZ0ZpbGUsXG4gICAgICAgIHJlc291cmNlRmlsZTogcmVzb2x2ZWRVcmwsXG4gICAgICB9O1xuICAgICAgcmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihhc3luYyAoc3RyKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVJlc3VsdCA9IGF3YWl0IHRoaXMuYWRhcHRlci50cmFuc2Zvcm1SZXNvdXJjZSEoc3RyLCByZXNvdXJjZUNvbnRleHQpO1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtUmVzdWx0ID09PSBudWxsID8gc3RyIDogdHJhbnNmb3JtUmVzdWx0LmNvbnRlbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuY2FjaGUuc2V0KHJlc29sdmVkVXJsLCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmV0Y2hDb21wbGV0aW9uID0gcmVzdWx0LnRoZW4oc3RyID0+IHtcbiAgICAgICAgdGhpcy5mZXRjaGluZy5kZWxldGUocmVzb2x2ZWRVcmwpO1xuICAgICAgICB0aGlzLmNhY2hlLnNldChyZXNvbHZlZFVybCwgc3RyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mZXRjaGluZy5zZXQocmVzb2x2ZWRVcmwsIGZldGNoQ29tcGxldGlvbik7XG4gICAgICByZXR1cm4gZmV0Y2hDb21wbGV0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwcm9jZXNzIHRoZSBjb250ZW50IGRhdGEgb2YgYW4gaW5saW5lIHJlc291cmNlLCBhc3luY2hyb25vdXNseS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIGV4aXN0aW5nIGNvbnRlbnQgZGF0YSBmcm9tIHRoZSBpbmxpbmUgcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBjb250ZXh0IEluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgcmVzb3VyY2Ugc3VjaCBhcyB0aGUgdHlwZSBhbmQgY29udGFpbmluZyBmaWxlLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcHJvY2Vzc2VkIGRhdGEuIElmIG5vIHByb2Nlc3Npbmcgb2NjdXJzLCB0aGVcbiAgICogc2FtZSBkYXRhIHN0cmluZyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIHdpbGwgYmUgcmVzb2x2ZWQuXG4gICAqL1xuICBhc3luYyBwcmVwcm9jZXNzSW5saW5lKGRhdGE6IHN0cmluZywgY29udGV4dDogUmVzb3VyY2VMb2FkZXJDb250ZXh0KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuYWRhcHRlci50cmFuc2Zvcm1SZXNvdXJjZSB8fCBjb250ZXh0LnR5cGUgIT09ICdzdHlsZScpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybVJlc3VsdCA9IGF3YWl0IHRoaXMuYWRhcHRlci50cmFuc2Zvcm1SZXNvdXJjZShcbiAgICAgICAgZGF0YSwge3R5cGU6ICdzdHlsZScsIGNvbnRhaW5pbmdGaWxlOiBjb250ZXh0LmNvbnRhaW5pbmdGaWxlLCByZXNvdXJjZUZpbGU6IG51bGx9KTtcbiAgICBpZiAodHJhbnNmb3JtUmVzdWx0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtUmVzdWx0LmNvbnRlbnQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgcmVzb3VyY2UgYXQgdGhlIGdpdmVuIHVybCwgc3luY2hyb25vdXNseS5cbiAgICpcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSBtYXkgaGF2ZSBiZWVuIGNhY2hlZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gYHByZWxvYWQoKWAuXG4gICAqXG4gICAqIEBwYXJhbSByZXNvbHZlZFVybCBUaGUgdXJsIChyZXNvbHZlZCBieSBhIGNhbGwgdG8gYHJlc29sdmUoKWApIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICAgKiBAcmV0dXJucyBUaGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlLlxuICAgKi9cbiAgbG9hZChyZXNvbHZlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jYWNoZS5oYXMocmVzb2x2ZWRVcmwpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQocmVzb2x2ZWRVcmwpITtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmFkYXB0ZXIucmVhZFJlc291cmNlID8gdGhpcy5hZGFwdGVyLnJlYWRSZXNvdXJjZShyZXNvbHZlZFVybCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIucmVhZEZpbGUocmVzb2x2ZWRVcmwpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIb3N0UmVzb3VyY2VMb2FkZXI6IGxvYWRlcigke3Jlc29sdmVkVXJsfSkgcmV0dXJuZWQgYSBQcm9taXNlYCk7XG4gICAgfVxuICAgIHRoaXMuY2FjaGUuc2V0KHJlc29sdmVkVXJsLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogSW52YWxpZGF0ZSB0aGUgZW50aXJlIHJlc291cmNlIGNhY2hlLlxuICAgKi9cbiAgaW52YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byByZXNvbHZlIGB1cmxgIGluIHRoZSBjb250ZXh0IG9mIGBmcm9tRmlsZWAsIHdoaWxlIHJlc3BlY3RpbmcgdGhlIHJvb3REaXJzXG4gICAqIG9wdGlvbiBmcm9tIHRoZSB0c2NvbmZpZy4gRmlyc3QsIG5vcm1hbGl6ZSB0aGUgZmlsZSBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBmYWxsYmFja1Jlc29sdmUodXJsOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBzdHJpbmd8bnVsbCB7XG4gICAgbGV0IGNhbmRpZGF0ZUxvY2F0aW9uczogc3RyaW5nW107XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIC8vIFRoaXMgcGF0aCBpcyBub3QgcmVhbGx5IGFuIGFic29sdXRlIHBhdGgsIGJ1dCBpbnN0ZWFkIHRoZSBsZWFkaW5nICcvJyBtZWFucyB0aGF0IGl0J3NcbiAgICAgIC8vIHJvb3RlZCBpbiB0aGUgcHJvamVjdCByb290RGlycy4gU28gbG9vayBmb3IgaXQgYWNjb3JkaW5nIHRvIHRoZSByb290RGlycy5cbiAgICAgIGNhbmRpZGF0ZUxvY2F0aW9ucyA9IHRoaXMuZ2V0Um9vdGVkQ2FuZGlkYXRlTG9jYXRpb25zKHVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgcGF0aCBpcyBhIFwicmVsYXRpdmVcIiBwYXRoIGFuZCBjYW4gYmUgcmVzb2x2ZWQgYXMgc3VjaC4gVG8gbWFrZSB0aGlzIGVhc2llciBvbiB0aGVcbiAgICAgIC8vIGRvd25zdHJlYW0gcmVzb2x2ZXIsIHRoZSAnLi8nIHByZWZpeCBpcyBhZGRlZCBpZiBtaXNzaW5nIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIHBhdGhzIGZyb21cbiAgICAgIC8vIGFic29sdXRlIG5vZGVfbW9kdWxlcyBwYXRocy5cbiAgICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICB1cmwgPSBgLi8ke3VybH1gO1xuICAgICAgfVxuICAgICAgY2FuZGlkYXRlTG9jYXRpb25zID0gdGhpcy5nZXRSZXNvbHZlZENhbmRpZGF0ZUxvY2F0aW9ucyh1cmwsIGZyb21GaWxlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVMb2NhdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLmFkYXB0ZXIuZmlsZUV4aXN0cyhjYW5kaWRhdGUpKSB7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgICB9IGVsc2UgaWYgKENTU19QUkVQUk9DRVNTT1JfRVhULnRlc3QoY2FuZGlkYXRlKSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHVzZXIgc3BlY2lmaWVkIHN0eWxlVXJsIHBvaW50cyB0byAqLnNjc3MsIGJ1dCB0aGUgU2FzcyBjb21waWxlciB3YXMgcnVuIGJlZm9yZVxuICAgICAgICAgKiBBbmd1bGFyLCB0aGVuIHRoZSByZXNvdXJjZSBtYXkgaGF2ZSBiZWVuIGdlbmVyYXRlZCBhcyAqLmNzcy4gU2ltcGx5IHRyeSB0aGUgcmVzb2x1dGlvblxuICAgICAgICAgKiBhZ2Fpbi5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGNzc0ZhbGxiYWNrVXJsID0gY2FuZGlkYXRlLnJlcGxhY2UoQ1NTX1BSRVBST0NFU1NPUl9FWFQsICcuY3NzJyk7XG4gICAgICAgIGlmICh0aGlzLmFkYXB0ZXIuZmlsZUV4aXN0cyhjc3NGYWxsYmFja1VybCkpIHtcbiAgICAgICAgICByZXR1cm4gY3NzRmFsbGJhY2tVcmw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvb3RlZENhbmRpZGF0ZUxvY2F0aW9ucyh1cmw6IHN0cmluZyk6IEFic29sdXRlRnNQYXRoW10ge1xuICAgIC8vIFRoZSBwYXRoIGFscmVhZHkgc3RhcnRzIHdpdGggJy8nLCBzbyBhZGQgYSAnLicgdG8gbWFrZSBpdCByZWxhdGl2ZS5cbiAgICBjb25zdCBzZWdtZW50OiBQYXRoU2VnbWVudCA9ICgnLicgKyB1cmwpIGFzIFBhdGhTZWdtZW50O1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucm9vdERpcnMubWFwKHJvb3REaXIgPT4gam9pbihyb290RGlyLCBzZWdtZW50KSk7XG4gIH1cblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBwcm92aWRlcyB1dGlsaXRpZXMgdG8gcmVzb2x2ZSBtb2R1bGUgbmFtZXMsIGJ1dCBub3QgcmVzb3VyY2UgZmlsZXMgKHdoaWNoIGFyZW4ndFxuICAgKiBhIHBhcnQgb2YgdGhlIHRzLlByb2dyYW0pLiBIb3dldmVyLCBUeXBlU2NyaXB0J3MgbW9kdWxlIHJlc29sdXRpb24gY2FuIGJlIHVzZWQgY3JlYXRpdmVseVxuICAgKiB0byBsb2NhdGUgd2hlcmUgcmVzb3VyY2UgZmlsZXMgc2hvdWxkIGJlIGV4cGVjdGVkIHRvIGV4aXN0LiBTaW5jZSBtb2R1bGUgcmVzb2x1dGlvbiByZXR1cm5zXG4gICAqIGEgbGlzdCBvZiBmaWxlIG5hbWVzIHRoYXQgd2VyZSBjb25zaWRlcmVkLCB0aGUgbG9hZGVyIGNhbiBlbnVtZXJhdGUgdGhlIHBvc3NpYmxlIGxvY2F0aW9uc1xuICAgKiBmb3IgdGhlIGZpbGUgYnkgc2V0dGluZyB1cCBhIG1vZHVsZSByZXNvbHV0aW9uIGZvciBpdCB0aGF0IHdpbGwgZmFpbC5cbiAgICovXG4gIHByaXZhdGUgZ2V0UmVzb2x2ZWRDYW5kaWRhdGVMb2NhdGlvbnModXJsOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gYGZhaWxlZExvb2t1cExvY2F0aW9uc2AgaXMgaW4gdGhlIG5hbWUgb2YgdGhlIHR5cGUgdHMuUmVzb2x2ZWRNb2R1bGVXaXRoRmFpbGVkTG9va3VwTG9jYXRpb25zXG4gICAgLy8gYnV0IGlzIG1hcmtlZCBAaW50ZXJuYWwgaW4gVHlwZVNjcmlwdC4gU2VlXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yODc3MC5cbiAgICB0eXBlIFJlc29sdmVkTW9kdWxlV2l0aEZhaWxlZExvb2t1cExvY2F0aW9ucyA9XG4gICAgICAgIHRzLlJlc29sdmVkTW9kdWxlV2l0aEZhaWxlZExvb2t1cExvY2F0aW9ucyZ7ZmFpbGVkTG9va3VwTG9jYXRpb25zOiBSZWFkb25seUFycmF5PHN0cmluZz59O1xuXG4gICAgLy8gY2xhbmctZm9ybWF0IG9mZlxuICAgIGNvbnN0IGZhaWxlZExvb2t1cCA9IHRzLnJlc29sdmVNb2R1bGVOYW1lKHVybCArIFJFU09VUkNFX01BUktFUiwgZnJvbUZpbGUsIHRoaXMub3B0aW9ucywgdGhpcy5sb29rdXBSZXNvbHV0aW9uSG9zdCkgYXMgUmVzb2x2ZWRNb2R1bGVXaXRoRmFpbGVkTG9va3VwTG9jYXRpb25zO1xuICAgIC8vIGNsYW5nLWZvcm1hdCBvblxuICAgIGlmIChmYWlsZWRMb29rdXAuZmFpbGVkTG9va3VwTG9jYXRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIHRvIGZpbmQgZmFpbGVkTG9va3VwTG9jYXRpb25zIGR1cmluZyByZXNvbHV0aW9uIG9mIHJlc291cmNlICcke1xuICAgICAgICAgICAgICB1cmx9JyBpbiBjb250ZXh0IG9mICR7ZnJvbUZpbGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhaWxlZExvb2t1cC5mYWlsZWRMb29rdXBMb2NhdGlvbnNcbiAgICAgICAgLmZpbHRlcihjYW5kaWRhdGUgPT4gY2FuZGlkYXRlLmVuZHNXaXRoKFJFU09VUkNFX01BUktFUl9UUykpXG4gICAgICAgIC5tYXAoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5zbGljZSgwLCAtUkVTT1VSQ0VfTUFSS0VSX1RTLmxlbmd0aCkpO1xuICB9XG59XG5cbi8qKlxuICogRGVyaXZlcyBhIGB0cy5Nb2R1bGVSZXNvbHV0aW9uSG9zdGAgZnJvbSBhIGNvbXBpbGVyIGFkYXB0ZXIgdGhhdCByZWNvZ25pemVzIHRoZSBzcGVjaWFsIHJlc291cmNlXG4gKiBtYXJrZXIgYW5kIGRvZXMgbm90IGdvIHRvIHRoZSBmaWxlc3lzdGVtIGZvciB0aGVzZSByZXF1ZXN0cywgYXMgdGhleSBhcmUga25vd24gbm90IHRvIGV4aXN0LlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb29rdXBSZXNvbHV0aW9uSG9zdChhZGFwdGVyOiBOZ0NvbXBpbGVyQWRhcHRlcik6XG4gICAgUmVxdWlyZWREZWxlZ2F0aW9uczx0cy5Nb2R1bGVSZXNvbHV0aW9uSG9zdD4ge1xuICByZXR1cm4ge1xuICAgIGRpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIGlmIChkaXJlY3RvcnlOYW1lLmluY2x1ZGVzKFJFU09VUkNFX01BUktFUikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChhZGFwdGVyLmRpcmVjdG9yeUV4aXN0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmRpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnlOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFR5cGVTY3JpcHQncyBtb2R1bGUgcmVzb2x1dGlvbiBsb2dpYyBhc3N1bWVzIHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHMgd2hlbiBubyBob3N0XG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZS5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBmaWxlRXhpc3RzKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhSRVNPVVJDRV9NQVJLRVIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmZpbGVFeGlzdHMoZmlsZU5hbWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVhZEZpbGU6IGFkYXB0ZXIucmVhZEZpbGUuYmluZChhZGFwdGVyKSxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiBhZGFwdGVyLmdldEN1cnJlbnREaXJlY3RvcnkuYmluZChhZGFwdGVyKSxcbiAgICBnZXREaXJlY3RvcmllczogYWRhcHRlci5nZXREaXJlY3Rvcmllcz8uYmluZChhZGFwdGVyKSxcbiAgICByZWFscGF0aDogYWRhcHRlci5yZWFscGF0aD8uYmluZChhZGFwdGVyKSxcbiAgICB0cmFjZTogYWRhcHRlci50cmFjZT8uYmluZChhZGFwdGVyKSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,11 +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
|
-
/// <reference types="node" />
|
|
9
|
-
export { NgModuleRouteAnalyzer } from './src/analyzer';
|
|
10
|
-
export { entryPointKeyFor } from './src/route';
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3JvdXRpbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsOEJBQThCO0FBRTlCLE9BQU8sRUFBWSxxQkFBcUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cIm5vZGVcIiAvPlxuXG5leHBvcnQge0xhenlSb3V0ZSwgTmdNb2R1bGVSb3V0ZUFuYWx5emVyfSBmcm9tICcuL3NyYy9hbmFseXplcic7XG5leHBvcnQge2VudHJ5UG9pbnRLZXlGb3J9IGZyb20gJy4vc3JjL3JvdXRlJztcbiJdfQ==
|
|
File without changes
|
|
@@ -1,69 +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 { scanForCandidateTransitiveModules, scanForRouteEntryPoints } from './lazy';
|
|
9
|
-
import { entryPointKeyFor, RouterEntryPointManager } from './route';
|
|
10
|
-
export class NgModuleRouteAnalyzer {
|
|
11
|
-
constructor(moduleResolver, evaluator) {
|
|
12
|
-
this.evaluator = evaluator;
|
|
13
|
-
this.modules = new Map();
|
|
14
|
-
this.entryPointManager = new RouterEntryPointManager(moduleResolver);
|
|
15
|
-
}
|
|
16
|
-
add(sourceFile, moduleName, imports, exports, providers) {
|
|
17
|
-
const key = entryPointKeyFor(sourceFile.fileName, moduleName);
|
|
18
|
-
if (this.modules.has(key)) {
|
|
19
|
-
throw new Error(`Double route analyzing for '${key}'.`);
|
|
20
|
-
}
|
|
21
|
-
this.modules.set(key, {
|
|
22
|
-
sourceFile,
|
|
23
|
-
moduleName,
|
|
24
|
-
imports,
|
|
25
|
-
exports,
|
|
26
|
-
providers,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
listLazyRoutes(entryModuleKey) {
|
|
30
|
-
if ((entryModuleKey !== undefined) && !this.modules.has(entryModuleKey)) {
|
|
31
|
-
throw new Error(`Failed to list lazy routes: Unknown module '${entryModuleKey}'.`);
|
|
32
|
-
}
|
|
33
|
-
const routes = [];
|
|
34
|
-
const scannedModuleKeys = new Set();
|
|
35
|
-
const pendingModuleKeys = entryModuleKey ? [entryModuleKey] : Array.from(this.modules.keys());
|
|
36
|
-
// When listing lazy routes for a specific entry module, we need to recursively extract
|
|
37
|
-
// "transitive" routes from imported/exported modules. This is not necessary when listing all
|
|
38
|
-
// lazy routes, because all analyzed modules will be scanned anyway.
|
|
39
|
-
const scanRecursively = entryModuleKey !== undefined;
|
|
40
|
-
while (pendingModuleKeys.length > 0) {
|
|
41
|
-
const key = pendingModuleKeys.pop();
|
|
42
|
-
if (scannedModuleKeys.has(key)) {
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
scannedModuleKeys.add(key);
|
|
47
|
-
}
|
|
48
|
-
const data = this.modules.get(key);
|
|
49
|
-
const entryPoints = scanForRouteEntryPoints(data.sourceFile, data.moduleName, data, this.entryPointManager, this.evaluator);
|
|
50
|
-
routes.push(...entryPoints.map(entryPoint => ({
|
|
51
|
-
route: entryPoint.loadChildren,
|
|
52
|
-
module: entryPoint.from,
|
|
53
|
-
referencedModule: entryPoint.resolvedTo,
|
|
54
|
-
})));
|
|
55
|
-
if (scanRecursively) {
|
|
56
|
-
pendingModuleKeys.push(...[
|
|
57
|
-
// Scan the retrieved lazy route entry points.
|
|
58
|
-
...entryPoints.map(({ resolvedTo }) => entryPointKeyFor(resolvedTo.filePath, resolvedTo.moduleName)),
|
|
59
|
-
// Scan the current module's imported modules.
|
|
60
|
-
...scanForCandidateTransitiveModules(data.imports, this.evaluator),
|
|
61
|
-
// Scan the current module's exported modules.
|
|
62
|
-
...scanForCandidateTransitiveModules(data.exports, this.evaluator),
|
|
63
|
-
].filter(key => this.modules.has(key)));
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return routes;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3JvdXRpbmcvc3JjL2FuYWx5emVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQU9ILE9BQU8sRUFBQyxpQ0FBaUMsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUNsRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFnQmxFLE1BQU0sT0FBTyxxQkFBcUI7SUFJaEMsWUFBWSxjQUE4QixFQUFVLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBSHZFLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztRQUl4RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsR0FBRyxDQUFDLFVBQXlCLEVBQUUsVUFBa0IsRUFBRSxPQUEyQixFQUMxRSxPQUEyQixFQUFFLFNBQTZCO1FBQzVELE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3BCLFVBQVU7WUFDVixVQUFVO1lBQ1YsT0FBTztZQUNQLE9BQU87WUFDUCxTQUFTO1NBQ1YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxjQUFpQztRQUM5QyxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDdkUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsY0FBYyxJQUFJLENBQUMsQ0FBQztTQUNwRjtRQUVELE1BQU0sTUFBTSxHQUFnQixFQUFFLENBQUM7UUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQzVDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU5Rix1RkFBdUY7UUFDdkYsNkZBQTZGO1FBQzdGLG9FQUFvRTtRQUNwRSxNQUFNLGVBQWUsR0FBRyxjQUFjLEtBQUssU0FBUyxDQUFDO1FBRXJELE9BQU8saUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQyxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUcsQ0FBQztZQUVyQyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDOUIsU0FBUzthQUNWO2lCQUFNO2dCQUNMLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM1QjtZQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDO1lBQ3BDLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFcEYsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNiLEtBQUssRUFBRSxVQUFVLENBQUMsWUFBWTtnQkFDOUIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJO2dCQUN2QixnQkFBZ0IsRUFBRSxVQUFVLENBQUMsVUFBVTthQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXBDLElBQUksZUFBZSxFQUFFO2dCQUNuQixpQkFBaUIsQ0FBQyxJQUFJLENBQ2xCLEdBQUc7b0JBQ0MsOENBQThDO29CQUM5QyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQ2QsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDbkYsOENBQThDO29CQUM5QyxHQUFHLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDbEUsOENBQThDO29CQUM5QyxHQUFHLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztpQkFDekUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekM7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtNb2R1bGVSZXNvbHZlcn0gZnJvbSAnLi4vLi4vaW1wb3J0cyc7XG5pbXBvcnQge1BhcnRpYWxFdmFsdWF0b3J9IGZyb20gJy4uLy4uL3BhcnRpYWxfZXZhbHVhdG9yJztcblxuaW1wb3J0IHtzY2FuRm9yQ2FuZGlkYXRlVHJhbnNpdGl2ZU1vZHVsZXMsIHNjYW5Gb3JSb3V0ZUVudHJ5UG9pbnRzfSBmcm9tICcuL2xhenknO1xuaW1wb3J0IHtlbnRyeVBvaW50S2V5Rm9yLCBSb3V0ZXJFbnRyeVBvaW50TWFuYWdlcn0gZnJvbSAnLi9yb3V0ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmdNb2R1bGVSYXdSb3V0ZURhdGEge1xuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlO1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG4gIGltcG9ydHM6IHRzLkV4cHJlc3Npb258bnVsbDtcbiAgZXhwb3J0czogdHMuRXhwcmVzc2lvbnxudWxsO1xuICBwcm92aWRlcnM6IHRzLkV4cHJlc3Npb258bnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXp5Um91dGUge1xuICByb3V0ZTogc3RyaW5nO1xuICBtb2R1bGU6IHtuYW1lOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmd9O1xuICByZWZlcmVuY2VkTW9kdWxlOiB7bmFtZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nfTtcbn1cblxuZXhwb3J0IGNsYXNzIE5nTW9kdWxlUm91dGVBbmFseXplciB7XG4gIHByaXZhdGUgbW9kdWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBOZ01vZHVsZVJhd1JvdXRlRGF0YT4oKTtcbiAgcHJpdmF0ZSBlbnRyeVBvaW50TWFuYWdlcjogUm91dGVyRW50cnlQb2ludE1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IobW9kdWxlUmVzb2x2ZXI6IE1vZHVsZVJlc29sdmVyLCBwcml2YXRlIGV2YWx1YXRvcjogUGFydGlhbEV2YWx1YXRvcikge1xuICAgIHRoaXMuZW50cnlQb2ludE1hbmFnZXIgPSBuZXcgUm91dGVyRW50cnlQb2ludE1hbmFnZXIobW9kdWxlUmVzb2x2ZXIpO1xuICB9XG5cbiAgYWRkKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIG1vZHVsZU5hbWU6IHN0cmluZywgaW1wb3J0czogdHMuRXhwcmVzc2lvbnxudWxsLFxuICAgICAgZXhwb3J0czogdHMuRXhwcmVzc2lvbnxudWxsLCBwcm92aWRlcnM6IHRzLkV4cHJlc3Npb258bnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGVudHJ5UG9pbnRLZXlGb3Ioc291cmNlRmlsZS5maWxlTmFtZSwgbW9kdWxlTmFtZSk7XG4gICAgaWYgKHRoaXMubW9kdWxlcy5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEb3VibGUgcm91dGUgYW5hbHl6aW5nIGZvciAnJHtrZXl9Jy5gKTtcbiAgICB9XG4gICAgdGhpcy5tb2R1bGVzLnNldChrZXksIHtcbiAgICAgIHNvdXJjZUZpbGUsXG4gICAgICBtb2R1bGVOYW1lLFxuICAgICAgaW1wb3J0cyxcbiAgICAgIGV4cG9ydHMsXG4gICAgICBwcm92aWRlcnMsXG4gICAgfSk7XG4gIH1cblxuICBsaXN0TGF6eVJvdXRlcyhlbnRyeU1vZHVsZUtleT86IHN0cmluZ3x1bmRlZmluZWQpOiBMYXp5Um91dGVbXSB7XG4gICAgaWYgKChlbnRyeU1vZHVsZUtleSAhPT0gdW5kZWZpbmVkKSAmJiAhdGhpcy5tb2R1bGVzLmhhcyhlbnRyeU1vZHVsZUtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxpc3QgbGF6eSByb3V0ZXM6IFVua25vd24gbW9kdWxlICcke2VudHJ5TW9kdWxlS2V5fScuYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVzOiBMYXp5Um91dGVbXSA9IFtdO1xuICAgIGNvbnN0IHNjYW5uZWRNb2R1bGVLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgcGVuZGluZ01vZHVsZUtleXMgPSBlbnRyeU1vZHVsZUtleSA/IFtlbnRyeU1vZHVsZUtleV0gOiBBcnJheS5mcm9tKHRoaXMubW9kdWxlcy5rZXlzKCkpO1xuXG4gICAgLy8gV2hlbiBsaXN0aW5nIGxhenkgcm91dGVzIGZvciBhIHNwZWNpZmljIGVudHJ5IG1vZHVsZSwgd2UgbmVlZCB0byByZWN1cnNpdmVseSBleHRyYWN0XG4gICAgLy8gXCJ0cmFuc2l0aXZlXCIgcm91dGVzIGZyb20gaW1wb3J0ZWQvZXhwb3J0ZWQgbW9kdWxlcy4gVGhpcyBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gbGlzdGluZyBhbGxcbiAgICAvLyBsYXp5IHJvdXRlcywgYmVjYXVzZSBhbGwgYW5hbHl6ZWQgbW9kdWxlcyB3aWxsIGJlIHNjYW5uZWQgYW55d2F5LlxuICAgIGNvbnN0IHNjYW5SZWN1cnNpdmVseSA9IGVudHJ5TW9kdWxlS2V5ICE9PSB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGVuZGluZ01vZHVsZUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qga2V5ID0gcGVuZGluZ01vZHVsZUtleXMucG9wKCkhO1xuXG4gICAgICBpZiAoc2Nhbm5lZE1vZHVsZUtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2FubmVkTW9kdWxlS2V5cy5hZGQoa2V5KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMubW9kdWxlcy5nZXQoa2V5KSE7XG4gICAgICBjb25zdCBlbnRyeVBvaW50cyA9IHNjYW5Gb3JSb3V0ZUVudHJ5UG9pbnRzKFxuICAgICAgICAgIGRhdGEuc291cmNlRmlsZSwgZGF0YS5tb2R1bGVOYW1lLCBkYXRhLCB0aGlzLmVudHJ5UG9pbnRNYW5hZ2VyLCB0aGlzLmV2YWx1YXRvcik7XG5cbiAgICAgIHJvdXRlcy5wdXNoKC4uLmVudHJ5UG9pbnRzLm1hcChlbnRyeVBvaW50ID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTogZW50cnlQb2ludC5sb2FkQ2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU6IGVudHJ5UG9pbnQuZnJvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWRNb2R1bGU6IGVudHJ5UG9pbnQucmVzb2x2ZWRUbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkpO1xuXG4gICAgICBpZiAoc2NhblJlY3Vyc2l2ZWx5KSB7XG4gICAgICAgIHBlbmRpbmdNb2R1bGVLZXlzLnB1c2goXG4gICAgICAgICAgICAuLi5bXG4gICAgICAgICAgICAgICAgLy8gU2NhbiB0aGUgcmV0cmlldmVkIGxhenkgcm91dGUgZW50cnkgcG9pbnRzLlxuICAgICAgICAgICAgICAgIC4uLmVudHJ5UG9pbnRzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgKHtyZXNvbHZlZFRvfSkgPT4gZW50cnlQb2ludEtleUZvcihyZXNvbHZlZFRvLmZpbGVQYXRoLCByZXNvbHZlZFRvLm1vZHVsZU5hbWUpKSxcbiAgICAgICAgICAgICAgICAvLyBTY2FuIHRoZSBjdXJyZW50IG1vZHVsZSdzIGltcG9ydGVkIG1vZHVsZXMuXG4gICAgICAgICAgICAgICAgLi4uc2NhbkZvckNhbmRpZGF0ZVRyYW5zaXRpdmVNb2R1bGVzKGRhdGEuaW1wb3J0cywgdGhpcy5ldmFsdWF0b3IpLFxuICAgICAgICAgICAgICAgIC8vIFNjYW4gdGhlIGN1cnJlbnQgbW9kdWxlJ3MgZXhwb3J0ZWQgbW9kdWxlcy5cbiAgICAgICAgICAgICAgICAuLi5zY2FuRm9yQ2FuZGlkYXRlVHJhbnNpdGl2ZU1vZHVsZXMoZGF0YS5leHBvcnRzLCB0aGlzLmV2YWx1YXRvciksXG4gICAgICAgIF0uZmlsdGVyKGtleSA9PiB0aGlzLm1vZHVsZXMuaGFzKGtleSkpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcm91dGVzO1xuICB9XG59XG4iXX0=
|
|
@@ -1,168 +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 ts from 'typescript';
|
|
9
|
-
import { Reference } from '../../imports';
|
|
10
|
-
import { entryPointKeyFor } from './route';
|
|
11
|
-
const ROUTES_MARKER = '__ngRoutesMarker__';
|
|
12
|
-
export function scanForCandidateTransitiveModules(expr, evaluator) {
|
|
13
|
-
if (expr === null) {
|
|
14
|
-
return [];
|
|
15
|
-
}
|
|
16
|
-
const candidateModuleKeys = [];
|
|
17
|
-
const entries = evaluator.evaluate(expr);
|
|
18
|
-
function recursivelyAddModules(entry) {
|
|
19
|
-
if (Array.isArray(entry)) {
|
|
20
|
-
for (const e of entry) {
|
|
21
|
-
recursivelyAddModules(e);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
else if (entry instanceof Map) {
|
|
25
|
-
if (entry.has('ngModule')) {
|
|
26
|
-
recursivelyAddModules(entry.get('ngModule'));
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
else if ((entry instanceof Reference) && hasIdentifier(entry.node)) {
|
|
30
|
-
const filePath = entry.node.getSourceFile().fileName;
|
|
31
|
-
const moduleName = entry.node.name.text;
|
|
32
|
-
candidateModuleKeys.push(entryPointKeyFor(filePath, moduleName));
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
recursivelyAddModules(entries);
|
|
36
|
-
return candidateModuleKeys;
|
|
37
|
-
}
|
|
38
|
-
export function scanForRouteEntryPoints(ngModule, moduleName, data, entryPointManager, evaluator) {
|
|
39
|
-
const loadChildrenIdentifiers = [];
|
|
40
|
-
const from = entryPointManager.fromNgModule(ngModule, moduleName);
|
|
41
|
-
if (data.providers !== null) {
|
|
42
|
-
loadChildrenIdentifiers.push(...scanForProviders(data.providers, evaluator));
|
|
43
|
-
}
|
|
44
|
-
if (data.imports !== null) {
|
|
45
|
-
loadChildrenIdentifiers.push(...scanForRouterModuleUsage(data.imports, evaluator));
|
|
46
|
-
}
|
|
47
|
-
if (data.exports !== null) {
|
|
48
|
-
loadChildrenIdentifiers.push(...scanForRouterModuleUsage(data.exports, evaluator));
|
|
49
|
-
}
|
|
50
|
-
const routes = [];
|
|
51
|
-
for (const loadChildren of loadChildrenIdentifiers) {
|
|
52
|
-
const resolvedTo = entryPointManager.resolveLoadChildrenIdentifier(loadChildren, ngModule);
|
|
53
|
-
if (resolvedTo !== null) {
|
|
54
|
-
routes.push({
|
|
55
|
-
loadChildren,
|
|
56
|
-
from,
|
|
57
|
-
resolvedTo,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return routes;
|
|
62
|
-
}
|
|
63
|
-
function scanForProviders(expr, evaluator) {
|
|
64
|
-
const loadChildrenIdentifiers = [];
|
|
65
|
-
const providers = evaluator.evaluate(expr);
|
|
66
|
-
function recursivelyAddProviders(provider) {
|
|
67
|
-
if (Array.isArray(provider)) {
|
|
68
|
-
for (const entry of provider) {
|
|
69
|
-
recursivelyAddProviders(entry);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
else if (provider instanceof Map) {
|
|
73
|
-
if (provider.has('provide') && provider.has('useValue')) {
|
|
74
|
-
const provide = provider.get('provide');
|
|
75
|
-
const useValue = provider.get('useValue');
|
|
76
|
-
if (isRouteToken(provide) && Array.isArray(useValue)) {
|
|
77
|
-
loadChildrenIdentifiers.push(...scanForLazyRoutes(useValue));
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
recursivelyAddProviders(providers);
|
|
83
|
-
return loadChildrenIdentifiers;
|
|
84
|
-
}
|
|
85
|
-
function scanForRouterModuleUsage(expr, evaluator) {
|
|
86
|
-
const loadChildrenIdentifiers = [];
|
|
87
|
-
const imports = evaluator.evaluate(expr, routerModuleFFR);
|
|
88
|
-
function recursivelyAddRoutes(imp) {
|
|
89
|
-
if (Array.isArray(imp)) {
|
|
90
|
-
for (const entry of imp) {
|
|
91
|
-
recursivelyAddRoutes(entry);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
else if (imp instanceof Map) {
|
|
95
|
-
if (imp.has(ROUTES_MARKER) && imp.has('routes')) {
|
|
96
|
-
const routes = imp.get('routes');
|
|
97
|
-
if (Array.isArray(routes)) {
|
|
98
|
-
loadChildrenIdentifiers.push(...scanForLazyRoutes(routes));
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
recursivelyAddRoutes(imports);
|
|
104
|
-
return loadChildrenIdentifiers;
|
|
105
|
-
}
|
|
106
|
-
function scanForLazyRoutes(routes) {
|
|
107
|
-
const loadChildrenIdentifiers = [];
|
|
108
|
-
function recursivelyScanRoutes(routes) {
|
|
109
|
-
for (let route of routes) {
|
|
110
|
-
if (!(route instanceof Map)) {
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
if (route.has('loadChildren')) {
|
|
114
|
-
const loadChildren = route.get('loadChildren');
|
|
115
|
-
if (typeof loadChildren === 'string') {
|
|
116
|
-
loadChildrenIdentifiers.push(loadChildren);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
else if (route.has('children')) {
|
|
120
|
-
const children = route.get('children');
|
|
121
|
-
if (Array.isArray(children)) {
|
|
122
|
-
recursivelyScanRoutes(children);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
recursivelyScanRoutes(routes);
|
|
128
|
-
return loadChildrenIdentifiers;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* A foreign function resolver that converts `RouterModule.forRoot/forChild(X)` to a special object
|
|
132
|
-
* of the form `{__ngRoutesMarker__: true, routes: X}`.
|
|
133
|
-
*
|
|
134
|
-
* These objects are then recognizable inside the larger set of imports/exports.
|
|
135
|
-
*/
|
|
136
|
-
const routerModuleFFR = function routerModuleFFR(ref, args) {
|
|
137
|
-
if (!isMethodNodeReference(ref) || !ts.isClassDeclaration(ref.node.parent)) {
|
|
138
|
-
return null;
|
|
139
|
-
}
|
|
140
|
-
else if (ref.bestGuessOwningModule === null ||
|
|
141
|
-
ref.bestGuessOwningModule.specifier !== '@angular/router') {
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
144
|
-
else if (ref.node.parent.name === undefined || ref.node.parent.name.text !== 'RouterModule') {
|
|
145
|
-
return null;
|
|
146
|
-
}
|
|
147
|
-
else if (!ts.isIdentifier(ref.node.name) ||
|
|
148
|
-
(ref.node.name.text !== 'forRoot' && ref.node.name.text !== 'forChild')) {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
const routes = args[0];
|
|
152
|
-
return ts.createObjectLiteral([
|
|
153
|
-
ts.createPropertyAssignment(ROUTES_MARKER, ts.createTrue()),
|
|
154
|
-
ts.createPropertyAssignment('routes', routes),
|
|
155
|
-
]);
|
|
156
|
-
};
|
|
157
|
-
function hasIdentifier(node) {
|
|
158
|
-
const node_ = node;
|
|
159
|
-
return (node_.name !== undefined) && ts.isIdentifier(node_.name);
|
|
160
|
-
}
|
|
161
|
-
function isMethodNodeReference(ref) {
|
|
162
|
-
return ts.isMethodDeclaration(ref.node);
|
|
163
|
-
}
|
|
164
|
-
function isRouteToken(ref) {
|
|
165
|
-
return ref instanceof Reference && ref.bestGuessOwningModule !== null &&
|
|
166
|
-
ref.bestGuessOwningModule.specifier === '@angular/router' && ref.debugName === 'ROUTES';
|
|
167
|
-
}
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2Mvcm91dGluZy9zcmMvbGF6eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXhDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBNEMsTUFBTSxTQUFTLENBQUM7QUFFcEYsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQUM7QUFRM0MsTUFBTSxVQUFVLGlDQUFpQyxDQUM3QyxJQUF3QixFQUFFLFNBQTJCO0lBQ3ZELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtRQUNqQixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRUQsTUFBTSxtQkFBbUIsR0FBYSxFQUFFLENBQUM7SUFDekMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV6QyxTQUFTLHFCQUFxQixDQUFDLEtBQW9CO1FBQ2pELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRTtnQkFDckIscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDMUI7U0FDRjthQUFNLElBQUksS0FBSyxZQUFZLEdBQUcsRUFBRTtZQUMvQixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3pCLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUMsQ0FBQzthQUMvQztTQUNGO2FBQU0sSUFBSSxDQUFDLEtBQUssWUFBWSxTQUFTLENBQUMsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lB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QVMsS0FBSyxRQUFRLENBQUM7QUFDOUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtSZWZlcmVuY2V9IGZyb20gJy4uLy4uL2ltcG9ydHMnO1xuaW1wb3J0IHtGb3JlaWduRnVuY3Rpb25SZXNvbHZlciwgUGFydGlhbEV2YWx1YXRvciwgUmVzb2x2ZWRWYWx1ZX0gZnJvbSAnLi4vLi4vcGFydGlhbF9ldmFsdWF0b3InO1xuXG5pbXBvcnQge05nTW9kdWxlUmF3Um91dGVEYXRhfSBmcm9tICcuL2FuYWx5emVyJztcbmltcG9ydCB7ZW50cnlQb2ludEtleUZvciwgUm91dGVyRW50cnlQb2ludCwgUm91dGVyRW50cnlQb2ludE1hbmFnZXJ9IGZyb20gJy4vcm91dGUnO1xuXG5jb25zdCBST1VURVNfTUFSS0VSID0gJ19fbmdSb3V0ZXNNYXJrZXJfXyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF6eVJvdXRlRW50cnkge1xuICBsb2FkQ2hpbGRyZW46IHN0cmluZztcbiAgZnJvbTogUm91dGVyRW50cnlQb2ludDtcbiAgcmVzb2x2ZWRUbzogUm91dGVyRW50cnlQb2ludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYW5Gb3JDYW5kaWRhdGVUcmFuc2l0aXZlTW9kdWxlcyhcbiAgICBleHByOiB0cy5FeHByZXNzaW9ufG51bGwsIGV2YWx1YXRvcjogUGFydGlhbEV2YWx1YXRvcik6IHN0cmluZ1tdIHtcbiAgaWYgKGV4cHIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGVNb2R1bGVLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHIpO1xuXG4gIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5QWRkTW9kdWxlcyhlbnRyeTogUmVzb2x2ZWRWYWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1xuICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJ5KSB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5QWRkTW9kdWxlcyhlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVudHJ5IGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICBpZiAoZW50cnkuaGFzKCduZ01vZHVsZScpKSB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5QWRkTW9kdWxlcyhlbnRyeS5nZXQoJ25nTW9kdWxlJykhKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChlbnRyeSBpbnN0YW5jZW9mIFJlZmVyZW5jZSkgJiYgaGFzSWRlbnRpZmllcihlbnRyeS5ub2RlKSkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBlbnRyeS5ub2RlLmdldFNvdXJjZUZpbGUoKS5maWxlTmFtZTtcbiAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBlbnRyeS5ub2RlLm5hbWUudGV4dDtcbiAgICAgIGNhbmRpZGF0ZU1vZHVsZUtleXMucHVzaChlbnRyeVBvaW50S2V5Rm9yKGZpbGVQYXRoLCBtb2R1bGVOYW1lKSk7XG4gICAgfVxuICB9XG5cbiAgcmVjdXJzaXZlbHlBZGRNb2R1bGVzKGVudHJpZXMpO1xuICByZXR1cm4gY2FuZGlkYXRlTW9kdWxlS2V5cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYW5Gb3JSb3V0ZUVudHJ5UG9pbnRzKFxuICAgIG5nTW9kdWxlOiB0cy5Tb3VyY2VGaWxlLCBtb2R1bGVOYW1lOiBzdHJpbmcsIGRhdGE6IE5nTW9kdWxlUmF3Um91dGVEYXRhLFxuICAgIGVudHJ5UG9pbnRNYW5hZ2VyOiBSb3V0ZXJFbnRyeVBvaW50TWFuYWdlciwgZXZhbHVhdG9yOiBQYXJ0aWFsRXZhbHVhdG9yKTogTGF6eVJvdXRlRW50cnlbXSB7XG4gIGNvbnN0IGxvYWRDaGlsZHJlbklkZW50aWZpZXJzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmcm9tID0gZW50cnlQb2ludE1hbmFnZXIuZnJvbU5nTW9kdWxlKG5nTW9kdWxlLCBtb2R1bGVOYW1lKTtcbiAgaWYgKGRhdGEucHJvdmlkZXJzICE9PSBudWxsKSB7XG4gICAgbG9hZENoaWxkcmVuSWRlbnRpZmllcnMucHVzaCguLi5zY2FuRm9yUHJvdmlkZXJzKGRhdGEucHJvdmlkZXJzLCBldmFsdWF0b3IpKTtcbiAgfVxuICBpZiAoZGF0YS5pbXBvcnRzICE9PSBudWxsKSB7XG4gICAgbG9hZENoaWxkcmVuSWRlbnRpZmllcnMucHVzaCguLi5zY2FuRm9yUm91dGVyTW9kdWxlVXNhZ2UoZGF0YS5pbXBvcnRzLCBldmFsdWF0b3IpKTtcbiAgfVxuICBpZiAoZGF0YS5leHBvcnRzICE9PSBudWxsKSB7XG4gICAgbG9hZENoaWxkcmVuSWRlbnRpZmllcnMucHVzaCguLi5zY2FuRm9yUm91dGVyTW9kdWxlVXNhZ2UoZGF0YS5leHBvcnRzLCBldmFsdWF0b3IpKTtcbiAgfVxuICBjb25zdCByb3V0ZXM6IExhenlSb3V0ZUVudHJ5W10gPSBbXTtcbiAgZm9yIChjb25zdCBsb2FkQ2hpbGRyZW4gb2YgbG9hZENoaWxkcmVuSWRlbnRpZmllcnMpIHtcbiAgICBjb25zdCByZXNvbHZlZFRvID0gZW50cnlQb2ludE1hbmFnZXIucmVzb2x2ZUxvYWRDaGlsZHJlbklkZW50aWZpZXIobG9hZENoaWxkcmVuLCBuZ01vZHVsZSk7XG4gICAgaWYgKHJlc29sdmVkVG8gIT09IG51bGwpIHtcbiAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgbG9hZENoaWxkcmVuLFxuICAgICAgICBmcm9tLFxuICAgICAgICByZXNvbHZlZFRvLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByb3V0ZXM7XG59XG5cbmZ1bmN0aW9uIHNjYW5Gb3JQcm92aWRlcnMoZXhwcjogdHMuRXhwcmVzc2lvbiwgZXZhbHVhdG9yOiBQYXJ0aWFsRXZhbHVhdG9yKTogc3RyaW5nW10ge1xuICBjb25zdCBsb2FkQ2hpbGRyZW5JZGVudGlmaWVyczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgcHJvdmlkZXJzID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHIpO1xuXG4gIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5QWRkUHJvdmlkZXJzKHByb3ZpZGVyOiBSZXNvbHZlZFZhbHVlKTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvdmlkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHByb3ZpZGVyKSB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5QWRkUHJvdmlkZXJzKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3ZpZGVyIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICBpZiAocHJvdmlkZXIuaGFzKCdwcm92aWRlJykgJiYgcHJvdmlkZXIuaGFzKCd1c2VWYWx1ZScpKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGUgPSBwcm92aWRlci5nZXQoJ3Byb3ZpZGUnKTtcbiAgICAgICAgY29uc3QgdXNlVmFsdWUgPSBwcm92aWRlci5nZXQoJ3VzZVZhbHVlJyk7XG4gICAgICAgIGlmIChpc1JvdXRlVG9rZW4ocHJvdmlkZSkgJiYgQXJyYXkuaXNBcnJheSh1c2VWYWx1ZSkpIHtcbiAgICAgICAgICBsb2FkQ2hpbGRyZW5JZGVudGlmaWVycy5wdXNoKC4uLnNjYW5Gb3JMYXp5Um91dGVzKHVzZVZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWN1cnNpdmVseUFkZFByb3ZpZGVycyhwcm92aWRlcnMpO1xuICByZXR1cm4gbG9hZENoaWxkcmVuSWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIHNjYW5Gb3JSb3V0ZXJNb2R1bGVVc2FnZShleHByOiB0cy5FeHByZXNzaW9uLCBldmFsdWF0b3I6IFBhcnRpYWxFdmFsdWF0b3IpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGxvYWRDaGlsZHJlbklkZW50aWZpZXJzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBpbXBvcnRzID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHIsIHJvdXRlck1vZHVsZUZGUik7XG5cbiAgZnVuY3Rpb24gcmVjdXJzaXZlbHlBZGRSb3V0ZXMoaW1wOiBSZXNvbHZlZFZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW1wKSkge1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBpbXApIHtcbiAgICAgICAgcmVjdXJzaXZlbHlBZGRSb3V0ZXMoZW50cnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW1wIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICBpZiAoaW1wLmhhcyhST1VURVNfTUFSS0VSKSAmJiBpbXAuaGFzKCdyb3V0ZXMnKSkge1xuICAgICAgICBjb25zdCByb3V0ZXMgPSBpbXAuZ2V0KCdyb3V0ZXMnKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm91dGVzKSkge1xuICAgICAgICAgIGxvYWRDaGlsZHJlbklkZW50aWZpZXJzLnB1c2goLi4uc2NhbkZvckxhenlSb3V0ZXMocm91dGVzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWN1cnNpdmVseUFkZFJvdXRlcyhpbXBvcnRzKTtcbiAgcmV0dXJuIGxvYWRDaGlsZHJlbklkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBzY2FuRm9yTGF6eVJvdXRlcyhyb3V0ZXM6IFJlc29sdmVkVmFsdWVbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbG9hZENoaWxkcmVuSWRlbnRpZmllcnM6IHN0cmluZ1tdID0gW107XG5cbiAgZnVuY3Rpb24gcmVjdXJzaXZlbHlTY2FuUm91dGVzKHJvdXRlczogUmVzb2x2ZWRWYWx1ZVtdKTogdm9pZCB7XG4gICAgZm9yIChsZXQgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgICBpZiAoIShyb3V0ZSBpbnN0YW5jZW9mIE1hcCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocm91dGUuaGFzKCdsb2FkQ2hpbGRyZW4nKSkge1xuICAgICAgICBjb25zdCBsb2FkQ2hpbGRyZW4gPSByb3V0ZS5nZXQoJ2xvYWRDaGlsZHJlbicpO1xuICAgICAgICBpZiAodHlwZW9mIGxvYWRDaGlsZHJlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBsb2FkQ2hpbGRyZW5JZGVudGlmaWVycy5wdXNoKGxvYWRDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocm91dGUuaGFzKCdjaGlsZHJlbicpKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcm91dGUuZ2V0KCdjaGlsZHJlbicpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICByZWN1cnNpdmVseVNjYW5Sb3V0ZXMoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVjdXJzaXZlbHlTY2FuUm91dGVzKHJvdXRlcyk7XG4gIHJldHVybiBsb2FkQ2hpbGRyZW5JZGVudGlmaWVycztcbn1cblxuLyoqXG4gKiBBIGZvcmVpZ24gZnVuY3Rpb24gcmVzb2x2ZXIgdGhhdCBjb252ZXJ0cyBgUm91dGVyTW9kdWxlLmZvclJvb3QvZm9yQ2hpbGQoWClgIHRvIGEgc3BlY2lhbCBvYmplY3RcbiAqIG9mIHRoZSBmb3JtIGB7X19uZ1JvdXRlc01hcmtlcl9fOiB0cnVlLCByb3V0ZXM6IFh9YC5cbiAqXG4gKiBUaGVzZSBvYmplY3RzIGFyZSB0aGVuIHJlY29nbml6YWJsZSBpbnNpZGUgdGhlIGxhcmdlciBzZXQgb2YgaW1wb3J0cy9leHBvcnRzLlxuICovXG5jb25zdCByb3V0ZXJNb2R1bGVGRlI6IEZvcmVpZ25GdW5jdGlvblJlc29sdmVyID1cbiAgICBmdW5jdGlvbiByb3V0ZXJNb2R1bGVGRlIoXG4gICAgICAgIHJlZjogUmVmZXJlbmNlPHRzLkZ1bmN0aW9uRGVjbGFyYXRpb258dHMuTWV0aG9kRGVjbGFyYXRpb258dHMuRnVuY3Rpb25FeHByZXNzaW9uPixcbiAgICAgICAgYXJnczogUmVhZG9ubHlBcnJheTx0cy5FeHByZXNzaW9uPik6IHRzLkV4cHJlc3Npb258bnVsbCB7XG4gIGlmICghaXNNZXRob2ROb2RlUmVmZXJlbmNlKHJlZikgfHwgIXRzLmlzQ2xhc3NEZWNsYXJhdGlvbihyZWYubm9kZS5wYXJlbnQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoXG4gICAgICByZWYuYmVzdEd1ZXNzT3duaW5nTW9kdWxlID09PSBudWxsIHx8XG4gICAgICByZWYuYmVzdEd1ZXNzT3duaW5nTW9kdWxlLnNwZWNpZmllciAhPT0gJ0Bhbmd1bGFyL3JvdXRlcicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmIChyZWYubm9kZS5wYXJlbnQubmFtZSA9PT0gdW5kZWZpbmVkIHx8IHJlZi5ub2RlLnBhcmVudC5uYW1lLnRleHQgIT09ICdSb3V0ZXJNb2R1bGUnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoXG4gICAgICAhdHMuaXNJZGVudGlmaWVyKHJlZi5ub2RlLm5hbWUpIHx8XG4gICAgICAocmVmLm5vZGUubmFtZS50ZXh0ICE9PSAnZm9yUm9vdCcgJiYgcmVmLm5vZGUubmFtZS50ZXh0ICE9PSAnZm9yQ2hpbGQnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgcm91dGVzID0gYXJnc1swXTtcbiAgcmV0dXJuIHRzLmNyZWF0ZU9iamVjdExpdGVyYWwoW1xuICAgIHRzLmNyZWF0ZVByb3BlcnR5QXNzaWdubWVudChST1VURVNfTUFSS0VSLCB0cy5jcmVhdGVUcnVlKCkpLFxuICAgIHRzLmNyZWF0ZVByb3BlcnR5QXNzaWdubWVudCgncm91dGVzJywgcm91dGVzKSxcbiAgXSk7XG59O1xuXG5mdW5jdGlvbiBoYXNJZGVudGlmaWVyKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLk5vZGUme25hbWU6IHRzLklkZW50aWZpZXJ9IHtcbiAgY29uc3Qgbm9kZV8gPSBub2RlIGFzIHRzLk5hbWVkRGVjbGFyYXRpb247XG4gIHJldHVybiAobm9kZV8ubmFtZSAhPT0gdW5kZWZpbmVkKSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZV8ubmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzTWV0aG9kTm9kZVJlZmVyZW5jZShcbiAgICByZWY6IFJlZmVyZW5jZTx0cy5GdW5jdGlvbkRlY2xhcmF0aW9ufHRzLk1ldGhvZERlY2xhcmF0aW9ufHRzLkZ1bmN0aW9uRXhwcmVzc2lvbj4pOlxuICAgIHJlZiBpcyBSZWZlcmVuY2U8dHMuTWV0aG9kRGVjbGFyYXRpb24+IHtcbiAgcmV0dXJuIHRzLmlzTWV0aG9kRGVjbGFyYXRpb24ocmVmLm5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1JvdXRlVG9rZW4ocmVmOiBSZXNvbHZlZFZhbHVlKTogYm9vbGVhbiB7XG4gIHJldHVybiByZWYgaW5zdGFuY2VvZiBSZWZlcmVuY2UgJiYgcmVmLmJlc3RHdWVzc093bmluZ01vZHVsZSAhPT0gbnVsbCAmJlxuICAgICAgcmVmLmJlc3RHdWVzc093bmluZ01vZHVsZS5zcGVjaWZpZXIgPT09ICdAYW5ndWxhci9yb3V0ZXInICYmIHJlZi5kZWJ1Z05hbWUgPT09ICdST1VURVMnO1xufVxuIl19
|