@clr/angular 18.0.0-beta.4 → 18.0.0-beta.5
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/package.json +2 -2
- package/schematics/collection.json +1 -1
- package/schematics/ng-update/index.js +8 -5
- package/schematics/ng-update/index.js.map +1 -1
- package/schematics/ng-update/migrations/css-migration.d.ts +1 -0
- package/schematics/ng-update/migrations/css-migration.js +25 -15
- package/schematics/ng-update/migrations/css-migration.js.map +1 -1
- package/schematics/ng-update/migrations/import-migration.js +75 -24
- package/schematics/ng-update/migrations/import-migration.js.map +1 -1
- package/schematics/ng-update/migrations/template-migration.d.ts +1 -0
- package/schematics/ng-update/migrations/template-migration.js +46 -18
- package/schematics/ng-update/migrations/template-migration.js.map +1 -1
- 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/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/package.json
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"@angular/cdk": "^21",
|
|
26
26
|
"@angular/common": "^21",
|
|
27
27
|
"@angular/core": "^21",
|
|
28
|
-
"@clr/ui": "18.0.0-beta.
|
|
28
|
+
"@clr/ui": "18.0.0-beta.5"
|
|
29
29
|
},
|
|
30
30
|
"module": "fesm2022/clr-angular.mjs",
|
|
31
31
|
"typings": "types/clr-angular.d.ts",
|
|
@@ -231,5 +231,5 @@
|
|
|
231
231
|
"dependencies": {
|
|
232
232
|
"tslib": "^2.3.0"
|
|
233
233
|
},
|
|
234
|
-
"version": "18.0.0-beta.
|
|
234
|
+
"version": "18.0.0-beta.5"
|
|
235
235
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json",
|
|
3
3
|
"schematics": {
|
|
4
4
|
"ng-update": {
|
|
5
|
-
"version": "18.0.0",
|
|
5
|
+
"version": "18.0.0-beta.5",
|
|
6
6
|
"description": "Migrates @clr/angular from v17 to v18",
|
|
7
7
|
"factory": "./ng-update/index#migrate"
|
|
8
8
|
}
|
|
@@ -31,9 +31,11 @@ const TS_CANDIDATES = [
|
|
|
31
31
|
*/
|
|
32
32
|
function migrateTypeScriptFiles() {
|
|
33
33
|
return (tree, context) => {
|
|
34
|
-
context.logger.info(' Migrating TypeScript files (imports, inline templates, inline styles)
|
|
35
|
-
let
|
|
34
|
+
context.logger.info(' Migrating TypeScript files (imports, inline templates, inline styles)');
|
|
35
|
+
let scanCount = 0;
|
|
36
|
+
let updateCount = 0;
|
|
36
37
|
(0, file_visitor_1.visitFiles)(tree, '**/*.ts', filePath => {
|
|
38
|
+
scanCount++;
|
|
37
39
|
const content = tree.read(filePath);
|
|
38
40
|
if (!content) {
|
|
39
41
|
return;
|
|
@@ -49,16 +51,17 @@ function migrateTypeScriptFiles() {
|
|
|
49
51
|
text = (0, css_migration_1.transformInlineStyles)(text);
|
|
50
52
|
if (text !== original) {
|
|
51
53
|
tree.overwrite(filePath, text);
|
|
52
|
-
|
|
54
|
+
updateCount++;
|
|
55
|
+
context.logger.info(` UPDATE ${filePath}`);
|
|
53
56
|
}
|
|
54
57
|
});
|
|
55
|
-
context.logger.info(`
|
|
58
|
+
context.logger.info(` ${updateCount} of ${scanCount} file(s) updated.`);
|
|
56
59
|
};
|
|
57
60
|
}
|
|
58
61
|
function migrate() {
|
|
59
62
|
return (tree, context) => {
|
|
60
63
|
context.logger.info('');
|
|
61
|
-
context.logger.info('Running @clr/angular v18 migration
|
|
64
|
+
context.logger.info('Running @clr/angular v18 migration...');
|
|
62
65
|
context.logger.info('');
|
|
63
66
|
return (0, schematics_1.chain)([migrateTypeScriptFiles(), (0, template_migration_1.migrateTemplates)(), (0, css_migration_1.migrateCssProperties)()])(tree, context);
|
|
64
67
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../projects/angular/schematics/ng-update/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
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"}
|
|
@@ -3,3 +3,4 @@ export declare const CSS_MIGRATION_CANDIDATES: readonly string[];
|
|
|
3
3
|
export declare const CSS_MIGRATION_INLINE_CANDIDATES: readonly string[];
|
|
4
4
|
export declare function transformInlineStyles(text: string): string;
|
|
5
5
|
export declare function migrateCssProperties(): Rule;
|
|
6
|
+
export declare function applyStyleTransforms(text: string, filePath: string | null): string;
|
|
@@ -9,33 +9,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.CSS_MIGRATION_INLINE_CANDIDATES = exports.CSS_MIGRATION_CANDIDATES = void 0;
|
|
10
10
|
exports.transformInlineStyles = transformInlineStyles;
|
|
11
11
|
exports.migrateCssProperties = migrateCssProperties;
|
|
12
|
+
exports.applyStyleTransforms = applyStyleTransforms;
|
|
12
13
|
const css_replacements_1 = require("../replacements/css-replacements");
|
|
13
14
|
const file_visitor_1 = require("../utils/file-visitor");
|
|
15
|
+
const regexp_utils_1 = require("../utils/regexp-utils");
|
|
14
16
|
// ---------------------------------------------------------------------------
|
|
15
17
|
// Pre-compiled regex arrays — built once at module load, not per-file
|
|
16
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.
|
|
17
22
|
const COMPILED_PROPERTY_RENAME_REGEXES = css_replacements_1.CSS_PROPERTY_REPLACEMENTS.filter(r => r.new).map(r => ({
|
|
18
23
|
old: r.old,
|
|
19
24
|
new: r.new,
|
|
20
|
-
regex:
|
|
25
|
+
regex: (0, regexp_utils_1.prefixNegativeLookaheadRegex)(r.old),
|
|
21
26
|
}));
|
|
22
27
|
const COMPILED_PROPERTY_REMOVE_REGEXES = css_replacements_1.CSS_PROPERTY_REPLACEMENTS.filter(r => !r.new).map(r => ({
|
|
23
28
|
old: r.old,
|
|
24
|
-
regex: new RegExp(`(\\s*)(${escapeRegExp(r.old)}\\s*:[^;]*;)`, 'g'),
|
|
29
|
+
regex: new RegExp(`(\\s*)(${(0, regexp_utils_1.escapeRegExp)(r.old)}(?![-\\w])\\s*:[^;]*;)`, 'g'),
|
|
25
30
|
}));
|
|
26
31
|
const COMPILED_SELECTOR_REGEXES = css_replacements_1.CSS_SELECTOR_REPLACEMENTS.map(r => ({
|
|
27
32
|
old: r.old,
|
|
28
33
|
new: r.new,
|
|
29
|
-
regex:
|
|
34
|
+
regex: (0, regexp_utils_1.wordBoundaryRegex)(r.old),
|
|
30
35
|
}));
|
|
31
36
|
const COMPILED_ATTRIBUTE_REGEXES = css_replacements_1.CSS_ATTRIBUTE_REPLACEMENTS.map(r => ({
|
|
32
37
|
old: r.old,
|
|
33
38
|
new: r.new,
|
|
34
|
-
regex: new RegExp(escapeRegExp(r.old), 'g'),
|
|
39
|
+
regex: new RegExp((0, regexp_utils_1.escapeRegExp)(r.old), 'g'),
|
|
35
40
|
}));
|
|
36
41
|
const COMPILED_MIXIN_REGEXES = css_replacements_1.REMOVED_SCSS_MIXINS.map(name => ({
|
|
37
42
|
name,
|
|
38
|
-
regex: new RegExp(`@include\\s+${escapeRegExp(name)}\\s*\\([^)]*\\)\\s*;`, 'g'),
|
|
43
|
+
regex: new RegExp(`@include\\s+${(0, regexp_utils_1.escapeRegExp)(name)}\\s*\\([^)]*\\)\\s*;`, 'g'),
|
|
39
44
|
}));
|
|
40
45
|
// ---------------------------------------------------------------------------
|
|
41
46
|
// Fast-path candidate strings
|
|
@@ -65,10 +70,13 @@ function transformInlineStyles(text) {
|
|
|
65
70
|
// ---------------------------------------------------------------------------
|
|
66
71
|
function migrateCssProperties() {
|
|
67
72
|
return (tree, context) => {
|
|
68
|
-
context.logger.info(' Migrating CSS
|
|
69
|
-
let
|
|
70
|
-
let
|
|
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;
|
|
71
78
|
(0, file_visitor_1.visitFiles)(tree, '**/*.{css,scss,sass,less}', filePath => {
|
|
79
|
+
styleScanCount++;
|
|
72
80
|
const content = tree.read(filePath);
|
|
73
81
|
if (!content) {
|
|
74
82
|
return;
|
|
@@ -80,10 +88,12 @@ function migrateCssProperties() {
|
|
|
80
88
|
const updated = applyStyleTransforms(original, filePath);
|
|
81
89
|
if (updated !== original) {
|
|
82
90
|
tree.overwrite(filePath, updated);
|
|
83
|
-
|
|
91
|
+
styleUpdateCount++;
|
|
92
|
+
context.logger.info(` UPDATE ${filePath}`);
|
|
84
93
|
}
|
|
85
94
|
});
|
|
86
95
|
(0, file_visitor_1.visitFiles)(tree, '**/*.ts', filePath => {
|
|
96
|
+
tsScanCount++;
|
|
87
97
|
const content = tree.read(filePath);
|
|
88
98
|
if (!content) {
|
|
89
99
|
return;
|
|
@@ -95,14 +105,17 @@ function migrateCssProperties() {
|
|
|
95
105
|
const updated = transformInlineStyles(original);
|
|
96
106
|
if (updated !== original) {
|
|
97
107
|
tree.overwrite(filePath, updated);
|
|
98
|
-
|
|
108
|
+
tsUpdateCount++;
|
|
109
|
+
context.logger.info(` UPDATE ${filePath}`);
|
|
99
110
|
}
|
|
100
111
|
});
|
|
101
|
-
|
|
112
|
+
const totalScanned = styleScanCount + tsScanCount;
|
|
113
|
+
const totalUpdated = styleUpdateCount + tsUpdateCount;
|
|
114
|
+
context.logger.info(` ${totalUpdated} of ${totalScanned} file(s) updated.`);
|
|
102
115
|
};
|
|
103
116
|
}
|
|
104
117
|
// ---------------------------------------------------------------------------
|
|
105
|
-
//
|
|
118
|
+
// Helpers — exported for direct testing; not part of the public schematic API
|
|
106
119
|
// ---------------------------------------------------------------------------
|
|
107
120
|
function applyStyleTransforms(text, filePath) {
|
|
108
121
|
text = replaceCssProperties(text);
|
|
@@ -161,7 +174,4 @@ function replaceScssMixins(text) {
|
|
|
161
174
|
}
|
|
162
175
|
return text;
|
|
163
176
|
}
|
|
164
|
-
function escapeRegExp(str) {
|
|
165
|
-
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
166
|
-
}
|
|
167
177
|
//# sourceMappingURL=css-migration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css-migration.js","sourceRoot":"","sources":["../../../../../projects/angular/schematics/ng-update/migrations/css-migration.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"css-migration.js","sourceRoot":"","sources":["../../../../../projects/angular/schematics/ng-update/migrations/css-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,35 +12,46 @@ exports.migrateImports = migrateImports;
|
|
|
12
12
|
const import_replacements_1 = require("../replacements/import-replacements");
|
|
13
13
|
const symbol_replacements_1 = require("../replacements/symbol-replacements");
|
|
14
14
|
const file_visitor_1 = require("../utils/file-visitor");
|
|
15
|
+
const regexp_utils_1 = require("../utils/regexp-utils");
|
|
15
16
|
// ---------------------------------------------------------------------------
|
|
16
17
|
// Pre-compiled regex arrays — built once at module load, not per-file
|
|
17
18
|
// ---------------------------------------------------------------------------
|
|
18
19
|
// Sort import replacements by path length descending so more-specific paths
|
|
19
20
|
// (e.g. '@clr/angular/src/accordion/stepper') match before shorter prefixes.
|
|
20
21
|
const SORTED_IMPORT_REPLACEMENTS = [...import_replacements_1.IMPORT_REPLACEMENTS].sort((a, b) => b.oldModule.length - a.oldModule.length);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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,
|
|
26
37
|
}));
|
|
27
38
|
// Only symbols with a non-empty new name are renamed here; removed symbols handled separately.
|
|
28
39
|
const COMPILED_SYMBOL_REPLACEMENTS = symbol_replacements_1.SYMBOL_REPLACEMENTS.filter(r => r.new).map(r => ({
|
|
29
40
|
...r,
|
|
30
41
|
// Ç (U+00C7) is not an ASCII word character so \b doesn't delimit it.
|
|
31
|
-
// Use lookahead/lookbehind to avoid partial matches.
|
|
42
|
+
// Use explicit lookahead/lookbehind to avoid partial matches.
|
|
32
43
|
regex: r.old.startsWith('Ç')
|
|
33
|
-
? new RegExp(`(?<![A-Za-z0-9_$Ç])${escapeRegExp(r.old)}(?![A-Za-z0-9_$])`, 'g')
|
|
34
|
-
:
|
|
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),
|
|
35
46
|
}));
|
|
36
47
|
const REMOVED_SYMBOLS = symbol_replacements_1.SYMBOL_REPLACEMENTS.filter(r => r.new === '').map(r => r.old);
|
|
37
|
-
const REMOVED_SYMBOL_SOLE_IMPORT_REGEXES = REMOVED_SYMBOLS.map(sym => new RegExp(`^\\s*import\\s*\\{\\s*${escapeRegExp(sym)}\\s*\\}\\s*from\\s*['"][^'"]+['"]\\s*;?\\s*$`, 'gm'));
|
|
38
|
-
const REMOVED_SYMBOL_LEADING_COMMA_REGEXES = REMOVED_SYMBOLS.map(sym => new RegExp(`\\b${escapeRegExp(sym)}\\b\\s*,\\s*`, 'g'));
|
|
39
|
-
const REMOVED_SYMBOL_TRAILING_COMMA_REGEXES = REMOVED_SYMBOLS.map(sym => new RegExp(`\\s*,\\s*${escapeRegExp(sym)}\\b`, 'g'));
|
|
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'));
|
|
40
51
|
const REMOVED_SYMBOL_USAGE_REGEXES = REMOVED_SYMBOLS.map(sym => ({
|
|
41
52
|
sym,
|
|
42
|
-
test: new RegExp(`\\b${escapeRegExp(sym)}\\b`),
|
|
43
|
-
replace: new RegExp(`\\b${escapeRegExp(sym)}\\b`, 'g'),
|
|
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'),
|
|
44
55
|
}));
|
|
45
56
|
// ---------------------------------------------------------------------------
|
|
46
57
|
// Fast-path candidate strings — if none present, skip the file entirely
|
|
@@ -68,9 +79,11 @@ function transformImports(text) {
|
|
|
68
79
|
// ---------------------------------------------------------------------------
|
|
69
80
|
function migrateImports() {
|
|
70
81
|
return (tree, context) => {
|
|
71
|
-
context.logger.info(' Migrating TypeScript imports and symbols
|
|
82
|
+
context.logger.info(' Migrating TypeScript imports and symbols');
|
|
83
|
+
let scanCount = 0;
|
|
72
84
|
let fileCount = 0;
|
|
73
85
|
(0, file_visitor_1.visitFiles)(tree, '**/*.ts', filePath => {
|
|
86
|
+
scanCount++;
|
|
74
87
|
const content = tree.read(filePath);
|
|
75
88
|
if (!content) {
|
|
76
89
|
return;
|
|
@@ -80,29 +93,70 @@ function migrateImports() {
|
|
|
80
93
|
if (updated !== original) {
|
|
81
94
|
tree.overwrite(filePath, updated);
|
|
82
95
|
fileCount++;
|
|
96
|
+
context.logger.info(` UPDATE ${filePath}`);
|
|
83
97
|
}
|
|
84
98
|
});
|
|
85
|
-
context.logger.info(`
|
|
99
|
+
context.logger.info(` ${fileCount} of ${scanCount} file(s) updated.`);
|
|
86
100
|
};
|
|
87
101
|
}
|
|
88
102
|
// ---------------------------------------------------------------------------
|
|
89
103
|
// Private helpers
|
|
90
104
|
// ---------------------------------------------------------------------------
|
|
91
105
|
function replaceImportPaths(text) {
|
|
92
|
-
|
|
106
|
+
// Wildcard replacements: move all symbols from oldModule to newModule.
|
|
107
|
+
for (const r of COMPILED_WILDCARD_IMPORT_REGEXES) {
|
|
93
108
|
if (!text.includes(r.oldModule)) {
|
|
94
109
|
continue;
|
|
95
110
|
}
|
|
96
111
|
r.regex.lastIndex = 0;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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;
|
|
102
119
|
}
|
|
120
|
+
text = splitSymbolImport(text, r.oldSymbol, r.newSymbol, r.oldModule, r.newModule);
|
|
103
121
|
}
|
|
104
122
|
return text;
|
|
105
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
|
+
}
|
|
106
160
|
function replaceSymbols(text) {
|
|
107
161
|
for (const r of COMPILED_SYMBOL_REPLACEMENTS) {
|
|
108
162
|
if (!text.includes(r.old)) {
|
|
@@ -130,7 +184,4 @@ function removeDeletedImports(text) {
|
|
|
130
184
|
}
|
|
131
185
|
return text;
|
|
132
186
|
}
|
|
133
|
-
function escapeRegExp(str) {
|
|
134
|
-
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
135
|
-
}
|
|
136
187
|
//# sourceMappingURL=import-migration.js.map
|
|
@@ -1 +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,
|
|
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"}
|
|
@@ -3,3 +3,4 @@ export declare const TEMPLATE_MIGRATION_HTML_CANDIDATES: readonly string[];
|
|
|
3
3
|
export declare const TEMPLATE_MIGRATION_INLINE_CANDIDATES: readonly string[];
|
|
4
4
|
export declare function transformInlineTemplates(text: string): string;
|
|
5
5
|
export declare function migrateTemplates(): Rule;
|
|
6
|
+
export declare function applyHtmlTransforms(text: string): string;
|
|
@@ -9,37 +9,47 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.TEMPLATE_MIGRATION_INLINE_CANDIDATES = exports.TEMPLATE_MIGRATION_HTML_CANDIDATES = void 0;
|
|
10
10
|
exports.transformInlineTemplates = transformInlineTemplates;
|
|
11
11
|
exports.migrateTemplates = migrateTemplates;
|
|
12
|
+
exports.applyHtmlTransforms = applyHtmlTransforms;
|
|
12
13
|
const css_replacements_1 = require("../replacements/css-replacements");
|
|
13
14
|
const template_replacements_1 = require("../replacements/template-replacements");
|
|
14
15
|
const file_visitor_1 = require("../utils/file-visitor");
|
|
16
|
+
const regexp_utils_1 = require("../utils/regexp-utils");
|
|
15
17
|
// ---------------------------------------------------------------------------
|
|
16
18
|
// Pre-compiled regex arrays — built once at module load, not per-file
|
|
17
19
|
// ---------------------------------------------------------------------------
|
|
18
20
|
const COMPILED_OUTPUT_REGEXES = template_replacements_1.TEMPLATE_OUTPUT_REPLACEMENTS.map(r => ({
|
|
19
21
|
old: r.old,
|
|
20
22
|
new: r.new,
|
|
21
|
-
regex: new RegExp(`\\(${escapeRegExp(r.old)}\\)`, 'g'),
|
|
23
|
+
regex: new RegExp(`\\(${(0, regexp_utils_1.escapeRegExp)(r.old)}\\)`, 'g'),
|
|
22
24
|
}));
|
|
23
25
|
const COMPILED_INPUT_BOUND_REGEXES = template_replacements_1.TEMPLATE_INPUT_REPLACEMENTS.map(r => ({
|
|
24
26
|
old: r.old,
|
|
25
27
|
new: r.new,
|
|
26
|
-
boundRegex: new RegExp(`\\[${escapeRegExp(r.old)}\\]`, 'g'),
|
|
27
|
-
bareRegex: new RegExp(`(?<=\\s)${escapeRegExp(r.old)}(?==)`, 'g'),
|
|
28
|
+
boundRegex: new RegExp(`\\[${(0, regexp_utils_1.escapeRegExp)(r.old)}\\]`, 'g'),
|
|
29
|
+
bareRegex: new RegExp(`(?<=\\s)${(0, regexp_utils_1.escapeRegExp)(r.old)}(?==)`, 'g'),
|
|
28
30
|
}));
|
|
29
|
-
|
|
31
|
+
// cds-icon [attr.*] replacements: applied only within <cds-icon> opening tags to
|
|
32
|
+
// avoid false positives on native elements like <input [attr.size]="x">.
|
|
33
|
+
const COMPILED_CDS_ICON_ATTR_ENTRIES = template_replacements_1.TEMPLATE_ATTRIBUTE_REPLACEMENTS.filter(r => r.context === 'cds-icon');
|
|
34
|
+
// Non-scoped attribute replacements: applied globally (e.g. clrPopoverAnchor).
|
|
35
|
+
// Word boundaries (\b) prevent matching inside longer identifiers such as clrPopoverAnchorClose.
|
|
36
|
+
const COMPILED_GLOBAL_ATTR_REGEXES = template_replacements_1.TEMPLATE_ATTRIBUTE_REPLACEMENTS.filter(r => r.context !== 'cds-icon').map(r => ({
|
|
30
37
|
old: r.old,
|
|
31
38
|
new: r.new,
|
|
32
|
-
regex:
|
|
39
|
+
regex: (0, regexp_utils_1.wordBoundaryRegex)(r.old),
|
|
33
40
|
}));
|
|
41
|
+
// Quote-aware regex that matches a complete <cds-icon …> or <cds-icon … /> opening tag.
|
|
42
|
+
// Handles attribute values that contain > (e.g. [attr.size]="size > 0 ? 'lg' : 'md'").
|
|
43
|
+
const CDS_ICON_TAG_RE = /<cds-icon\b(?:[^"'/>]|"[^"]*"|'[^']*')*(?:\/?>)/g;
|
|
34
44
|
const COMPILED_HEADER_REGEXES = template_replacements_1.HEADER_CLASS_REPLACEMENTS.map(r => ({
|
|
35
45
|
old: r.old,
|
|
36
46
|
new: r.new,
|
|
37
|
-
regex:
|
|
47
|
+
regex: (0, regexp_utils_1.wordBoundaryRegex)(r.old),
|
|
38
48
|
}));
|
|
39
49
|
const COMPILED_CDS_TEXT_REGEXES = css_replacements_1.CSS_ATTRIBUTE_REPLACEMENTS.map(r => ({
|
|
40
50
|
old: r.old,
|
|
41
51
|
new: r.new,
|
|
42
|
-
regex: new RegExp(escapeRegExp(r.old), 'g'),
|
|
52
|
+
regex: new RegExp((0, regexp_utils_1.escapeRegExp)(r.old), 'g'),
|
|
43
53
|
}));
|
|
44
54
|
// ---------------------------------------------------------------------------
|
|
45
55
|
// Fast-path candidate strings
|
|
@@ -70,10 +80,13 @@ function transformInlineTemplates(text) {
|
|
|
70
80
|
// ---------------------------------------------------------------------------
|
|
71
81
|
function migrateTemplates() {
|
|
72
82
|
return (tree, context) => {
|
|
73
|
-
context.logger.info(' Migrating HTML templates
|
|
74
|
-
let
|
|
75
|
-
let
|
|
83
|
+
context.logger.info(' Migrating HTML templates');
|
|
84
|
+
let htmlScanCount = 0;
|
|
85
|
+
let htmlUpdateCount = 0;
|
|
86
|
+
let tsScanCount = 0;
|
|
87
|
+
let tsUpdateCount = 0;
|
|
76
88
|
(0, file_visitor_1.visitFiles)(tree, '**/*.html', filePath => {
|
|
89
|
+
htmlScanCount++;
|
|
77
90
|
const content = tree.read(filePath);
|
|
78
91
|
if (!content) {
|
|
79
92
|
return;
|
|
@@ -85,10 +98,12 @@ function migrateTemplates() {
|
|
|
85
98
|
const updated = applyHtmlTransforms(original);
|
|
86
99
|
if (updated !== original) {
|
|
87
100
|
tree.overwrite(filePath, updated);
|
|
88
|
-
|
|
101
|
+
htmlUpdateCount++;
|
|
102
|
+
context.logger.info(` UPDATE ${filePath}`);
|
|
89
103
|
}
|
|
90
104
|
});
|
|
91
105
|
(0, file_visitor_1.visitFiles)(tree, '**/*.ts', filePath => {
|
|
106
|
+
tsScanCount++;
|
|
92
107
|
const content = tree.read(filePath);
|
|
93
108
|
if (!content) {
|
|
94
109
|
return;
|
|
@@ -100,14 +115,17 @@ function migrateTemplates() {
|
|
|
100
115
|
const updated = transformInlineTemplates(original);
|
|
101
116
|
if (updated !== original) {
|
|
102
117
|
tree.overwrite(filePath, updated);
|
|
103
|
-
|
|
118
|
+
tsUpdateCount++;
|
|
119
|
+
context.logger.info(` UPDATE ${filePath}`);
|
|
104
120
|
}
|
|
105
121
|
});
|
|
106
|
-
|
|
122
|
+
const totalScanned = htmlScanCount + tsScanCount;
|
|
123
|
+
const totalUpdated = htmlUpdateCount + tsUpdateCount;
|
|
124
|
+
context.logger.info(` ${totalUpdated} of ${totalScanned} file(s) updated.`);
|
|
107
125
|
};
|
|
108
126
|
}
|
|
109
127
|
// ---------------------------------------------------------------------------
|
|
110
|
-
//
|
|
128
|
+
// Helpers — exported for direct testing; not part of the public schematic API
|
|
111
129
|
// ---------------------------------------------------------------------------
|
|
112
130
|
function applyHtmlTransforms(text) {
|
|
113
131
|
text = migrateOutputBindings(text);
|
|
@@ -140,7 +158,20 @@ function migrateInputBindings(text) {
|
|
|
140
158
|
return text;
|
|
141
159
|
}
|
|
142
160
|
function migrateCdsIconAttributes(text) {
|
|
143
|
-
|
|
161
|
+
// Scoped pass: only touch [attr.*] inside <cds-icon> opening tags.
|
|
162
|
+
if (COMPILED_CDS_ICON_ATTR_ENTRIES.some(r => text.includes(r.old))) {
|
|
163
|
+
CDS_ICON_TAG_RE.lastIndex = 0;
|
|
164
|
+
text = text.replace(CDS_ICON_TAG_RE, tagMatch => {
|
|
165
|
+
for (const { old: oldStr, new: newStr } of COMPILED_CDS_ICON_ATTR_ENTRIES) {
|
|
166
|
+
if (tagMatch.includes(oldStr)) {
|
|
167
|
+
tagMatch = tagMatch.split(oldStr).join(newStr);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return tagMatch;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
// Global pass: non-scoped attribute replacements.
|
|
174
|
+
for (const r of COMPILED_GLOBAL_ATTR_REGEXES) {
|
|
144
175
|
if (!text.includes(r.old)) {
|
|
145
176
|
continue;
|
|
146
177
|
}
|
|
@@ -169,7 +200,4 @@ function migrateCdsTextAttributes(text) {
|
|
|
169
200
|
}
|
|
170
201
|
return text;
|
|
171
202
|
}
|
|
172
|
-
function escapeRegExp(str) {
|
|
173
|
-
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
174
|
-
}
|
|
175
203
|
//# sourceMappingURL=template-migration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-migration.js","sourceRoot":"","sources":["../../../../../projects/angular/schematics/ng-update/migrations/template-migration.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"template-migration.js","sourceRoot":"","sources":["../../../../../projects/angular/schematics/ng-update/migrations/template-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { HostTree, SchematicContext } from '@angular-devkit/schematics';
|
|
2
|
+
export declare function createContext(): SchematicContext;
|
|
3
|
+
/** Runs all three migration phases against an in-memory tree (mirrors index.ts). */
|
|
4
|
+
export declare function runMigrations(tree: HostTree): HostTree;
|
|
5
|
+
/** Applies all pure TypeScript transforms in sequence (mirrors the unified pass in index.ts). */
|
|
6
|
+
export declare function applyTsTransforms(text: string): string;
|
|
@@ -0,0 +1,34 @@
|
|
|
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.createContext = createContext;
|
|
10
|
+
exports.runMigrations = runMigrations;
|
|
11
|
+
exports.applyTsTransforms = applyTsTransforms;
|
|
12
|
+
const core_1 = require("@angular-devkit/core");
|
|
13
|
+
const css_migration_1 = require("../migrations/css-migration");
|
|
14
|
+
const import_migration_1 = require("../migrations/import-migration");
|
|
15
|
+
const template_migration_1 = require("../migrations/template-migration");
|
|
16
|
+
function createContext() {
|
|
17
|
+
return { logger: new core_1.logging.NullLogger() };
|
|
18
|
+
}
|
|
19
|
+
/** Runs all three migration phases against an in-memory tree (mirrors index.ts). */
|
|
20
|
+
function runMigrations(tree) {
|
|
21
|
+
const context = createContext();
|
|
22
|
+
(0, import_migration_1.migrateImports)()(tree, context);
|
|
23
|
+
(0, template_migration_1.migrateTemplates)()(tree, context);
|
|
24
|
+
(0, css_migration_1.migrateCssProperties)()(tree, context);
|
|
25
|
+
return tree;
|
|
26
|
+
}
|
|
27
|
+
/** Applies all pure TypeScript transforms in sequence (mirrors the unified pass in index.ts). */
|
|
28
|
+
function applyTsTransforms(text) {
|
|
29
|
+
text = (0, import_migration_1.transformImports)(text);
|
|
30
|
+
text = (0, template_migration_1.transformInlineTemplates)(text);
|
|
31
|
+
text = (0, css_migration_1.transformInlineStyles)(text);
|
|
32
|
+
return text;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=test-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../../../projects/angular/schematics/ng-update/tests/test-helpers.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AASH,sCAEC;AAGD,sCAMC;AAGD,8CAKC;AA1BD,+CAA+C;AAG/C,+DAA0F;AAC1F,qEAAkF;AAClF,yEAA8F;AAE9F,SAAgB,aAAa;IAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,cAAO,CAAC,UAAU,EAAE,EAAiC,CAAC;AAC7E,CAAC;AAED,oFAAoF;AACpF,SAAgB,aAAa,CAAC,IAAc;IAC1C,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAA,iCAAc,GAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,IAAA,qCAAgB,GAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClC,IAAA,oCAAoB,GAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iGAAiG;AACjG,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,IAAI,GAAG,IAAA,mCAAgB,EAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,IAAA,6CAAwB,EAAC,IAAI,CAAC,CAAC;IACtC,IAAI,GAAG,IAAA,qCAAqB,EAAC,IAAI,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Escapes all regex special characters in a literal string. */
|
|
2
|
+
export declare function escapeRegExp(str: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Builds a regex that matches the literal string only at whole-identifier
|
|
5
|
+
* boundaries (\b), preventing partial matches inside longer names.
|
|
6
|
+
* The `g` flag is set so the regex can be reused with lastIndex reset.
|
|
7
|
+
*/
|
|
8
|
+
export declare function wordBoundaryRegex(literal: string): RegExp;
|
|
9
|
+
/**
|
|
10
|
+
* Builds a regex that matches the literal string only when it is NOT
|
|
11
|
+
* immediately followed by a hyphen or word character.
|
|
12
|
+
* Used for CSS custom properties to prevent `--clr-foo` from matching
|
|
13
|
+
* inside `--clr-foo-extra`.
|
|
14
|
+
* The `g` flag is set so the regex can be reused with lastIndex reset.
|
|
15
|
+
*/
|
|
16
|
+
export declare function prefixNegativeLookaheadRegex(literal: string): RegExp;
|
|
@@ -0,0 +1,34 @@
|
|
|
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.escapeRegExp = escapeRegExp;
|
|
10
|
+
exports.wordBoundaryRegex = wordBoundaryRegex;
|
|
11
|
+
exports.prefixNegativeLookaheadRegex = prefixNegativeLookaheadRegex;
|
|
12
|
+
/** Escapes all regex special characters in a literal string. */
|
|
13
|
+
function escapeRegExp(str) {
|
|
14
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Builds a regex that matches the literal string only at whole-identifier
|
|
18
|
+
* boundaries (\b), preventing partial matches inside longer names.
|
|
19
|
+
* The `g` flag is set so the regex can be reused with lastIndex reset.
|
|
20
|
+
*/
|
|
21
|
+
function wordBoundaryRegex(literal) {
|
|
22
|
+
return new RegExp(`\\b${escapeRegExp(literal)}\\b`, 'g');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Builds a regex that matches the literal string only when it is NOT
|
|
26
|
+
* immediately followed by a hyphen or word character.
|
|
27
|
+
* Used for CSS custom properties to prevent `--clr-foo` from matching
|
|
28
|
+
* inside `--clr-foo-extra`.
|
|
29
|
+
* The `g` flag is set so the regex can be reused with lastIndex reset.
|
|
30
|
+
*/
|
|
31
|
+
function prefixNegativeLookaheadRegex(literal) {
|
|
32
|
+
return new RegExp(`${escapeRegExp(literal)}(?![-\\w])`, 'g');
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=regexp-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regexp-utils.js","sourceRoot":"","sources":["../../../../../projects/angular/schematics/ng-update/utils/regexp-utils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAGH,oCAEC;AAOD,8CAEC;AASD,oEAEC;AAvBD,gEAAgE;AAChE,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,OAAe;IAC/C,OAAO,IAAI,MAAM,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,4BAA4B,CAAC,OAAe;IAC1D,OAAO,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAC/D,CAAC"}
|