devextreme-schematics 1.11.2 → 1.12.1

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.
Files changed (32) hide show
  1. package/README.md +34 -6
  2. package/package.json +6 -3
  3. package/src/add-app-template/index_spec.js +24 -1
  4. package/src/add-app-template/index_spec.js.map +1 -1
  5. package/src/add-app-template/schema.json +1 -1
  6. package/src/add-layout/index_spec.js +24 -1
  7. package/src/add-layout/index_spec.js.map +1 -1
  8. package/src/add-sample-views/index_spec.js +24 -1
  9. package/src/add-sample-views/index_spec.js.map +1 -1
  10. package/src/add-view/index_spec.js +24 -1
  11. package/src/add-view/index_spec.js.map +1 -1
  12. package/src/collection.json +5 -0
  13. package/src/install/index_spec.js +24 -1
  14. package/src/install/index_spec.js.map +1 -1
  15. package/src/install/schema.json +1 -1
  16. package/src/migrate-config-components/README.md +74 -0
  17. package/src/migrate-config-components/index.d.ts +7 -0
  18. package/src/migrate-config-components/index.js +71 -0
  19. package/src/migrate-config-components/index.js.map +1 -0
  20. package/src/migrate-config-components/index.ts +77 -0
  21. package/src/migrate-config-components/mappings/deprecated-config-map.json +1088 -0
  22. package/src/migrate-config-components/schema.json +28 -0
  23. package/src/migrate-config-components/template-migrator.d.ts +22 -0
  24. package/src/migrate-config-components/template-migrator.js +301 -0
  25. package/src/migrate-config-components/template-migrator.js.map +1 -0
  26. package/src/migrate-config-components/template-migrator.ts +320 -0
  27. package/src/utility/latest-versions.js +2 -2
  28. package/src/utility/latest-versions.ts +2 -2
  29. package/src/utility/typescript-resolver.d.ts +12 -0
  30. package/src/utility/typescript-resolver.js +153 -0
  31. package/src/utility/typescript-resolver.js.map +1 -0
  32. package/src/utility/typescript-resolver.ts +144 -0
@@ -0,0 +1,28 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "SchematicsDevextremeMigrateConfigComponents",
4
+ "title": "Migrate to the latest DevExtreme configuration components.",
5
+ "type": "object",
6
+ "properties": {
7
+ "include": {
8
+ "oneOf": [
9
+ { "type": "array", "items": { "type": "string" } },
10
+ { "type": "string" }
11
+ ],
12
+ "description": "Glob(s) of template files to include (default: **/*.html)"
13
+ },
14
+ "scriptInclude": {
15
+ "oneOf": [
16
+ { "type": "array", "items": { "type": "string" } },
17
+ { "type": "string" }
18
+ ],
19
+ "description": "Glob(s) of TS/JS files to scan for inline templates (default: ['**/*.ts','**/*.js']; set empty ('' or []) to disable)"
20
+ },
21
+ "dry": {
22
+ "oneOf": [
23
+ { "type": "boolean", "default": false },
24
+ { "type": "string", "enum": ["true", "false"], "default": "false" }
25
+ ]
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,22 @@
1
+ import { Tree } from '@angular-devkit/schematics';
2
+ export interface HostRule {
3
+ hostSelector: string;
4
+ configMap: Record<string, string>;
5
+ }
6
+ export interface RunnerOptions {
7
+ includeGlobs: string[];
8
+ rules: HostRule[];
9
+ }
10
+ export interface ExecOptions {
11
+ dryRun: boolean;
12
+ logger: {
13
+ info: (s: string) => void;
14
+ warn: (s: string) => void;
15
+ };
16
+ }
17
+ export declare function applyHostAwareTemplateMigrations(tree: Tree, runner: RunnerOptions, exec: ExecOptions): Promise<void>;
18
+ export declare function applyInlineComponentTemplateMigrations(tree: Tree, runner: RunnerOptions, exec: ExecOptions, scriptGlobs: string[]): Promise<void>;
19
+ export declare function transformTemplate(source: string, rules: RunnerOptions['rules']): {
20
+ updated: string;
21
+ changeCount: number;
22
+ };
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.transformTemplate = exports.applyInlineComponentTemplateMigrations = exports.applyHostAwareTemplateMigrations = void 0;
39
+ const parse5 = __importStar(require("parse5"));
40
+ const picomatch_1 = __importDefault(require("picomatch"));
41
+ const typescript_resolver_1 = require("../utility/typescript-resolver");
42
+ // Dynamically require TypeScript if available; skip inline template migration if not.
43
+ // Uses a 3-level fallback: project search -> global search -> temporary install
44
+ const tsResolution = (0, typescript_resolver_1.resolveTypeScript)();
45
+ const ts = tsResolution.ts;
46
+ const tsResolutionErrors = tsResolution.errors;
47
+ // Transform external HTML template files matched by includeGlobs.
48
+ function applyHostAwareTemplateMigrations(tree, runner, exec) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const matcher = (0, picomatch_1.default)(runner.includeGlobs.length ? runner.includeGlobs : ['**/*.html']);
51
+ tree.visit(filePath => {
52
+ if (!matcher(filePath)) {
53
+ return;
54
+ }
55
+ if (!filePath.endsWith('.html')) {
56
+ return;
57
+ }
58
+ const buffer = tree.read(filePath);
59
+ if (!buffer) {
60
+ return;
61
+ }
62
+ const source = buffer.toString('utf8');
63
+ const { updated, changeCount } = transformTemplate(source, runner.rules);
64
+ if (changeCount === 0) {
65
+ return;
66
+ }
67
+ if (exec.dryRun) {
68
+ exec.logger.info(`[dry] ${filePath} → ${changeCount} changes`);
69
+ }
70
+ else {
71
+ exec.logger.info(`${filePath} → ${changeCount} changes`);
72
+ tree.overwrite(filePath, updated);
73
+ }
74
+ });
75
+ });
76
+ }
77
+ exports.applyHostAwareTemplateMigrations = applyHostAwareTemplateMigrations;
78
+ // Apply migrations inside inline component templates found in TS/JS files.
79
+ function applyInlineComponentTemplateMigrations(tree, runner, exec, scriptGlobs) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ if (!scriptGlobs.length) {
82
+ return;
83
+ }
84
+ if (!ts) {
85
+ const errorDetails = tsResolutionErrors.length
86
+ ? `Resolution attempts:\n${tsResolutionErrors.map(e => ' - ' + e).join('\n')}\n`
87
+ : '';
88
+ exec.logger.warn('[config-migrator] Failed to import TypeScript. Skipping inline template migration.\n' +
89
+ errorDetails +
90
+ 'The schematic attempted to import TypeScript from the following locations:\n' +
91
+ ' 1. Project node_modules\n' +
92
+ ' 2. Global node_modules\n' +
93
+ ' 3. Temporary installation (npm cache)\n\n' +
94
+ 'To resolve this issue, install TypeScript.\n\n' +
95
+ 'Project install:\n' +
96
+ ' npm install typescript --save-dev\n\n' +
97
+ 'Global install:\n' +
98
+ ' npm install -g typescript\n\n');
99
+ return;
100
+ }
101
+ const matcher = (0, picomatch_1.default)(scriptGlobs);
102
+ tree.visit(filePath => {
103
+ if (!matcher(filePath)) {
104
+ return;
105
+ }
106
+ if (!(filePath.endsWith('.ts') || filePath.endsWith('.js'))) {
107
+ return;
108
+ }
109
+ const buffer = tree.read(filePath);
110
+ if (!buffer) {
111
+ return;
112
+ }
113
+ const sourceText = buffer.toString('utf8');
114
+ const sf = ts.createSourceFile(filePath, sourceText, ts.ScriptTarget.ES2022, true, filePath.endsWith('.ts') ? ts.ScriptKind.TS : ts.ScriptKind.JS);
115
+ const edits = [];
116
+ function visit(node) {
117
+ if (ts.isDecorator(node) && ts.isCallExpression(node.expression)) {
118
+ const call = node.expression;
119
+ if (ts.isIdentifier(call.expression) && call.expression.text === 'Component' && call.arguments.length) {
120
+ const arg = call.arguments[0];
121
+ if (ts.isObjectLiteralExpression(arg)) {
122
+ for (const prop of arg.properties) {
123
+ if (!ts.isPropertyAssignment(prop)) {
124
+ continue;
125
+ }
126
+ const name = prop.name;
127
+ const propName = ts.isIdentifier(name) ? name.text : ts.isStringLiteral(name) ? name.text : undefined;
128
+ if (propName !== 'template') {
129
+ continue;
130
+ }
131
+ const init = prop.initializer;
132
+ if (ts.isStringLiteral(init)) {
133
+ const raw = init.text;
134
+ const { updated, changeCount } = transformTemplate(raw, runner.rules);
135
+ if (changeCount > 0) {
136
+ const quote = init.getText().startsWith("'") ? '"' : init.getText()[0];
137
+ const newLiteral = quote + updated.replace(new RegExp(quote, 'g'), '\\' + quote) + quote;
138
+ edits.push({ start: init.getStart(), end: init.getEnd(), text: newLiteral, changes: changeCount });
139
+ }
140
+ }
141
+ else if (ts.isNoSubstitutionTemplateLiteral(init)) {
142
+ const raw = init.text;
143
+ const { updated, changeCount } = transformTemplate(raw, runner.rules);
144
+ if (changeCount > 0) {
145
+ const newLiteral = '`' + escapeBackticks(updated) + '`';
146
+ edits.push({ start: init.getStart(), end: init.getEnd(), text: newLiteral, changes: changeCount });
147
+ }
148
+ }
149
+ else if (ts.isTemplateExpression(init)) {
150
+ const { placeholderContent, placeholders } = flattenTemplateExpression(init, sourceText);
151
+ const { updated, changeCount } = transformTemplate(placeholderContent, runner.rules);
152
+ if (changeCount > 0) {
153
+ let rebuilt = updated;
154
+ placeholders.forEach(placeholder => {
155
+ rebuilt = rebuilt.replace(new RegExp(placeholder.token, 'g'), placeholder.fullText);
156
+ });
157
+ const newLiteral = '`' + escapeBackticks(rebuilt) + '`';
158
+ edits.push({ start: init.getStart(), end: init.getEnd(), text: newLiteral, changes: changeCount });
159
+ }
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+ ts.forEachChild(node, visit);
166
+ }
167
+ visit(sf);
168
+ if (!edits.length) {
169
+ return;
170
+ }
171
+ edits.sort((a, b) => b.start - a.start); // edits from last to first
172
+ let updatedFile = sourceText;
173
+ for (const edit of edits) {
174
+ updatedFile = updatedFile.slice(0, edit.start) + edit.text + updatedFile.slice(edit.end);
175
+ }
176
+ const totalChanges = edits.reduce((acc, edit) => acc + edit.changes, 0);
177
+ if (exec.dryRun) {
178
+ exec.logger.info(`[dry] ${filePath} (inline templates) → ${totalChanges} changes in ${edits.length} template(s)`);
179
+ }
180
+ else {
181
+ exec.logger.info(`${filePath} (inline templates) → ${totalChanges} changes in ${edits.length} template(s)`);
182
+ tree.overwrite(filePath, updatedFile);
183
+ }
184
+ });
185
+ });
186
+ }
187
+ exports.applyInlineComponentTemplateMigrations = applyInlineComponentTemplateMigrations;
188
+ function transformTemplate(source, rules) {
189
+ const document = parse5.parse(source, { sourceCodeLocationInfo: true });
190
+ const replacements = [];
191
+ const hostSelectorSet = new Set(rules.map(rule => rule.hostSelector));
192
+ const seenOpens = new Set();
193
+ const seenCloses = new Set();
194
+ function walkHost(root, visitFn) {
195
+ function recursiveWalk(node) {
196
+ visitFn(node);
197
+ const childNodes = node.childNodes;
198
+ if (!childNodes) {
199
+ return;
200
+ }
201
+ for (const childNode of childNodes) {
202
+ if (isElement(childNode) && hostSelectorSet.has(childNode.tagName) && childNode !== root) {
203
+ continue;
204
+ }
205
+ recursiveWalk(childNode);
206
+ }
207
+ }
208
+ recursiveWalk(root);
209
+ }
210
+ for (const rule of rules) {
211
+ const hosts = findElementsByTag(document, rule.hostSelector);
212
+ for (const host of hosts) {
213
+ if (!host.sourceCodeLocation) {
214
+ continue;
215
+ }
216
+ walkHost(host, (node) => {
217
+ if (!isElement(node)) {
218
+ return;
219
+ }
220
+ const oldName = node.tagName;
221
+ if (!oldName) {
222
+ return;
223
+ }
224
+ const newName = rule.configMap[oldName];
225
+ if (!newName) {
226
+ return;
227
+ }
228
+ const loc = node.sourceCodeLocation;
229
+ if (!loc) {
230
+ return;
231
+ }
232
+ if (loc.startTag) {
233
+ const openStart = loc.startTag.startOffset + 1;
234
+ const openEnd = openStart + oldName.length;
235
+ if (!seenOpens.has(openStart)) {
236
+ seenOpens.add(openStart);
237
+ replacements.push({ start: openStart, end: openEnd, text: newName });
238
+ }
239
+ }
240
+ if (loc.endTag) {
241
+ const endStart = loc.endTag.startOffset + 2;
242
+ const endEnd = endStart + oldName.length;
243
+ if (!seenCloses.has(endStart)) {
244
+ seenCloses.add(endStart);
245
+ replacements.push({ start: endStart, end: endEnd, text: newName });
246
+ }
247
+ }
248
+ });
249
+ }
250
+ }
251
+ if (!replacements.length) {
252
+ return { updated: source, changeCount: 0 };
253
+ }
254
+ replacements.sort((a, b) => b.start - a.start);
255
+ let updated = source;
256
+ for (const replacement of replacements) {
257
+ updated = updated.slice(0, replacement.start) + replacement.text + updated.slice(replacement.end);
258
+ }
259
+ return { updated, changeCount: replacements.length };
260
+ }
261
+ exports.transformTemplate = transformTemplate;
262
+ // Helpers
263
+ function flattenTemplateExpression(node, source) {
264
+ const placeholders = [];
265
+ let content = node.head.text;
266
+ node.templateSpans.forEach((span, i) => {
267
+ const token = `__NG_EXPR_PLACEHOLDER_${i}__`;
268
+ const fullText = '${' + source.slice(span.expression.getStart(), span.expression.getEnd()) + '}';
269
+ placeholders.push({ token, fullText });
270
+ content += token + span.literal.text;
271
+ });
272
+ return { placeholderContent: content, placeholders };
273
+ }
274
+ function escapeBackticks(text) {
275
+ // First escape backslashes, then escape backticks
276
+ return text.replace(/\\/g, '\\\\').replace(/`/g, '\\`');
277
+ }
278
+ // Utilities
279
+ function isElement(n) {
280
+ return n.tagName !== undefined;
281
+ }
282
+ function walk(node, visit) {
283
+ visit(node);
284
+ const childNodes = node.childNodes;
285
+ if (!childNodes) {
286
+ return;
287
+ }
288
+ for (const childNode of childNodes) {
289
+ walk(childNode, visit);
290
+ }
291
+ }
292
+ function findElementsByTag(doc, tag) {
293
+ const result = [];
294
+ walk(doc, (node) => {
295
+ if (isElement(node) && node.tagName === tag) {
296
+ result.push(node);
297
+ }
298
+ });
299
+ return result;
300
+ }
301
+ //# sourceMappingURL=template-migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-migrator.js","sourceRoot":"","sources":["template-migrator.ts"],"names":[],"mappings":"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"}