@craft-ng/dev-tools 0.5.1-beta.0 → 0.6.0-beta.2

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 (51) hide show
  1. package/README.md +66 -0
  2. package/generators.json +26 -0
  3. package/package.json +18 -1
  4. package/src/bin/craft.d.ts +2 -0
  5. package/src/bin/craft.js +166 -0
  6. package/src/bin/craft.js.map +1 -0
  7. package/src/eslint-rules/craft-computed-name-match.cjs +8 -125
  8. package/src/eslint-rules/craft-method-name-match.cjs +8 -166
  9. package/src/eslint-rules/craft-name-match-utils.cjs +179 -0
  10. package/src/eslint-rules/craft-signal-source-name-match.cjs +8 -0
  11. package/src/eslint-rules/craft-source-name-match.cjs +8 -0
  12. package/src/eslint-rules/global-exception-registry-match.cjs +78 -13
  13. package/src/eslint-rules/index.cjs +8 -2
  14. package/src/eslint-rules/require-cascade-route-di-check.cjs +223 -0
  15. package/src/eslint-rules/require-primitive-generator-unwrap.cjs +267 -0
  16. package/src/generators/route/compat.d.ts +3 -0
  17. package/src/generators/route/compat.js +6 -0
  18. package/src/generators/route/compat.js.map +1 -0
  19. package/src/generators/route/generator.d.ts +31 -0
  20. package/src/generators/route/generator.js +434 -0
  21. package/src/generators/route/generator.js.map +1 -0
  22. package/src/generators/route/schema.json +50 -0
  23. package/src/generators/route/split-schema.json +19 -0
  24. package/src/index.d.ts +1 -0
  25. package/src/index.js +1 -0
  26. package/src/index.js.map +1 -1
  27. package/src/scripts/primitives/migrate-primitive-generators.d.ts +27 -0
  28. package/src/scripts/primitives/migrate-primitive-generators.js +315 -0
  29. package/src/scripts/primitives/migrate-primitive-generators.js.map +1 -0
  30. package/src/scripts/primitives/migrate-primitive-generators.ts +402 -0
  31. package/src/scripts/primitives/migrate-primitives.js +36 -4
  32. package/src/scripts/primitives/migrate-primitives.js.map +1 -1
  33. package/src/scripts/primitives/migrate-primitives.spec.ts +43 -0
  34. package/src/scripts/primitives/migrate-primitives.ts +62 -4
  35. package/src/scripts/primitives/migration-diagnostic.d.ts +1 -1
  36. package/src/scripts/primitives/migration-diagnostic.ts +1 -0
  37. package/src/scripts/routes/migrate-routes.js +4 -4
  38. package/src/scripts/routes/migrate-routes.js.map +1 -1
  39. package/src/scripts/routes/migrate-routes.ts +4 -6
  40. package/src/scripts/routes/route-command.d.ts +75 -0
  41. package/src/scripts/routes/route-command.js +1187 -0
  42. package/src/scripts/routes/route-command.js.map +1 -0
  43. package/src/scripts/routes/route-command.spec.ts +553 -0
  44. package/src/scripts/routes/route-command.ts +1790 -0
  45. package/src/scripts/services/migrate-services.js +45 -11
  46. package/src/scripts/services/migrate-services.js.map +1 -1
  47. package/src/scripts/services/migrate-services.spec.ts +46 -4
  48. package/src/scripts/services/migrate-services.ts +64 -13
  49. package/src/scripts/services/migration-diagnostic.d.ts +1 -1
  50. package/src/scripts/services/migration-diagnostic.ts +1 -0
  51. package/src/eslint-rules/require-track-on-dependent-primitives.cjs +0 -219
@@ -0,0 +1,315 @@
1
+ var _a;
2
+ import { __awaiter } from "tslib";
3
+ import { relative, dirname, resolve } from 'node:path';
4
+ import { Node, Project, QuoteKind, SyntaxKind, } from 'ts-morph';
5
+ /**
6
+ * Migrates call-sites of the generator-returning craft primitives (`state`,
7
+ * `query`, `mutation`, `asyncProcess`, `queryParam`):
8
+ *
9
+ * 1. `yield* track(X)` → `yield* X` (track import purged when unused).
10
+ * 2. Already-consumed invocations (`yield*`, `craftUse(...)`) are left alone.
11
+ * 3. Inside a generator function → prefix with `yield* ` (parenthesised when
12
+ * the parent is a spread / member access / template position).
13
+ * 4. Direct expression-body return of a `craftService` factory or of a
14
+ * `queryParams:` arrow stays as-is (the runtime drives the generator).
15
+ * 5. Anywhere else → wrap with `craftUse(...)` (import added).
16
+ * 6. A `craftService` factory / `queryParams:` arrow returning an object
17
+ * literal containing primitive creations is first converted to a
18
+ * `function*` so rule 3 applies.
19
+ */
20
+ export const ALL_PRIMITIVES = [
21
+ 'state',
22
+ 'query',
23
+ 'mutation',
24
+ 'asyncProcess',
25
+ 'queryParam',
26
+ ];
27
+ const FACTORY_HOST_CALLEES = new Set(['craftService', 'toCraftService']);
28
+ export function migratePrimitiveGenerators(_a) {
29
+ return __awaiter(this, arguments, void 0, function* ({ paths, primitives = ALL_PRIMITIVES, write = true, log = console.log, }) {
30
+ const project = new Project({
31
+ skipAddingFilesFromTsConfig: true,
32
+ manipulationSettings: { quoteKind: QuoteKind.Single },
33
+ });
34
+ project.addSourceFilesAtPaths(paths);
35
+ const changedFiles = [];
36
+ for (const sourceFile of project.getSourceFiles()) {
37
+ if (migrateFile(sourceFile, new Set(primitives))) {
38
+ changedFiles.push(relative(process.cwd(), sourceFile.getFilePath()));
39
+ }
40
+ }
41
+ if (write) {
42
+ yield project.save();
43
+ }
44
+ log(`${write ? 'Migrated' : 'Would migrate'} ${changedFiles.length} file(s).`);
45
+ for (const file of changedFiles)
46
+ log(` ${file}`);
47
+ return { changedFiles };
48
+ });
49
+ }
50
+ function migrateFile(sourceFile, primitives) {
51
+ const localNames = collectImportedLocalNames(sourceFile, primitives);
52
+ if (localNames.size === 0)
53
+ return false;
54
+ let changed = false;
55
+ changed = unwrapTrackCalls(sourceFile) || changed;
56
+ changed = convertObjectLiteralFactories(sourceFile, localNames) || changed;
57
+ // Bottom-up so an edit never invalidates a not-yet-processed call above it.
58
+ const calls = findPrimitiveCreationCalls(sourceFile, localNames).sort((a, b) => b.getStart() - a.getStart());
59
+ let needsCraftUseImport = false;
60
+ for (const call of calls) {
61
+ if (isAlreadyConsumed(call) || isDirectFactoryReturn(call))
62
+ continue;
63
+ if (isInsideGeneratorFunction(call)) {
64
+ const text = call.getText();
65
+ call.replaceWithText(needsYieldParens(call) ? `(yield* ${text})` : `yield* ${text}`);
66
+ changed = true;
67
+ continue;
68
+ }
69
+ call.replaceWithText(`craftUse(${call.getText()})`);
70
+ needsCraftUseImport = true;
71
+ changed = true;
72
+ }
73
+ if (needsCraftUseImport) {
74
+ ensureCraftUseImport(sourceFile);
75
+ }
76
+ return changed;
77
+ }
78
+ function collectImportedLocalNames(sourceFile, primitives) {
79
+ var _a, _b;
80
+ const localNames = new Map();
81
+ for (const importDeclaration of sourceFile.getImportDeclarations()) {
82
+ for (const specifier of importDeclaration.getNamedImports()) {
83
+ const original = specifier.getName();
84
+ if (primitives.has(original)) {
85
+ localNames.set((_b = (_a = specifier.getAliasNode()) === null || _a === void 0 ? void 0 : _a.getText()) !== null && _b !== void 0 ? _b : original, original);
86
+ }
87
+ }
88
+ }
89
+ return localNames;
90
+ }
91
+ function findPrimitiveCreationCalls(sourceFile, localNames) {
92
+ return sourceFile
93
+ .getDescendantsOfKind(SyntaxKind.CallExpression)
94
+ .filter((call) => {
95
+ const callee = call.getExpression();
96
+ if (!Node.isIdentifier(callee))
97
+ return false;
98
+ if (!localNames.has(callee.getText()))
99
+ return false;
100
+ // A creation call always takes a config; destructured readers such as
101
+ // `({ state }) => state().page` are argument-less.
102
+ if (call.getArguments().length === 0)
103
+ return false;
104
+ return !isShadowed(callee);
105
+ });
106
+ }
107
+ function isShadowed(identifier) {
108
+ const name = identifier.getText();
109
+ let node = identifier.getParent();
110
+ while (node) {
111
+ if (Node.isFunctionDeclaration(node) ||
112
+ Node.isFunctionExpression(node) ||
113
+ Node.isArrowFunction(node) ||
114
+ Node.isMethodDeclaration(node)) {
115
+ for (const parameter of node.getParameters()) {
116
+ const bindsName = parameter
117
+ .getDescendants()
118
+ .concat(parameter.getNameNode())
119
+ .some((descendant) => {
120
+ var _a, _b;
121
+ return (Node.isIdentifier(descendant) &&
122
+ descendant.getText() === name &&
123
+ (Node.isBindingElement(descendant.getParent()) ||
124
+ Node.isParameterDeclaration(descendant.getParent())) &&
125
+ ((_b = (_a = descendant.getParent()).getNameNode) === null || _b === void 0 ? void 0 : _b.call(_a)) === descendant);
126
+ });
127
+ if (bindsName)
128
+ return true;
129
+ }
130
+ }
131
+ node = node.getParent();
132
+ }
133
+ return false;
134
+ }
135
+ function isAlreadyConsumed(call) {
136
+ const parent = skipParens(call.getParent());
137
+ if (Node.isYieldExpression(parent))
138
+ return true;
139
+ if (Node.isCallExpression(parent) &&
140
+ parent.getExpression().getText() === 'craftUse' &&
141
+ parent.getArguments()[0] === skipParensDown(call)) {
142
+ return true;
143
+ }
144
+ return false;
145
+ }
146
+ function isDirectFactoryReturn(call) {
147
+ const arrow = skipParens(call.getParent());
148
+ if (!Node.isArrowFunction(arrow))
149
+ return false;
150
+ if (skipParensDown(arrow.getBody()) !== call)
151
+ return false;
152
+ return isFactoryHostArrow(arrow);
153
+ }
154
+ function isFactoryHostArrow(arrow) {
155
+ const parent = arrow.getParent();
156
+ if (Node.isCallExpression(parent)) {
157
+ const callee = parent.getExpression();
158
+ if (Node.isIdentifier(callee) && FACTORY_HOST_CALLEES.has(callee.getText())) {
159
+ return parent.getArguments().includes(arrow);
160
+ }
161
+ }
162
+ if (Node.isPropertyAssignment(parent)) {
163
+ return parent.getName() === 'queryParams';
164
+ }
165
+ return false;
166
+ }
167
+ function isInsideGeneratorFunction(call) {
168
+ let node = call.getParent();
169
+ while (node) {
170
+ if (Node.isArrowFunction(node))
171
+ return false;
172
+ if (Node.isFunctionDeclaration(node) ||
173
+ Node.isFunctionExpression(node) ||
174
+ Node.isMethodDeclaration(node)) {
175
+ return node.isGenerator();
176
+ }
177
+ node = node.getParent();
178
+ }
179
+ return false;
180
+ }
181
+ function needsYieldParens(call) {
182
+ const parent = call.getParent();
183
+ return (Node.isSpreadElement(parent) ||
184
+ Node.isSpreadAssignment(parent) ||
185
+ Node.isPropertyAccessExpression(parent) ||
186
+ Node.isElementAccessExpression(parent) ||
187
+ Node.isTemplateSpan(parent) ||
188
+ Node.isBinaryExpression(parent) ||
189
+ Node.isConditionalExpression(parent) ||
190
+ (Node.isCallExpression(parent) && parent.getExpression() === call));
191
+ }
192
+ function unwrapTrackCalls(sourceFile) {
193
+ var _a, _b;
194
+ const trackImport = sourceFile
195
+ .getImportDeclarations()
196
+ .flatMap((declaration) => declaration.getNamedImports())
197
+ .find((specifier) => specifier.getName() === 'track');
198
+ if (!trackImport)
199
+ return false;
200
+ const localName = (_b = (_a = trackImport.getAliasNode()) === null || _a === void 0 ? void 0 : _a.getText()) !== null && _b !== void 0 ? _b : 'track';
201
+ const trackCalls = sourceFile
202
+ .getDescendantsOfKind(SyntaxKind.CallExpression)
203
+ .filter((call) => {
204
+ const callee = call.getExpression();
205
+ return (Node.isIdentifier(callee) &&
206
+ callee.getText() === localName &&
207
+ call.getArguments().length === 1);
208
+ })
209
+ .sort((a, b) => b.getStart() - a.getStart());
210
+ if (trackCalls.length === 0)
211
+ return false;
212
+ for (const call of trackCalls) {
213
+ call.replaceWithText(call.getArguments()[0].getText());
214
+ }
215
+ const remaining = sourceFile
216
+ .getDescendantsOfKind(SyntaxKind.Identifier)
217
+ .filter((identifier) => identifier.getText() === localName &&
218
+ !Node.isImportSpecifier(identifier.getParent()));
219
+ if (remaining.length === 0) {
220
+ trackImport.remove();
221
+ }
222
+ return true;
223
+ }
224
+ function convertObjectLiteralFactories(sourceFile, localNames) {
225
+ const arrows = sourceFile
226
+ .getDescendantsOfKind(SyntaxKind.ArrowFunction)
227
+ .filter((arrow) => {
228
+ if (!isFactoryHostArrow(arrow))
229
+ return false;
230
+ const body = skipParensDown(arrow.getBody());
231
+ if (!Node.isObjectLiteralExpression(body))
232
+ return false;
233
+ return findPrimitiveCreationCalls(sourceFile, localNames).some((call) => body.getDescendants().includes(call));
234
+ })
235
+ .sort((a, b) => b.getStart() - a.getStart());
236
+ for (const arrow of arrows) {
237
+ const body = skipParensDown(arrow.getBody());
238
+ const parameters = arrow
239
+ .getParameters()
240
+ .map((parameter) => parameter.getText())
241
+ .join(', ');
242
+ arrow.replaceWithText(`function* (${parameters}) {\n return ${body.getText()};\n}`);
243
+ }
244
+ return arrows.length > 0;
245
+ }
246
+ function ensureCraftUseImport(sourceFile) {
247
+ const alreadyImported = sourceFile
248
+ .getImportDeclarations()
249
+ .some((declaration) => declaration
250
+ .getNamedImports()
251
+ .some((specifier) => specifier.getName() === 'craftUse'));
252
+ if (alreadyImported)
253
+ return;
254
+ const filePath = sourceFile.getFilePath();
255
+ const coreSrc = resolve('libs/core/src');
256
+ const isInsideCore = resolve(filePath).startsWith(coreSrc + '/');
257
+ if (isInsideCore) {
258
+ let specifier = relative(dirname(filePath), resolve('libs/core/src/lib/craft-use'));
259
+ if (!specifier.startsWith('.'))
260
+ specifier = `./${specifier}`;
261
+ sourceFile.addImportDeclaration({
262
+ moduleSpecifier: specifier,
263
+ namedImports: ['craftUse'],
264
+ });
265
+ return;
266
+ }
267
+ const coreImport = sourceFile
268
+ .getImportDeclarations()
269
+ .find((declaration) => declaration.getModuleSpecifierValue() === '@craft-ng/core');
270
+ if (coreImport) {
271
+ coreImport.addNamedImport('craftUse');
272
+ return;
273
+ }
274
+ sourceFile.addImportDeclaration({
275
+ moduleSpecifier: '@craft-ng/core',
276
+ namedImports: ['craftUse'],
277
+ });
278
+ }
279
+ function skipParens(node) {
280
+ while (node && Node.isParenthesizedExpression(node)) {
281
+ node = node.getParent();
282
+ }
283
+ return node;
284
+ }
285
+ function skipParensDown(node) {
286
+ while (Node.isParenthesizedExpression(node)) {
287
+ node = node.getExpression();
288
+ }
289
+ return node;
290
+ }
291
+ const isCli = (_a = process.argv[1]) === null || _a === void 0 ? void 0 : _a.includes('migrate-primitive-generators');
292
+ if (isCli) {
293
+ const args = process.argv.slice(2);
294
+ const readListArg = (name) => {
295
+ var _a;
296
+ const index = args.indexOf(`--${name}`);
297
+ if (index === -1)
298
+ return undefined;
299
+ return (_a = args[index + 1]) === null || _a === void 0 ? void 0 : _a.split(',').filter(Boolean);
300
+ };
301
+ const paths = readListArg('paths');
302
+ if (!paths || paths.length === 0) {
303
+ console.error('Usage: migrate-primitive-generators --paths <glob,...> [--primitives state,query,...] [--dry]');
304
+ process.exit(1);
305
+ }
306
+ void migratePrimitiveGenerators({
307
+ paths,
308
+ primitives: readListArg('primitives'),
309
+ write: !args.includes('--dry'),
310
+ }).catch((error) => {
311
+ console.error(error);
312
+ process.exit(1);
313
+ });
314
+ }
315
+ //# sourceMappingURL=migrate-primitive-generators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-primitive-generators.js","sourceRoot":"","sources":["../../../../../../libs/dev-tools/src/scripts/primitives/migrate-primitive-generators.ts"],"names":[],"mappings":"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"}