@craft-ts/dev-tools 0.7.0-beta.13

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 (237) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/generators.json +26 -0
  4. package/package.json +119 -0
  5. package/src/bin/craft-architecture-check.d.ts +2 -0
  6. package/src/bin/craft-architecture-check.js +51 -0
  7. package/src/bin/craft-architecture-check.js.map +1 -0
  8. package/src/bin/craft-brand.d.ts +2 -0
  9. package/src/bin/craft-brand.js +9 -0
  10. package/src/bin/craft-brand.js.map +1 -0
  11. package/src/bin/craft-graph.d.ts +2 -0
  12. package/src/bin/craft-graph.js +72 -0
  13. package/src/bin/craft-graph.js.map +1 -0
  14. package/src/bin/craft-migrate-architecture.d.ts +2 -0
  15. package/src/bin/craft-migrate-architecture.js +64 -0
  16. package/src/bin/craft-migrate-architecture.js.map +1 -0
  17. package/src/bin/craft-migrate-components.d.ts +2 -0
  18. package/src/bin/craft-migrate-components.js +67 -0
  19. package/src/bin/craft-migrate-components.js.map +1 -0
  20. package/src/bin/craft-migrate-primitives.d.ts +2 -0
  21. package/src/bin/craft-migrate-primitives.js +71 -0
  22. package/src/bin/craft-migrate-primitives.js.map +1 -0
  23. package/src/bin/craft-migrate-routes.d.ts +2 -0
  24. package/src/bin/craft-migrate-routes.js +77 -0
  25. package/src/bin/craft-migrate-routes.js.map +1 -0
  26. package/src/bin/craft-migrate-services.d.ts +2 -0
  27. package/src/bin/craft-migrate-services.js +75 -0
  28. package/src/bin/craft-migrate-services.js.map +1 -0
  29. package/src/bin/craft-migrate-template.d.ts +2 -0
  30. package/src/bin/craft-migrate-template.js +68 -0
  31. package/src/bin/craft-migrate-template.js.map +1 -0
  32. package/src/bin/craft-migrate.d.ts +2 -0
  33. package/src/bin/craft-migrate.js +91 -0
  34. package/src/bin/craft-migrate.js.map +1 -0
  35. package/src/bin/craft.d.ts +2 -0
  36. package/src/bin/craft.js +318 -0
  37. package/src/bin/craft.js.map +1 -0
  38. package/src/eslint-rules/anchor-has-href.cjs +35 -0
  39. package/src/eslint-rules/app-start-registry-match.cjs +355 -0
  40. package/src/eslint-rules/button-has-type.cjs +50 -0
  41. package/src/eslint-rules/control-has-accessible-name.cjs +56 -0
  42. package/src/eslint-rules/craft-component-name-match.cjs +8 -0
  43. package/src/eslint-rules/craft-computed-name-match.cjs +63 -0
  44. package/src/eslint-rules/craft-css-token-registry.cjs +17 -0
  45. package/src/eslint-rules/craft-css-var-naming.cjs +18 -0
  46. package/src/eslint-rules/craft-css-vars-contract.cjs +34 -0
  47. package/src/eslint-rules/craft-directive-name-match.cjs +8 -0
  48. package/src/eslint-rules/craft-method-name-match.cjs +8 -0
  49. package/src/eslint-rules/craft-name-match-utils.cjs +179 -0
  50. package/src/eslint-rules/craft-primitive-context.cjs +46 -0
  51. package/src/eslint-rules/craft-signal-source-name-match.cjs +8 -0
  52. package/src/eslint-rules/craft-source-name-match.cjs +8 -0
  53. package/src/eslint-rules/craft-styles-scope-safe.cjs +25 -0
  54. package/src/eslint-rules/css-rule-utils.cjs +109 -0
  55. package/src/eslint-rules/global-exception-registry-match.cjs +562 -0
  56. package/src/eslint-rules/heading-has-content.cjs +31 -0
  57. package/src/eslint-rules/html-helpers.cjs +115 -0
  58. package/src/eslint-rules/hyperscript-walk.cjs +249 -0
  59. package/src/eslint-rules/iframe-has-title.cjs +26 -0
  60. package/src/eslint-rules/img-has-alt.cjs +28 -0
  61. package/src/eslint-rules/index.cjs +209 -0
  62. package/src/eslint-rules/index.d.cts +5 -0
  63. package/src/eslint-rules/label-has-associated-control.cjs +67 -0
  64. package/src/eslint-rules/no-async-await.cjs +46 -0
  65. package/src/eslint-rules/no-craft-computed-side-effects.cjs +301 -0
  66. package/src/eslint-rules/no-craft-use-in-template.cjs +89 -0
  67. package/src/eslint-rules/no-craft-use.cjs +42 -0
  68. package/src/eslint-rules/no-direct-temporal-globals.cjs +73 -0
  69. package/src/eslint-rules/no-effect-in-params.cjs +265 -0
  70. package/src/eslint-rules/no-effect-outside-loaders.cjs +3 -0
  71. package/src/eslint-rules/no-ephemeral-template-form-state.cjs +131 -0
  72. package/src/eslint-rules/no-hardcoded-design-values.cjs +15 -0
  73. package/src/eslint-rules/no-heading-level-skip.cjs +101 -0
  74. package/src/eslint-rules/no-imperative-craft-resource-trigger.cjs +291 -0
  75. package/src/eslint-rules/no-important-in-component-styles.cjs +12 -0
  76. package/src/eslint-rules/no-injection-token.cjs +173 -0
  77. package/src/eslint-rules/no-invalid-insertion-pipe.cjs +162 -0
  78. package/src/eslint-rules/no-manual-route-provider-list.cjs +85 -0
  79. package/src/eslint-rules/no-noninteractive-element-interactions.cjs +66 -0
  80. package/src/eslint-rules/no-positive-tabindex.cjs +44 -0
  81. package/src/eslint-rules/no-redundant-primitive-insertion.cjs +361 -0
  82. package/src/eslint-rules/no-render-writes.cjs +106 -0
  83. package/src/eslint-rules/no-throw.cjs +132 -0
  84. package/src/eslint-rules/no-transition-actions.cjs +133 -0
  85. package/src/eslint-rules/no-type-assertions-in-template.cjs +211 -0
  86. package/src/eslint-rules/no-widened-route-provider-context.cjs +39 -0
  87. package/src/eslint-rules/prefer-browser-boundaries.cjs +92 -0
  88. package/src/eslint-rules/prefer-craft-http-transport.cjs +103 -0
  89. package/src/eslint-rules/prefer-craft-template-blocks.cjs +492 -0
  90. package/src/eslint-rules/prefer-direct-yieldable-callback.cjs +105 -0
  91. package/src/eslint-rules/prefer-named-html-helpers.cjs +33 -0
  92. package/src/eslint-rules/prefer-query-method-over-state-trigger.cjs +282 -0
  93. package/src/eslint-rules/prefer-relative-heading.cjs +43 -0
  94. package/src/eslint-rules/provide-host-name-match-component.cjs +455 -0
  95. package/src/eslint-rules/recommended-config.cjs +77 -0
  96. package/src/eslint-rules/require-assert-exhaustive-route-exceptions.cjs +259 -0
  97. package/src/eslint-rules/require-cascade-route-di-check.cjs +223 -0
  98. package/src/eslint-rules/require-child-route-mount-check.cjs +224 -0
  99. package/src/eslint-rules/require-component-monitoring.cjs +212 -0
  100. package/src/eslint-rules/require-craft-exception-handler.cjs +142 -0
  101. package/src/eslint-rules/require-craft-method-for-yieldable-callback.cjs +236 -0
  102. package/src/eslint-rules/require-craft-resource-trigger-yield.cjs +209 -0
  103. package/src/eslint-rules/require-effect-adapters.cjs +86 -0
  104. package/src/eslint-rules/require-exception-component-di-check.cjs +314 -0
  105. package/src/eslint-rules/require-focus-visible.cjs +36 -0
  106. package/src/eslint-rules/require-interactive-local-name.cjs +105 -0
  107. package/src/eslint-rules/require-lazy-load-with-retry.cjs +148 -0
  108. package/src/eslint-rules/require-outlet-heading-section.cjs +70 -0
  109. package/src/eslint-rules/require-pending-component-di-check.cjs +490 -0
  110. package/src/eslint-rules/require-primitive-context.cjs +156 -0
  111. package/src/eslint-rules/require-primitive-derived-property.cjs +598 -0
  112. package/src/eslint-rules/require-primitive-generator-unwrap.cjs +274 -0
  113. package/src/eslint-rules/require-reactive-template-bindings.cjs +305 -0
  114. package/src/eslint-rules/require-reduced-motion.cjs +38 -0
  115. package/src/eslint-rules/require-route-heading-outline.cjs +166 -0
  116. package/src/eslint-rules/require-yieldable-insertion-write.cjs +98 -0
  117. package/src/eslint-rules/require-yieldable-reactive-read.cjs +102 -0
  118. package/src/eslint-rules/require-yieldable-template-method.cjs +424 -0
  119. package/src/eslint-rules/role-has-required-aria.cjs +38 -0
  120. package/src/eslint-rules/server-function-client-match.cjs +283 -0
  121. package/src/eslint-rules/target-blank-noopener.cjs +31 -0
  122. package/src/eslint-rules/template-element-name-unique.cjs +124 -0
  123. package/src/eslint-rules/valid-aria.cjs +38 -0
  124. package/src/generators/route/compat.d.ts +3 -0
  125. package/src/generators/route/compat.js +6 -0
  126. package/src/generators/route/compat.js.map +1 -0
  127. package/src/generators/route/generator.d.ts +31 -0
  128. package/src/generators/route/generator.js +402 -0
  129. package/src/generators/route/generator.js.map +1 -0
  130. package/src/generators/route/schema.json +50 -0
  131. package/src/generators/route/split-schema.json +19 -0
  132. package/src/index.d.ts +21 -0
  133. package/src/index.js +23 -0
  134. package/src/index.js.map +1 -0
  135. package/src/scripts/angular-brand-codemod.d.ts +139 -0
  136. package/src/scripts/angular-brand-codemod.js +2318 -0
  137. package/src/scripts/angular-brand-codemod.js.map +1 -0
  138. package/src/scripts/angular-brand-codemod.ts +3985 -0
  139. package/src/scripts/architecture/migrate-architecture.d.ts +14 -0
  140. package/src/scripts/architecture/migrate-architecture.js +534 -0
  141. package/src/scripts/architecture/migrate-architecture.js.map +1 -0
  142. package/src/scripts/architecture/migrate-architecture.ts +653 -0
  143. package/src/scripts/architecture-graph.d.ts +368 -0
  144. package/src/scripts/architecture-graph.js +2191 -0
  145. package/src/scripts/architecture-graph.js.map +1 -0
  146. package/src/scripts/architecture-graph.ts +3136 -0
  147. package/src/scripts/components/migrate-components.d.ts +20 -0
  148. package/src/scripts/components/migrate-components.js +163 -0
  149. package/src/scripts/components/migrate-components.js.map +1 -0
  150. package/src/scripts/components/migrate-components.ts +227 -0
  151. package/src/scripts/components/migration-diagnostic.d.ts +7 -0
  152. package/src/scripts/components/migration-diagnostic.js +2 -0
  153. package/src/scripts/components/migration-diagnostic.js.map +1 -0
  154. package/src/scripts/components/migration-diagnostic.ts +8 -0
  155. package/src/scripts/create/create-project.d.ts +20 -0
  156. package/src/scripts/create/create-project.js +783 -0
  157. package/src/scripts/create/create-project.js.map +1 -0
  158. package/src/scripts/create/create-project.ts +849 -0
  159. package/src/scripts/data-flow-graph.d.ts +36 -0
  160. package/src/scripts/data-flow-graph.js +186 -0
  161. package/src/scripts/data-flow-graph.js.map +1 -0
  162. package/src/scripts/data-flow-graph.ts +240 -0
  163. package/src/scripts/dependency-graph.d.ts +152 -0
  164. package/src/scripts/dependency-graph.js +4456 -0
  165. package/src/scripts/dependency-graph.js.map +1 -0
  166. package/src/scripts/dependency-graph.ts +5908 -0
  167. package/src/scripts/effect-dependency-graph.d.ts +89 -0
  168. package/src/scripts/effect-dependency-graph.js +487 -0
  169. package/src/scripts/effect-dependency-graph.js.map +1 -0
  170. package/src/scripts/effect-dependency-graph.ts +630 -0
  171. package/src/scripts/migrate.d.ts +37 -0
  172. package/src/scripts/migrate.js +98 -0
  173. package/src/scripts/migrate.js.map +1 -0
  174. package/src/scripts/migrate.ts +162 -0
  175. package/src/scripts/migration-workspace.d.ts +2 -0
  176. package/src/scripts/migration-workspace.js +67 -0
  177. package/src/scripts/migration-workspace.js.map +1 -0
  178. package/src/scripts/migration-workspace.ts +93 -0
  179. package/src/scripts/primitives/migrate-named-primitives.d.ts +50 -0
  180. package/src/scripts/primitives/migrate-named-primitives.js +487 -0
  181. package/src/scripts/primitives/migrate-named-primitives.js.map +1 -0
  182. package/src/scripts/primitives/migrate-named-primitives.ts +627 -0
  183. package/src/scripts/primitives/migrate-primitive-generators.d.ts +30 -0
  184. package/src/scripts/primitives/migrate-primitive-generators.js +309 -0
  185. package/src/scripts/primitives/migrate-primitive-generators.js.map +1 -0
  186. package/src/scripts/primitives/migrate-primitive-generators.ts +410 -0
  187. package/src/scripts/primitives/migrate-primitives.d.ts +27 -0
  188. package/src/scripts/primitives/migrate-primitives.js +427 -0
  189. package/src/scripts/primitives/migrate-primitives.js.map +1 -0
  190. package/src/scripts/primitives/migrate-primitives.ts +655 -0
  191. package/src/scripts/primitives/migrate-yieldable-reactive-reads.d.ts +23 -0
  192. package/src/scripts/primitives/migrate-yieldable-reactive-reads.js +382 -0
  193. package/src/scripts/primitives/migrate-yieldable-reactive-reads.js.map +1 -0
  194. package/src/scripts/primitives/migrate-yieldable-reactive-reads.ts +499 -0
  195. package/src/scripts/primitives/migration-diagnostic.d.ts +8 -0
  196. package/src/scripts/primitives/migration-diagnostic.js +2 -0
  197. package/src/scripts/primitives/migration-diagnostic.js.map +1 -0
  198. package/src/scripts/primitives/migration-diagnostic.ts +15 -0
  199. package/src/scripts/routes/migrate-routes.d.ts +34 -0
  200. package/src/scripts/routes/migrate-routes.js +657 -0
  201. package/src/scripts/routes/migrate-routes.js.map +1 -0
  202. package/src/scripts/routes/migrate-routes.ts +895 -0
  203. package/src/scripts/routes/migration-diagnostic.d.ts +16 -0
  204. package/src/scripts/routes/migration-diagnostic.js +2 -0
  205. package/src/scripts/routes/migration-diagnostic.js.map +1 -0
  206. package/src/scripts/routes/migration-diagnostic.ts +25 -0
  207. package/src/scripts/routes/route-command.d.ts +75 -0
  208. package/src/scripts/routes/route-command.js +1169 -0
  209. package/src/scripts/routes/route-command.js.map +1 -0
  210. package/src/scripts/routes/route-command.ts +1807 -0
  211. package/src/scripts/routes/verify-routes.d.ts +60 -0
  212. package/src/scripts/routes/verify-routes.js +1121 -0
  213. package/src/scripts/routes/verify-routes.js.map +1 -0
  214. package/src/scripts/routes/verify-routes.ts +1511 -0
  215. package/src/scripts/services/config.d.ts +2 -0
  216. package/src/scripts/services/config.js +38 -0
  217. package/src/scripts/services/config.js.map +1 -0
  218. package/src/scripts/services/config.ts +60 -0
  219. package/src/scripts/services/migrate-services.d.ts +29 -0
  220. package/src/scripts/services/migrate-services.js +924 -0
  221. package/src/scripts/services/migrate-services.js.map +1 -0
  222. package/src/scripts/services/migrate-services.ts +1348 -0
  223. package/src/scripts/services/migration-diagnostic.d.ts +8 -0
  224. package/src/scripts/services/migration-diagnostic.js +2 -0
  225. package/src/scripts/services/migration-diagnostic.js.map +1 -0
  226. package/src/scripts/services/migration-diagnostic.ts +28 -0
  227. package/src/scripts/template/migrate-template.d.ts +16 -0
  228. package/src/scripts/template/migrate-template.js +349 -0
  229. package/src/scripts/template/migrate-template.js.map +1 -0
  230. package/src/scripts/template/migrate-template.ts +418 -0
  231. package/src/template-migration.d.ts +1 -0
  232. package/src/template-migration.js +2 -0
  233. package/src/template-migration.js.map +1 -0
  234. package/src/testing.d.ts +19 -0
  235. package/src/testing.js +2 -0
  236. package/src/testing.js.map +1 -0
  237. package/src/tsconfig.codemod.json +13 -0
@@ -0,0 +1,487 @@
1
+ import { relative } from 'node:path';
2
+ import { Node, Project, QuoteKind, SyntaxKind, } from 'ts-morph';
3
+ /**
4
+ * Migrates call-sites to the *named* craft primitives.
5
+ *
6
+ * The five primitives now take their name as first argument and resolve to the
7
+ * primitive reference itself. `craftComputed` / `craftMethod` already take a
8
+ * name and also return their reference directly:
9
+ *
10
+ * ```ts
11
+ * const users = yield* query({ loader }); // before
12
+ * const users = yield* query('users', { loader }); // after
13
+ *
14
+ * const handleFoo = craftMethod('handleFoo', fn); // unchanged
15
+ * ```
16
+ *
17
+ * The name is taken from the binding the call is assigned to:
18
+ *
19
+ * 1. `const X = <call>` → `const X = <call>` (the name literal is `'X'`).
20
+ * 2. `const X = craftUse(<call>)` → same, looking through `craftUse` / `yield*`.
21
+ * 3. Class fields and object properties keep the direct primitive reference.
22
+ * 4. For `craftComputed` / `craftMethod` the name literal already exists and
23
+ * wins; the binding is left unchanged.
24
+ *
25
+ * Anything the codemod cannot name — an inline call with no binding, an
26
+ * existing destructuring pattern — is left untouched and reported so it can be
27
+ * fixed by hand.
28
+ */
29
+ export const NAMED_PRIMITIVES = [
30
+ 'state',
31
+ 'query',
32
+ 'mutation',
33
+ 'asyncProcess',
34
+ 'queryParams',
35
+ ];
36
+ /** Helpers that already take a name literal; only their return shape changed. */
37
+ export const PRE_NAMED_HELPERS = ['craftComputed', 'craftMethod'];
38
+ export async function migrateNamedPrimitives({ paths, write = true, log = console.log, }) {
39
+ const project = new Project({
40
+ skipAddingFilesFromTsConfig: true,
41
+ manipulationSettings: { quoteKind: QuoteKind.Single },
42
+ });
43
+ project.addSourceFilesAtPaths(paths);
44
+ const changedFiles = [];
45
+ const unmigrated = [];
46
+ for (const sourceFile of project.getSourceFiles()) {
47
+ if (migrateFile(sourceFile, unmigrated)) {
48
+ changedFiles.push(relative(process.cwd(), sourceFile.getFilePath()));
49
+ }
50
+ }
51
+ if (write) {
52
+ await project.save();
53
+ }
54
+ log(`${write ? 'Migrated' : 'Would migrate'} ${changedFiles.length} file(s).`);
55
+ for (const file of changedFiles)
56
+ log(` ${file}`);
57
+ if (unmigrated.length > 0) {
58
+ log(`\n${unmigrated.length} call(s) need a manual name:`);
59
+ for (const entry of unmigrated) {
60
+ log(` ${entry.file}:${entry.line} ${entry.primitive} — ${entry.reason}`);
61
+ }
62
+ }
63
+ return { changedFiles, unmigrated };
64
+ }
65
+ function migrateFile(sourceFile, unmigrated) {
66
+ const primitives = collectImportedLocalNames(sourceFile);
67
+ if (primitives.size === 0)
68
+ return false;
69
+ let changed = false;
70
+ // Bottom-up so an edit never invalidates a not-yet-processed call above it.
71
+ const calls = findCreationCalls(sourceFile, primitives).sort((a, b) => b.getStart() - a.getStart());
72
+ for (const call of calls) {
73
+ const primitive = primitives.get(call.getExpression().getText());
74
+ const preNamed = PRE_NAMED_HELPERS.includes(primitive);
75
+ const declaredName = preNamed ? readNameLiteral(call, true) : undefined;
76
+ if (preNamed && !declaredName) {
77
+ report(unmigrated, call, primitive, 'name argument is not a literal');
78
+ continue;
79
+ }
80
+ if (preNamed && removeLegacyNamedProperty(call, preNamed)) {
81
+ changed = true;
82
+ continue;
83
+ }
84
+ if ((preNamed && declaredName) || (!preNamed && hasPrimitiveName(call))) {
85
+ if (rewriteLegacySingleBinding(call)) {
86
+ changed = true;
87
+ continue;
88
+ }
89
+ if (removeLegacyNamedProperty(call, preNamed)) {
90
+ changed = true;
91
+ continue;
92
+ }
93
+ report(unmigrated, call, primitive, 'already takes a name argument');
94
+ continue;
95
+ }
96
+ const target = findBindingTarget(call, preNamed);
97
+ if (!target) {
98
+ report(unmigrated, call, primitive, 'no binding to derive a name from — name it by hand');
99
+ continue;
100
+ }
101
+ const name = declaredName ?? target.name;
102
+ if (!preNamed) {
103
+ call.insertArgument(0, `'${name}'`);
104
+ }
105
+ if (target.kind === 'variable') {
106
+ target.rewriteToDestructuring(name);
107
+ }
108
+ else {
109
+ target.appendPropertyRead(name);
110
+ }
111
+ changed = true;
112
+ }
113
+ return changed;
114
+ }
115
+ /** Applies the named-primitive rewrite to an already loaded source file. */
116
+ export function migrateNamedPrimitivesInFile(sourceFile, unmigrated = []) {
117
+ return migrateFile(sourceFile, unmigrated);
118
+ }
119
+ function removeLegacyNamedProperty(call, preNamed) {
120
+ let node = call;
121
+ let parent = node.getParent();
122
+ while (parent) {
123
+ if (Node.isPropertyAccessExpression(parent) &&
124
+ parent.getExpression() === node &&
125
+ isLegacyNamedProperty(parent, call, preNamed)) {
126
+ parent.replaceWithText(node.getText());
127
+ return true;
128
+ }
129
+ if (Node.isParenthesizedExpression(parent) ||
130
+ Node.isYieldExpression(parent) ||
131
+ (Node.isCallExpression(parent) &&
132
+ parent.getExpression().getText() === 'craftUse' &&
133
+ parent.getArguments()[0] === node)) {
134
+ node = parent;
135
+ parent = parent.getParent();
136
+ continue;
137
+ }
138
+ break;
139
+ }
140
+ return false;
141
+ }
142
+ function rewriteLegacySingleBinding(call) {
143
+ let node = call;
144
+ let parent = node.getParent();
145
+ while (parent) {
146
+ if (Node.isVariableDeclaration(parent) &&
147
+ parent.getInitializer() === node) {
148
+ const nameNode = parent.getNameNode();
149
+ if (!Node.isObjectBindingPattern(nameNode))
150
+ return false;
151
+ const elements = nameNode.getElements();
152
+ if (elements.length !== 1)
153
+ return false;
154
+ const binding = elements[0];
155
+ if (!Node.isBindingElement(binding))
156
+ return false;
157
+ const bindingName = binding.getNameNode();
158
+ if (!Node.isIdentifier(bindingName))
159
+ return false;
160
+ nameNode.replaceWithText(bindingName.getText());
161
+ return true;
162
+ }
163
+ if (Node.isParenthesizedExpression(parent) ||
164
+ Node.isYieldExpression(parent) ||
165
+ (Node.isCallExpression(parent) &&
166
+ parent.getExpression().getText() === 'craftUse' &&
167
+ parent.getArguments()[0] === node)) {
168
+ node = parent;
169
+ parent = parent.getParent();
170
+ continue;
171
+ }
172
+ break;
173
+ }
174
+ return false;
175
+ }
176
+ const HOST_FACTORIES = new Set([
177
+ 'craftService',
178
+ 'craftComponent',
179
+ 'toCraftService',
180
+ 'craftGen',
181
+ ]);
182
+ /**
183
+ * Walks up from the creation call through the consumption wrappers (`yield*`,
184
+ * `craftUse(...)`, parentheses) to the binding that will hold the result.
185
+ */
186
+ function findBindingTarget(call, preNamed) {
187
+ let node = call;
188
+ let parent = node.getParent();
189
+ while (parent) {
190
+ if (Node.isPropertyAccessExpression(parent) &&
191
+ parent.getExpression() === node &&
192
+ isLegacyNamedProperty(parent, call, preNamed)) {
193
+ const propertyName = parent.getName();
194
+ parent.replaceWithText(node.getText());
195
+ return {
196
+ kind: 'property',
197
+ name: propertyName,
198
+ appendPropertyRead: () => undefined,
199
+ };
200
+ }
201
+ if (Node.isParenthesizedExpression(parent) ||
202
+ Node.isYieldExpression(parent)) {
203
+ node = parent;
204
+ parent = parent.getParent();
205
+ continue;
206
+ }
207
+ if (Node.isCallExpression(parent) &&
208
+ parent.getExpression().getText() === 'craftUse' &&
209
+ parent.getArguments()[0] === node) {
210
+ node = parent;
211
+ parent = parent.getParent();
212
+ continue;
213
+ }
214
+ break;
215
+ }
216
+ if (!parent)
217
+ return undefined;
218
+ if (Node.isVariableDeclaration(parent) && parent.getInitializer() === node) {
219
+ const nameNode = parent.getNameNode();
220
+ let name;
221
+ if (Node.isIdentifier(nameNode)) {
222
+ name = nameNode.getText();
223
+ }
224
+ else if (Node.isObjectBindingPattern(nameNode)) {
225
+ const elements = nameNode.getElements();
226
+ if (elements.length !== 1)
227
+ return undefined;
228
+ const binding = elements[0];
229
+ if (!Node.isBindingElement(binding))
230
+ return undefined;
231
+ const bindingName = binding.getNameNode();
232
+ if (!Node.isIdentifier(bindingName))
233
+ return undefined;
234
+ name = bindingName.getText();
235
+ nameNode.replaceWithText(name);
236
+ }
237
+ else {
238
+ return undefined;
239
+ }
240
+ return {
241
+ kind: 'variable',
242
+ name,
243
+ rewriteToDestructuring: () => undefined,
244
+ };
245
+ }
246
+ if ((Node.isPropertyDeclaration(parent) || Node.isPropertyAssignment(parent)) &&
247
+ parent.getInitializer() === node &&
248
+ isDriven(node, preNamed)) {
249
+ const nameNode = parent.getNameNode();
250
+ if (!Node.isIdentifier(nameNode))
251
+ return undefined;
252
+ return {
253
+ kind: 'property',
254
+ name: nameNode.getText(),
255
+ appendPropertyRead: () => undefined,
256
+ };
257
+ }
258
+ // `return yield* state(...)` as the whole body of a craftService factory has
259
+ // no local binding. Use the enclosing service name for the primitive name and
260
+ // keep returning the direct primitive reference.
261
+ if (isDriven(node, preNamed) &&
262
+ (Node.isReturnStatement(parent) ||
263
+ (Node.isArrowFunction(parent) && parent.getBody() === node))) {
264
+ const hostName = findEnclosingHostName(parent) ?? findEnclosingBindingName(parent);
265
+ if (!hostName)
266
+ return undefined;
267
+ return {
268
+ kind: 'property',
269
+ name: hostName,
270
+ appendPropertyRead: () => undefined,
271
+ };
272
+ }
273
+ // `craftService(meta, () => state(0, ...))` can now hand the primitive
274
+ // generator directly to the runtime. Only add the name argument; keep the
275
+ // arrow unchanged. The same applies to a route's
276
+ // `queryParams: () => queryParams(config)` field.
277
+ if (Node.isArrowFunction(parent) &&
278
+ parent.getBody() === node &&
279
+ !isDriven(node, preNamed)) {
280
+ const hostName = findEnclosingHostName(parent) ?? readOwningPropertyName(parent);
281
+ if (!hostName)
282
+ return undefined;
283
+ const arrow = parent;
284
+ return {
285
+ kind: 'property',
286
+ name: hostName,
287
+ appendPropertyRead: () => undefined,
288
+ };
289
+ }
290
+ return undefined;
291
+ }
292
+ function isLegacyNamedProperty(property, call, preNamed) {
293
+ const name = readNameLiteral(call, preNamed);
294
+ return name !== undefined && property.getName() === name;
295
+ }
296
+ /**
297
+ * `true` once the primitive generator has actually been driven — by `yield*` or
298
+ * `craftUse(...)`.
299
+ */
300
+ function isDriven(node, preNamed = false) {
301
+ if (preNamed)
302
+ return true;
303
+ if (Node.isYieldExpression(node))
304
+ return true;
305
+ return (Node.isCallExpression(node) && node.getExpression().getText() === 'craftUse');
306
+ }
307
+ /**
308
+ * Name of the nearest enclosing `craftService` / `craftComponent`, lower-cased
309
+ * on the first character (`'Counter'` → `'counter'`), used to name a primitive
310
+ * that is returned directly rather than bound to a variable.
311
+ */
312
+ function findEnclosingHostName(from) {
313
+ const HOSTS = HOST_FACTORIES;
314
+ let node = from;
315
+ while (node) {
316
+ if (Node.isCallExpression(node)) {
317
+ const callee = node.getExpression();
318
+ if (Node.isIdentifier(callee) && HOSTS.has(callee.getText())) {
319
+ for (const argument of node.getArguments()) {
320
+ if (Node.isStringLiteral(argument)) {
321
+ return uncapitalize(argument.getLiteralValue());
322
+ }
323
+ if (Node.isObjectLiteralExpression(argument)) {
324
+ const nameProperty = argument.getProperty('name');
325
+ if (nameProperty && Node.isPropertyAssignment(nameProperty)) {
326
+ const value = nameProperty.getInitializer();
327
+ if (value && Node.isStringLiteral(value)) {
328
+ return uncapitalize(value.getLiteralValue());
329
+ }
330
+ }
331
+ }
332
+ }
333
+ return undefined;
334
+ }
335
+ }
336
+ node = node.getParent();
337
+ }
338
+ return undefined;
339
+ }
340
+ /**
341
+ * Name of the property the given node is the initializer of, if any.
342
+ *
343
+ * Used for a route's `queryParams: () => queryParams(config)` field: there is
344
+ * no craft host around it to take a name from, so the field itself names the
345
+ * primitive (`queryParams('queryParams', config)`).
346
+ */
347
+ function readOwningPropertyName(node) {
348
+ const parent = node.getParent();
349
+ if (!parent ||
350
+ !(Node.isPropertyAssignment(parent) || Node.isPropertyDeclaration(parent))) {
351
+ return undefined;
352
+ }
353
+ if (parent.getInitializer() !== node)
354
+ return undefined;
355
+ const nameNode = parent.getNameNode();
356
+ return Node.isIdentifier(nameNode) ? nameNode.getText() : undefined;
357
+ }
358
+ /**
359
+ * Nearest enclosing `const X = ...` name, used when a primitive is returned
360
+ * from a plain factory (`const listQueryParams = () => craftUse(...)`) rather
361
+ * than bound directly or wrapped in a craft host.
362
+ */
363
+ function findEnclosingBindingName(from) {
364
+ let node = from;
365
+ while (node) {
366
+ if (Node.isVariableDeclaration(node)) {
367
+ const nameNode = node.getNameNode();
368
+ if (Node.isIdentifier(nameNode))
369
+ return nameNode.getText();
370
+ return undefined;
371
+ }
372
+ if (Node.isPropertyDeclaration(node) || Node.isPropertyAssignment(node)) {
373
+ const nameNode = node.getNameNode();
374
+ if (Node.isIdentifier(nameNode))
375
+ return nameNode.getText();
376
+ return undefined;
377
+ }
378
+ node = node.getParent();
379
+ }
380
+ return undefined;
381
+ }
382
+ function uncapitalize(value) {
383
+ return value.charAt(0).toLowerCase() + value.slice(1);
384
+ }
385
+ /**
386
+ * Whether one of the five primitives has *already* been migrated.
387
+ *
388
+ * Their first argument used to be the config, and a config can legitimately be
389
+ * a string (`state('2026-05-10 12:00', insertForm(...))`), so the literal alone
390
+ * proves nothing. A migrated call has an identifier-shaped name followed by the
391
+ * config it used to take alone.
392
+ */
393
+ function hasPrimitiveName(call) {
394
+ const first = call.getArguments()[0];
395
+ if (!first || !Node.isStringLiteral(first))
396
+ return false;
397
+ if (!/^[A-Za-z_$][\w$]*$/.test(first.getLiteralValue()))
398
+ return false;
399
+ return call.getArguments().length > 1;
400
+ }
401
+ /**
402
+ * The name a call already carries, if any.
403
+ *
404
+ * `acceptObjectForm` is only true for `craftComputed` / `craftMethod`, whose
405
+ * name may be given as `{ name: 'foo', providers: [...] }`. For the five
406
+ * primitives the first argument is the *config*, and `state({ name: 'romain',
407
+ * password: 'x' })` would otherwise look deceptively like a named call.
408
+ */
409
+ function readNameLiteral(call, acceptObjectForm) {
410
+ const first = call.getArguments()[0];
411
+ if (!first)
412
+ return undefined;
413
+ if (Node.isStringLiteral(first))
414
+ return first.getLiteralValue();
415
+ if (acceptObjectForm && Node.isObjectLiteralExpression(first)) {
416
+ const nameProperty = first.getProperty('name');
417
+ if (nameProperty && Node.isPropertyAssignment(nameProperty)) {
418
+ const value = nameProperty.getInitializer();
419
+ if (value && Node.isStringLiteral(value))
420
+ return value.getLiteralValue();
421
+ }
422
+ }
423
+ return undefined;
424
+ }
425
+ function report(unmigrated, call, primitive, reason) {
426
+ unmigrated.push({
427
+ file: relative(process.cwd(), call.getSourceFile().getFilePath()),
428
+ line: call.getStartLineNumber(),
429
+ primitive,
430
+ reason,
431
+ text: call.getText().slice(0, 120),
432
+ });
433
+ }
434
+ function collectImportedLocalNames(sourceFile) {
435
+ const targets = new Set([...NAMED_PRIMITIVES, ...PRE_NAMED_HELPERS]);
436
+ const localNames = new Map();
437
+ for (const importDeclaration of sourceFile.getImportDeclarations()) {
438
+ for (const specifier of importDeclaration.getNamedImports()) {
439
+ const original = specifier.getName();
440
+ if (targets.has(original)) {
441
+ localNames.set(specifier.getAliasNode()?.getText() ?? original, original);
442
+ }
443
+ }
444
+ }
445
+ return localNames;
446
+ }
447
+ function findCreationCalls(sourceFile, localNames) {
448
+ return sourceFile
449
+ .getDescendantsOfKind(SyntaxKind.CallExpression)
450
+ .filter((call) => {
451
+ const callee = call.getExpression();
452
+ if (!Node.isIdentifier(callee))
453
+ return false;
454
+ if (!localNames.has(callee.getText()))
455
+ return false;
456
+ // A creation call always takes a config; destructured readers such as
457
+ // `({ state }) => state().page` are argument-less.
458
+ if (call.getArguments().length === 0)
459
+ return false;
460
+ return !isShadowed(callee);
461
+ });
462
+ }
463
+ function isShadowed(identifier) {
464
+ const name = identifier.getText();
465
+ let node = identifier.getParent();
466
+ while (node) {
467
+ if (Node.isFunctionDeclaration(node) ||
468
+ Node.isFunctionExpression(node) ||
469
+ Node.isArrowFunction(node) ||
470
+ Node.isMethodDeclaration(node)) {
471
+ for (const parameter of node.getParameters()) {
472
+ const bindsName = parameter
473
+ .getDescendants()
474
+ .concat(parameter.getNameNode())
475
+ .some((descendant) => Node.isIdentifier(descendant) &&
476
+ descendant.getText() === name &&
477
+ (Node.isBindingElement(descendant.getParent()) ||
478
+ Node.isParameterDeclaration(descendant.getParent())));
479
+ if (bindsName)
480
+ return true;
481
+ }
482
+ }
483
+ node = node.getParent();
484
+ }
485
+ return false;
486
+ }
487
+ //# sourceMappingURL=migrate-named-primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-named-primitives.js","sourceRoot":"","sources":["../../../../../../libs/dev-tools/src/scripts/primitives/migrate-named-primitives.ts"],"names":[],"mappings":"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"}