@angular/cdk 20.0.0-next.1 → 20.0.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_adev_assets/cdk_testing.json +1 -0
- package/_adev_assets/cdk_testing_protractor.json +1 -0
- package/_adev_assets/cdk_testing_selenium_webdriver.json +1 -0
- package/_adev_assets/cdk_testing_testbed.json +1 -0
- package/a11y/index.d.ts +11 -11
- package/{a11y-module.d-7d03e079.d.ts → a11y-module.d-DBHGyKoh.d.ts} +4 -3
- package/a11y-prebuilt.css +1 -1
- package/accordion/index.d.ts +1 -1
- package/{activedescendant-key-manager.d-11921e3a.d.ts → activedescendant-key-manager.d-Bjic5obv.d.ts} +3 -2
- package/bidi/index.d.ts +1 -1
- package/{bidi-module.d-f8648621.d.ts → bidi-module.d-IN1Vp56w.d.ts} +8 -4
- package/clipboard/index.d.ts +2 -1
- package/coercion/index.d.ts +3 -2
- package/collections/index.d.ts +9 -8
- package/{data-source.d-7cab2c9d.d.ts → data-source.d-Bblv7Zvh.d.ts} +2 -1
- package/dialog/index.d.ts +26 -19
- package/drag-drop/index.d.ts +14 -6
- package/fesm2022/{a11y-module-e6996d20.mjs → a11y-module-DpEjWNCj.mjs} +32 -33
- package/fesm2022/a11y-module-DpEjWNCj.mjs.map +1 -0
- package/fesm2022/a11y.mjs +35 -36
- package/fesm2022/a11y.mjs.map +1 -1
- package/fesm2022/accordion.mjs +12 -12
- package/fesm2022/accordion.mjs.map +1 -1
- package/fesm2022/{activedescendant-key-manager-1351a9d3.mjs → activedescendant-key-manager-DC3-fwQI.mjs} +2 -2
- package/fesm2022/activedescendant-key-manager-DC3-fwQI.mjs.map +1 -0
- package/fesm2022/{array-ee3b4bab.mjs → array-I1yfCXUO.mjs} +1 -1
- package/fesm2022/array-I1yfCXUO.mjs.map +1 -0
- package/fesm2022/bidi.mjs +77 -4
- package/fesm2022/bidi.mjs.map +1 -1
- package/fesm2022/{breakpoints-observer-d4584b66.mjs → breakpoints-observer-DpQzdtrE.mjs} +9 -9
- package/fesm2022/breakpoints-observer-DpQzdtrE.mjs.map +1 -0
- package/fesm2022/cdk.mjs +1 -1
- package/fesm2022/cdk.mjs.map +1 -1
- package/fesm2022/clipboard.mjs +11 -12
- package/fesm2022/clipboard.mjs.map +1 -1
- package/fesm2022/coercion/private.mjs +14 -2
- package/fesm2022/coercion/private.mjs.map +1 -1
- package/fesm2022/coercion.mjs +3 -3
- package/fesm2022/coercion.mjs.map +1 -1
- package/fesm2022/collections.mjs +5 -5
- package/fesm2022/{css-pixel-value-286c9a60.mjs → css-pixel-value-C_HEqLhI.mjs} +1 -1
- package/fesm2022/css-pixel-value-C_HEqLhI.mjs.map +1 -0
- package/fesm2022/{data-source-5320b6fd.mjs → data-source-D34wiQZj.mjs} +1 -1
- package/fesm2022/data-source-D34wiQZj.mjs.map +1 -0
- package/fesm2022/dialog.mjs +88 -71
- package/fesm2022/dialog.mjs.map +1 -1
- package/fesm2022/{directionality-7ea26429.mjs → directionality-Ck5Uc9Se.mjs} +13 -8
- package/fesm2022/directionality-Ck5Uc9Se.mjs.map +1 -0
- package/fesm2022/{dispose-view-repeater-strategy-b11b87ea.mjs → dispose-view-repeater-strategy-D_JReLI1.mjs} +2 -2
- package/fesm2022/dispose-view-repeater-strategy-D_JReLI1.mjs.map +1 -0
- package/fesm2022/drag-drop.mjs +125 -60
- package/fesm2022/drag-drop.mjs.map +1 -1
- package/fesm2022/{element-705567fe.mjs → element-x4z00URv.mjs} +2 -2
- package/fesm2022/element-x4z00URv.mjs.map +1 -0
- package/fesm2022/{fake-event-detection-7055b1bd.mjs → fake-event-detection-DWOdFTFz.mjs} +1 -1
- package/fesm2022/fake-event-detection-DWOdFTFz.mjs.map +1 -0
- package/fesm2022/{focus-key-manager-58d29acd.mjs → focus-key-manager-C1rAQJ5z.mjs} +2 -2
- package/fesm2022/focus-key-manager-C1rAQJ5z.mjs.map +1 -0
- package/fesm2022/{focus-monitor-cebaa0d1.mjs → focus-monitor-DKFfep8Q.mjs} +21 -23
- package/fesm2022/focus-monitor-DKFfep8Q.mjs.map +1 -0
- package/fesm2022/{id-generator-fba495fb.mjs → id-generator-BwB8lolC.mjs} +4 -4
- package/fesm2022/id-generator-BwB8lolC.mjs.map +1 -0
- package/fesm2022/{keycodes-107cd3e4.mjs → keycodes-CpHkExLC.mjs} +2 -2
- package/fesm2022/keycodes-CpHkExLC.mjs.map +1 -0
- package/fesm2022/keycodes.mjs +14 -2
- package/fesm2022/keycodes.mjs.map +1 -1
- package/fesm2022/layout.mjs +7 -7
- package/fesm2022/layout.mjs.map +1 -1
- package/fesm2022/{list-key-manager-c7b5cefb.mjs → list-key-manager-CyOIXo8P.mjs} +4 -4
- package/fesm2022/list-key-manager-CyOIXo8P.mjs.map +1 -0
- package/fesm2022/listbox.mjs +20 -20
- package/fesm2022/listbox.mjs.map +1 -1
- package/fesm2022/menu.mjs +85 -90
- package/fesm2022/menu.mjs.map +1 -1
- package/fesm2022/observers/private.mjs +3 -3
- package/fesm2022/observers/private.mjs.map +1 -1
- package/fesm2022/observers.mjs +209 -5
- package/fesm2022/observers.mjs.map +1 -1
- package/fesm2022/{overlay-module-863b82c9.mjs → overlay-module-BaGhSGqO.mjs} +204 -171
- package/fesm2022/overlay-module-BaGhSGqO.mjs.map +1 -0
- package/fesm2022/overlay.mjs +23 -24
- package/fesm2022/overlay.mjs.map +1 -1
- package/fesm2022/{passive-listeners-c0bdc49f.mjs → passive-listeners-esHZRgIN.mjs} +1 -1
- package/fesm2022/passive-listeners-esHZRgIN.mjs.map +1 -0
- package/fesm2022/{platform-1be098b0.mjs → platform-CPg0IbDW.mjs} +4 -4
- package/fesm2022/platform-CPg0IbDW.mjs.map +1 -0
- package/fesm2022/platform.mjs +9 -10
- package/fesm2022/platform.mjs.map +1 -1
- package/fesm2022/portal.mjs +613 -3
- package/fesm2022/portal.mjs.map +1 -1
- package/fesm2022/private.mjs +18 -3
- package/fesm2022/private.mjs.map +1 -1
- package/fesm2022/{recycle-view-repeater-strategy-c1712813.mjs → recycle-view-repeater-strategy-DoWdPqVw.mjs} +2 -2
- package/fesm2022/recycle-view-repeater-strategy-DoWdPqVw.mjs.map +1 -0
- package/fesm2022/{scrolling-61955dd1.mjs → scrolling-BkvA05C8.mjs} +1 -1
- package/fesm2022/scrolling-BkvA05C8.mjs.map +1 -0
- package/fesm2022/scrolling.mjs +1462 -11
- package/fesm2022/scrolling.mjs.map +1 -1
- package/fesm2022/{selection-model-30243dba.mjs → selection-model-BCgC8uEN.mjs} +1 -1
- package/fesm2022/selection-model-BCgC8uEN.mjs.map +1 -0
- package/fesm2022/{shadow-dom-9f403d00.mjs → shadow-dom-B0oHn41l.mjs} +2 -2
- package/fesm2022/shadow-dom-B0oHn41l.mjs.map +1 -0
- package/fesm2022/stepper.mjs +43 -38
- package/fesm2022/stepper.mjs.map +1 -1
- package/fesm2022/{style-loader-e14dc585.mjs → style-loader-BDEAZOey.mjs} +4 -4
- package/fesm2022/style-loader-BDEAZOey.mjs.map +1 -0
- package/fesm2022/table.mjs +170 -226
- package/fesm2022/table.mjs.map +1 -1
- package/fesm2022/{test-environment-34eef1ee.mjs → test-environment-CT0XxPyp.mjs} +1 -1
- package/fesm2022/test-environment-CT0XxPyp.mjs.map +1 -0
- package/fesm2022/testing/selenium-webdriver.mjs +1 -1
- package/fesm2022/testing/selenium-webdriver.mjs.map +1 -1
- package/fesm2022/testing/testbed.mjs +2 -2
- package/fesm2022/testing/testbed.mjs.map +1 -1
- package/fesm2022/testing.mjs +697 -2
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/text-field.mjs +27 -24
- package/fesm2022/text-field.mjs.map +1 -1
- package/fesm2022/{tree-key-manager-2f20c79c.mjs → tree-key-manager-KnCoIkIC.mjs} +3 -3
- package/fesm2022/tree-key-manager-KnCoIkIC.mjs.map +1 -0
- package/fesm2022/tree.mjs +47 -35
- package/fesm2022/tree.mjs.map +1 -1
- package/fesm2022/{typeahead-11ae39bd.mjs → typeahead-9ZW4Dtsf.mjs} +2 -2
- package/fesm2022/typeahead-9ZW4Dtsf.mjs.map +1 -0
- package/fesm2022/{unique-selection-dispatcher-1d6f91d8.mjs → unique-selection-dispatcher-Cag6cZJ2.mjs} +4 -4
- package/fesm2022/unique-selection-dispatcher-Cag6cZJ2.mjs.map +1 -0
- package/{focus-key-manager.d-415a6958.d.ts → focus-key-manager.d-BIKDy8oD.d.ts} +4 -3
- package/{focus-monitor.d-810a02e6.d.ts → focus-monitor.d-CvvJeQRc.d.ts} +2 -1
- package/{harness-environment.d-4d615248.d.ts → harness-environment.d-BatBdODN.d.ts} +2 -1
- package/keycodes/index.d.ts +2 -1
- package/layout/index.d.ts +2 -1
- package/{list-key-manager.d-72e9a2e7.d.ts → list-key-manager.d-BlK3jyRn.d.ts} +2 -1
- package/listbox/index.d.ts +5 -4
- package/menu/index.d.ts +16 -18
- package/{number-property.d-ce316715.d.ts → number-property.d-CJVxXUcb.d.ts} +2 -1
- package/observers/index.d.ts +84 -4
- package/overlay/_index.scss +7 -1
- package/overlay/index.d.ts +77 -80
- package/{overlay-module.d-5d06db8a.d.ts → overlay-module.d-BiAhhk6g.d.ts} +23 -12
- package/overlay-prebuilt.css +1 -1
- package/package.json +2 -4
- package/platform/index.d.ts +2 -17
- package/portal/index.d.ts +3 -3
- package/{portal-directives.d-d345bd53.d.ts → portal-directives.d-DbeNrI5D.d.ts} +2 -1
- package/private/index.d.ts +1 -1
- package/schematics/index.js +1 -1
- package/schematics/index.js.map +1 -0
- package/schematics/ng-add/index.js +11 -19
- package/schematics/ng-add/index.js.map +1 -0
- package/schematics/ng-add/schema.js +1 -1
- package/schematics/ng-add/schema.js.map +1 -0
- package/schematics/ng-generate/drag-drop/index.js +15 -6
- package/schematics/ng-generate/drag-drop/index.js.map +1 -0
- package/schematics/ng-generate/drag-drop/schema.js +1 -1
- package/schematics/ng-generate/drag-drop/schema.js.map +1 -0
- package/schematics/ng-update/data/attribute-selectors.js +1 -1
- package/schematics/ng-update/data/attribute-selectors.js.map +1 -0
- package/schematics/ng-update/data/class-names.js +1 -1
- package/schematics/ng-update/data/class-names.js.map +1 -0
- package/schematics/ng-update/data/constructor-checks.js +1 -1
- package/schematics/ng-update/data/constructor-checks.js.map +1 -0
- package/schematics/ng-update/data/css-selectors.js +1 -1
- package/schematics/ng-update/data/css-selectors.js.map +1 -0
- package/schematics/ng-update/data/css-tokens.js +1 -1
- package/schematics/ng-update/data/css-tokens.js.map +1 -0
- package/schematics/ng-update/data/element-selectors.js +1 -1
- package/schematics/ng-update/data/element-selectors.js.map +1 -0
- package/schematics/ng-update/data/index.js +1 -1
- package/schematics/ng-update/data/index.js.map +1 -0
- package/schematics/ng-update/data/input-names.js +1 -1
- package/schematics/ng-update/data/input-names.js.map +1 -0
- package/schematics/ng-update/data/method-call-checks.js +1 -1
- package/schematics/ng-update/data/method-call-checks.js.map +1 -0
- package/schematics/ng-update/data/output-names.js +1 -1
- package/schematics/ng-update/data/output-names.js.map +1 -0
- package/schematics/ng-update/data/property-names.js +1 -1
- package/schematics/ng-update/data/property-names.js.map +1 -0
- package/schematics/ng-update/data/symbol-removal.js +1 -1
- package/schematics/ng-update/data/symbol-removal.js.map +1 -0
- package/schematics/ng-update/devkit-file-system.js +2 -3
- package/schematics/ng-update/devkit-file-system.js.map +1 -0
- package/schematics/ng-update/devkit-migration-rule.js +13 -4
- package/schematics/ng-update/devkit-migration-rule.js.map +1 -0
- package/schematics/ng-update/devkit-migration.d.ts +2 -2
- package/schematics/ng-update/devkit-migration.js +1 -1
- package/schematics/ng-update/devkit-migration.js.map +1 -0
- package/schematics/ng-update/find-stylesheets.js +1 -1
- package/schematics/ng-update/find-stylesheets.js.map +1 -0
- package/schematics/ng-update/html-parsing/angular.js +2 -2
- package/schematics/ng-update/html-parsing/angular.js.map +1 -0
- package/schematics/ng-update/html-parsing/elements.js +3 -2
- package/schematics/ng-update/html-parsing/elements.js.map +1 -0
- package/schematics/ng-update/index.js +1 -1
- package/schematics/ng-update/index.js.map +1 -0
- package/schematics/ng-update/migrations/attribute-selectors.js +8 -5
- package/schematics/ng-update/migrations/attribute-selectors.js.map +1 -0
- package/schematics/ng-update/migrations/class-inheritance.js +11 -8
- package/schematics/ng-update/migrations/class-inheritance.js.map +1 -0
- package/schematics/ng-update/migrations/class-names.js +15 -12
- package/schematics/ng-update/migrations/class-names.js.map +1 -0
- package/schematics/ng-update/migrations/constructor-signature.js +10 -7
- package/schematics/ng-update/migrations/constructor-signature.js.map +1 -0
- package/schematics/ng-update/migrations/css-selectors.js +8 -5
- package/schematics/ng-update/migrations/css-selectors.js.map +1 -0
- package/schematics/ng-update/migrations/css-tokens.js +8 -5
- package/schematics/ng-update/migrations/css-tokens.js.map +1 -0
- package/schematics/ng-update/migrations/element-selectors.js +8 -5
- package/schematics/ng-update/migrations/element-selectors.js.map +1 -0
- package/schematics/ng-update/migrations/input-names.js +8 -5
- package/schematics/ng-update/migrations/input-names.js.map +1 -0
- package/schematics/ng-update/migrations/method-call-arguments.js +8 -5
- package/schematics/ng-update/migrations/method-call-arguments.js.map +1 -0
- package/schematics/ng-update/migrations/misc-template.js +6 -3
- package/schematics/ng-update/migrations/misc-template.js.map +1 -0
- package/schematics/ng-update/migrations/output-names.js +8 -5
- package/schematics/ng-update/migrations/output-names.js.map +1 -0
- package/schematics/ng-update/migrations/property-names.js +8 -5
- package/schematics/ng-update/migrations/property-names.js.map +1 -0
- package/schematics/ng-update/migrations/symbol-removal.js +10 -6
- package/schematics/ng-update/migrations/symbol-removal.js.map +1 -0
- package/schematics/ng-update/public-api.js +1 -1
- package/schematics/ng-update/public-api.js.map +1 -0
- package/schematics/ng-update/typescript/base-types.js +1 -1
- package/schematics/ng-update/typescript/base-types.js.map +1 -0
- package/schematics/ng-update/typescript/imports.js +1 -1
- package/schematics/ng-update/typescript/imports.js.map +1 -0
- package/schematics/ng-update/typescript/literal.js +1 -1
- package/schematics/ng-update/typescript/literal.js.map +1 -0
- package/schematics/ng-update/typescript/module-specifiers.js +1 -1
- package/schematics/ng-update/typescript/module-specifiers.js.map +1 -0
- package/schematics/ng-update/upgrade-data.js +1 -1
- package/schematics/ng-update/upgrade-data.js.map +1 -0
- package/schematics/paths.js +1 -1
- package/schematics/paths.js.map +1 -0
- package/schematics/update-tool/component-resource-collector.js +3 -5
- package/schematics/update-tool/component-resource-collector.js.map +1 -0
- package/schematics/update-tool/file-system.js +1 -1
- package/schematics/update-tool/file-system.js.map +1 -0
- package/schematics/update-tool/index.js +2 -8
- package/schematics/update-tool/index.js.map +1 -0
- package/schematics/update-tool/logger.js +1 -1
- package/schematics/update-tool/logger.js.map +1 -0
- package/schematics/update-tool/migration.js +3 -10
- package/schematics/update-tool/migration.js.map +1 -0
- package/schematics/update-tool/public-api.js +1 -1
- package/schematics/update-tool/public-api.js.map +1 -0
- package/schematics/update-tool/target-version.js +1 -1
- package/schematics/update-tool/target-version.js.map +1 -0
- package/schematics/update-tool/update-recorder.js +1 -1
- package/schematics/update-tool/update-recorder.js.map +1 -0
- package/schematics/update-tool/utils/decorators.js +1 -1
- package/schematics/update-tool/utils/decorators.js.map +1 -0
- package/schematics/update-tool/utils/diagnostics.js +1 -1
- package/schematics/update-tool/utils/diagnostics.js.map +1 -0
- package/schematics/update-tool/utils/functions.js +1 -1
- package/schematics/update-tool/utils/functions.js.map +1 -0
- package/schematics/update-tool/utils/imports.js +1 -1
- package/schematics/update-tool/utils/imports.js.map +1 -0
- package/schematics/update-tool/utils/line-mappings.js +1 -1
- package/schematics/update-tool/utils/line-mappings.js.map +1 -0
- package/schematics/update-tool/utils/parse-tsconfig.js +1 -1
- package/schematics/update-tool/utils/parse-tsconfig.js.map +1 -0
- package/schematics/update-tool/utils/property-name.js +1 -1
- package/schematics/update-tool/utils/property-name.js.map +1 -0
- package/schematics/update-tool/utils/virtual-host.js +2 -3
- package/schematics/update-tool/utils/virtual-host.js.map +1 -0
- package/schematics/update-tool/version-changes.js +1 -1
- package/schematics/update-tool/version-changes.js.map +1 -0
- package/schematics/utils/ast/ng-module-imports.js +1 -1
- package/schematics/utils/ast/ng-module-imports.js.map +1 -0
- package/schematics/utils/ast.d.ts +2 -2
- package/schematics/utils/ast.js +23 -12
- package/schematics/utils/ast.js.map +1 -0
- package/schematics/utils/build-component.js +22 -17
- package/schematics/utils/build-component.js.map +1 -0
- package/schematics/utils/get-project.d.ts +2 -2
- package/schematics/utils/get-project.js +1 -1
- package/schematics/utils/get-project.js.map +1 -0
- package/schematics/utils/html-manipulation.js +1 -1
- package/schematics/utils/html-manipulation.js.map +1 -0
- package/schematics/utils/index.js +1 -1
- package/schematics/utils/index.js.map +1 -0
- package/schematics/utils/parse5-element.js +1 -1
- package/schematics/utils/parse5-element.js.map +1 -0
- package/schematics/utils/project-index-file.d.ts +6 -3
- package/schematics/utils/project-index-file.js +30 -7
- package/schematics/utils/project-index-file.js.map +1 -0
- package/schematics/utils/project-main-file.d.ts +3 -2
- package/schematics/utils/project-main-file.js +1 -1
- package/schematics/utils/project-main-file.js.map +1 -0
- package/schematics/utils/project-style-file.d.ts +2 -2
- package/schematics/utils/project-style-file.js +1 -1
- package/schematics/utils/project-style-file.js.map +1 -0
- package/schematics/utils/project-targets.d.ts +5 -4
- package/schematics/utils/project-targets.js +15 -8
- package/schematics/utils/project-targets.js.map +1 -0
- package/schematics/utils/project-tsconfig-paths.d.ts +3 -3
- package/schematics/utils/project-tsconfig-paths.js +26 -14
- package/schematics/utils/project-tsconfig-paths.js.map +1 -0
- package/schematics/utils/schematic-options.d.ts +2 -2
- package/schematics/utils/schematic-options.js +27 -15
- package/schematics/utils/schematic-options.js.map +1 -0
- package/scrolling/index.d.ts +62 -7
- package/{scrolling-module.d-a08a462d.d.ts → scrolling-module.d-DP0Qb7T9.d.ts} +5 -4
- package/{selection-model.d-1a70542c.d.ts → selection-model.d-DNgOONDg.d.ts} +2 -1
- package/stepper/index.d.ts +6 -5
- package/table/index.d.ts +9 -197
- package/testing/index.d.ts +3 -2
- package/testing/selenium-webdriver/index.d.ts +3 -2
- package/testing/testbed/index.d.ts +3 -2
- package/text-field/index.d.ts +5 -2
- package/text-field-prebuilt.css +1 -1
- package/tree/index.d.ts +7 -4
- package/{tree-key-manager-strategy.d-603161dd.d.ts → tree-key-manager-strategy.d-XB6M79l-.d.ts} +1 -1
- package/{unique-selection-dispatcher.d-7993b9f5.d.ts → unique-selection-dispatcher.d-DSFqf1MM.d.ts} +2 -1
- package/{view-repeater.d-79039e1f.d.ts → view-repeater.d-BKljR8u8.d.ts} +2 -1
- package/fesm2022/a11y-module-e6996d20.mjs.map +0 -1
- package/fesm2022/activedescendant-key-manager-1351a9d3.mjs.map +0 -1
- package/fesm2022/array-ee3b4bab.mjs.map +0 -1
- package/fesm2022/backwards-compatibility-bcbe473e.mjs +0 -25
- package/fesm2022/backwards-compatibility-bcbe473e.mjs.map +0 -1
- package/fesm2022/bidi-module-0726b65c.mjs +0 -78
- package/fesm2022/bidi-module-0726b65c.mjs.map +0 -1
- package/fesm2022/breakpoints-observer-d4584b66.mjs.map +0 -1
- package/fesm2022/css-pixel-value-286c9a60.mjs.map +0 -1
- package/fesm2022/data-source-5320b6fd.mjs.map +0 -1
- package/fesm2022/directionality-7ea26429.mjs.map +0 -1
- package/fesm2022/dispose-view-repeater-strategy-b11b87ea.mjs.map +0 -1
- package/fesm2022/element-705567fe.mjs.map +0 -1
- package/fesm2022/fake-event-detection-7055b1bd.mjs.map +0 -1
- package/fesm2022/focus-key-manager-58d29acd.mjs.map +0 -1
- package/fesm2022/focus-monitor-cebaa0d1.mjs.map +0 -1
- package/fesm2022/id-generator-fba495fb.mjs.map +0 -1
- package/fesm2022/keycodes-107cd3e4.mjs.map +0 -1
- package/fesm2022/list-key-manager-c7b5cefb.mjs.map +0 -1
- package/fesm2022/modifiers-33a5859e.mjs +0 -13
- package/fesm2022/modifiers-33a5859e.mjs.map +0 -1
- package/fesm2022/observable-97c0792c.mjs +0 -15
- package/fesm2022/observable-97c0792c.mjs.map +0 -1
- package/fesm2022/observe-content-d2a6b5a0.mjs +0 -210
- package/fesm2022/observe-content-d2a6b5a0.mjs.map +0 -1
- package/fesm2022/overlay-module-863b82c9.mjs.map +0 -1
- package/fesm2022/passive-listeners-c0bdc49f.mjs.map +0 -1
- package/fesm2022/platform-1be098b0.mjs.map +0 -1
- package/fesm2022/portal-directives-c88fea11.mjs +0 -615
- package/fesm2022/portal-directives-c88fea11.mjs.map +0 -1
- package/fesm2022/recycle-view-repeater-strategy-c1712813.mjs.map +0 -1
- package/fesm2022/scrolling-61955dd1.mjs.map +0 -1
- package/fesm2022/scrolling-module-aa9eeac5.mjs +0 -1463
- package/fesm2022/scrolling-module-aa9eeac5.mjs.map +0 -1
- package/fesm2022/selection-model-30243dba.mjs.map +0 -1
- package/fesm2022/shadow-dom-9f403d00.mjs.map +0 -1
- package/fesm2022/style-loader-e14dc585.mjs.map +0 -1
- package/fesm2022/test-environment-34eef1ee.mjs.map +0 -1
- package/fesm2022/text-filtering-b60ba8a2.mjs +0 -698
- package/fesm2022/text-filtering-b60ba8a2.mjs.map +0 -1
- package/fesm2022/tree-key-manager-2f20c79c.mjs.map +0 -1
- package/fesm2022/typeahead-11ae39bd.mjs.map +0 -1
- package/fesm2022/unique-selection-dispatcher-1d6f91d8.mjs.map +0 -1
- package/fesm2022/visually-hidden-83aea4a0.mjs +0 -18
- package/fesm2022/visually-hidden-83aea4a0.mjs.map +0 -1
- package/observe-content.d-c08bc882.d.ts +0 -84
- package/schematics/index.mjs +0 -37
- package/schematics/ng-add/index.mjs +0 -39
- package/schematics/ng-add/package-config.d.ts +0 -12
- package/schematics/ng-add/package-config.js +0 -51
- package/schematics/ng-add/package-config.mjs +0 -51
- package/schematics/ng-add/schema.mjs +0 -10
- package/schematics/ng-generate/drag-drop/index.mjs +0 -33
- package/schematics/ng-generate/drag-drop/schema.mjs +0 -10
- package/schematics/ng-update/data/attribute-selectors.mjs +0 -12
- package/schematics/ng-update/data/class-names.mjs +0 -12
- package/schematics/ng-update/data/constructor-checks.mjs +0 -17
- package/schematics/ng-update/data/css-selectors.mjs +0 -12
- package/schematics/ng-update/data/css-tokens.mjs +0 -12
- package/schematics/ng-update/data/element-selectors.mjs +0 -12
- package/schematics/ng-update/data/index.mjs +0 -35
- package/schematics/ng-update/data/input-names.mjs +0 -12
- package/schematics/ng-update/data/method-call-checks.mjs +0 -12
- package/schematics/ng-update/data/output-names.mjs +0 -12
- package/schematics/ng-update/data/property-names.mjs +0 -12
- package/schematics/ng-update/data/symbol-removal.mjs +0 -12
- package/schematics/ng-update/devkit-file-system.mjs +0 -84
- package/schematics/ng-update/devkit-migration-rule.mjs +0 -133
- package/schematics/ng-update/devkit-migration.mjs +0 -20
- package/schematics/ng-update/find-stylesheets.mjs +0 -41
- package/schematics/ng-update/html-parsing/angular.mjs +0 -51
- package/schematics/ng-update/html-parsing/elements.mjs +0 -62
- package/schematics/ng-update/index.mjs +0 -29
- package/schematics/ng-update/migrations/attribute-selectors.mjs +0 -68
- package/schematics/ng-update/migrations/class-inheritance.mjs +0 -55
- package/schematics/ng-update/migrations/class-names.mjs +0 -88
- package/schematics/ng-update/migrations/constructor-signature.mjs +0 -136
- package/schematics/ng-update/migrations/css-selectors.mjs +0 -72
- package/schematics/ng-update/migrations/css-tokens.mjs +0 -80
- package/schematics/ng-update/migrations/element-selectors.mjs +0 -63
- package/schematics/ng-update/migrations/input-names.mjs +0 -56
- package/schematics/ng-update/migrations/method-call-arguments.mjs +0 -59
- package/schematics/ng-update/migrations/misc-template.mjs +0 -22
- package/schematics/ng-update/migrations/output-names.mjs +0 -43
- package/schematics/ng-update/migrations/property-names.mjs +0 -57
- package/schematics/ng-update/migrations/symbol-removal.mjs +0 -43
- package/schematics/ng-update/public-api.mjs +0 -36
- package/schematics/ng-update/typescript/base-types.mjs +0 -23
- package/schematics/ng-update/typescript/imports.mjs +0 -53
- package/schematics/ng-update/typescript/literal.mjs +0 -32
- package/schematics/ng-update/typescript/module-specifiers.mjs +0 -35
- package/schematics/ng-update/upgrade-data.mjs +0 -40
- package/schematics/paths.mjs +0 -16
- package/schematics/schematics.externs.js +0 -0
- package/schematics/tsconfig.json +0 -29
- package/schematics/update-tool/component-resource-collector.mjs +0 -166
- package/schematics/update-tool/file-system.mjs +0 -18
- package/schematics/update-tool/index.mjs +0 -178
- package/schematics/update-tool/logger.mjs +0 -18
- package/schematics/update-tool/migration.mjs +0 -77
- package/schematics/update-tool/public-api.mjs +0 -33
- package/schematics/update-tool/target-version.mjs +0 -27
- package/schematics/update-tool/update-recorder.mjs +0 -10
- package/schematics/update-tool/update-tool.externs.js +0 -0
- package/schematics/update-tool/utils/decorators.mjs +0 -41
- package/schematics/update-tool/utils/diagnostics.mjs +0 -18
- package/schematics/update-tool/utils/functions.mjs +0 -20
- package/schematics/update-tool/utils/imports.mjs +0 -110
- package/schematics/update-tool/utils/line-mappings.mjs +0 -75
- package/schematics/update-tool/utils/parse-tsconfig.mjs +0 -45
- package/schematics/update-tool/utils/property-name.mjs +0 -27
- package/schematics/update-tool/utils/virtual-host.mjs +0 -72
- package/schematics/update-tool/version-changes.mjs +0 -38
- package/schematics/utils/ast/ng-module-imports.mjs +0 -82
- package/schematics/utils/ast.mjs +0 -68
- package/schematics/utils/build-component.mjs +0 -183
- package/schematics/utils/get-project.mjs +0 -28
- package/schematics/utils/html-manipulation.mjs +0 -91
- package/schematics/utils/index.mjs +0 -36
- package/schematics/utils/parse5-element.mjs +0 -30
- package/schematics/utils/project-index-file.mjs +0 -20
- package/schematics/utils/project-main-file.mjs +0 -25
- package/schematics/utils/project-style-file.mjs +0 -42
- package/schematics/utils/project-targets.mjs +0 -39
- package/schematics/utils/project-tsconfig-paths.mjs +0 -34
- package/schematics/utils/schematic-options.mjs +0 -77
- package/viewport-ruler.d-f3d3e82f.d.ts +0 -57
- /package/{platform.d-0a5b4792.d.ts → platform.d-B3vREl3q.d.ts} +0 -0
- /package/{style-loader.d-19baab84.d.ts → style-loader.d-BXZfQZTF.d.ts} +0 -0
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.findInputsOnElementWithTag = findInputsOnElementWithTag;
|
|
11
|
-
exports.findInputsOnElementWithAttr = findInputsOnElementWithAttr;
|
|
12
|
-
exports.findOutputsOnElementWithTag = findOutputsOnElementWithTag;
|
|
13
|
-
exports.findOutputsOnElementWithAttr = findOutputsOnElementWithAttr;
|
|
14
|
-
const elements_1 = require("./elements");
|
|
15
|
-
/** Finds the specified Angular @Input in the given elements with tag name. */
|
|
16
|
-
function findInputsOnElementWithTag(html, inputName, tagNames) {
|
|
17
|
-
return [
|
|
18
|
-
// Inputs can be also used without brackets (e.g. `<mat-toolbar color="primary">`)
|
|
19
|
-
...(0, elements_1.findAttributeOnElementWithTag)(html, inputName, tagNames),
|
|
20
|
-
// Add one column to the mapped offset because the first bracket for the @Input
|
|
21
|
-
// is part of the attribute and therefore also part of the offset. We only want to return
|
|
22
|
-
// the offset for the inner name of the bracketed input.
|
|
23
|
-
...(0, elements_1.findAttributeOnElementWithTag)(html, `[${inputName}]`, tagNames).map(offset => offset + 1),
|
|
24
|
-
];
|
|
25
|
-
}
|
|
26
|
-
/** Finds the specified Angular @Input in elements that have one of the specified attributes. */
|
|
27
|
-
function findInputsOnElementWithAttr(html, inputName, attrs) {
|
|
28
|
-
return [
|
|
29
|
-
// Inputs can be also used without brackets (e.g. `<button mat-button color="primary">`)
|
|
30
|
-
...(0, elements_1.findAttributeOnElementWithAttrs)(html, inputName, attrs),
|
|
31
|
-
// Add one column to the mapped offset because the first bracket for the @Input
|
|
32
|
-
// is part of the attribute and therefore also part of the offset. We only want to return
|
|
33
|
-
// the offset for the inner name of the bracketed input.
|
|
34
|
-
...(0, elements_1.findAttributeOnElementWithAttrs)(html, `[${inputName}]`, attrs).map(offset => offset + 1),
|
|
35
|
-
];
|
|
36
|
-
}
|
|
37
|
-
/** Finds the specified Angular @Output in the given elements with tag name. */
|
|
38
|
-
function findOutputsOnElementWithTag(html, outputName, tagNames) {
|
|
39
|
-
// Add one column to the mapped offset because the first parenthesis for the @Output
|
|
40
|
-
// is part of the attribute and therefore also part of the offset. We only want to return
|
|
41
|
-
// the offset for the inner name of the output.
|
|
42
|
-
return (0, elements_1.findAttributeOnElementWithTag)(html, `(${outputName})`, tagNames).map(offset => offset + 1);
|
|
43
|
-
}
|
|
44
|
-
/** Finds the specified Angular @Output in elements that have one of the specified attributes. */
|
|
45
|
-
function findOutputsOnElementWithAttr(html, outputName, attrs) {
|
|
46
|
-
// Add one column to the mapped offset because the first bracket for the @Output
|
|
47
|
-
// is part of the attribute and therefore also part of the offset. We only want to return
|
|
48
|
-
// the offset for the inner name of the output.
|
|
49
|
-
return (0, elements_1.findAttributeOnElementWithAttrs)(html, `(${outputName})`, attrs).map(offset => offset + 1);
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvc2NoZW1hdGljcy9uZy11cGRhdGUvaHRtbC1wYXJzaW5nL2FuZ3VsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7QUFLSCxnRUFTQztBQUdELGtFQVNDO0FBR0Qsa0VBS0M7QUFHRCxvRUFLQztBQXhDRCx5Q0FBMEY7QUFFMUYsOEVBQThFO0FBQzlFLFNBQWdCLDBCQUEwQixDQUFDLElBQVksRUFBRSxTQUFpQixFQUFFLFFBQWtCO0lBQzVGLE9BQU87UUFDTCxrRkFBa0Y7UUFDbEYsR0FBRyxJQUFBLHdDQUE2QixFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDO1FBQzNELCtFQUErRTtRQUMvRSx5RkFBeUY7UUFDekYsd0RBQXdEO1FBQ3hELEdBQUcsSUFBQSx3Q0FBNkIsRUFBQyxJQUFJLEVBQUUsSUFBSSxTQUFTLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQzdGLENBQUM7QUFDSixDQUFDO0FBRUQsZ0dBQWdHO0FBQ2hHLFNBQWdCLDJCQUEyQixDQUFDLElBQVksRUFBRSxTQUFpQixFQUFFLEtBQWU7SUFDMUYsT0FBTztRQUNMLHdGQUF3RjtRQUN4RixHQUFHLElBQUEsMENBQStCLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDMUQsK0VBQStFO1FBQy9FLHlGQUF5RjtRQUN6Rix3REFBd0Q7UUFDeEQsR0FBRyxJQUFBLDBDQUErQixFQUFDLElBQUksRUFBRSxJQUFJLFNBQVMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDNUYsQ0FBQztBQUNKLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsU0FBZ0IsMkJBQTJCLENBQUMsSUFBWSxFQUFFLFVBQWtCLEVBQUUsUUFBa0I7SUFDOUYsb0ZBQW9GO0lBQ3BGLHlGQUF5RjtJQUN6RiwrQ0FBK0M7SUFDL0MsT0FBTyxJQUFBLHdDQUE2QixFQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRyxDQUFDO0FBRUQsaUdBQWlHO0FBQ2pHLFNBQWdCLDRCQUE0QixDQUFDLElBQVksRUFBRSxVQUFrQixFQUFFLEtBQWU7SUFDNUYsZ0ZBQWdGO0lBQ2hGLHlGQUF5RjtJQUN6RiwrQ0FBK0M7SUFDL0MsT0FBTyxJQUFBLDBDQUErQixFQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuZGV2L2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2ZpbmRBdHRyaWJ1dGVPbkVsZW1lbnRXaXRoQXR0cnMsIGZpbmRBdHRyaWJ1dGVPbkVsZW1lbnRXaXRoVGFnfSBmcm9tICcuL2VsZW1lbnRzJztcblxuLyoqIEZpbmRzIHRoZSBzcGVjaWZpZWQgQW5ndWxhciBASW5wdXQgaW4gdGhlIGdpdmVuIGVsZW1lbnRzIHdpdGggdGFnIG5hbWUuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZElucHV0c09uRWxlbWVudFdpdGhUYWcoaHRtbDogc3RyaW5nLCBpbnB1dE5hbWU6IHN0cmluZywgdGFnTmFtZXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiBbXG4gICAgLy8gSW5wdXRzIGNhbiBiZSBhbHNvIHVzZWQgd2l0aG91dCBicmFja2V0cyAoZS5nLiBgPG1hdC10b29sYmFyIGNvbG9yPVwicHJpbWFyeVwiPmApXG4gICAgLi4uZmluZEF0dHJpYnV0ZU9uRWxlbWVudFdpdGhUYWcoaHRtbCwgaW5wdXROYW1lLCB0YWdOYW1lcyksXG4gICAgLy8gQWRkIG9uZSBjb2x1bW4gdG8gdGhlIG1hcHBlZCBvZmZzZXQgYmVjYXVzZSB0aGUgZmlyc3QgYnJhY2tldCBmb3IgdGhlIEBJbnB1dFxuICAgIC8vIGlzIHBhcnQgb2YgdGhlIGF0dHJpYnV0ZSBhbmQgdGhlcmVmb3JlIGFsc28gcGFydCBvZiB0aGUgb2Zmc2V0LiBXZSBvbmx5IHdhbnQgdG8gcmV0dXJuXG4gICAgLy8gdGhlIG9mZnNldCBmb3IgdGhlIGlubmVyIG5hbWUgb2YgdGhlIGJyYWNrZXRlZCBpbnB1dC5cbiAgICAuLi5maW5kQXR0cmlidXRlT25FbGVtZW50V2l0aFRhZyhodG1sLCBgWyR7aW5wdXROYW1lfV1gLCB0YWdOYW1lcykubWFwKG9mZnNldCA9PiBvZmZzZXQgKyAxKSxcbiAgXTtcbn1cblxuLyoqIEZpbmRzIHRoZSBzcGVjaWZpZWQgQW5ndWxhciBASW5wdXQgaW4gZWxlbWVudHMgdGhhdCBoYXZlIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZXMuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZElucHV0c09uRWxlbWVudFdpdGhBdHRyKGh0bWw6IHN0cmluZywgaW5wdXROYW1lOiBzdHJpbmcsIGF0dHJzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gW1xuICAgIC8vIElucHV0cyBjYW4gYmUgYWxzbyB1c2VkIHdpdGhvdXQgYnJhY2tldHMgKGUuZy4gYDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5gKVxuICAgIC4uLmZpbmRBdHRyaWJ1dGVPbkVsZW1lbnRXaXRoQXR0cnMoaHRtbCwgaW5wdXROYW1lLCBhdHRycyksXG4gICAgLy8gQWRkIG9uZSBjb2x1bW4gdG8gdGhlIG1hcHBlZCBvZmZzZXQgYmVjYXVzZSB0aGUgZmlyc3QgYnJhY2tldCBmb3IgdGhlIEBJbnB1dFxuICAgIC8vIGlzIHBhcnQgb2YgdGhlIGF0dHJpYnV0ZSBhbmQgdGhlcmVmb3JlIGFsc28gcGFydCBvZiB0aGUgb2Zmc2V0LiBXZSBvbmx5IHdhbnQgdG8gcmV0dXJuXG4gICAgLy8gdGhlIG9mZnNldCBmb3IgdGhlIGlubmVyIG5hbWUgb2YgdGhlIGJyYWNrZXRlZCBpbnB1dC5cbiAgICAuLi5maW5kQXR0cmlidXRlT25FbGVtZW50V2l0aEF0dHJzKGh0bWwsIGBbJHtpbnB1dE5hbWV9XWAsIGF0dHJzKS5tYXAob2Zmc2V0ID0+IG9mZnNldCArIDEpLFxuICBdO1xufVxuXG4vKiogRmluZHMgdGhlIHNwZWNpZmllZCBBbmd1bGFyIEBPdXRwdXQgaW4gdGhlIGdpdmVuIGVsZW1lbnRzIHdpdGggdGFnIG5hbWUuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE91dHB1dHNPbkVsZW1lbnRXaXRoVGFnKGh0bWw6IHN0cmluZywgb3V0cHV0TmFtZTogc3RyaW5nLCB0YWdOYW1lczogc3RyaW5nW10pIHtcbiAgLy8gQWRkIG9uZSBjb2x1bW4gdG8gdGhlIG1hcHBlZCBvZmZzZXQgYmVjYXVzZSB0aGUgZmlyc3QgcGFyZW50aGVzaXMgZm9yIHRoZSBAT3V0cHV0XG4gIC8vIGlzIHBhcnQgb2YgdGhlIGF0dHJpYnV0ZSBhbmQgdGhlcmVmb3JlIGFsc28gcGFydCBvZiB0aGUgb2Zmc2V0LiBXZSBvbmx5IHdhbnQgdG8gcmV0dXJuXG4gIC8vIHRoZSBvZmZzZXQgZm9yIHRoZSBpbm5lciBuYW1lIG9mIHRoZSBvdXRwdXQuXG4gIHJldHVybiBmaW5kQXR0cmlidXRlT25FbGVtZW50V2l0aFRhZyhodG1sLCBgKCR7b3V0cHV0TmFtZX0pYCwgdGFnTmFtZXMpLm1hcChvZmZzZXQgPT4gb2Zmc2V0ICsgMSk7XG59XG5cbi8qKiBGaW5kcyB0aGUgc3BlY2lmaWVkIEFuZ3VsYXIgQE91dHB1dCBpbiBlbGVtZW50cyB0aGF0IGhhdmUgb25lIG9mIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kT3V0cHV0c09uRWxlbWVudFdpdGhBdHRyKGh0bWw6IHN0cmluZywgb3V0cHV0TmFtZTogc3RyaW5nLCBhdHRyczogc3RyaW5nW10pIHtcbiAgLy8gQWRkIG9uZSBjb2x1bW4gdG8gdGhlIG1hcHBlZCBvZmZzZXQgYmVjYXVzZSB0aGUgZmlyc3QgYnJhY2tldCBmb3IgdGhlIEBPdXRwdXRcbiAgLy8gaXMgcGFydCBvZiB0aGUgYXR0cmlidXRlIGFuZCB0aGVyZWZvcmUgYWxzbyBwYXJ0IG9mIHRoZSBvZmZzZXQuIFdlIG9ubHkgd2FudCB0byByZXR1cm5cbiAgLy8gdGhlIG9mZnNldCBmb3IgdGhlIGlubmVyIG5hbWUgb2YgdGhlIG91dHB1dC5cbiAgcmV0dXJuIGZpbmRBdHRyaWJ1dGVPbkVsZW1lbnRXaXRoQXR0cnMoaHRtbCwgYCgke291dHB1dE5hbWV9KWAsIGF0dHJzKS5tYXAob2Zmc2V0ID0+IG9mZnNldCArIDEpO1xufVxuIl19
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.findElementsWithAttribute = findElementsWithAttribute;
|
|
11
|
-
exports.findAttributeOnElementWithTag = findAttributeOnElementWithTag;
|
|
12
|
-
exports.findAttributeOnElementWithAttrs = findAttributeOnElementWithAttrs;
|
|
13
|
-
exports.getStartOffsetOfAttribute = getStartOffsetOfAttribute;
|
|
14
|
-
const parse5_1 = require("parse5");
|
|
15
|
-
/**
|
|
16
|
-
* Parses a HTML fragment and traverses all AST nodes in order find elements that
|
|
17
|
-
* include the specified attribute.
|
|
18
|
-
*/
|
|
19
|
-
function findElementsWithAttribute(html, attributeName) {
|
|
20
|
-
const document = (0, parse5_1.parseFragment)(html, { sourceCodeLocationInfo: true });
|
|
21
|
-
const elements = [];
|
|
22
|
-
const visitNodes = (nodes) => {
|
|
23
|
-
nodes.forEach(n => {
|
|
24
|
-
const node = n;
|
|
25
|
-
if (node.childNodes) {
|
|
26
|
-
visitNodes(node.childNodes);
|
|
27
|
-
}
|
|
28
|
-
if (node.attrs?.some(attr => attr.name === attributeName.toLowerCase())) {
|
|
29
|
-
elements.push(node);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
};
|
|
33
|
-
visitNodes(document.childNodes);
|
|
34
|
-
return elements;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Finds elements with explicit tag names that also contain the specified attribute. Returns the
|
|
38
|
-
* attribute start offset based on the specified HTML.
|
|
39
|
-
*/
|
|
40
|
-
function findAttributeOnElementWithTag(html, name, tagNames) {
|
|
41
|
-
return findElementsWithAttribute(html, name)
|
|
42
|
-
.filter(element => tagNames.includes(element.tagName))
|
|
43
|
-
.map(element => getStartOffsetOfAttribute(element, name));
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Finds elements that contain the given attribute and contain at least one of the other
|
|
47
|
-
* specified attributes. Returns the primary attribute's start offset based on the specified HTML.
|
|
48
|
-
*/
|
|
49
|
-
function findAttributeOnElementWithAttrs(html, name, attrs) {
|
|
50
|
-
return findElementsWithAttribute(html, name)
|
|
51
|
-
.filter(element => attrs.some(attr => hasElementAttribute(element, attr)))
|
|
52
|
-
.map(element => getStartOffsetOfAttribute(element, name));
|
|
53
|
-
}
|
|
54
|
-
/** Shorthand function that checks if the specified element contains the given attribute. */
|
|
55
|
-
function hasElementAttribute(element, attributeName) {
|
|
56
|
-
return element.attrs && element.attrs.some(attr => attr.name === attributeName.toLowerCase());
|
|
57
|
-
}
|
|
58
|
-
/** Gets the start offset of the given attribute from a Parse5 element. */
|
|
59
|
-
function getStartOffsetOfAttribute(element, attributeName) {
|
|
60
|
-
return element.sourceCodeLocation.attrs[attributeName.toLowerCase()].startOffset;
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvbmctdXBkYXRlL2h0bWwtcGFyc2luZy9lbGVtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOztBQVNILDhEQXFCQztBQU1ELHNFQUlDO0FBTUQsMEVBSUM7QUFRRCw4REFFQztBQTFERCxtQ0FBcUM7QUFHckM7OztHQUdHO0FBQ0gsU0FBZ0IseUJBQXlCLENBQUMsSUFBWSxFQUFFLGFBQXFCO0lBQzNFLE1BQU0sUUFBUSxHQUFHLElBQUEsc0JBQWEsRUFBQyxJQUFJLEVBQUUsRUFBQyxzQkFBc0IsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFjLEVBQUUsQ0FBQztJQUUvQixNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWtCLEVBQUUsRUFBRTtRQUN4QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLENBQVksQ0FBQztZQUUxQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDeEUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWhDLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQiw2QkFBNkIsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLFFBQWtCO0lBQzFGLE9BQU8seUJBQXlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztTQUN6QyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNyRCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsK0JBQStCLENBQUMsSUFBWSxFQUFFLElBQVksRUFBRSxLQUFlO0lBQ3pGLE9BQU8seUJBQXlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztTQUN6QyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDekUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMseUJBQXlCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELDRGQUE0RjtBQUM1RixTQUFTLG1CQUFtQixDQUFDLE9BQWdCLEVBQUUsYUFBcUI7SUFDbEUsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNoRyxDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLFNBQWdCLHlCQUF5QixDQUFDLE9BQVksRUFBRSxhQUFxQjtJQUMzRSxPQUFPLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDO0FBQ25GLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5kZXYvbGljZW5zZVxuICovXG5cbmltcG9ydCB7cGFyc2VGcmFnbWVudH0gZnJvbSAncGFyc2U1JztcbmltcG9ydCB7Q2hpbGROb2RlLCBFbGVtZW50fSBmcm9tICcuLi8uLi91dGlscyc7XG5cbi8qKlxuICogUGFyc2VzIGEgSFRNTCBmcmFnbWVudCBhbmQgdHJhdmVyc2VzIGFsbCBBU1Qgbm9kZXMgaW4gb3JkZXIgZmluZCBlbGVtZW50cyB0aGF0XG4gKiBpbmNsdWRlIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVsZW1lbnRzV2l0aEF0dHJpYnV0ZShodG1sOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZykge1xuICBjb25zdCBkb2N1bWVudCA9IHBhcnNlRnJhZ21lbnQoaHRtbCwge3NvdXJjZUNvZGVMb2NhdGlvbkluZm86IHRydWV9KTtcbiAgY29uc3QgZWxlbWVudHM6IEVsZW1lbnRbXSA9IFtdO1xuXG4gIGNvbnN0IHZpc2l0Tm9kZXMgPSAobm9kZXM6IENoaWxkTm9kZVtdKSA9PiB7XG4gICAgbm9kZXMuZm9yRWFjaChuID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBuIGFzIEVsZW1lbnQ7XG5cbiAgICAgIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICAgICAgdmlzaXROb2Rlcyhub2RlLmNoaWxkTm9kZXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5hdHRycz8uc29tZShhdHRyID0+IGF0dHIubmFtZSA9PT0gYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICBlbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHZpc2l0Tm9kZXMoZG9jdW1lbnQuY2hpbGROb2Rlcyk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG4vKipcbiAqIEZpbmRzIGVsZW1lbnRzIHdpdGggZXhwbGljaXQgdGFnIG5hbWVzIHRoYXQgYWxzbyBjb250YWluIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlLiBSZXR1cm5zIHRoZVxuICogYXR0cmlidXRlIHN0YXJ0IG9mZnNldCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIEhUTUwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQXR0cmlidXRlT25FbGVtZW50V2l0aFRhZyhodG1sOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdGFnTmFtZXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiBmaW5kRWxlbWVudHNXaXRoQXR0cmlidXRlKGh0bWwsIG5hbWUpXG4gICAgLmZpbHRlcihlbGVtZW50ID0+IHRhZ05hbWVzLmluY2x1ZGVzKGVsZW1lbnQudGFnTmFtZSkpXG4gICAgLm1hcChlbGVtZW50ID0+IGdldFN0YXJ0T2Zmc2V0T2ZBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkpO1xufVxuXG4vKipcbiAqIEZpbmRzIGVsZW1lbnRzIHRoYXQgY29udGFpbiB0aGUgZ2l2ZW4gYXR0cmlidXRlIGFuZCBjb250YWluIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3RoZXJcbiAqIHNwZWNpZmllZCBhdHRyaWJ1dGVzLiBSZXR1cm5zIHRoZSBwcmltYXJ5IGF0dHJpYnV0ZSdzIHN0YXJ0IG9mZnNldCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIEhUTUwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQXR0cmlidXRlT25FbGVtZW50V2l0aEF0dHJzKGh0bWw6IHN0cmluZywgbmFtZTogc3RyaW5nLCBhdHRyczogc3RyaW5nW10pIHtcbiAgcmV0dXJuIGZpbmRFbGVtZW50c1dpdGhBdHRyaWJ1dGUoaHRtbCwgbmFtZSlcbiAgICAuZmlsdGVyKGVsZW1lbnQgPT4gYXR0cnMuc29tZShhdHRyID0+IGhhc0VsZW1lbnRBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cikpKVxuICAgIC5tYXAoZWxlbWVudCA9PiBnZXRTdGFydE9mZnNldE9mQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUpKTtcbn1cblxuLyoqIFNob3J0aGFuZCBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgY29udGFpbnMgdGhlIGdpdmVuIGF0dHJpYnV0ZS4gKi9cbmZ1bmN0aW9uIGhhc0VsZW1lbnRBdHRyaWJ1dGUoZWxlbWVudDogRWxlbWVudCwgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbGVtZW50LmF0dHJzICYmIGVsZW1lbnQuYXR0cnMuc29tZShhdHRyID0+IGF0dHIubmFtZSA9PT0gYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuLyoqIEdldHMgdGhlIHN0YXJ0IG9mZnNldCBvZiB0aGUgZ2l2ZW4gYXR0cmlidXRlIGZyb20gYSBQYXJzZTUgZWxlbWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFydE9mZnNldE9mQXR0cmlidXRlKGVsZW1lbnQ6IGFueSwgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVsZW1lbnQuc291cmNlQ29kZUxvY2F0aW9uLmF0dHJzW2F0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKV0uc3RhcnRPZmZzZXQ7XG59XG4iXX0=
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.updateToV20 = updateToV20;
|
|
11
|
-
const target_version_1 = require("../update-tool/target-version");
|
|
12
|
-
const upgrade_data_1 = require("./upgrade-data");
|
|
13
|
-
const devkit_migration_rule_1 = require("./devkit-migration-rule");
|
|
14
|
-
const cdkMigrations = [];
|
|
15
|
-
/** Entry point for the migration schematics with target of Angular CDK 20.0.0 */
|
|
16
|
-
function updateToV20() {
|
|
17
|
-
return (0, devkit_migration_rule_1.createMigrationSchematicRule)(target_version_1.TargetVersion.V20, cdkMigrations, upgrade_data_1.cdkUpgradeData, onMigrationComplete);
|
|
18
|
-
}
|
|
19
|
-
/** Function that will be called when the migration completed. */
|
|
20
|
-
function onMigrationComplete(context, targetVersion, hasFailures) {
|
|
21
|
-
context.logger.info('');
|
|
22
|
-
context.logger.info(` ✓ Updated Angular CDK to ${targetVersion}`);
|
|
23
|
-
context.logger.info('');
|
|
24
|
-
if (hasFailures) {
|
|
25
|
-
context.logger.warn(' ⚠ Some issues were detected but could not be fixed automatically. Please check the ' +
|
|
26
|
-
'output above and fix these issues manually.');
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvbmctdXBkYXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7O0FBVUgsa0NBT0M7QUFkRCxrRUFBNEQ7QUFDNUQsaURBQThDO0FBQzlDLG1FQUE4RjtBQUU5RixNQUFNLGFBQWEsR0FBOEIsRUFBRSxDQUFDO0FBRXBELGlGQUFpRjtBQUNqRixTQUFnQixXQUFXO0lBQ3pCLE9BQU8sSUFBQSxvREFBNEIsRUFDakMsOEJBQWEsQ0FBQyxHQUFHLEVBQ2pCLGFBQWEsRUFDYiw2QkFBYyxFQUNkLG1CQUFtQixDQUNwQixDQUFDO0FBQ0osQ0FBQztBQUVELGlFQUFpRTtBQUNqRSxTQUFTLG1CQUFtQixDQUMxQixPQUF5QixFQUN6QixhQUE0QixFQUM1QixXQUFvQjtJQUVwQixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4QixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywrQkFBK0IsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNwRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV4QixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNqQix3RkFBd0Y7WUFDdEYsNkNBQTZDLENBQ2hELENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmRldi9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtSdWxlLCBTY2hlbWF0aWNDb250ZXh0fSBmcm9tICdAYW5ndWxhci1kZXZraXQvc2NoZW1hdGljcyc7XG5pbXBvcnQge1RhcmdldFZlcnNpb259IGZyb20gJy4uL3VwZGF0ZS10b29sL3RhcmdldC12ZXJzaW9uJztcbmltcG9ydCB7Y2RrVXBncmFkZURhdGF9IGZyb20gJy4vdXBncmFkZS1kYXRhJztcbmltcG9ydCB7Y3JlYXRlTWlncmF0aW9uU2NoZW1hdGljUnVsZSwgTnVsbGFibGVEZXZraXRNaWdyYXRpb259IGZyb20gJy4vZGV2a2l0LW1pZ3JhdGlvbi1ydWxlJztcblxuY29uc3QgY2RrTWlncmF0aW9uczogTnVsbGFibGVEZXZraXRNaWdyYXRpb25bXSA9IFtdO1xuXG4vKiogRW50cnkgcG9pbnQgZm9yIHRoZSBtaWdyYXRpb24gc2NoZW1hdGljcyB3aXRoIHRhcmdldCBvZiBBbmd1bGFyIENESyAyMC4wLjAgKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUb1YyMCgpOiBSdWxlIHtcbiAgcmV0dXJuIGNyZWF0ZU1pZ3JhdGlvblNjaGVtYXRpY1J1bGUoXG4gICAgVGFyZ2V0VmVyc2lvbi5WMjAsXG4gICAgY2RrTWlncmF0aW9ucyxcbiAgICBjZGtVcGdyYWRlRGF0YSxcbiAgICBvbk1pZ3JhdGlvbkNvbXBsZXRlLFxuICApO1xufVxuXG4vKiogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBtaWdyYXRpb24gY29tcGxldGVkLiAqL1xuZnVuY3Rpb24gb25NaWdyYXRpb25Db21wbGV0ZShcbiAgY29udGV4dDogU2NoZW1hdGljQ29udGV4dCxcbiAgdGFyZ2V0VmVyc2lvbjogVGFyZ2V0VmVyc2lvbixcbiAgaGFzRmFpbHVyZXM6IGJvb2xlYW4sXG4pIHtcbiAgY29udGV4dC5sb2dnZXIuaW5mbygnJyk7XG4gIGNvbnRleHQubG9nZ2VyLmluZm8oYCAg4pyTICBVcGRhdGVkIEFuZ3VsYXIgQ0RLIHRvICR7dGFyZ2V0VmVyc2lvbn1gKTtcbiAgY29udGV4dC5sb2dnZXIuaW5mbygnJyk7XG5cbiAgaWYgKGhhc0ZhaWx1cmVzKSB7XG4gICAgY29udGV4dC5sb2dnZXIud2FybihcbiAgICAgICcgIOKaoCAgU29tZSBpc3N1ZXMgd2VyZSBkZXRlY3RlZCBidXQgY291bGQgbm90IGJlIGZpeGVkIGF1dG9tYXRpY2FsbHkuIFBsZWFzZSBjaGVjayB0aGUgJyArXG4gICAgICAgICdvdXRwdXQgYWJvdmUgYW5kIGZpeCB0aGVzZSBpc3N1ZXMgbWFudWFsbHkuJyxcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.AttributeSelectorsMigration = void 0;
|
|
11
|
-
const ts = require("typescript");
|
|
12
|
-
const migration_1 = require("../../update-tool/migration");
|
|
13
|
-
const literal_1 = require("../typescript/literal");
|
|
14
|
-
const upgrade_data_1 = require("../upgrade-data");
|
|
15
|
-
/**
|
|
16
|
-
* Migration that walks through every string literal, template and stylesheet
|
|
17
|
-
* in order to switch deprecated attribute selectors to the updated selector.
|
|
18
|
-
*/
|
|
19
|
-
class AttributeSelectorsMigration extends migration_1.Migration {
|
|
20
|
-
/** Required upgrade changes for specified target version. */
|
|
21
|
-
data = (0, upgrade_data_1.getVersionUpgradeData)(this, 'attributeSelectors');
|
|
22
|
-
// Only enable the migration rule if there is upgrade data.
|
|
23
|
-
enabled = this.data.length !== 0;
|
|
24
|
-
visitNode(node) {
|
|
25
|
-
if (ts.isStringLiteralLike(node)) {
|
|
26
|
-
this._visitStringLiteralLike(node);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
visitTemplate(template) {
|
|
30
|
-
this.data.forEach(selector => {
|
|
31
|
-
(0, literal_1.findAllSubstringIndices)(template.content, selector.replace)
|
|
32
|
-
.map(offset => template.start + offset)
|
|
33
|
-
.forEach(start => this._replaceSelector(template.filePath, start, selector));
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
visitStylesheet(stylesheet) {
|
|
37
|
-
this.data.forEach(selector => {
|
|
38
|
-
const currentSelector = `[${selector.replace}]`;
|
|
39
|
-
const updatedSelector = `[${selector.replaceWith}]`;
|
|
40
|
-
(0, literal_1.findAllSubstringIndices)(stylesheet.content, currentSelector)
|
|
41
|
-
.map(offset => stylesheet.start + offset)
|
|
42
|
-
.forEach(start => this._replaceSelector(stylesheet.filePath, start, {
|
|
43
|
-
replace: currentSelector,
|
|
44
|
-
replaceWith: updatedSelector,
|
|
45
|
-
}));
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
_visitStringLiteralLike(literal) {
|
|
49
|
-
if (literal.parent && literal.parent.kind !== ts.SyntaxKind.CallExpression) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const literalText = literal.getText();
|
|
53
|
-
const filePath = this.fileSystem.resolve(literal.getSourceFile().fileName);
|
|
54
|
-
this.data.forEach(selector => {
|
|
55
|
-
(0, literal_1.findAllSubstringIndices)(literalText, selector.replace)
|
|
56
|
-
.map(offset => literal.getStart() + offset)
|
|
57
|
-
.forEach(start => this._replaceSelector(filePath, start, selector));
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
_replaceSelector(filePath, start, data) {
|
|
61
|
-
this.fileSystem
|
|
62
|
-
.edit(filePath)
|
|
63
|
-
.remove(start, data.replace.length)
|
|
64
|
-
.insertRight(start, data.replaceWith);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
exports.AttributeSelectorsMigration = AttributeSelectorsMigration;
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvc2NoZW1hdGljcy9uZy11cGRhdGUvbWlncmF0aW9ucy9hdHRyaWJ1dGUtc2VsZWN0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7OztBQUVILGlDQUFpQztBQUdqQywyREFBc0Q7QUFFdEQsbURBQThEO0FBQzlELGtEQUFtRTtBQUVuRTs7O0dBR0c7QUFDSCxNQUFhLDJCQUE0QixTQUFRLHFCQUFzQjtJQUNyRSw2REFBNkQ7SUFDN0QsSUFBSSxHQUFHLElBQUEsb0NBQXFCLEVBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFFekQsMkRBQTJEO0lBQzNELE9BQU8sR0FBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFFakMsU0FBUyxDQUFDLElBQWE7UUFDOUIsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFUSxhQUFhLENBQUMsUUFBMEI7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0IsSUFBQSxpQ0FBdUIsRUFBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUM7aUJBQ3hELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO2lCQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUSxlQUFlLENBQUMsVUFBNEI7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUM7WUFDaEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxRQUFRLENBQUMsV0FBVyxHQUFHLENBQUM7WUFFcEQsSUFBQSxpQ0FBdUIsRUFBQyxVQUFVLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQztpQkFDekQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7aUJBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFDaEQsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLFdBQVcsRUFBRSxlQUFlO2FBQzdCLENBQUMsQ0FDSCxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsT0FBNkI7UUFDM0QsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0UsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLElBQUEsaUNBQXVCLEVBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUM7aUJBQ25ELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUM7aUJBQzFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLFFBQXVCLEVBQ3ZCLEtBQWEsRUFDYixJQUFrQztRQUVsQyxJQUFJLENBQUMsVUFBVTthQUNaLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDZCxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQ2xDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRjtBQTlERCxrRUE4REMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5kZXYvbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtXb3Jrc3BhY2VQYXRofSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC9maWxlLXN5c3RlbSc7XG5pbXBvcnQge1Jlc29sdmVkUmVzb3VyY2V9IGZyb20gJy4uLy4uL3VwZGF0ZS10b29sL2NvbXBvbmVudC1yZXNvdXJjZS1jb2xsZWN0b3InO1xuaW1wb3J0IHtNaWdyYXRpb259IGZyb20gJy4uLy4uL3VwZGF0ZS10b29sL21pZ3JhdGlvbic7XG5pbXBvcnQge0F0dHJpYnV0ZVNlbGVjdG9yVXBncmFkZURhdGF9IGZyb20gJy4uL2RhdGEvYXR0cmlidXRlLXNlbGVjdG9ycyc7XG5pbXBvcnQge2ZpbmRBbGxTdWJzdHJpbmdJbmRpY2VzfSBmcm9tICcuLi90eXBlc2NyaXB0L2xpdGVyYWwnO1xuaW1wb3J0IHtnZXRWZXJzaW9uVXBncmFkZURhdGEsIFVwZ3JhZGVEYXRhfSBmcm9tICcuLi91cGdyYWRlLWRhdGEnO1xuXG4vKipcbiAqIE1pZ3JhdGlvbiB0aGF0IHdhbGtzIHRocm91Z2ggZXZlcnkgc3RyaW5nIGxpdGVyYWwsIHRlbXBsYXRlIGFuZCBzdHlsZXNoZWV0XG4gKiBpbiBvcmRlciB0byBzd2l0Y2ggZGVwcmVjYXRlZCBhdHRyaWJ1dGUgc2VsZWN0b3JzIHRvIHRoZSB1cGRhdGVkIHNlbGVjdG9yLlxuICovXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlU2VsZWN0b3JzTWlncmF0aW9uIGV4dGVuZHMgTWlncmF0aW9uPFVwZ3JhZGVEYXRhPiB7XG4gIC8qKiBSZXF1aXJlZCB1cGdyYWRlIGNoYW5nZXMgZm9yIHNwZWNpZmllZCB0YXJnZXQgdmVyc2lvbi4gKi9cbiAgZGF0YSA9IGdldFZlcnNpb25VcGdyYWRlRGF0YSh0aGlzLCAnYXR0cmlidXRlU2VsZWN0b3JzJyk7XG5cbiAgLy8gT25seSBlbmFibGUgdGhlIG1pZ3JhdGlvbiBydWxlIGlmIHRoZXJlIGlzIHVwZ3JhZGUgZGF0YS5cbiAgZW5hYmxlZDogYm9vbGVhbiA9IHRoaXMuZGF0YS5sZW5ndGggIT09IDA7XG5cbiAgb3ZlcnJpZGUgdmlzaXROb2RlKG5vZGU6IHRzLk5vZGUpIHtcbiAgICBpZiAodHMuaXNTdHJpbmdMaXRlcmFsTGlrZShub2RlKSkge1xuICAgICAgdGhpcy5fdmlzaXRTdHJpbmdMaXRlcmFsTGlrZShub2RlKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSB2aXNpdFRlbXBsYXRlKHRlbXBsYXRlOiBSZXNvbHZlZFJlc291cmNlKSB7XG4gICAgdGhpcy5kYXRhLmZvckVhY2goc2VsZWN0b3IgPT4ge1xuICAgICAgZmluZEFsbFN1YnN0cmluZ0luZGljZXModGVtcGxhdGUuY29udGVudCwgc2VsZWN0b3IucmVwbGFjZSlcbiAgICAgICAgLm1hcChvZmZzZXQgPT4gdGVtcGxhdGUuc3RhcnQgKyBvZmZzZXQpXG4gICAgICAgIC5mb3JFYWNoKHN0YXJ0ID0+IHRoaXMuX3JlcGxhY2VTZWxlY3Rvcih0ZW1wbGF0ZS5maWxlUGF0aCwgc3RhcnQsIHNlbGVjdG9yKSk7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSB2aXNpdFN0eWxlc2hlZXQoc3R5bGVzaGVldDogUmVzb2x2ZWRSZXNvdXJjZSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5mb3JFYWNoKHNlbGVjdG9yID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RvciA9IGBbJHtzZWxlY3Rvci5yZXBsYWNlfV1gO1xuICAgICAgY29uc3QgdXBkYXRlZFNlbGVjdG9yID0gYFske3NlbGVjdG9yLnJlcGxhY2VXaXRofV1gO1xuXG4gICAgICBmaW5kQWxsU3Vic3RyaW5nSW5kaWNlcyhzdHlsZXNoZWV0LmNvbnRlbnQsIGN1cnJlbnRTZWxlY3RvcilcbiAgICAgICAgLm1hcChvZmZzZXQgPT4gc3R5bGVzaGVldC5zdGFydCArIG9mZnNldClcbiAgICAgICAgLmZvckVhY2goc3RhcnQgPT5cbiAgICAgICAgICB0aGlzLl9yZXBsYWNlU2VsZWN0b3Ioc3R5bGVzaGVldC5maWxlUGF0aCwgc3RhcnQsIHtcbiAgICAgICAgICAgIHJlcGxhY2U6IGN1cnJlbnRTZWxlY3RvcixcbiAgICAgICAgICAgIHJlcGxhY2VXaXRoOiB1cGRhdGVkU2VsZWN0b3IsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF92aXNpdFN0cmluZ0xpdGVyYWxMaWtlKGxpdGVyYWw6IHRzLlN0cmluZ0xpdGVyYWxMaWtlKSB7XG4gICAgaWYgKGxpdGVyYWwucGFyZW50ICYmIGxpdGVyYWwucGFyZW50LmtpbmQgIT09IHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaXRlcmFsVGV4dCA9IGxpdGVyYWwuZ2V0VGV4dCgpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5maWxlU3lzdGVtLnJlc29sdmUobGl0ZXJhbC5nZXRTb3VyY2VGaWxlKCkuZmlsZU5hbWUpO1xuXG4gICAgdGhpcy5kYXRhLmZvckVhY2goc2VsZWN0b3IgPT4ge1xuICAgICAgZmluZEFsbFN1YnN0cmluZ0luZGljZXMobGl0ZXJhbFRleHQsIHNlbGVjdG9yLnJlcGxhY2UpXG4gICAgICAgIC5tYXAob2Zmc2V0ID0+IGxpdGVyYWwuZ2V0U3RhcnQoKSArIG9mZnNldClcbiAgICAgICAgLmZvckVhY2goc3RhcnQgPT4gdGhpcy5fcmVwbGFjZVNlbGVjdG9yKGZpbGVQYXRoLCBzdGFydCwgc2VsZWN0b3IpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcGxhY2VTZWxlY3RvcihcbiAgICBmaWxlUGF0aDogV29ya3NwYWNlUGF0aCxcbiAgICBzdGFydDogbnVtYmVyLFxuICAgIGRhdGE6IEF0dHJpYnV0ZVNlbGVjdG9yVXBncmFkZURhdGEsXG4gICkge1xuICAgIHRoaXMuZmlsZVN5c3RlbVxuICAgICAgLmVkaXQoZmlsZVBhdGgpXG4gICAgICAucmVtb3ZlKHN0YXJ0LCBkYXRhLnJlcGxhY2UubGVuZ3RoKVxuICAgICAgLmluc2VydFJpZ2h0KHN0YXJ0LCBkYXRhLnJlcGxhY2VXaXRoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.ClassInheritanceMigration = void 0;
|
|
11
|
-
const ts = require("typescript");
|
|
12
|
-
const migration_1 = require("../../update-tool/migration");
|
|
13
|
-
const base_types_1 = require("../typescript/base-types");
|
|
14
|
-
const upgrade_data_1 = require("../upgrade-data");
|
|
15
|
-
/**
|
|
16
|
-
* Migration that identifies class declarations that extend CDK or Material classes
|
|
17
|
-
* which had a public property change.
|
|
18
|
-
*/
|
|
19
|
-
class ClassInheritanceMigration extends migration_1.Migration {
|
|
20
|
-
/**
|
|
21
|
-
* Map of classes that have been updated. Each class name maps to the according property
|
|
22
|
-
* change data.
|
|
23
|
-
*/
|
|
24
|
-
propertyNames = new Map();
|
|
25
|
-
// Only enable the migration rule if there is upgrade data.
|
|
26
|
-
enabled = this.propertyNames.size !== 0;
|
|
27
|
-
init() {
|
|
28
|
-
(0, upgrade_data_1.getVersionUpgradeData)(this, 'propertyNames')
|
|
29
|
-
.filter(data => data.limitedTo && data.limitedTo.classes)
|
|
30
|
-
.forEach(data => data.limitedTo.classes.forEach(name => this.propertyNames.set(name, data)));
|
|
31
|
-
}
|
|
32
|
-
visitNode(node) {
|
|
33
|
-
if (ts.isClassDeclaration(node)) {
|
|
34
|
-
this._visitClassDeclaration(node);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
_visitClassDeclaration(node) {
|
|
38
|
-
const baseTypes = (0, base_types_1.determineBaseTypes)(node);
|
|
39
|
-
const className = node.name ? node.name.text : '{unknown-name}';
|
|
40
|
-
if (!baseTypes) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
baseTypes.forEach(typeName => {
|
|
44
|
-
const data = this.propertyNames.get(typeName);
|
|
45
|
-
if (data) {
|
|
46
|
-
this.createFailureAtNode(node, `Found class "${className}" which extends class ` +
|
|
47
|
-
`"${typeName}". Please note that the base class property ` +
|
|
48
|
-
`"${data.replace}" has changed to "${data.replaceWith}". ` +
|
|
49
|
-
`You may need to update your class as well.`);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
exports.ClassInheritanceMigration = ClassInheritanceMigration;
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtaW5oZXJpdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvbmctdXBkYXRlL21pZ3JhdGlvbnMvY2xhc3MtaW5oZXJpdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBRUgsaUNBQWlDO0FBQ2pDLDJEQUFzRDtBQUV0RCx5REFBNEQ7QUFDNUQsa0RBQW1FO0FBRW5FOzs7R0FHRztBQUNILE1BQWEseUJBQTBCLFNBQVEscUJBQXNCO0lBQ25FOzs7T0FHRztJQUNILGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztJQUUzRCwyREFBMkQ7SUFDM0QsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUUvQixJQUFJO1FBQ1gsSUFBQSxvQ0FBcUIsRUFBQyxJQUFJLEVBQUUsZUFBZSxDQUFDO2FBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7YUFDeEQsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRVEsU0FBUyxDQUFDLElBQWE7UUFDOUIsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxJQUF5QjtRQUN0RCxNQUFNLFNBQVMsR0FBRyxJQUFBLCtCQUFrQixFQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUVoRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPO1FBQ1QsQ0FBQztRQUVELFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFOUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksRUFDSixnQkFBZ0IsU0FBUyx3QkFBd0I7b0JBQy9DLElBQUksUUFBUSw4Q0FBOEM7b0JBQzFELElBQUksSUFBSSxDQUFDLE9BQU8scUJBQXFCLElBQUksQ0FBQyxXQUFXLEtBQUs7b0JBQzFELDRDQUE0QyxDQUMvQyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBNUNELDhEQTRDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmRldi9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge01pZ3JhdGlvbn0gZnJvbSAnLi4vLi4vdXBkYXRlLXRvb2wvbWlncmF0aW9uJztcbmltcG9ydCB7UHJvcGVydHlOYW1lVXBncmFkZURhdGF9IGZyb20gJy4uL2RhdGEvcHJvcGVydHktbmFtZXMnO1xuaW1wb3J0IHtkZXRlcm1pbmVCYXNlVHlwZXN9IGZyb20gJy4uL3R5cGVzY3JpcHQvYmFzZS10eXBlcyc7XG5pbXBvcnQge2dldFZlcnNpb25VcGdyYWRlRGF0YSwgVXBncmFkZURhdGF9IGZyb20gJy4uL3VwZ3JhZGUtZGF0YSc7XG5cbi8qKlxuICogTWlncmF0aW9uIHRoYXQgaWRlbnRpZmllcyBjbGFzcyBkZWNsYXJhdGlvbnMgdGhhdCBleHRlbmQgQ0RLIG9yIE1hdGVyaWFsIGNsYXNzZXNcbiAqIHdoaWNoIGhhZCBhIHB1YmxpYyBwcm9wZXJ0eSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGFzc0luaGVyaXRhbmNlTWlncmF0aW9uIGV4dGVuZHMgTWlncmF0aW9uPFVwZ3JhZGVEYXRhPiB7XG4gIC8qKlxuICAgKiBNYXAgb2YgY2xhc3NlcyB0aGF0IGhhdmUgYmVlbiB1cGRhdGVkLiBFYWNoIGNsYXNzIG5hbWUgbWFwcyB0byB0aGUgYWNjb3JkaW5nIHByb3BlcnR5XG4gICAqIGNoYW5nZSBkYXRhLlxuICAgKi9cbiAgcHJvcGVydHlOYW1lcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9wZXJ0eU5hbWVVcGdyYWRlRGF0YT4oKTtcblxuICAvLyBPbmx5IGVuYWJsZSB0aGUgbWlncmF0aW9uIHJ1bGUgaWYgdGhlcmUgaXMgdXBncmFkZSBkYXRhLlxuICBlbmFibGVkID0gdGhpcy5wcm9wZXJ0eU5hbWVzLnNpemUgIT09IDA7XG5cbiAgb3ZlcnJpZGUgaW5pdCgpOiB2b2lkIHtcbiAgICBnZXRWZXJzaW9uVXBncmFkZURhdGEodGhpcywgJ3Byb3BlcnR5TmFtZXMnKVxuICAgICAgLmZpbHRlcihkYXRhID0+IGRhdGEubGltaXRlZFRvICYmIGRhdGEubGltaXRlZFRvLmNsYXNzZXMpXG4gICAgICAuZm9yRWFjaChkYXRhID0+IGRhdGEubGltaXRlZFRvLmNsYXNzZXMuZm9yRWFjaChuYW1lID0+IHRoaXMucHJvcGVydHlOYW1lcy5zZXQobmFtZSwgZGF0YSkpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0Tm9kZShub2RlOiB0cy5Ob2RlKTogdm9pZCB7XG4gICAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgdGhpcy5fdmlzaXRDbGFzc0RlY2xhcmF0aW9uKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Zpc2l0Q2xhc3NEZWNsYXJhdGlvbihub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uKSB7XG4gICAgY29uc3QgYmFzZVR5cGVzID0gZGV0ZXJtaW5lQmFzZVR5cGVzKG5vZGUpO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5vZGUubmFtZSA/IG5vZGUubmFtZS50ZXh0IDogJ3t1bmtub3duLW5hbWV9JztcblxuICAgIGlmICghYmFzZVR5cGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYmFzZVR5cGVzLmZvckVhY2godHlwZU5hbWUgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMucHJvcGVydHlOYW1lcy5nZXQodHlwZU5hbWUpO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLmNyZWF0ZUZhaWx1cmVBdE5vZGUoXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBgRm91bmQgY2xhc3MgXCIke2NsYXNzTmFtZX1cIiB3aGljaCBleHRlbmRzIGNsYXNzIGAgK1xuICAgICAgICAgICAgYFwiJHt0eXBlTmFtZX1cIi4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgYmFzZSBjbGFzcyBwcm9wZXJ0eSBgICtcbiAgICAgICAgICAgIGBcIiR7ZGF0YS5yZXBsYWNlfVwiIGhhcyBjaGFuZ2VkIHRvIFwiJHtkYXRhLnJlcGxhY2VXaXRofVwiLiBgICtcbiAgICAgICAgICAgIGBZb3UgbWF5IG5lZWQgdG8gdXBkYXRlIHlvdXIgY2xhc3MgYXMgd2VsbC5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.ClassNamesMigration = void 0;
|
|
11
|
-
const ts = require("typescript");
|
|
12
|
-
const migration_1 = require("../../update-tool/migration");
|
|
13
|
-
const imports_1 = require("../typescript/imports");
|
|
14
|
-
const module_specifiers_1 = require("../typescript/module-specifiers");
|
|
15
|
-
const upgrade_data_1 = require("../upgrade-data");
|
|
16
|
-
/**
|
|
17
|
-
* Migration that walks through every identifier that is part of Angular Material or thr CDK
|
|
18
|
-
* and replaces the outdated name with the new one if specified in the upgrade data.
|
|
19
|
-
*/
|
|
20
|
-
// TODO: rework this rule to identify symbols using the import identifier resolver. This
|
|
21
|
-
// makes it more robust, less AST convoluted and is more TypeScript AST idiomatic. COMP-300.
|
|
22
|
-
class ClassNamesMigration extends migration_1.Migration {
|
|
23
|
-
/** Change data that upgrades to the specified target version. */
|
|
24
|
-
data = (0, upgrade_data_1.getVersionUpgradeData)(this, 'classNames');
|
|
25
|
-
/**
|
|
26
|
-
* List of identifier names that have been imported from `@angular/material` or `@angular/cdk`
|
|
27
|
-
* in the current source file and therefore can be considered trusted.
|
|
28
|
-
*/
|
|
29
|
-
trustedIdentifiers = new Set();
|
|
30
|
-
/** List of namespaces that have been imported from `@angular/material` or `@angular/cdk`. */
|
|
31
|
-
trustedNamespaces = new Set();
|
|
32
|
-
// Only enable the migration rule if there is upgrade data.
|
|
33
|
-
enabled = this.data.length !== 0;
|
|
34
|
-
visitNode(node) {
|
|
35
|
-
if (ts.isIdentifier(node)) {
|
|
36
|
-
this._visitIdentifier(node);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/** Method that is called for every identifier inside of the specified project. */
|
|
40
|
-
_visitIdentifier(identifier) {
|
|
41
|
-
// For identifiers that aren't listed in the className data, the whole check can be
|
|
42
|
-
// skipped safely.
|
|
43
|
-
if (!this.data.some(data => data.replace === identifier.text)) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
// For namespace imports that are referring to Angular Material or the CDK, we store the
|
|
47
|
-
// namespace name in order to be able to safely find identifiers that don't belong to the
|
|
48
|
-
// developer's application.
|
|
49
|
-
if ((0, imports_1.isNamespaceImportNode)(identifier) && (0, module_specifiers_1.isMaterialImportDeclaration)(identifier)) {
|
|
50
|
-
this.trustedNamespaces.add(identifier.text);
|
|
51
|
-
return this._createFailureWithReplacement(identifier);
|
|
52
|
-
}
|
|
53
|
-
// For export declarations that are referring to Angular Material or the CDK, the identifier
|
|
54
|
-
// can be immediately updated to the new name.
|
|
55
|
-
if ((0, imports_1.isExportSpecifierNode)(identifier) && (0, module_specifiers_1.isMaterialExportDeclaration)(identifier)) {
|
|
56
|
-
return this._createFailureWithReplacement(identifier);
|
|
57
|
-
}
|
|
58
|
-
// For import declarations that are referring to Angular Material or the CDK, the name of
|
|
59
|
-
// the import identifiers. This allows us to identify identifiers that belong to Material and
|
|
60
|
-
// the CDK, and we won't accidentally touch a developer's identifier.
|
|
61
|
-
if ((0, imports_1.isImportSpecifierNode)(identifier) && (0, module_specifiers_1.isMaterialImportDeclaration)(identifier)) {
|
|
62
|
-
this.trustedIdentifiers.add(identifier.text);
|
|
63
|
-
return this._createFailureWithReplacement(identifier);
|
|
64
|
-
}
|
|
65
|
-
// In case the identifier is part of a property access expression, we need to verify that the
|
|
66
|
-
// property access originates from a namespace that has been imported from Material or the CDK.
|
|
67
|
-
if (ts.isPropertyAccessExpression(identifier.parent)) {
|
|
68
|
-
const expression = identifier.parent.expression;
|
|
69
|
-
if (ts.isIdentifier(expression) && this.trustedNamespaces.has(expression.text)) {
|
|
70
|
-
return this._createFailureWithReplacement(identifier);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
else if (this.trustedIdentifiers.has(identifier.text)) {
|
|
74
|
-
return this._createFailureWithReplacement(identifier);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/** Creates a failure and replacement for the specified identifier. */
|
|
78
|
-
_createFailureWithReplacement(identifier) {
|
|
79
|
-
const classData = this.data.find(data => data.replace === identifier.text);
|
|
80
|
-
const filePath = this.fileSystem.resolve(identifier.getSourceFile().fileName);
|
|
81
|
-
this.fileSystem
|
|
82
|
-
.edit(filePath)
|
|
83
|
-
.remove(identifier.getStart(), identifier.getWidth())
|
|
84
|
-
.insertRight(identifier.getStart(), classData.replaceWith);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
exports.ClassNamesMigration = ClassNamesMigration;
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtbmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvbmctdXBkYXRlL21pZ3JhdGlvbnMvY2xhc3MtbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBRUgsaUNBQWlDO0FBQ2pDLDJEQUFzRDtBQUd0RCxtREFJK0I7QUFDL0IsdUVBR3lDO0FBQ3pDLGtEQUFtRTtBQUVuRTs7O0dBR0c7QUFDSCx3RkFBd0Y7QUFDeEYsNEZBQTRGO0FBQzVGLE1BQWEsbUJBQW9CLFNBQVEscUJBQXNCO0lBQzdELGlFQUFpRTtJQUNqRSxJQUFJLEdBQTJCLElBQUEsb0NBQXFCLEVBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRXpFOzs7T0FHRztJQUNILGtCQUFrQixHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTVDLDZGQUE2RjtJQUM3RixpQkFBaUIsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUzQywyREFBMkQ7SUFDM0QsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUV4QixTQUFTLENBQUMsSUFBYTtRQUM5QixJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxrRkFBa0Y7SUFDMUUsZ0JBQWdCLENBQUMsVUFBeUI7UUFDaEQsbUZBQW1GO1FBQ25GLGtCQUFrQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlELE9BQU87UUFDVCxDQUFDO1FBRUQsd0ZBQXdGO1FBQ3hGLHlGQUF5RjtRQUN6RiwyQkFBMkI7UUFDM0IsSUFBSSxJQUFBLCtCQUFxQixFQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUEsK0NBQTJCLEVBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNqRixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1QyxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsNEZBQTRGO1FBQzVGLDhDQUE4QztRQUM5QyxJQUFJLElBQUEsK0JBQXFCLEVBQUMsVUFBVSxDQUFDLElBQUksSUFBQSwrQ0FBMkIsRUFBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2pGLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCx5RkFBeUY7UUFDekYsNkZBQTZGO1FBQzdGLHFFQUFxRTtRQUNyRSxJQUFJLElBQUEsK0JBQXFCLEVBQUMsVUFBVSxDQUFDLElBQUksSUFBQSwrQ0FBMkIsRUFBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2pGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTdDLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCw2RkFBNkY7UUFDN0YsK0ZBQStGO1FBQy9GLElBQUksRUFBRSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBRWhELElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMvRSxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVELHNFQUFzRTtJQUM5RCw2QkFBNkIsQ0FBQyxVQUF5QjtRQUM3RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBRSxDQUFDO1FBQzVFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU5RSxJQUFJLENBQUMsVUFBVTthQUNaLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDZCxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNwRCxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0Y7QUE3RUQsa0RBNkVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuZGV2L2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7TWlncmF0aW9ufSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC9taWdyYXRpb24nO1xuXG5pbXBvcnQge0NsYXNzTmFtZVVwZ3JhZGVEYXRhfSBmcm9tICcuLi9kYXRhJztcbmltcG9ydCB7XG4gIGlzRXhwb3J0U3BlY2lmaWVyTm9kZSxcbiAgaXNJbXBvcnRTcGVjaWZpZXJOb2RlLFxuICBpc05hbWVzcGFjZUltcG9ydE5vZGUsXG59IGZyb20gJy4uL3R5cGVzY3JpcHQvaW1wb3J0cyc7XG5pbXBvcnQge1xuICBpc01hdGVyaWFsRXhwb3J0RGVjbGFyYXRpb24sXG4gIGlzTWF0ZXJpYWxJbXBvcnREZWNsYXJhdGlvbixcbn0gZnJvbSAnLi4vdHlwZXNjcmlwdC9tb2R1bGUtc3BlY2lmaWVycyc7XG5pbXBvcnQge2dldFZlcnNpb25VcGdyYWRlRGF0YSwgVXBncmFkZURhdGF9IGZyb20gJy4uL3VwZ3JhZGUtZGF0YSc7XG5cbi8qKlxuICogTWlncmF0aW9uIHRoYXQgd2Fsa3MgdGhyb3VnaCBldmVyeSBpZGVudGlmaWVyIHRoYXQgaXMgcGFydCBvZiBBbmd1bGFyIE1hdGVyaWFsIG9yIHRociBDREtcbiAqIGFuZCByZXBsYWNlcyB0aGUgb3V0ZGF0ZWQgbmFtZSB3aXRoIHRoZSBuZXcgb25lIGlmIHNwZWNpZmllZCBpbiB0aGUgdXBncmFkZSBkYXRhLlxuICovXG4vLyBUT0RPOiByZXdvcmsgdGhpcyBydWxlIHRvIGlkZW50aWZ5IHN5bWJvbHMgdXNpbmcgdGhlIGltcG9ydCBpZGVudGlmaWVyIHJlc29sdmVyLiBUaGlzXG4vLyBtYWtlcyBpdCBtb3JlIHJvYnVzdCwgbGVzcyBBU1QgY29udm9sdXRlZCBhbmQgaXMgbW9yZSBUeXBlU2NyaXB0IEFTVCBpZGlvbWF0aWMuIENPTVAtMzAwLlxuZXhwb3J0IGNsYXNzIENsYXNzTmFtZXNNaWdyYXRpb24gZXh0ZW5kcyBNaWdyYXRpb248VXBncmFkZURhdGE+IHtcbiAgLyoqIENoYW5nZSBkYXRhIHRoYXQgdXBncmFkZXMgdG8gdGhlIHNwZWNpZmllZCB0YXJnZXQgdmVyc2lvbi4gKi9cbiAgZGF0YTogQ2xhc3NOYW1lVXBncmFkZURhdGFbXSA9IGdldFZlcnNpb25VcGdyYWRlRGF0YSh0aGlzLCAnY2xhc3NOYW1lcycpO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGlkZW50aWZpZXIgbmFtZXMgdGhhdCBoYXZlIGJlZW4gaW1wb3J0ZWQgZnJvbSBgQGFuZ3VsYXIvbWF0ZXJpYWxgIG9yIGBAYW5ndWxhci9jZGtgXG4gICAqIGluIHRoZSBjdXJyZW50IHNvdXJjZSBmaWxlIGFuZCB0aGVyZWZvcmUgY2FuIGJlIGNvbnNpZGVyZWQgdHJ1c3RlZC5cbiAgICovXG4gIHRydXN0ZWRJZGVudGlmaWVyczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgLyoqIExpc3Qgb2YgbmFtZXNwYWNlcyB0aGF0IGhhdmUgYmVlbiBpbXBvcnRlZCBmcm9tIGBAYW5ndWxhci9tYXRlcmlhbGAgb3IgYEBhbmd1bGFyL2Nka2AuICovXG4gIHRydXN0ZWROYW1lc3BhY2VzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICAvLyBPbmx5IGVuYWJsZSB0aGUgbWlncmF0aW9uIHJ1bGUgaWYgdGhlcmUgaXMgdXBncmFkZSBkYXRhLlxuICBlbmFibGVkID0gdGhpcy5kYXRhLmxlbmd0aCAhPT0gMDtcblxuICBvdmVycmlkZSB2aXNpdE5vZGUobm9kZTogdHMuTm9kZSk6IHZvaWQge1xuICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZSkpIHtcbiAgICAgIHRoaXMuX3Zpc2l0SWRlbnRpZmllcihub2RlKTtcbiAgICB9XG4gIH1cblxuICAvKiogTWV0aG9kIHRoYXQgaXMgY2FsbGVkIGZvciBldmVyeSBpZGVudGlmaWVyIGluc2lkZSBvZiB0aGUgc3BlY2lmaWVkIHByb2plY3QuICovXG4gIHByaXZhdGUgX3Zpc2l0SWRlbnRpZmllcihpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyKSB7XG4gICAgLy8gRm9yIGlkZW50aWZpZXJzIHRoYXQgYXJlbid0IGxpc3RlZCBpbiB0aGUgY2xhc3NOYW1lIGRhdGEsIHRoZSB3aG9sZSBjaGVjayBjYW4gYmVcbiAgICAvLyBza2lwcGVkIHNhZmVseS5cbiAgICBpZiAoIXRoaXMuZGF0YS5zb21lKGRhdGEgPT4gZGF0YS5yZXBsYWNlID09PSBpZGVudGlmaWVyLnRleHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIG5hbWVzcGFjZSBpbXBvcnRzIHRoYXQgYXJlIHJlZmVycmluZyB0byBBbmd1bGFyIE1hdGVyaWFsIG9yIHRoZSBDREssIHdlIHN0b3JlIHRoZVxuICAgIC8vIG5hbWVzcGFjZSBuYW1lIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gc2FmZWx5IGZpbmQgaWRlbnRpZmllcnMgdGhhdCBkb24ndCBiZWxvbmcgdG8gdGhlXG4gICAgLy8gZGV2ZWxvcGVyJ3MgYXBwbGljYXRpb24uXG4gICAgaWYgKGlzTmFtZXNwYWNlSW1wb3J0Tm9kZShpZGVudGlmaWVyKSAmJiBpc01hdGVyaWFsSW1wb3J0RGVjbGFyYXRpb24oaWRlbnRpZmllcikpIHtcbiAgICAgIHRoaXMudHJ1c3RlZE5hbWVzcGFjZXMuYWRkKGlkZW50aWZpZXIudGV4dCk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVGYWlsdXJlV2l0aFJlcGxhY2VtZW50KGlkZW50aWZpZXIpO1xuICAgIH1cblxuICAgIC8vIEZvciBleHBvcnQgZGVjbGFyYXRpb25zIHRoYXQgYXJlIHJlZmVycmluZyB0byBBbmd1bGFyIE1hdGVyaWFsIG9yIHRoZSBDREssIHRoZSBpZGVudGlmaWVyXG4gICAgLy8gY2FuIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQgdG8gdGhlIG5ldyBuYW1lLlxuICAgIGlmIChpc0V4cG9ydFNwZWNpZmllck5vZGUoaWRlbnRpZmllcikgJiYgaXNNYXRlcmlhbEV4cG9ydERlY2xhcmF0aW9uKGlkZW50aWZpZXIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlRmFpbHVyZVdpdGhSZXBsYWNlbWVudChpZGVudGlmaWVyKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgaW1wb3J0IGRlY2xhcmF0aW9ucyB0aGF0IGFyZSByZWZlcnJpbmcgdG8gQW5ndWxhciBNYXRlcmlhbCBvciB0aGUgQ0RLLCB0aGUgbmFtZSBvZlxuICAgIC8vIHRoZSBpbXBvcnQgaWRlbnRpZmllcnMuIFRoaXMgYWxsb3dzIHVzIHRvIGlkZW50aWZ5IGlkZW50aWZpZXJzIHRoYXQgYmVsb25nIHRvIE1hdGVyaWFsIGFuZFxuICAgIC8vIHRoZSBDREssIGFuZCB3ZSB3b24ndCBhY2NpZGVudGFsbHkgdG91Y2ggYSBkZXZlbG9wZXIncyBpZGVudGlmaWVyLlxuICAgIGlmIChpc0ltcG9ydFNwZWNpZmllck5vZGUoaWRlbnRpZmllcikgJiYgaXNNYXRlcmlhbEltcG9ydERlY2xhcmF0aW9uKGlkZW50aWZpZXIpKSB7XG4gICAgICB0aGlzLnRydXN0ZWRJZGVudGlmaWVycy5hZGQoaWRlbnRpZmllci50ZXh0KTtcblxuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZhaWx1cmVXaXRoUmVwbGFjZW1lbnQoaWRlbnRpZmllcik7XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSB0aGUgaWRlbnRpZmllciBpcyBwYXJ0IG9mIGEgcHJvcGVydHkgYWNjZXNzIGV4cHJlc3Npb24sIHdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlXG4gICAgLy8gcHJvcGVydHkgYWNjZXNzIG9yaWdpbmF0ZXMgZnJvbSBhIG5hbWVzcGFjZSB0aGF0IGhhcyBiZWVuIGltcG9ydGVkIGZyb20gTWF0ZXJpYWwgb3IgdGhlIENESy5cbiAgICBpZiAodHMuaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24oaWRlbnRpZmllci5wYXJlbnQpKSB7XG4gICAgICBjb25zdCBleHByZXNzaW9uID0gaWRlbnRpZmllci5wYXJlbnQuZXhwcmVzc2lvbjtcblxuICAgICAgaWYgKHRzLmlzSWRlbnRpZmllcihleHByZXNzaW9uKSAmJiB0aGlzLnRydXN0ZWROYW1lc3BhY2VzLmhhcyhleHByZXNzaW9uLnRleHQpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVGYWlsdXJlV2l0aFJlcGxhY2VtZW50KGlkZW50aWZpZXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy50cnVzdGVkSWRlbnRpZmllcnMuaGFzKGlkZW50aWZpZXIudGV4dCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVGYWlsdXJlV2l0aFJlcGxhY2VtZW50KGlkZW50aWZpZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDcmVhdGVzIGEgZmFpbHVyZSBhbmQgcmVwbGFjZW1lbnQgZm9yIHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllci4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRmFpbHVyZVdpdGhSZXBsYWNlbWVudChpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyKSB7XG4gICAgY29uc3QgY2xhc3NEYXRhID0gdGhpcy5kYXRhLmZpbmQoZGF0YSA9PiBkYXRhLnJlcGxhY2UgPT09IGlkZW50aWZpZXIudGV4dCkhO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5maWxlU3lzdGVtLnJlc29sdmUoaWRlbnRpZmllci5nZXRTb3VyY2VGaWxlKCkuZmlsZU5hbWUpO1xuXG4gICAgdGhpcy5maWxlU3lzdGVtXG4gICAgICAuZWRpdChmaWxlUGF0aClcbiAgICAgIC5yZW1vdmUoaWRlbnRpZmllci5nZXRTdGFydCgpLCBpZGVudGlmaWVyLmdldFdpZHRoKCkpXG4gICAgICAuaW5zZXJ0UmlnaHQoaWRlbnRpZmllci5nZXRTdGFydCgpLCBjbGFzc0RhdGEucmVwbGFjZVdpdGgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.ConstructorSignatureMigration = void 0;
|
|
11
|
-
const ts = require("typescript");
|
|
12
|
-
const migration_1 = require("../../update-tool/migration");
|
|
13
|
-
const version_changes_1 = require("../../update-tool/version-changes");
|
|
14
|
-
/**
|
|
15
|
-
* List of diagnostic codes that refer to pre-emit diagnostics which indicate invalid
|
|
16
|
-
* new expression or super call signatures. See the list of diagnostics here:
|
|
17
|
-
*
|
|
18
|
-
* https://github.com/Microsoft/TypeScript/blob/master/src/compiler/diagnosticMessages.json
|
|
19
|
-
*/
|
|
20
|
-
const signatureErrorDiagnostics = [
|
|
21
|
-
// Type not assignable error diagnostic.
|
|
22
|
-
2345,
|
|
23
|
-
// Constructor argument length invalid diagnostics
|
|
24
|
-
2554, 2555, 2556, 2557,
|
|
25
|
-
];
|
|
26
|
-
/**
|
|
27
|
-
* Migration that visits every TypeScript new expression or super call and checks if
|
|
28
|
-
* the parameter type signature is invalid and needs to be updated manually.
|
|
29
|
-
*/
|
|
30
|
-
class ConstructorSignatureMigration extends migration_1.Migration {
|
|
31
|
-
// Note that the data for this rule is not distinguished based on the target version because
|
|
32
|
-
// we don't keep track of the new signature and don't want to update incrementally.
|
|
33
|
-
// See: https://github.com/angular/components/pull/12970#issuecomment-418337566
|
|
34
|
-
data = (0, version_changes_1.getAllChanges)(this.upgradeData.constructorChecks);
|
|
35
|
-
// Only enable the migration rule if there is upgrade data.
|
|
36
|
-
enabled = this.data.length !== 0;
|
|
37
|
-
visitNode(node) {
|
|
38
|
-
if (ts.isSourceFile(node)) {
|
|
39
|
-
this._visitSourceFile(node);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Method that will be called for each source file of the upgrade project. In order to
|
|
44
|
-
* properly determine invalid constructor signatures, we take advantage of the pre-emit
|
|
45
|
-
* diagnostics from TypeScript.
|
|
46
|
-
*
|
|
47
|
-
* By using the diagnostics, the migration can handle type assignability. Not using
|
|
48
|
-
* diagnostics would mean that we need to use simple type equality checking which is
|
|
49
|
-
* too strict. See related issue: https://github.com/Microsoft/TypeScript/issues/9879
|
|
50
|
-
*/
|
|
51
|
-
_visitSourceFile(sourceFile) {
|
|
52
|
-
// List of classes of which the constructor signature has changed.
|
|
53
|
-
const diagnostics = ts
|
|
54
|
-
.getPreEmitDiagnostics(this.program, sourceFile)
|
|
55
|
-
.filter(diagnostic => signatureErrorDiagnostics.includes(diagnostic.code))
|
|
56
|
-
.filter(diagnostic => diagnostic.start !== undefined);
|
|
57
|
-
for (const diagnostic of diagnostics) {
|
|
58
|
-
const node = findConstructorNode(diagnostic, sourceFile);
|
|
59
|
-
if (!node) {
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
const classType = this.typeChecker.getTypeAtLocation(node.expression);
|
|
63
|
-
const className = classType.symbol && classType.symbol.name;
|
|
64
|
-
const isNewExpression = ts.isNewExpression(node);
|
|
65
|
-
// Determine the class names of the actual construct signatures because we cannot assume that
|
|
66
|
-
// the diagnostic refers to a constructor of the actual expression. In case the constructor
|
|
67
|
-
// is inherited, we need to detect that the owner-class of the constructor is added to the
|
|
68
|
-
// constructor checks upgrade data. e.g. `class CustomCalendar extends MatCalendar {}`.
|
|
69
|
-
const signatureClassNames = classType
|
|
70
|
-
.getConstructSignatures()
|
|
71
|
-
.map(signature => getClassDeclarationOfSignature(signature))
|
|
72
|
-
.map(declaration => (declaration && declaration.name ? declaration.name.text : null))
|
|
73
|
-
.filter(Boolean);
|
|
74
|
-
// Besides checking the signature class names, we need to check the actual class name because
|
|
75
|
-
// there can be classes without an explicit constructor.
|
|
76
|
-
if (!this.data.includes(className) &&
|
|
77
|
-
!signatureClassNames.some(name => this.data.includes(name))) {
|
|
78
|
-
continue;
|
|
79
|
-
}
|
|
80
|
-
const classSignatures = classType
|
|
81
|
-
.getConstructSignatures()
|
|
82
|
-
.map(signature => getParameterTypesFromSignature(signature, this.typeChecker));
|
|
83
|
-
const expressionName = isNewExpression ? `new ${className}` : 'super';
|
|
84
|
-
const signatures = classSignatures
|
|
85
|
-
.map(signature => signature.map(t => (t === null ? 'any' : this.typeChecker.typeToString(t))))
|
|
86
|
-
.map(signature => `${expressionName}(${signature.join(', ')})`)
|
|
87
|
-
.join(' or ');
|
|
88
|
-
this.createFailureAtNode(node, `Found "${className}" constructed with ` +
|
|
89
|
-
`an invalid signature. Please manually update the ${expressionName} expression to ` +
|
|
90
|
-
`match the new signature${classSignatures.length > 1 ? 's' : ''}: ${signatures}`);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
exports.ConstructorSignatureMigration = ConstructorSignatureMigration;
|
|
95
|
-
/** Resolves the type for each parameter in the specified signature. */
|
|
96
|
-
function getParameterTypesFromSignature(signature, typeChecker) {
|
|
97
|
-
return signature
|
|
98
|
-
.getParameters()
|
|
99
|
-
.map(param => param.declarations ? typeChecker.getTypeAtLocation(param.declarations[0]) : null);
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Walks through each node of a source file in order to find a new-expression node or super-call
|
|
103
|
-
* expression node that is captured by the specified diagnostic.
|
|
104
|
-
*/
|
|
105
|
-
function findConstructorNode(diagnostic, sourceFile) {
|
|
106
|
-
let resolvedNode = null;
|
|
107
|
-
const _visitNode = (node) => {
|
|
108
|
-
// Check whether the current node contains the diagnostic. If the node contains the diagnostic,
|
|
109
|
-
// walk deeper in order to find all constructor expression nodes.
|
|
110
|
-
if (node.getStart() <= diagnostic.start && node.getEnd() >= diagnostic.start) {
|
|
111
|
-
if (ts.isNewExpression(node) ||
|
|
112
|
-
(ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.SuperKeyword)) {
|
|
113
|
-
resolvedNode = node;
|
|
114
|
-
}
|
|
115
|
-
ts.forEachChild(node, _visitNode);
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
ts.forEachChild(sourceFile, _visitNode);
|
|
119
|
-
return resolvedNode;
|
|
120
|
-
}
|
|
121
|
-
/** Determines the class declaration of the specified construct signature. */
|
|
122
|
-
function getClassDeclarationOfSignature(signature) {
|
|
123
|
-
let node = signature.getDeclaration();
|
|
124
|
-
// Handle signatures which don't have an actual declaration. This happens if a class
|
|
125
|
-
// does not have an explicitly written constructor.
|
|
126
|
-
if (!node) {
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
while (!ts.isSourceFile((node = node.parent))) {
|
|
130
|
-
if (ts.isClassDeclaration(node)) {
|
|
131
|
-
return node;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return null;
|
|
135
|
-
}
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3Itc2lnbmF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9zY2hlbWF0aWNzL25nLXVwZGF0ZS9taWdyYXRpb25zL2NvbnN0cnVjdG9yLXNpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCxpQ0FBaUM7QUFDakMsMkRBQXNEO0FBQ3RELHVFQUFnRTtBQUdoRTs7Ozs7R0FLRztBQUNILE1BQU0seUJBQXlCLEdBQUc7SUFDaEMsd0NBQXdDO0lBQ3hDLElBQUk7SUFDSixrREFBa0Q7SUFDbEQsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtDQUN2QixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBYSw2QkFBOEIsU0FBUSxxQkFBc0I7SUFDdkUsNEZBQTRGO0lBQzVGLG1GQUFtRjtJQUNuRiwrRUFBK0U7SUFDL0UsSUFBSSxHQUFHLElBQUEsK0JBQWEsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFekQsMkRBQTJEO0lBQzNELE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFFeEIsU0FBUyxDQUFDLElBQWE7UUFDOUIsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSyxnQkFBZ0IsQ0FBQyxVQUF5QjtRQUNoRCxrRUFBa0U7UUFDbEUsTUFBTSxXQUFXLEdBQUcsRUFBRTthQUNuQixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQzthQUMvQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3pFLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUM7UUFFeEQsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFFekQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEUsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUM1RCxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpELDZGQUE2RjtZQUM3RiwyRkFBMkY7WUFDM0YsMEZBQTBGO1lBQzFGLHVGQUF1RjtZQUN2RixNQUFNLG1CQUFtQixHQUFHLFNBQVM7aUJBQ2xDLHNCQUFzQixFQUFFO2lCQUN4QixHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDM0QsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNwRixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFbkIsNkZBQTZGO1lBQzdGLHdEQUF3RDtZQUN4RCxJQUNFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUM5QixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUssQ0FBQyxDQUFDLEVBQzVELENBQUM7Z0JBQ0QsU0FBUztZQUNYLENBQUM7WUFFRCxNQUFNLGVBQWUsR0FBRyxTQUFTO2lCQUM5QixzQkFBc0IsRUFBRTtpQkFDeEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsOEJBQThCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBRWpGLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3RFLE1BQU0sVUFBVSxHQUFHLGVBQWU7aUJBQy9CLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUNmLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1RTtpQkFDQSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7aUJBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVoQixJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksRUFDSixVQUFVLFNBQVMscUJBQXFCO2dCQUN0QyxvREFBb0QsY0FBYyxpQkFBaUI7Z0JBQ25GLDBCQUEwQixlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxFQUFFLENBQ25GLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBakZELHNFQWlGQztBQUVELHVFQUF1RTtBQUN2RSxTQUFTLDhCQUE4QixDQUNyQyxTQUF1QixFQUN2QixXQUEyQjtJQUUzQixPQUFPLFNBQVM7U0FDYixhQUFhLEVBQUU7U0FDZixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDWCxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2pGLENBQUM7QUFDTixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDMUIsVUFBeUIsRUFDekIsVUFBeUI7SUFFekIsSUFBSSxZQUFZLEdBQW1CLElBQUksQ0FBQztJQUV4QyxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFO1FBQ25DLCtGQUErRjtRQUMvRixpRUFBaUU7UUFDakUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksVUFBVSxDQUFDLEtBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksVUFBVSxDQUFDLEtBQU0sRUFBRSxDQUFDO1lBQy9FLElBQ0UsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQ2xGLENBQUM7Z0JBQ0QsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN0QixDQUFDO1lBRUQsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRXhDLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCw2RUFBNkU7QUFDN0UsU0FBUyw4QkFBOEIsQ0FBQyxTQUF1QjtJQUM3RCxJQUFJLElBQUksR0FBWSxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDL0Msb0ZBQW9GO0lBQ3BGLG1EQUFtRDtJQUNuRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmRldi9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge01pZ3JhdGlvbn0gZnJvbSAnLi4vLi4vdXBkYXRlLXRvb2wvbWlncmF0aW9uJztcbmltcG9ydCB7Z2V0QWxsQ2hhbmdlc30gZnJvbSAnLi4vLi4vdXBkYXRlLXRvb2wvdmVyc2lvbi1jaGFuZ2VzJztcbmltcG9ydCB7VXBncmFkZURhdGF9IGZyb20gJy4uL3VwZ3JhZGUtZGF0YSc7XG5cbi8qKlxuICogTGlzdCBvZiBkaWFnbm9zdGljIGNvZGVzIHRoYXQgcmVmZXIgdG8gcHJlLWVtaXQgZGlhZ25vc3RpY3Mgd2hpY2ggaW5kaWNhdGUgaW52YWxpZFxuICogbmV3IGV4cHJlc3Npb24gb3Igc3VwZXIgY2FsbCBzaWduYXR1cmVzLiBTZWUgdGhlIGxpc3Qgb2YgZGlhZ25vc3RpY3MgaGVyZTpcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvYmxvYi9tYXN0ZXIvc3JjL2NvbXBpbGVyL2RpYWdub3N0aWNNZXNzYWdlcy5qc29uXG4gKi9cbmNvbnN0IHNpZ25hdHVyZUVycm9yRGlhZ25vc3RpY3MgPSBbXG4gIC8vIFR5cGUgbm90IGFzc2lnbmFibGUgZXJyb3IgZGlhZ25vc3RpYy5cbiAgMjM0NSxcbiAgLy8gQ29uc3RydWN0b3IgYXJndW1lbnQgbGVuZ3RoIGludmFsaWQgZGlhZ25vc3RpY3NcbiAgMjU1NCwgMjU1NSwgMjU1NiwgMjU1Nyxcbl07XG5cbi8qKlxuICogTWlncmF0aW9uIHRoYXQgdmlzaXRzIGV2ZXJ5IFR5cGVTY3JpcHQgbmV3IGV4cHJlc3Npb24gb3Igc3VwZXIgY2FsbCBhbmQgY2hlY2tzIGlmXG4gKiB0aGUgcGFyYW1ldGVyIHR5cGUgc2lnbmF0dXJlIGlzIGludmFsaWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQgbWFudWFsbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25zdHJ1Y3RvclNpZ25hdHVyZU1pZ3JhdGlvbiBleHRlbmRzIE1pZ3JhdGlvbjxVcGdyYWRlRGF0YT4ge1xuICAvLyBOb3RlIHRoYXQgdGhlIGRhdGEgZm9yIHRoaXMgcnVsZSBpcyBub3QgZGlzdGluZ3Vpc2hlZCBiYXNlZCBvbiB0aGUgdGFyZ2V0IHZlcnNpb24gYmVjYXVzZVxuICAvLyB3ZSBkb24ndCBrZWVwIHRyYWNrIG9mIHRoZSBuZXcgc2lnbmF0dXJlIGFuZCBkb24ndCB3YW50IHRvIHVwZGF0ZSBpbmNyZW1lbnRhbGx5LlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8xMjk3MCNpc3N1ZWNvbW1lbnQtNDE4MzM3NTY2XG4gIGRhdGEgPSBnZXRBbGxDaGFuZ2VzKHRoaXMudXBncmFkZURhdGEuY29uc3RydWN0b3JDaGVja3MpO1xuXG4gIC8vIE9ubHkgZW5hYmxlIHRoZSBtaWdyYXRpb24gcnVsZSBpZiB0aGVyZSBpcyB1cGdyYWRlIGRhdGEuXG4gIGVuYWJsZWQgPSB0aGlzLmRhdGEubGVuZ3RoICE9PSAwO1xuXG4gIG92ZXJyaWRlIHZpc2l0Tm9kZShub2RlOiB0cy5Ob2RlKTogdm9pZCB7XG4gICAgaWYgKHRzLmlzU291cmNlRmlsZShub2RlKSkge1xuICAgICAgdGhpcy5fdmlzaXRTb3VyY2VGaWxlKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdGhhdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBzb3VyY2UgZmlsZSBvZiB0aGUgdXBncmFkZSBwcm9qZWN0LiBJbiBvcmRlciB0b1xuICAgKiBwcm9wZXJseSBkZXRlcm1pbmUgaW52YWxpZCBjb25zdHJ1Y3RvciBzaWduYXR1cmVzLCB3ZSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgcHJlLWVtaXRcbiAgICogZGlhZ25vc3RpY3MgZnJvbSBUeXBlU2NyaXB0LlxuICAgKlxuICAgKiBCeSB1c2luZyB0aGUgZGlhZ25vc3RpY3MsIHRoZSBtaWdyYXRpb24gY2FuIGhhbmRsZSB0eXBlIGFzc2lnbmFiaWxpdHkuIE5vdCB1c2luZ1xuICAgKiBkaWFnbm9zdGljcyB3b3VsZCBtZWFuIHRoYXQgd2UgbmVlZCB0byB1c2Ugc2ltcGxlIHR5cGUgZXF1YWxpdHkgY2hlY2tpbmcgd2hpY2ggaXNcbiAgICogdG9vIHN0cmljdC4gU2VlIHJlbGF0ZWQgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvOTg3OVxuICAgKi9cbiAgcHJpdmF0ZSBfdmlzaXRTb3VyY2VGaWxlKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpIHtcbiAgICAvLyBMaXN0IG9mIGNsYXNzZXMgb2Ygd2hpY2ggdGhlIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBoYXMgY2hhbmdlZC5cbiAgICBjb25zdCBkaWFnbm9zdGljcyA9IHRzXG4gICAgICAuZ2V0UHJlRW1pdERpYWdub3N0aWNzKHRoaXMucHJvZ3JhbSwgc291cmNlRmlsZSlcbiAgICAgIC5maWx0ZXIoZGlhZ25vc3RpYyA9PiBzaWduYXR1cmVFcnJvckRpYWdub3N0aWNzLmluY2x1ZGVzKGRpYWdub3N0aWMuY29kZSkpXG4gICAgICAuZmlsdGVyKGRpYWdub3N0aWMgPT4gZGlhZ25vc3RpYy5zdGFydCAhPT0gdW5kZWZpbmVkKTtcblxuICAgIGZvciAoY29uc3QgZGlhZ25vc3RpYyBvZiBkaWFnbm9zdGljcykge1xuICAgICAgY29uc3Qgbm9kZSA9IGZpbmRDb25zdHJ1Y3Rvck5vZGUoZGlhZ25vc3RpYywgc291cmNlRmlsZSk7XG5cbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xhc3NUeXBlID0gdGhpcy50eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihub2RlLmV4cHJlc3Npb24pO1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gY2xhc3NUeXBlLnN5bWJvbCAmJiBjbGFzc1R5cGUuc3ltYm9sLm5hbWU7XG4gICAgICBjb25zdCBpc05ld0V4cHJlc3Npb24gPSB0cy5pc05ld0V4cHJlc3Npb24obm9kZSk7XG5cbiAgICAgIC8vIERldGVybWluZSB0aGUgY2xhc3MgbmFtZXMgb2YgdGhlIGFjdHVhbCBjb25zdHJ1Y3Qgc2lnbmF0dXJlcyBiZWNhdXNlIHdlIGNhbm5vdCBhc3N1bWUgdGhhdFxuICAgICAgLy8gdGhlIGRpYWdub3N0aWMgcmVmZXJzIHRvIGEgY29uc3RydWN0b3Igb2YgdGhlIGFjdHVhbCBleHByZXNzaW9uLiBJbiBjYXNlIHRoZSBjb25zdHJ1Y3RvclxuICAgICAgLy8gaXMgaW5oZXJpdGVkLCB3ZSBuZWVkIHRvIGRldGVjdCB0aGF0IHRoZSBvd25lci1jbGFzcyBvZiB0aGUgY29uc3RydWN0b3IgaXMgYWRkZWQgdG8gdGhlXG4gICAgICAvLyBjb25zdHJ1Y3RvciBjaGVja3MgdXBncmFkZSBkYXRhLiBlLmcuIGBjbGFzcyBDdXN0b21DYWxlbmRhciBleHRlbmRzIE1hdENhbGVuZGFyIHt9YC5cbiAgICAgIGNvbnN0IHNpZ25hdHVyZUNsYXNzTmFtZXMgPSBjbGFzc1R5cGVcbiAgICAgICAgLmdldENvbnN0cnVjdFNpZ25hdHVyZXMoKVxuICAgICAgICAubWFwKHNpZ25hdHVyZSA9PiBnZXRDbGFzc0RlY2xhcmF0aW9uT2ZTaWduYXR1cmUoc2lnbmF0dXJlKSlcbiAgICAgICAgLm1hcChkZWNsYXJhdGlvbiA9PiAoZGVjbGFyYXRpb24gJiYgZGVjbGFyYXRpb24ubmFtZSA/IGRlY2xhcmF0aW9uLm5hbWUudGV4dCA6IG51bGwpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICAvLyBCZXNpZGVzIGNoZWNraW5nIHRoZSBzaWduYXR1cmUgY2xhc3MgbmFtZXMsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGFjdHVhbCBjbGFzcyBuYW1lIGJlY2F1c2VcbiAgICAgIC8vIHRoZXJlIGNhbiBiZSBjbGFzc2VzIHdpdGhvdXQgYW4gZXhwbGljaXQgY29uc3RydWN0b3IuXG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmRhdGEuaW5jbHVkZXMoY2xhc3NOYW1lKSAmJlxuICAgICAgICAhc2lnbmF0dXJlQ2xhc3NOYW1lcy5zb21lKG5hbWUgPT4gdGhpcy5kYXRhLmluY2x1ZGVzKG5hbWUhKSlcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xhc3NTaWduYXR1cmVzID0gY2xhc3NUeXBlXG4gICAgICAgIC5nZXRDb25zdHJ1Y3RTaWduYXR1cmVzKClcbiAgICAgICAgLm1hcChzaWduYXR1cmUgPT4gZ2V0UGFyYW1ldGVyVHlwZXNGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZSwgdGhpcy50eXBlQ2hlY2tlcikpO1xuXG4gICAgICBjb25zdCBleHByZXNzaW9uTmFtZSA9IGlzTmV3RXhwcmVzc2lvbiA/IGBuZXcgJHtjbGFzc05hbWV9YCA6ICdzdXBlcic7XG4gICAgICBjb25zdCBzaWduYXR1cmVzID0gY2xhc3NTaWduYXR1cmVzXG4gICAgICAgIC5tYXAoc2lnbmF0dXJlID0+XG4gICAgICAgICAgc2lnbmF0dXJlLm1hcCh0ID0+ICh0ID09PSBudWxsID8gJ2FueScgOiB0aGlzLnR5cGVDaGVja2VyLnR5cGVUb1N0cmluZyh0KSkpLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoc2lnbmF0dXJlID0+IGAke2V4cHJlc3Npb25OYW1lfSgke3NpZ25hdHVyZS5qb2luKCcsICcpfSlgKVxuICAgICAgICAuam9pbignIG9yICcpO1xuXG4gICAgICB0aGlzLmNyZWF0ZUZhaWx1cmVBdE5vZGUoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGBGb3VuZCBcIiR7Y2xhc3NOYW1lfVwiIGNvbnN0cnVjdGVkIHdpdGggYCArXG4gICAgICAgICAgYGFuIGludmFsaWQgc2lnbmF0dXJlLiBQbGVhc2UgbWFudWFsbHkgdXBkYXRlIHRoZSAke2V4cHJlc3Npb25OYW1lfSBleHByZXNzaW9uIHRvIGAgK1xuICAgICAgICAgIGBtYXRjaCB0aGUgbmV3IHNpZ25hdHVyZSR7Y2xhc3NTaWduYXR1cmVzLmxlbmd0aCA+IDEgPyAncycgOiAnJ306ICR7c2lnbmF0dXJlc31gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFJlc29sdmVzIHRoZSB0eXBlIGZvciBlYWNoIHBhcmFtZXRlciBpbiB0aGUgc3BlY2lmaWVkIHNpZ25hdHVyZS4gKi9cbmZ1bmN0aW9uIGdldFBhcmFtZXRlclR5cGVzRnJvbVNpZ25hdHVyZShcbiAgc2lnbmF0dXJlOiB0cy5TaWduYXR1cmUsXG4gIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbik6ICh0cy5UeXBlIHwgbnVsbClbXSB7XG4gIHJldHVybiBzaWduYXR1cmVcbiAgICAuZ2V0UGFyYW1ldGVycygpXG4gICAgLm1hcChwYXJhbSA9PlxuICAgICAgcGFyYW0uZGVjbGFyYXRpb25zID8gdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24ocGFyYW0uZGVjbGFyYXRpb25zWzBdKSA6IG51bGwsXG4gICAgKTtcbn1cblxuLyoqXG4gKiBXYWxrcyB0aHJvdWdoIGVhY2ggbm9kZSBvZiBhIHNvdXJjZSBmaWxlIGluIG9yZGVyIHRvIGZpbmQgYSBuZXctZXhwcmVzc2lvbiBub2RlIG9yIHN1cGVyLWNhbGxcbiAqIGV4cHJlc3Npb24gbm9kZSB0aGF0IGlzIGNhcHR1cmVkIGJ5IHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy5cbiAqL1xuZnVuY3Rpb24gZmluZENvbnN0cnVjdG9yTm9kZShcbiAgZGlhZ25vc3RpYzogdHMuRGlhZ25vc3RpYyxcbiAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSxcbik6IHRzLkNhbGxFeHByZXNzaW9uIHwgdHMuTmV3RXhwcmVzc2lvbiB8IG51bGwge1xuICBsZXQgcmVzb2x2ZWROb2RlOiB0cy5Ob2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgX3Zpc2l0Tm9kZSA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBub2RlIGNvbnRhaW5zIHRoZSBkaWFnbm9zdGljLiBJZiB0aGUgbm9kZSBjb250YWlucyB0aGUgZGlhZ25vc3RpYyxcbiAgICAvLyB3YWxrIGRlZXBlciBpbiBvcmRlciB0byBmaW5kIGFsbCBjb25zdHJ1Y3RvciBleHByZXNzaW9uIG5vZGVzLlxuICAgIGlmIChub2RlLmdldFN0YXJ0KCkgPD0gZGlhZ25vc3RpYy5zdGFydCEgJiYgbm9kZS5nZXRFbmQoKSA+PSBkaWFnbm9zdGljLnN0YXJ0ISkge1xuICAgICAgaWYgKFxuICAgICAgICB0cy5pc05ld0V4cHJlc3Npb24obm9kZSkgfHxcbiAgICAgICAgKHRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZSkgJiYgbm9kZS5leHByZXNzaW9uLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuU3VwZXJLZXl3b3JkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc29sdmVkTm9kZSA9IG5vZGU7XG4gICAgICB9XG5cbiAgICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCBfdmlzaXROb2RlKTtcbiAgICB9XG4gIH07XG5cbiAgdHMuZm9yRWFjaENoaWxkKHNvdXJjZUZpbGUsIF92aXNpdE5vZGUpO1xuXG4gIHJldHVybiByZXNvbHZlZE5vZGU7XG59XG5cbi8qKiBEZXRlcm1pbmVzIHRoZSBjbGFzcyBkZWNsYXJhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGNvbnN0cnVjdCBzaWduYXR1cmUuICovXG5mdW5jdGlvbiBnZXRDbGFzc0RlY2xhcmF0aW9uT2ZTaWduYXR1cmUoc2lnbmF0dXJlOiB0cy5TaWduYXR1cmUpOiB0cy5DbGFzc0RlY2xhcmF0aW9uIHwgbnVsbCB7XG4gIGxldCBub2RlOiB0cy5Ob2RlID0gc2lnbmF0dXJlLmdldERlY2xhcmF0aW9uKCk7XG4gIC8vIEhhbmRsZSBzaWduYXR1cmVzIHdoaWNoIGRvbid0IGhhdmUgYW4gYWN0dWFsIGRlY2xhcmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYgYSBjbGFzc1xuICAvLyBkb2VzIG5vdCBoYXZlIGFuIGV4cGxpY2l0bHkgd3JpdHRlbiBjb25zdHJ1Y3Rvci5cbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgd2hpbGUgKCF0cy5pc1NvdXJjZUZpbGUoKG5vZGUgPSBub2RlLnBhcmVudCkpKSB7XG4gICAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19
|