@clr/angular 18.0.0-beta.1 → 18.0.0-beta.11
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/fesm2022/clr-angular-accordion.mjs +1 -1
- package/fesm2022/clr-angular-accordion.mjs.map +1 -1
- package/fesm2022/clr-angular-button.mjs +6 -6
- package/fesm2022/clr-angular-button.mjs.map +1 -1
- package/fesm2022/clr-angular-data-datagrid.mjs +45 -35
- package/fesm2022/clr-angular-data-datagrid.mjs.map +1 -1
- package/fesm2022/clr-angular-data-tree-view.mjs +3 -3
- package/fesm2022/clr-angular-data-tree-view.mjs.map +1 -1
- package/fesm2022/clr-angular-data.mjs +11 -9116
- package/fesm2022/clr-angular-data.mjs.map +1 -1
- package/fesm2022/clr-angular-emphasis-alert.mjs +2 -2
- package/fesm2022/clr-angular-emphasis-alert.mjs.map +1 -1
- package/fesm2022/clr-angular-emphasis.mjs +12 -778
- package/fesm2022/clr-angular-emphasis.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-checkbox.mjs +13 -44
- package/fesm2022/clr-angular-forms-checkbox.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-combobox.mjs +420 -90
- package/fesm2022/clr-angular-forms-combobox.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-common.mjs +62 -57
- package/fesm2022/clr-angular-forms-common.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-datalist.mjs +2 -14
- package/fesm2022/clr-angular-forms-datalist.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-datepicker.mjs +20 -28
- package/fesm2022/clr-angular-forms-datepicker.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-file-input.mjs +78 -62
- package/fesm2022/clr-angular-forms-file-input.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-input.mjs +4 -18
- package/fesm2022/clr-angular-forms-input.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-number-input.mjs +2 -14
- package/fesm2022/clr-angular-forms-number-input.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-password.mjs +2 -14
- package/fesm2022/clr-angular-forms-password.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-radio.mjs +13 -44
- package/fesm2022/clr-angular-forms-radio.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-range.mjs +3 -16
- package/fesm2022/clr-angular-forms-range.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-select.mjs +3 -16
- package/fesm2022/clr-angular-forms-select.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-textarea.mjs +4 -17
- package/fesm2022/clr-angular-forms-textarea.mjs.map +1 -1
- package/fesm2022/clr-angular-forms.mjs +68 -8560
- package/fesm2022/clr-angular-forms.mjs.map +1 -1
- package/fesm2022/clr-angular-icon.mjs +10 -0
- package/fesm2022/clr-angular-icon.mjs.map +1 -1
- package/fesm2022/clr-angular-layout-nav.mjs +27 -25
- package/fesm2022/clr-angular-layout-nav.mjs.map +1 -1
- package/fesm2022/clr-angular-layout-tabs.mjs +1 -1
- package/fesm2022/clr-angular-layout-tabs.mjs.map +1 -1
- package/fesm2022/clr-angular-layout.mjs +15 -2057
- package/fesm2022/clr-angular-layout.mjs.map +1 -1
- package/fesm2022/clr-angular-modal.mjs +4 -5
- package/fesm2022/clr-angular-modal.mjs.map +1 -1
- package/fesm2022/clr-angular-popover-common.mjs +151 -85
- package/fesm2022/clr-angular-popover-common.mjs.map +1 -1
- package/fesm2022/clr-angular-popover-dropdown.mjs +7 -4
- package/fesm2022/clr-angular-popover-dropdown.mjs.map +1 -1
- package/fesm2022/clr-angular-popover-signpost.mjs +30 -15
- package/fesm2022/clr-angular-popover-signpost.mjs.map +1 -1
- package/fesm2022/clr-angular-popover-tooltip.mjs +7 -7
- package/fesm2022/clr-angular-popover-tooltip.mjs.map +1 -1
- package/fesm2022/clr-angular-popover.mjs +12 -2242
- package/fesm2022/clr-angular-popover.mjs.map +1 -1
- package/fesm2022/clr-angular-stepper.mjs +5 -5
- package/fesm2022/clr-angular-stepper.mjs.map +1 -1
- package/fesm2022/clr-angular-utils.mjs +20 -485
- package/fesm2022/clr-angular-utils.mjs.map +1 -1
- package/fesm2022/clr-angular-wizard.mjs +434 -223
- package/fesm2022/clr-angular-wizard.mjs.map +1 -1
- package/fesm2022/clr-angular.mjs +94 -38740
- package/fesm2022/clr-angular.mjs.map +1 -1
- package/package.json +10 -5
- package/popover/common/README.md +14 -12
- package/schematics/collection.json +14 -0
- package/schematics/ng-update/index.d.ts +2 -0
- package/schematics/ng-update/index.js +69 -0
- package/schematics/ng-update/index.js.map +1 -0
- package/schematics/ng-update/migrations/css-migration.d.ts +6 -0
- package/schematics/ng-update/migrations/css-migration.js +177 -0
- package/schematics/ng-update/migrations/css-migration.js.map +1 -0
- package/schematics/ng-update/migrations/import-migration.d.ts +4 -0
- package/schematics/ng-update/migrations/import-migration.js +187 -0
- package/schematics/ng-update/migrations/import-migration.js.map +1 -0
- package/schematics/ng-update/migrations/template-migration.d.ts +6 -0
- package/schematics/ng-update/migrations/template-migration.js +261 -0
- package/schematics/ng-update/migrations/template-migration.js.map +1 -0
- package/schematics/ng-update/replacements/css-replacements.d.ts +17 -0
- package/schematics/ng-update/replacements/css-replacements.js +74 -0
- package/schematics/ng-update/replacements/css-replacements.js.map +1 -0
- package/schematics/ng-update/replacements/import-replacements.d.ts +13 -0
- package/schematics/ng-update/replacements/import-replacements.js +108 -0
- package/schematics/ng-update/replacements/import-replacements.js.map +1 -0
- package/schematics/ng-update/replacements/symbol-replacements.d.ts +12 -0
- package/schematics/ng-update/replacements/symbol-replacements.js +67 -0
- package/schematics/ng-update/replacements/symbol-replacements.js.map +1 -0
- package/schematics/ng-update/replacements/template-replacements.d.ts +19 -0
- package/schematics/ng-update/replacements/template-replacements.js +57 -0
- package/schematics/ng-update/replacements/template-replacements.js.map +1 -0
- package/schematics/ng-update/tests/test-helpers.d.ts +6 -0
- package/schematics/ng-update/tests/test-helpers.js +34 -0
- package/schematics/ng-update/tests/test-helpers.js.map +1 -0
- package/schematics/ng-update/utils/file-visitor.d.ts +8 -0
- package/schematics/ng-update/utils/file-visitor.js +44 -0
- package/schematics/ng-update/utils/file-visitor.js.map +1 -0
- package/schematics/ng-update/utils/regexp-utils.d.ts +16 -0
- package/schematics/ng-update/utils/regexp-utils.js +34 -0
- package/schematics/ng-update/utils/regexp-utils.js.map +1 -0
- package/schematics/vitest.config.d.ts +2 -0
- package/schematics/vitest.config.js +17 -0
- package/schematics/vitest.config.js.map +1 -0
- package/types/clr-angular-accordion.d.ts +1 -1
- package/types/clr-angular-button.d.ts +1 -1
- package/types/clr-angular-data-datagrid.d.ts +23 -33
- package/types/clr-angular-data-tree-view.d.ts +10 -1
- package/types/clr-angular-data.d.ts +4 -2136
- package/types/clr-angular-emphasis.d.ts +4 -220
- package/types/clr-angular-forms-combobox.d.ts +64 -11
- package/types/clr-angular-forms-common.d.ts +9 -9
- package/types/clr-angular-forms-datepicker.d.ts +8 -1
- package/types/clr-angular-forms-file-input.d.ts +6 -3
- package/types/clr-angular-forms.d.ts +26 -2062
- package/types/clr-angular-layout-nav.d.ts +6 -2
- package/types/clr-angular-layout-tabs.d.ts +1 -1
- package/types/clr-angular-layout.d.ts +6 -463
- package/types/clr-angular-popover-common.d.ts +38 -13
- package/types/clr-angular-popover-dropdown.d.ts +2 -1
- package/types/clr-angular-popover-signpost.d.ts +15 -7
- package/types/clr-angular-popover-tooltip.d.ts +1 -1
- package/types/clr-angular-popover.d.ts +7 -559
- package/types/clr-angular-stepper.d.ts +1 -1
- package/types/clr-angular-utils.d.ts +13 -175
- package/types/clr-angular-wizard.d.ts +92 -35
- package/types/clr-angular.d.ts +22 -10238
package/package.json
CHANGED
|
@@ -17,11 +17,15 @@
|
|
|
17
17
|
"bugs": {
|
|
18
18
|
"url": "https://github.com/vmware-clarity/ng-clarity/issues"
|
|
19
19
|
},
|
|
20
|
+
"schematics": "./schematics/collection.json",
|
|
21
|
+
"ng-update": {
|
|
22
|
+
"migrations": "./schematics/collection.json"
|
|
23
|
+
},
|
|
20
24
|
"peerDependencies": {
|
|
21
|
-
"@angular/cdk": "
|
|
22
|
-
"@angular/common": "
|
|
23
|
-
"@angular/core": "
|
|
24
|
-
"@clr/ui": "18.0.0-beta.
|
|
25
|
+
"@angular/cdk": ">= 21.1.0",
|
|
26
|
+
"@angular/common": ">= 21.1.0",
|
|
27
|
+
"@angular/core": ">= 21.1.0",
|
|
28
|
+
"@clr/ui": "18.0.0-beta.11"
|
|
25
29
|
},
|
|
26
30
|
"module": "fesm2022/clr-angular.mjs",
|
|
27
31
|
"typings": "types/clr-angular.d.ts",
|
|
@@ -223,8 +227,9 @@
|
|
|
223
227
|
}
|
|
224
228
|
},
|
|
225
229
|
"sideEffects": false,
|
|
230
|
+
"type": "module",
|
|
226
231
|
"dependencies": {
|
|
227
232
|
"tslib": "^2.3.0"
|
|
228
233
|
},
|
|
229
|
-
"version": "18.0.0-beta.
|
|
234
|
+
"version": "18.0.0-beta.11"
|
|
230
235
|
}
|
package/popover/common/README.md
CHANGED
|
@@ -25,10 +25,12 @@ The service is responsible for:
|
|
|
25
25
|
- **`toggleWithEvent(event: any)`**: A helper method used by triggers. It toggles the `open` state, stores the triggering event (to prevent conflicts like "click outside" closing immediately), and prevents default scrolling behavior for arrow keys.
|
|
26
26
|
- **`openEvent`**: Stores the specific browser event that triggered the opening of the popover.
|
|
27
27
|
|
|
28
|
-
- **Focus &
|
|
29
|
-
- **`
|
|
28
|
+
- **Focus & Origin Management**:
|
|
29
|
+
- **`origin`**: Holds the `FlexibleConnectedPositionStrategyOrigin` — either an `ElementRef` (trigger element) or a `ClrPopoverPoint` (`{ x, y }` coordinate). This is used by the CDK to calculate where the overlay should appear.
|
|
30
|
+
- **`originElement`**: Convenience getter that returns the origin as `ElementRef<HTMLElement>` when element-based, or `null` when point-based.
|
|
31
|
+
- **`originPoint`**: Convenience getter that returns the origin as `ClrPopoverPoint` when point-based, or `null` when element-based.
|
|
30
32
|
- **`closeButtonRef`**: Holds the `ElementRef` of the internal close button (if applicable).
|
|
31
|
-
- **`
|
|
33
|
+
- **`focusOrigin()`**: A utility method to return focus to the origin element (e.g., when the menu closes), ensuring accessibility compliance. No-op for point-based origins.
|
|
32
34
|
- **`focusCloseButton()`**: Moves focus to the close button inside the content when appropriate.
|
|
33
35
|
|
|
34
36
|
- **Reactive Streams**:
|
|
@@ -38,10 +40,10 @@ The service is responsible for:
|
|
|
38
40
|
|
|
39
41
|
### Directives
|
|
40
42
|
|
|
41
|
-
1. **`[
|
|
43
|
+
1. **`[clrPopoverOrigin]`**:
|
|
42
44
|
|
|
43
|
-
- Used on the element that serves as the reference point for positioning
|
|
44
|
-
- Passes an `ElementRef` to the service
|
|
45
|
+
- Used on the element that serves as the reference point for positioning.
|
|
46
|
+
- Passes an `ElementRef` to the service as the `origin`, which is used for focus management and positioning calculations.
|
|
45
47
|
|
|
46
48
|
2. **`*clrPopoverContent`**:
|
|
47
49
|
|
|
@@ -52,7 +54,7 @@ The service is responsible for:
|
|
|
52
54
|
3. **`[clrPopoverCloseButton]`**:
|
|
53
55
|
|
|
54
56
|
- Should only be used inside popover content containers.
|
|
55
|
-
- Calls the toggle method on the service and restores focus to the
|
|
57
|
+
- Calls the toggle method on the service and restores focus to the origin element.
|
|
56
58
|
|
|
57
59
|
4. **`[clrPopoverOpenCloseButton]`**:
|
|
58
60
|
|
|
@@ -66,7 +68,7 @@ The `*clrPopoverContent` directive is the "workhorse" of the utility. It accepts
|
|
|
66
68
|
- **`clrPopoverContent`** (boolean):
|
|
67
69
|
- Controls the open/closed state of the popover. When true, the overlay is created and attached; when false, it is detached.
|
|
68
70
|
- **`clrPopoverContentAt`** (`ClrPopoverPosition | ConnectedPosition`):
|
|
69
|
-
- Defines the preferred position of the content relative to the
|
|
71
|
+
- Defines the preferred position of the content relative to the origin (e.g., `top-right`, `bottom-left`). It sets the `preferredPosition` for the CDK overlay.
|
|
70
72
|
- **`clrPopoverContentAvailablePositions`** (`ConnectedPosition[]`):
|
|
71
73
|
- A prioritized list of fallback positions the overlay can attempt to use if the preferred position does not fit within the viewport.
|
|
72
74
|
- **`clrPopoverContentType`** (`ClrPopoverType`):
|
|
@@ -79,8 +81,8 @@ The `*clrPopoverContent` directive is the "workhorse" of the utility. It accepts
|
|
|
79
81
|
## Enums
|
|
80
82
|
|
|
81
83
|
1. **`ClrPopoverType`**: Describes the popover variation: `SIGNPOST`, `TOOLTIP`, `DROPDOWN`, and `DEFAULT`.
|
|
82
|
-
2. **`ClrPopoverPosition`**: Describes the popover position relative to the
|
|
83
|
-
3. **`ClrPosition`**: Describes the specific point of contact on both the
|
|
84
|
+
2. **`ClrPopoverPosition`**: Describes the popover position relative to the origin (e.g., `top-left`, `bottom-right`).
|
|
85
|
+
3. **`ClrPosition`**: Describes the specific point of contact on both the origin and content elements.
|
|
84
86
|
|
|
85
87
|
---
|
|
86
88
|
|
|
@@ -89,8 +91,8 @@ The `*clrPopoverContent` directive is the "workhorse" of the utility. It accepts
|
|
|
89
91
|
To use the popover utility, a host component must provide the `ClrPopoverService`. Components generally provide a `ClrPopoverPosition` via the `at` input to describe the preferred content position.
|
|
90
92
|
|
|
91
93
|
```html
|
|
92
|
-
<button class="btn" clrPopoverOpenCloseButton
|
|
93
|
-
<cds-icon shape="home"></cds-icon> Popover
|
|
94
|
+
<button class="btn" clrPopoverOpenCloseButton clrPopoverOrigin [attr.aria-owns]="popoverId">
|
|
95
|
+
<cds-icon shape="home"></cds-icon> Popover Origin
|
|
94
96
|
</button>
|
|
95
97
|
<div
|
|
96
98
|
[id]="popoverId"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json",
|
|
3
|
+
"schematics": {
|
|
4
|
+
"ng-update": {
|
|
5
|
+
"version": "18.0.0",
|
|
6
|
+
"description": "Migrates @clr/angular from v17 to v18",
|
|
7
|
+
"factory": "./ng-update/index#migrate"
|
|
8
|
+
},
|
|
9
|
+
"migrate-v18": {
|
|
10
|
+
"description": "Applies automated @clr/angular v17→v18 source migrations (templates, imports, CSS). Run with: ng generate @clr/angular:migrate-v18",
|
|
11
|
+
"factory": "./ng-update/index#migrate"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
4
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
5
|
+
* This software is released under MIT license.
|
|
6
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.migrate = migrate;
|
|
10
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
11
|
+
const css_migration_1 = require("./migrations/css-migration");
|
|
12
|
+
const import_migration_1 = require("./migrations/import-migration");
|
|
13
|
+
const template_migration_1 = require("./migrations/template-migration");
|
|
14
|
+
const file_visitor_1 = require("./utils/file-visitor");
|
|
15
|
+
/**
|
|
16
|
+
* All candidate strings that may appear in .ts source files.
|
|
17
|
+
* Used as a fast-path pre-check to skip files that need no migration.
|
|
18
|
+
*/
|
|
19
|
+
const TS_CANDIDATES = [
|
|
20
|
+
...import_migration_1.IMPORT_MIGRATION_CANDIDATES,
|
|
21
|
+
...template_migration_1.TEMPLATE_MIGRATION_INLINE_CANDIDATES,
|
|
22
|
+
...css_migration_1.CSS_MIGRATION_INLINE_CANDIDATES,
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* Single-pass migration for TypeScript source files.
|
|
26
|
+
*
|
|
27
|
+
* Reads each .ts file exactly once, applies import, inline-template, and
|
|
28
|
+
* inline-style transforms in sequence, then writes it if changed.
|
|
29
|
+
* This is more efficient than visiting .ts files separately in each migration
|
|
30
|
+
* because each file is read and written at most once.
|
|
31
|
+
*/
|
|
32
|
+
function migrateTypeScriptFiles() {
|
|
33
|
+
return (tree, context) => {
|
|
34
|
+
context.logger.info(' Migrating TypeScript files (imports, inline templates, inline styles)');
|
|
35
|
+
let scanCount = 0;
|
|
36
|
+
let updateCount = 0;
|
|
37
|
+
(0, file_visitor_1.visitFiles)(tree, '**/*.ts', filePath => {
|
|
38
|
+
scanCount++;
|
|
39
|
+
const content = tree.read(filePath);
|
|
40
|
+
if (!content) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const original = content.toString('utf-8');
|
|
44
|
+
// Fast-path: skip entirely if no candidate string is present anywhere.
|
|
45
|
+
if (!TS_CANDIDATES.some(c => original.includes(c))) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
let text = original;
|
|
49
|
+
text = (0, import_migration_1.transformImports)(text);
|
|
50
|
+
text = (0, template_migration_1.transformInlineTemplates)(text);
|
|
51
|
+
text = (0, css_migration_1.transformInlineStyles)(text);
|
|
52
|
+
if (text !== original) {
|
|
53
|
+
tree.overwrite(filePath, text);
|
|
54
|
+
updateCount++;
|
|
55
|
+
context.logger.info(` UPDATE ${filePath}`);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
context.logger.info(` ${updateCount} of ${scanCount} file(s) updated.`);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function migrate() {
|
|
62
|
+
return (tree, context) => {
|
|
63
|
+
context.logger.info('');
|
|
64
|
+
context.logger.info('Running @clr/angular v18 migration...');
|
|
65
|
+
context.logger.info('');
|
|
66
|
+
return (0, schematics_1.chain)([migrateTypeScriptFiles(), (0, template_migration_1.migrateTemplates)(), (0, css_migration_1.migrateCssProperties)()])(tree, context);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../projects/angular/schematics/ng-update/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAyEH,0BAQC;AA/ED,2DAAiF;AAEjF,8DAIoC;AACpC,oEAA8F;AAC9F,wEAIyC;AACzC,uDAAkD;AAElD;;;GAGG;AACH,MAAM,aAAa,GAAsB;IACvC,GAAG,8CAA2B;IAC9B,GAAG,yDAAoC;IACvC,GAAG,+CAA+B;CACnC,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,sBAAsB;IAC7B,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;QAE/F,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,IAAA,yBAAU,EAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;YACrC,SAAS,EAAE,CAAC;YAEZ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAE3C,uEAAuE;YACvE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,OAAO;YACT,CAAC;YAED,IAAI,IAAI,GAAG,QAAQ,CAAC;YACpB,IAAI,GAAG,IAAA,mCAAgB,EAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,GAAG,IAAA,6CAAwB,EAAC,IAAI,CAAC,CAAC;YACtC,IAAI,GAAG,IAAA,qCAAqB,EAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC/B,WAAW,EAAE,CAAC;gBACd,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,WAAW,OAAO,SAAS,mBAAmB,CAAC,CAAC;IAC3E,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,OAAO;IACrB,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAExB,OAAO,IAAA,kBAAK,EAAC,CAAC,sBAAsB,EAAE,EAAE,IAAA,qCAAgB,GAAE,EAAE,IAAA,oCAAoB,GAAE,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtG,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Rule } from '@angular-devkit/schematics';
|
|
2
|
+
export declare const CSS_MIGRATION_CANDIDATES: readonly string[];
|
|
3
|
+
export declare const CSS_MIGRATION_INLINE_CANDIDATES: readonly string[];
|
|
4
|
+
export declare function transformInlineStyles(text: string): string;
|
|
5
|
+
export declare function migrateCssProperties(): Rule;
|
|
6
|
+
export declare function applyStyleTransforms(text: string, filePath: string | null): string;
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
4
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
5
|
+
* This software is released under MIT license.
|
|
6
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.CSS_MIGRATION_INLINE_CANDIDATES = exports.CSS_MIGRATION_CANDIDATES = void 0;
|
|
10
|
+
exports.transformInlineStyles = transformInlineStyles;
|
|
11
|
+
exports.migrateCssProperties = migrateCssProperties;
|
|
12
|
+
exports.applyStyleTransforms = applyStyleTransforms;
|
|
13
|
+
const css_replacements_1 = require("../replacements/css-replacements");
|
|
14
|
+
const file_visitor_1 = require("../utils/file-visitor");
|
|
15
|
+
const regexp_utils_1 = require("../utils/regexp-utils");
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Pre-compiled regex arrays — built once at module load, not per-file
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Negative lookahead (?![-\w]) ensures a CSS custom property name that is a
|
|
20
|
+
// prefix of a longer one (e.g. --clr-foo--active inside --clr-foo--active-extra)
|
|
21
|
+
// is NOT matched, preventing false-positive renames.
|
|
22
|
+
const COMPILED_PROPERTY_RENAME_REGEXES = css_replacements_1.CSS_PROPERTY_REPLACEMENTS.filter(r => r.new).map(r => ({
|
|
23
|
+
old: r.old,
|
|
24
|
+
new: r.new,
|
|
25
|
+
regex: (0, regexp_utils_1.prefixNegativeLookaheadRegex)(r.old),
|
|
26
|
+
}));
|
|
27
|
+
const COMPILED_PROPERTY_REMOVE_REGEXES = css_replacements_1.CSS_PROPERTY_REPLACEMENTS.filter(r => !r.new).map(r => ({
|
|
28
|
+
old: r.old,
|
|
29
|
+
regex: new RegExp(`(\\s*)(${(0, regexp_utils_1.escapeRegExp)(r.old)}(?![-\\w])\\s*:[^;]*;)`, 'g'),
|
|
30
|
+
}));
|
|
31
|
+
const COMPILED_SELECTOR_REGEXES = css_replacements_1.CSS_SELECTOR_REPLACEMENTS.map(r => ({
|
|
32
|
+
old: r.old,
|
|
33
|
+
new: r.new,
|
|
34
|
+
regex: (0, regexp_utils_1.wordBoundaryRegex)(r.old),
|
|
35
|
+
}));
|
|
36
|
+
const COMPILED_ATTRIBUTE_REGEXES = css_replacements_1.CSS_ATTRIBUTE_REPLACEMENTS.map(r => ({
|
|
37
|
+
old: r.old,
|
|
38
|
+
new: r.new,
|
|
39
|
+
regex: new RegExp((0, regexp_utils_1.escapeRegExp)(r.old), 'g'),
|
|
40
|
+
}));
|
|
41
|
+
const COMPILED_MIXIN_REGEXES = css_replacements_1.REMOVED_SCSS_MIXINS.map(name => ({
|
|
42
|
+
name,
|
|
43
|
+
regex: new RegExp(`@include\\s+${(0, regexp_utils_1.escapeRegExp)(name)}\\s*\\([^)]*\\)\\s*;`, 'g'),
|
|
44
|
+
}));
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Fast-path candidate strings
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
exports.CSS_MIGRATION_CANDIDATES = [
|
|
49
|
+
...css_replacements_1.CSS_PROPERTY_REPLACEMENTS.map(r => r.old),
|
|
50
|
+
...css_replacements_1.CSS_SELECTOR_REPLACEMENTS.map(r => r.old),
|
|
51
|
+
...css_replacements_1.CSS_ATTRIBUTE_REPLACEMENTS.map(r => r.old),
|
|
52
|
+
...css_replacements_1.REMOVED_SCSS_MIXINS,
|
|
53
|
+
];
|
|
54
|
+
exports.CSS_MIGRATION_INLINE_CANDIDATES = exports.CSS_MIGRATION_CANDIDATES;
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Public pure transforms — used by the unified .ts pass in index.ts
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
function transformInlineStyles(text) {
|
|
59
|
+
const stylesRegex = /styles\s*:\s*\[([^\]]*)\]/g;
|
|
60
|
+
return text.replace(stylesRegex, (match, stylesContent) => {
|
|
61
|
+
if (!exports.CSS_MIGRATION_INLINE_CANDIDATES.some(c => stylesContent.includes(c))) {
|
|
62
|
+
return match;
|
|
63
|
+
}
|
|
64
|
+
const updated = applyStyleTransforms(stylesContent, null);
|
|
65
|
+
return updated !== stylesContent ? match.replace(stylesContent, updated) : match;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Schematic Rule — visits style files and .ts inline styles
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
function migrateCssProperties() {
|
|
72
|
+
return (tree, context) => {
|
|
73
|
+
context.logger.info(' Migrating style files (CSS, SCSS, Sass, Less)');
|
|
74
|
+
let styleScanCount = 0;
|
|
75
|
+
let styleUpdateCount = 0;
|
|
76
|
+
let tsScanCount = 0;
|
|
77
|
+
let tsUpdateCount = 0;
|
|
78
|
+
(0, file_visitor_1.visitFiles)(tree, '**/*.{css,scss,sass,less}', filePath => {
|
|
79
|
+
styleScanCount++;
|
|
80
|
+
const content = tree.read(filePath);
|
|
81
|
+
if (!content) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const original = content.toString('utf-8');
|
|
85
|
+
if (!exports.CSS_MIGRATION_CANDIDATES.some(c => original.includes(c))) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const updated = applyStyleTransforms(original, filePath);
|
|
89
|
+
if (updated !== original) {
|
|
90
|
+
tree.overwrite(filePath, updated);
|
|
91
|
+
styleUpdateCount++;
|
|
92
|
+
context.logger.info(` UPDATE ${filePath}`);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
(0, file_visitor_1.visitFiles)(tree, '**/*.ts', filePath => {
|
|
96
|
+
tsScanCount++;
|
|
97
|
+
const content = tree.read(filePath);
|
|
98
|
+
if (!content) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const original = content.toString('utf-8');
|
|
102
|
+
if (!exports.CSS_MIGRATION_INLINE_CANDIDATES.some(c => original.includes(c))) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const updated = transformInlineStyles(original);
|
|
106
|
+
if (updated !== original) {
|
|
107
|
+
tree.overwrite(filePath, updated);
|
|
108
|
+
tsUpdateCount++;
|
|
109
|
+
context.logger.info(` UPDATE ${filePath}`);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
const totalScanned = styleScanCount + tsScanCount;
|
|
113
|
+
const totalUpdated = styleUpdateCount + tsUpdateCount;
|
|
114
|
+
context.logger.info(` ${totalUpdated} of ${totalScanned} file(s) updated.`);
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
// Helpers — exported for direct testing; not part of the public schematic API
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
function applyStyleTransforms(text, filePath) {
|
|
121
|
+
text = replaceCssProperties(text);
|
|
122
|
+
text = replaceCssSelectors(text);
|
|
123
|
+
text = replaceCssAttributes(text);
|
|
124
|
+
const isScssSass = filePath === null || filePath.endsWith('.scss') || filePath.endsWith('.sass');
|
|
125
|
+
if (isScssSass) {
|
|
126
|
+
text = replaceScssMixins(text);
|
|
127
|
+
}
|
|
128
|
+
return text;
|
|
129
|
+
}
|
|
130
|
+
function replaceCssProperties(text) {
|
|
131
|
+
for (const r of COMPILED_PROPERTY_RENAME_REGEXES) {
|
|
132
|
+
if (!text.includes(r.old)) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
r.regex.lastIndex = 0;
|
|
136
|
+
text = text.replace(r.regex, r.new);
|
|
137
|
+
}
|
|
138
|
+
for (const r of COMPILED_PROPERTY_REMOVE_REGEXES) {
|
|
139
|
+
if (!text.includes(r.old)) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
r.regex.lastIndex = 0;
|
|
143
|
+
text = text.replace(r.regex, `$1/* TODO(v18 migration): '${r.old}' has been removed. */ /* $2 */`);
|
|
144
|
+
}
|
|
145
|
+
return text;
|
|
146
|
+
}
|
|
147
|
+
function replaceCssSelectors(text) {
|
|
148
|
+
for (const r of COMPILED_SELECTOR_REGEXES) {
|
|
149
|
+
if (!text.includes(r.old)) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
r.regex.lastIndex = 0;
|
|
153
|
+
text = text.replace(r.regex, r.new);
|
|
154
|
+
}
|
|
155
|
+
return text;
|
|
156
|
+
}
|
|
157
|
+
function replaceCssAttributes(text) {
|
|
158
|
+
for (const r of COMPILED_ATTRIBUTE_REGEXES) {
|
|
159
|
+
if (!text.includes(r.old)) {
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
r.regex.lastIndex = 0;
|
|
163
|
+
text = text.replace(r.regex, r.new);
|
|
164
|
+
}
|
|
165
|
+
return text;
|
|
166
|
+
}
|
|
167
|
+
function replaceScssMixins(text) {
|
|
168
|
+
for (const r of COMPILED_MIXIN_REGEXES) {
|
|
169
|
+
if (!text.includes(r.name)) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
r.regex.lastIndex = 0;
|
|
173
|
+
text = text.replace(r.regex, `/* TODO(v18 migration): '@include ${r.name}(...)' has been removed. */`);
|
|
174
|
+
}
|
|
175
|
+
return text;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=css-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-migration.js","sourceRoot":"","sources":["../../../../../projects/angular/schematics/ng-update/migrations/css-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
4
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
5
|
+
* This software is released under MIT license.
|
|
6
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.IMPORT_MIGRATION_CANDIDATES = void 0;
|
|
10
|
+
exports.transformImports = transformImports;
|
|
11
|
+
exports.migrateImports = migrateImports;
|
|
12
|
+
const import_replacements_1 = require("../replacements/import-replacements");
|
|
13
|
+
const symbol_replacements_1 = require("../replacements/symbol-replacements");
|
|
14
|
+
const file_visitor_1 = require("../utils/file-visitor");
|
|
15
|
+
const regexp_utils_1 = require("../utils/regexp-utils");
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Pre-compiled regex arrays — built once at module load, not per-file
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Sort import replacements by path length descending so more-specific paths
|
|
20
|
+
// (e.g. '@clr/angular/src/accordion/stepper') match before shorter prefixes.
|
|
21
|
+
const SORTED_IMPORT_REPLACEMENTS = [...import_replacements_1.IMPORT_REPLACEMENTS].sort((a, b) => b.oldModule.length - a.oldModule.length);
|
|
22
|
+
// Wildcard replacements: change the whole module path for all symbols.
|
|
23
|
+
const COMPILED_WILDCARD_IMPORT_REGEXES = SORTED_IMPORT_REPLACEMENTS.filter(r => r.oldSymbol === '*').map(r => ({
|
|
24
|
+
oldModule: r.oldModule,
|
|
25
|
+
newModule: r.newModule,
|
|
26
|
+
regex: new RegExp(`(from\\s+['"])${(0, regexp_utils_1.escapeRegExp)(r.oldModule)}(?=[/'"])`, 'g'),
|
|
27
|
+
}));
|
|
28
|
+
// Symbol-specific replacements: only the named symbol moves to the new module.
|
|
29
|
+
// Kept as plain data — splitSymbolImport() handles them at runtime to avoid
|
|
30
|
+
// the false positive where sibling symbols in the same import are dragged to
|
|
31
|
+
// the wrong module path.
|
|
32
|
+
const SYMBOL_SPECIFIC_IMPORTS = SORTED_IMPORT_REPLACEMENTS.filter(r => r.oldSymbol !== '*').map(r => ({
|
|
33
|
+
oldModule: r.oldModule,
|
|
34
|
+
newModule: r.newModule,
|
|
35
|
+
oldSymbol: r.oldSymbol,
|
|
36
|
+
newSymbol: r.newSymbol,
|
|
37
|
+
}));
|
|
38
|
+
// Only symbols with a non-empty new name are renamed here; removed symbols handled separately.
|
|
39
|
+
const COMPILED_SYMBOL_REPLACEMENTS = symbol_replacements_1.SYMBOL_REPLACEMENTS.filter(r => r.new).map(r => ({
|
|
40
|
+
...r,
|
|
41
|
+
// Ç (U+00C7) is not an ASCII word character so \b doesn't delimit it.
|
|
42
|
+
// Use explicit lookahead/lookbehind to avoid partial matches.
|
|
43
|
+
regex: r.old.startsWith('Ç')
|
|
44
|
+
? new RegExp(`(?<![A-Za-z0-9_$Ç])${(0, regexp_utils_1.escapeRegExp)(r.old)}(?![A-Za-z0-9_$])`, 'g')
|
|
45
|
+
: (0, regexp_utils_1.wordBoundaryRegex)(r.old),
|
|
46
|
+
}));
|
|
47
|
+
const REMOVED_SYMBOLS = symbol_replacements_1.SYMBOL_REPLACEMENTS.filter(r => r.new === '').map(r => r.old);
|
|
48
|
+
const REMOVED_SYMBOL_SOLE_IMPORT_REGEXES = REMOVED_SYMBOLS.map(sym => new RegExp(`^\\s*import\\s*\\{\\s*${(0, regexp_utils_1.escapeRegExp)(sym)}\\s*\\}\\s*from\\s*['"][^'"]+['"]\\s*;?\\s*$`, 'gm'));
|
|
49
|
+
const REMOVED_SYMBOL_LEADING_COMMA_REGEXES = REMOVED_SYMBOLS.map(sym => new RegExp(`\\b${(0, regexp_utils_1.escapeRegExp)(sym)}\\b\\s*,\\s*`, 'g'));
|
|
50
|
+
const REMOVED_SYMBOL_TRAILING_COMMA_REGEXES = REMOVED_SYMBOLS.map(sym => new RegExp(`\\s*,\\s*${(0, regexp_utils_1.escapeRegExp)(sym)}\\b`, 'g'));
|
|
51
|
+
const REMOVED_SYMBOL_USAGE_REGEXES = REMOVED_SYMBOLS.map(sym => ({
|
|
52
|
+
sym,
|
|
53
|
+
test: new RegExp(`\\b${(0, regexp_utils_1.escapeRegExp)(sym)}\\b`),
|
|
54
|
+
replace: new RegExp(`\\b${(0, regexp_utils_1.escapeRegExp)(sym)}\\b`, 'g'),
|
|
55
|
+
}));
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// Fast-path candidate strings — if none present, skip the file entirely
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
exports.IMPORT_MIGRATION_CANDIDATES = [
|
|
60
|
+
...import_replacements_1.IMPORT_REPLACEMENTS.map(r => r.oldModule),
|
|
61
|
+
...symbol_replacements_1.SYMBOL_REPLACEMENTS.filter(r => r.new).map(r => r.old),
|
|
62
|
+
...REMOVED_SYMBOLS,
|
|
63
|
+
];
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Public pure transform — used by the unified .ts pass in index.ts
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
function transformImports(text) {
|
|
68
|
+
if (!exports.IMPORT_MIGRATION_CANDIDATES.some(c => text.includes(c))) {
|
|
69
|
+
return text;
|
|
70
|
+
}
|
|
71
|
+
text = replaceImportPaths(text);
|
|
72
|
+
text = replaceSymbols(text);
|
|
73
|
+
text = removeDeletedImports(text);
|
|
74
|
+
return text;
|
|
75
|
+
}
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// Schematic Rule — kept for backwards compatibility; unified pass in index.ts
|
|
78
|
+
// is preferred for performance.
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
function migrateImports() {
|
|
81
|
+
return (tree, context) => {
|
|
82
|
+
context.logger.info(' Migrating TypeScript imports and symbols');
|
|
83
|
+
let scanCount = 0;
|
|
84
|
+
let fileCount = 0;
|
|
85
|
+
(0, file_visitor_1.visitFiles)(tree, '**/*.ts', filePath => {
|
|
86
|
+
scanCount++;
|
|
87
|
+
const content = tree.read(filePath);
|
|
88
|
+
if (!content) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const original = content.toString('utf-8');
|
|
92
|
+
const updated = transformImports(original);
|
|
93
|
+
if (updated !== original) {
|
|
94
|
+
tree.overwrite(filePath, updated);
|
|
95
|
+
fileCount++;
|
|
96
|
+
context.logger.info(` UPDATE ${filePath}`);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
context.logger.info(` ${fileCount} of ${scanCount} file(s) updated.`);
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// Private helpers
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
function replaceImportPaths(text) {
|
|
106
|
+
// Wildcard replacements: move all symbols from oldModule to newModule.
|
|
107
|
+
for (const r of COMPILED_WILDCARD_IMPORT_REGEXES) {
|
|
108
|
+
if (!text.includes(r.oldModule)) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
r.regex.lastIndex = 0;
|
|
112
|
+
text = text.replace(r.regex, `$1${r.newModule}`);
|
|
113
|
+
}
|
|
114
|
+
// Symbol-specific replacements: extract one symbol to a new module, leaving
|
|
115
|
+
// any sibling symbols on the original module to prevent false positives.
|
|
116
|
+
for (const r of SYMBOL_SPECIFIC_IMPORTS) {
|
|
117
|
+
if (!text.includes(r.oldModule) || !text.includes(r.oldSymbol)) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
text = splitSymbolImport(text, r.oldSymbol, r.newSymbol, r.oldModule, r.newModule);
|
|
121
|
+
}
|
|
122
|
+
return text;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Extracts a single named symbol from an import and moves it to a new module.
|
|
126
|
+
*
|
|
127
|
+
* When the import contains sibling symbols, a second import for the remaining
|
|
128
|
+
* symbols on the original module is emitted. This prevents the false positive
|
|
129
|
+
* where all siblings are silently moved to the wrong module.
|
|
130
|
+
*
|
|
131
|
+
* Example (multi-symbol):
|
|
132
|
+
* import { FocusService, ClrFormsModule } from '@clr/angular/forms';
|
|
133
|
+
* →
|
|
134
|
+
* import { FormsFocusService } from '@clr/angular/forms/common';
|
|
135
|
+
* import { ClrFormsModule } from '@clr/angular/forms';
|
|
136
|
+
*/
|
|
137
|
+
function splitSymbolImport(text, oldSymbol, newSymbol, oldModule, newModule) {
|
|
138
|
+
const modEsc = (0, regexp_utils_1.escapeRegExp)(oldModule);
|
|
139
|
+
const symEsc = (0, regexp_utils_1.escapeRegExp)(oldSymbol);
|
|
140
|
+
// Compiled once per call, not inside the replace callback.
|
|
141
|
+
const symInListRe = new RegExp(`(?:^|,)\\s*${symEsc}\\s*(?:,|$)`);
|
|
142
|
+
const importRe = new RegExp(`([ \\t]*)import\\s*\\{([^}]*)\\}\\s*from\\s*(['"])${modEsc}\\3(\\s*;?)`, 'gm');
|
|
143
|
+
return text.replace(importRe, (match, indent, symbolList, quote, semi) => {
|
|
144
|
+
if (!symInListRe.test(symbolList)) {
|
|
145
|
+
return match;
|
|
146
|
+
}
|
|
147
|
+
const semiStr = semi.trim() || ';';
|
|
148
|
+
const remaining = symbolList
|
|
149
|
+
.split(',')
|
|
150
|
+
.map(s => s.trim())
|
|
151
|
+
.filter(s => s && s !== oldSymbol);
|
|
152
|
+
if (remaining.length === 0) {
|
|
153
|
+
return `${indent}import { ${newSymbol} } from ${quote}${newModule}${quote}${semiStr}`;
|
|
154
|
+
}
|
|
155
|
+
const newLine = `${indent}import { ${newSymbol} } from ${quote}${newModule}${quote}${semiStr}`;
|
|
156
|
+
const oldLine = `${indent}import { ${remaining.join(', ')} } from ${quote}${oldModule}${quote}${semiStr}`;
|
|
157
|
+
return `${newLine}\n${oldLine}`;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function replaceSymbols(text) {
|
|
161
|
+
for (const r of COMPILED_SYMBOL_REPLACEMENTS) {
|
|
162
|
+
if (!text.includes(r.old)) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
r.regex.lastIndex = 0;
|
|
166
|
+
text = text.replace(r.regex, r.new);
|
|
167
|
+
}
|
|
168
|
+
return text;
|
|
169
|
+
}
|
|
170
|
+
function removeDeletedImports(text) {
|
|
171
|
+
for (let i = 0; i < REMOVED_SYMBOLS.length; i++) {
|
|
172
|
+
const sym = REMOVED_SYMBOLS[i];
|
|
173
|
+
if (!text.includes(sym)) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
text = text.replace(REMOVED_SYMBOL_SOLE_IMPORT_REGEXES[i], '');
|
|
177
|
+
text = text.replace(REMOVED_SYMBOL_LEADING_COMMA_REGEXES[i], '');
|
|
178
|
+
text = text.replace(REMOVED_SYMBOL_TRAILING_COMMA_REGEXES[i], '');
|
|
179
|
+
const usage = REMOVED_SYMBOL_USAGE_REGEXES[i];
|
|
180
|
+
if (usage.test.test(text)) {
|
|
181
|
+
usage.replace.lastIndex = 0;
|
|
182
|
+
text = text.replace(usage.replace, `${sym} /* TODO: '${sym}' was removed in @clr/angular v18. Use standard KeyboardEvent.key values instead. */`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return text;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=import-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-migration.js","sourceRoot":"","sources":["../../../../../projects/angular/schematics/ng-update/migrations/import-migration.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAsFH,4CASC;AAOD,wCA2BC;AA7HD,6EAA0E;AAC1E,6EAA0E;AAC1E,wDAAmD;AACnD,wDAAwE;AAExE,8EAA8E;AAC9E,sEAAsE;AACtE,8EAA8E;AAE9E,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,0BAA0B,GAAG,CAAC,GAAG,yCAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAEpH,uEAAuE;AACvE,MAAM,gCAAgC,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7G,SAAS,EAAE,CAAC,CAAC,SAAS;IACtB,SAAS,EAAE,CAAC,CAAC,SAAS;IACtB,KAAK,EAAE,IAAI,MAAM,CAAC,iBAAiB,IAAA,2BAAY,EAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC;CAC9E,CAAC,CAAC,CAAC;AAEJ,+EAA+E;AAC/E,4EAA4E;AAC5E,6EAA6E;AAC7E,yBAAyB;AACzB,MAAM,uBAAuB,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpG,SAAS,EAAE,CAAC,CAAC,SAAS;IACtB,SAAS,EAAE,CAAC,CAAC,SAAS;IACtB,SAAS,EAAE,CAAC,CAAC,SAAS;IACtB,SAAS,EAAE,CAAC,CAAC,SAAS;CACvB,CAAC,CAAC,CAAC;AASJ,+FAA+F;AAC/F,MAAM,4BAA4B,GAAgC,yCAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjH,GAAG,CAAC;IACJ,sEAAsE;IACtE,8DAA8D;IAC9D,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1B,CAAC,CAAC,IAAI,MAAM,CAAC,sBAAsB,IAAA,2BAAY,EAAC,CAAC,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC;QAC/E,CAAC,CAAC,IAAA,gCAAiB,EAAC,CAAC,CAAC,GAAG,CAAC;CAC7B,CAAC,CAAC,CAAC;AAEJ,MAAM,eAAe,GAAG,yCAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEtF,MAAM,kCAAkC,GAAG,eAAe,CAAC,GAAG,CAC5D,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,yBAAyB,IAAA,2BAAY,EAAC,GAAG,CAAC,8CAA8C,EAAE,IAAI,CAAC,CAClH,CAAC;AAEF,MAAM,oCAAoC,GAAG,eAAe,CAAC,GAAG,CAC9D,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,IAAA,2BAAY,EAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAC9D,CAAC;AAEF,MAAM,qCAAqC,GAAG,eAAe,CAAC,GAAG,CAC/D,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,YAAY,IAAA,2BAAY,EAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAC3D,CAAC;AAEF,MAAM,4BAA4B,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/D,GAAG;IACH,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,IAAA,2BAAY,EAAC,GAAG,CAAC,KAAK,CAAC;IAC9C,OAAO,EAAE,IAAI,MAAM,CAAC,MAAM,IAAA,2BAAY,EAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;CACvD,CAAC,CAAC,CAAC;AAEJ,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAEjE,QAAA,2BAA2B,GAAsB;IAC5D,GAAG,yCAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5C,GAAG,yCAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,GAAG,eAAe;CACnB,CAAC;AAEF,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAE9E,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,IAAI,CAAC,mCAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,SAAgB,cAAc;IAC5B,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAElE,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAA,yBAAU,EAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;YACrC,SAAS,EAAE,CAAC;YAEZ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAE3C,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAClC,SAAS,EAAE,CAAC;gBACZ,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,OAAO,SAAS,mBAAmB,CAAC,CAAC;IACzE,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,kBAAkB,CAAC,IAAY;IACtC,uEAAuE;IACvE,KAAK,MAAM,CAAC,IAAI,gCAAgC,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QACD,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,4EAA4E;IAC5E,yEAAyE;IACzE,KAAK,MAAM,CAAC,IAAI,uBAAuB,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,SAAS;QACX,CAAC;QACD,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,iBAAiB,CACxB,IAAY,EACZ,SAAiB,EACjB,SAAiB,EACjB,SAAiB,EACjB,SAAiB;IAEjB,MAAM,MAAM,GAAG,IAAA,2BAAY,EAAC,SAAS,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAA,2BAAY,EAAC,SAAS,CAAC,CAAC;IACvC,2DAA2D;IAC3D,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,cAAc,MAAM,aAAa,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,qDAAqD,MAAM,aAAa,EAAE,IAAI,CAAC,CAAC;IAE5G,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAc,EAAE,UAAkB,EAAE,KAAa,EAAE,IAAY,EAAE,EAAE;QACvG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC;QACnC,MAAM,SAAS,GAAG,UAAU;aACzB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;QAErC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,MAAM,YAAY,SAAS,WAAW,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;QACxF,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,MAAM,YAAY,SAAS,WAAW,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;QAC/F,MAAM,OAAO,GAAG,GAAG,MAAM,YAAY,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;QAC1G,OAAO,GAAG,OAAO,KAAK,OAAO,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,KAAK,MAAM,CAAC,IAAI,4BAA4B,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAElE,MAAM,KAAK,GAAG,4BAA4B,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,KAAK,CAAC,OAAO,EACb,GAAG,GAAG,cAAc,GAAG,sFAAsF,CAC9G,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Rule } from '@angular-devkit/schematics';
|
|
2
|
+
export declare const TEMPLATE_MIGRATION_HTML_CANDIDATES: readonly string[];
|
|
3
|
+
export declare const TEMPLATE_MIGRATION_INLINE_CANDIDATES: readonly string[];
|
|
4
|
+
export declare function transformInlineTemplates(text: string): string;
|
|
5
|
+
export declare function migrateTemplates(): Rule;
|
|
6
|
+
export declare function applyHtmlTransforms(text: string): string;
|