devextreme-schematics 1.11.2 → 1.12.0

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.
@@ -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,317 @@
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
+ var _a;
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.transformTemplate = exports.applyInlineComponentTemplateMigrations = exports.applyHostAwareTemplateMigrations = void 0;
40
+ const parse5 = __importStar(require("parse5"));
41
+ const path = __importStar(require("path"));
42
+ const picomatch_1 = __importDefault(require("picomatch"));
43
+ // Dynamically require TypeScript if available; skip inline template migration if not.
44
+ let ts = null;
45
+ const tsResolutionErrors = [];
46
+ const tsResolutionPaths = [
47
+ __dirname,
48
+ process.cwd(),
49
+ path.dirname(((_a = require.main) === null || _a === void 0 ? void 0 : _a.filename) || ''),
50
+ ];
51
+ for (const p of tsResolutionPaths) {
52
+ try {
53
+ // tslint:disable-next-line:no-var-requires
54
+ ts = require(require.resolve('typescript', { paths: [p] }));
55
+ break;
56
+ }
57
+ catch (err) {
58
+ tsResolutionErrors.push(`Failed to import TypeScript from ${p}: ${(err === null || err === void 0 ? void 0 : err.message) || err}`);
59
+ }
60
+ }
61
+ if (!ts) {
62
+ try {
63
+ // tslint:disable-next-line:no-var-requires
64
+ ts = require('typescript');
65
+ }
66
+ catch (err) {
67
+ tsResolutionErrors.push(`Failed to import TypeScript: ${(err === null || err === void 0 ? void 0 : err.message) || err}`);
68
+ }
69
+ }
70
+ // Transform external HTML template files matched by includeGlobs.
71
+ function applyHostAwareTemplateMigrations(tree, runner, exec) {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ const matcher = (0, picomatch_1.default)(runner.includeGlobs.length ? runner.includeGlobs : ['**/*.html']);
74
+ tree.visit(filePath => {
75
+ if (!matcher(filePath)) {
76
+ return;
77
+ }
78
+ if (!filePath.endsWith('.html')) {
79
+ return;
80
+ }
81
+ const buffer = tree.read(filePath);
82
+ if (!buffer) {
83
+ return;
84
+ }
85
+ const source = buffer.toString('utf8');
86
+ const { updated, changeCount } = transformTemplate(source, runner.rules);
87
+ if (changeCount === 0) {
88
+ return;
89
+ }
90
+ if (exec.dryRun) {
91
+ exec.logger.info(`[dry] ${filePath} → ${changeCount} changes`);
92
+ }
93
+ else {
94
+ exec.logger.info(`${filePath} → ${changeCount} changes`);
95
+ tree.overwrite(filePath, updated);
96
+ }
97
+ });
98
+ });
99
+ }
100
+ exports.applyHostAwareTemplateMigrations = applyHostAwareTemplateMigrations;
101
+ // Apply migrations inside inline component templates found in TS/JS files.
102
+ function applyInlineComponentTemplateMigrations(tree, runner, exec, scriptGlobs) {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ if (!scriptGlobs.length) {
105
+ return;
106
+ }
107
+ if (!ts) {
108
+ exec.logger.warn('[config-migrator] Failed to import TypeScript. Skipping inline template migration.\n' +
109
+ 'Resolution attempts and errors:\n' +
110
+ tsResolutionErrors.map(e => ' - ' + e).join('\n') + '\n' +
111
+ 'To resolve this issue, perform one of the following steps:\n' +
112
+ ' 1. Install the "typescript" package in your project root: `npm install typescript --save-dev`\n' +
113
+ ' 2. Install the "typescript" package globally on your machine: `npm install -g typescript`\n' +
114
+ 'Refer to the README for further troubleshooting information.');
115
+ return;
116
+ }
117
+ const matcher = (0, picomatch_1.default)(scriptGlobs);
118
+ tree.visit(filePath => {
119
+ if (!matcher(filePath)) {
120
+ return;
121
+ }
122
+ if (!(filePath.endsWith('.ts') || filePath.endsWith('.js'))) {
123
+ return;
124
+ }
125
+ const buffer = tree.read(filePath);
126
+ if (!buffer) {
127
+ return;
128
+ }
129
+ const sourceText = buffer.toString('utf8');
130
+ const sf = ts.createSourceFile(filePath, sourceText, ts.ScriptTarget.ES2022, true, filePath.endsWith('.ts') ? ts.ScriptKind.TS : ts.ScriptKind.JS);
131
+ const edits = [];
132
+ function visit(node) {
133
+ if (ts.isDecorator(node) && ts.isCallExpression(node.expression)) {
134
+ const call = node.expression;
135
+ if (ts.isIdentifier(call.expression) && call.expression.text === 'Component' && call.arguments.length) {
136
+ const arg = call.arguments[0];
137
+ if (ts.isObjectLiteralExpression(arg)) {
138
+ for (const prop of arg.properties) {
139
+ if (!ts.isPropertyAssignment(prop)) {
140
+ continue;
141
+ }
142
+ const name = prop.name;
143
+ const propName = ts.isIdentifier(name) ? name.text : ts.isStringLiteral(name) ? name.text : undefined;
144
+ if (propName !== 'template') {
145
+ continue;
146
+ }
147
+ const init = prop.initializer;
148
+ if (ts.isStringLiteral(init)) {
149
+ const raw = init.text;
150
+ const { updated, changeCount } = transformTemplate(raw, runner.rules);
151
+ if (changeCount > 0) {
152
+ const quote = init.getText().startsWith("'") ? '"' : init.getText()[0];
153
+ const newLiteral = quote + updated.replace(new RegExp(quote, 'g'), '\\' + quote) + quote;
154
+ edits.push({ start: init.getStart(), end: init.getEnd(), text: newLiteral, changes: changeCount });
155
+ }
156
+ }
157
+ else if (ts.isNoSubstitutionTemplateLiteral(init)) {
158
+ const raw = init.text;
159
+ const { updated, changeCount } = transformTemplate(raw, runner.rules);
160
+ if (changeCount > 0) {
161
+ const newLiteral = '`' + escapeBackticks(updated) + '`';
162
+ edits.push({ start: init.getStart(), end: init.getEnd(), text: newLiteral, changes: changeCount });
163
+ }
164
+ }
165
+ else if (ts.isTemplateExpression(init)) {
166
+ const { placeholderContent, placeholders } = flattenTemplateExpression(init, sourceText);
167
+ const { updated, changeCount } = transformTemplate(placeholderContent, runner.rules);
168
+ if (changeCount > 0) {
169
+ let rebuilt = updated;
170
+ placeholders.forEach(placeholder => {
171
+ rebuilt = rebuilt.replace(new RegExp(placeholder.token, 'g'), placeholder.fullText);
172
+ });
173
+ const newLiteral = '`' + escapeBackticks(rebuilt) + '`';
174
+ edits.push({ start: init.getStart(), end: init.getEnd(), text: newLiteral, changes: changeCount });
175
+ }
176
+ }
177
+ }
178
+ }
179
+ }
180
+ }
181
+ ts.forEachChild(node, visit);
182
+ }
183
+ visit(sf);
184
+ if (!edits.length) {
185
+ return;
186
+ }
187
+ edits.sort((a, b) => b.start - a.start); // edits from last to first
188
+ let updatedFile = sourceText;
189
+ for (const edit of edits) {
190
+ updatedFile = updatedFile.slice(0, edit.start) + edit.text + updatedFile.slice(edit.end);
191
+ }
192
+ const totalChanges = edits.reduce((acc, edit) => acc + edit.changes, 0);
193
+ if (exec.dryRun) {
194
+ exec.logger.info(`[dry] ${filePath} (inline templates) → ${totalChanges} changes in ${edits.length} template(s)`);
195
+ }
196
+ else {
197
+ exec.logger.info(`${filePath} (inline templates) → ${totalChanges} changes in ${edits.length} template(s)`);
198
+ tree.overwrite(filePath, updatedFile);
199
+ }
200
+ });
201
+ });
202
+ }
203
+ exports.applyInlineComponentTemplateMigrations = applyInlineComponentTemplateMigrations;
204
+ function transformTemplate(source, rules) {
205
+ const document = parse5.parse(source, { sourceCodeLocationInfo: true });
206
+ const replacements = [];
207
+ const hostSelectorSet = new Set(rules.map(rule => rule.hostSelector));
208
+ const seenOpens = new Set();
209
+ const seenCloses = new Set();
210
+ function walkHost(root, visitFn) {
211
+ function recursiveWalk(node) {
212
+ visitFn(node);
213
+ const childNodes = node.childNodes;
214
+ if (!childNodes) {
215
+ return;
216
+ }
217
+ for (const childNode of childNodes) {
218
+ if (isElement(childNode) && hostSelectorSet.has(childNode.tagName) && childNode !== root) {
219
+ continue;
220
+ }
221
+ recursiveWalk(childNode);
222
+ }
223
+ }
224
+ recursiveWalk(root);
225
+ }
226
+ for (const rule of rules) {
227
+ const hosts = findElementsByTag(document, rule.hostSelector);
228
+ for (const host of hosts) {
229
+ if (!host.sourceCodeLocation) {
230
+ continue;
231
+ }
232
+ walkHost(host, (node) => {
233
+ if (!isElement(node)) {
234
+ return;
235
+ }
236
+ const oldName = node.tagName;
237
+ if (!oldName) {
238
+ return;
239
+ }
240
+ const newName = rule.configMap[oldName];
241
+ if (!newName) {
242
+ return;
243
+ }
244
+ const loc = node.sourceCodeLocation;
245
+ if (!loc) {
246
+ return;
247
+ }
248
+ if (loc.startTag) {
249
+ const openStart = loc.startTag.startOffset + 1;
250
+ const openEnd = openStart + oldName.length;
251
+ if (!seenOpens.has(openStart)) {
252
+ seenOpens.add(openStart);
253
+ replacements.push({ start: openStart, end: openEnd, text: newName });
254
+ }
255
+ }
256
+ if (loc.endTag) {
257
+ const endStart = loc.endTag.startOffset + 2;
258
+ const endEnd = endStart + oldName.length;
259
+ if (!seenCloses.has(endStart)) {
260
+ seenCloses.add(endStart);
261
+ replacements.push({ start: endStart, end: endEnd, text: newName });
262
+ }
263
+ }
264
+ });
265
+ }
266
+ }
267
+ if (!replacements.length) {
268
+ return { updated: source, changeCount: 0 };
269
+ }
270
+ replacements.sort((a, b) => b.start - a.start);
271
+ let updated = source;
272
+ for (const replacement of replacements) {
273
+ updated = updated.slice(0, replacement.start) + replacement.text + updated.slice(replacement.end);
274
+ }
275
+ return { updated, changeCount: replacements.length };
276
+ }
277
+ exports.transformTemplate = transformTemplate;
278
+ // Helpers
279
+ function flattenTemplateExpression(node, source) {
280
+ const placeholders = [];
281
+ let content = node.head.text;
282
+ node.templateSpans.forEach((span, i) => {
283
+ const token = `__NG_EXPR_PLACEHOLDER_${i}__`;
284
+ const fullText = '${' + source.slice(span.expression.getStart(), span.expression.getEnd()) + '}';
285
+ placeholders.push({ token, fullText });
286
+ content += token + span.literal.text;
287
+ });
288
+ return { placeholderContent: content, placeholders };
289
+ }
290
+ function escapeBackticks(text) {
291
+ // First escape backslashes, then escape backticks
292
+ return text.replace(/\\/g, '\\\\').replace(/`/g, '\\`');
293
+ }
294
+ // Utilities
295
+ function isElement(n) {
296
+ return n.tagName !== undefined;
297
+ }
298
+ function walk(node, visit) {
299
+ visit(node);
300
+ const childNodes = node.childNodes;
301
+ if (!childNodes) {
302
+ return;
303
+ }
304
+ for (const childNode of childNodes) {
305
+ walk(childNode, visit);
306
+ }
307
+ }
308
+ function findElementsByTag(doc, tag) {
309
+ const result = [];
310
+ walk(doc, (node) => {
311
+ if (isElement(node) && node.tagName === tag) {
312
+ result.push(node);
313
+ }
314
+ });
315
+ return result;
316
+ }
317
+ //# 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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"}