@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Romain Geffrault
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,154 @@
1
+ # @craft-ts/dev-tools
2
+
3
+ Development tools for CraftTS: ESLint rules, codemods, route automation, and
4
+ static dependency-graph tooling.
5
+
6
+ ## Installation
7
+
8
+ ```bash
9
+ npm install -D @craft-ts/dev-tools@beta
10
+ ```
11
+
12
+ For coding agents, also install
13
+ [`@craft-ts/mcp`](https://www.npmjs.com/package/@craft-ts/mcp) and follow the
14
+ [coding-agent guide](https://craft-ts.github.io/craft/resources/ai-agents).
15
+
16
+ ## Create a project
17
+
18
+ Create a framework-independent CraftTS application from scratch. The command
19
+ asks for the Effect v4 choice first in interactive mode because it changes the
20
+ dependencies, generated API boundary, and agent skills:
21
+
22
+ ```bash
23
+ npx craft create my-app
24
+ npx craft create my-app --effect=v4 --agents=codex,cursor,cloud-code
25
+ npx craft create my-app --effect=none --agents=none
26
+ ```
27
+
28
+ The starter includes a routed page, a typed API call, flat-config ESLint, unit
29
+ tests, a graph-wide `architecture/` suite, Playwright E2E tests, and README
30
+ commands for every quality gate. `codex`, `cursor`, `claude-code`, and the
31
+ `cloud-code`/`gemini` aliases install the corresponding project instructions.
32
+
33
+ ## Project configuration
34
+
35
+ Create `craft-dev-tools.config.ts` when a project needs shared codemod or
36
+ service-migration options:
37
+
38
+ ```ts
39
+ import { defineCraftDevToolsConfig } from '@craft-ts/dev-tools';
40
+
41
+ export default defineCraftDevToolsConfig({
42
+ serviceMigration: {
43
+ overrides: [
44
+ {
45
+ file: 'src/legacy-api.ts',
46
+ symbol: 'LegacyApi',
47
+ name: 'Api',
48
+ providedIn: 'manuallyProvidedAtRoot',
49
+ strategy: 'craftService',
50
+ },
51
+ ],
52
+ },
53
+ });
54
+ ```
55
+
56
+ ## Migration tooling
57
+
58
+ `craft-migrate` applies the codemods in dependency order and reports decisions
59
+ that need human review:
60
+
61
+ ```bash
62
+ craft-migrate --project tsconfig.app.json --root src --dry-run
63
+ craft-migrate --project tsconfig.app.json --root src --write
64
+ craft-migrate --project tsconfig.app.json --root src --check --fail-on-manual
65
+ ```
66
+
67
+ The individual stages are available for focused work:
68
+
69
+ ```bash
70
+ craft-migrate-primitives --project tsconfig.app.json --root src --write
71
+ craft-migrate-services --project tsconfig.app.json --root src --write
72
+ craft-migrate-routes --project tsconfig.app.json --root src --write
73
+ craft-migrate-components --project tsconfig.app.json --root src --write
74
+ craft-migrate-architecture --project tsconfig.app.json --root src --write
75
+ ```
76
+
77
+ The migration keeps ambiguous code intact and emits a diagnostic instead of
78
+ guessing business or lifecycle semantics. Use `--json <path>` for a report.
79
+
80
+ For standalone markup conversion:
81
+
82
+ ```bash
83
+ printf '<section><h2>Hello</h2></section>' | craft-migrate-template
84
+ ```
85
+
86
+ ## Route automation
87
+
88
+ The `craft` façade writes ordinary editable TypeScript while keeping route
89
+ metadata, lazy loading, and dependency proofs aligned:
90
+
91
+ ```bash
92
+ npx craft route add /users/:userId \
93
+ --component src/users/user-detail.ts#UserDetail
94
+ npx craft route add /users/:userId --create-component users/user-detail
95
+ npx craft route split \
96
+ --parent src/app.routes.ts#appRoutes \
97
+ --prefix users \
98
+ --target src/users/users.routes.ts
99
+ ```
100
+
101
+ Use `--dry-run`, `--yes`, and `--json` for scripted workflows. The generator
102
+ adds `componentDeps`, `withRetry`, parent-mount assertions, and the file-level
103
+ route DI proof where applicable.
104
+
105
+ ## Static dependency graph
106
+
107
+ `craft-graph` analyses one TypeScript program and writes JSON, Mermaid, or HTML
108
+ artifacts:
109
+
110
+ ```bash
111
+ craft-graph \
112
+ --project apps/demo/tsconfig.graph.json \
113
+ --out craft-dependency-graph \
114
+ --format both
115
+ ```
116
+
117
+ The graph records services, primitives, route ownership, HTTP endpoints,
118
+ browser boundaries, and dependency edges. It can be extended with a catalog for
119
+ backend or other TypeScript sources.
120
+
121
+ ## ESLint rules
122
+
123
+ ```ts
124
+ import craftRules from '@craft-ts/dev-tools/eslint-rules';
125
+
126
+ export default [
127
+ {
128
+ files: ['**/*.ts'],
129
+ ...craftRules.configs.recommended,
130
+ },
131
+ ];
132
+ ```
133
+
134
+ The rules cover, among other things:
135
+
136
+ - declarative template blocks and granular reactive bindings;
137
+ - yieldable reads, writes, methods, and resource triggers;
138
+ - transport access through `CraftHttpClient`;
139
+ - typed route loading, dependency proofs, and exception handling;
140
+ - pure computed values, browser boundaries, and accessibility contracts.
141
+
142
+ Run `eslint --fix` after changing generated dependency aliases or route
143
+ metadata. Keep the generated aliases and proofs in the source file so the
144
+ compiler and architecture suite can verify them.
145
+
146
+ ## Editor and AI workflows
147
+
148
+ The same ESLint fixes and codemods can be called by editors and coding agents.
149
+ For a complete workflow, see:
150
+
151
+ - [Routing setup](https://craft-ts.github.io/craft/guide/routing/setup)
152
+ - [ESLint rules](https://craft-ts.github.io/craft/guide/routing/eslint-rules)
153
+ - [Migration](https://craft-ts.github.io/craft/resources/migration)
154
+ - [Coding agents](https://craft-ts.github.io/craft/resources/ai-agents)
@@ -0,0 +1,26 @@
1
+ {
2
+ "generators": {
3
+ "route": {
4
+ "factory": "./src/generators/route/generator#routeGenerator",
5
+ "schema": "./src/generators/route/schema.json",
6
+ "description": "Add a type-safe CraftTS route."
7
+ },
8
+ "route-split": {
9
+ "factory": "./src/generators/route/generator#routeSplitGenerator",
10
+ "schema": "./src/generators/route/split-schema.json",
11
+ "description": "Split CraftTS routes into a lazy collection."
12
+ }
13
+ },
14
+ "schematics": {
15
+ "route": {
16
+ "factory": "./src/generators/route/compat#routeSchematic",
17
+ "schema": "./src/generators/route/schema.json",
18
+ "description": "Add a type-safe CraftTS route."
19
+ },
20
+ "route-split": {
21
+ "factory": "./src/generators/route/compat#routeSplitSchematic",
22
+ "schema": "./src/generators/route/split-schema.json",
23
+ "description": "Split CraftTS routes into a lazy collection."
24
+ }
25
+ }
26
+ }
package/package.json ADDED
@@ -0,0 +1,119 @@
1
+ {
2
+ "name": "@craft-ts/dev-tools",
3
+ "version": "0.7.0-beta.13",
4
+ "description": "Development tools for craft-ts: ESLint configs, ESLint rules, and codemods",
5
+ "author": "Romain Geffrault",
6
+ "license": "MIT",
7
+ "homepage": "https://craft-ts.github.io/craft/",
8
+ "bugs": {
9
+ "url": "https://github.com/craft-ts/craft-ts/issues"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/craft-ts/craft-ts.git"
14
+ },
15
+ "type": "module",
16
+ "main": "./src/index.js",
17
+ "types": "./src/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./src/index.d.ts",
21
+ "default": "./src/index.js"
22
+ },
23
+ "./eslint-rules": {
24
+ "types": "./src/eslint-rules/index.d.cts",
25
+ "default": "./src/eslint-rules/index.cjs"
26
+ },
27
+ "./template-migration": {
28
+ "types": "./src/template-migration.d.ts",
29
+ "default": "./src/template-migration.js"
30
+ },
31
+ "./package.json": "./package.json",
32
+ "./testing": {
33
+ "types": "./src/testing.d.ts",
34
+ "default": "./src/testing.js"
35
+ },
36
+ "./dependency-graph": {
37
+ "types": "./src/scripts/dependency-graph.d.ts",
38
+ "default": "./src/scripts/dependency-graph.js"
39
+ },
40
+ "./architecture-graph": {
41
+ "types": "./src/scripts/architecture-graph.d.ts",
42
+ "default": "./src/scripts/architecture-graph.js"
43
+ }
44
+ },
45
+ "generators": "./generators.json",
46
+ "schematics": "./generators.json",
47
+ "bin": {
48
+ "craft": "./src/bin/craft.js",
49
+ "craft-brand": "./src/bin/craft-brand.js",
50
+ "craft-migrate": "./src/bin/craft-migrate.js",
51
+ "craft-migrate-primitives": "./src/bin/craft-migrate-primitives.js",
52
+ "craft-migrate-services": "./src/bin/craft-migrate-services.js",
53
+ "craft-migrate-routes": "./src/bin/craft-migrate-routes.js",
54
+ "craft-migrate-components": "./src/bin/craft-migrate-components.js",
55
+ "craft-migrate-architecture": "./src/bin/craft-migrate-architecture.js",
56
+ "craft-migrate-template": "./src/bin/craft-migrate-template.js",
57
+ "craft-graph": "./src/bin/craft-graph.js",
58
+ "craft-architecture-check": "./src/bin/craft-architecture-check.js"
59
+ },
60
+ "files": [
61
+ "generators.json",
62
+ "src/**/*",
63
+ "README.md",
64
+ "!src/**/*.spec.ts",
65
+ "!src/**/*.spec.js",
66
+ "!src/**/*.spec.d.ts",
67
+ "!src/**/*.test.ts",
68
+ "!src/**/*.test.js",
69
+ "!src/**/*.test.d.ts",
70
+ "!tests/**"
71
+ ],
72
+ "dependencies": {
73
+ "@nx/devkit": "^22.3.1",
74
+ "tslib": "^2.3.0",
75
+ "ts-morph": "^24.0.0",
76
+ "ts-node": "^10.9.2",
77
+ "typescript": "6.0.3"
78
+ },
79
+ "peerDependencies": {
80
+ "@angular-eslint/eslint-plugin": ">=21.0.0",
81
+ "@nx/angular": ">=21.0.0 <24.0.0",
82
+ "@schematics/angular": ">=20.0.0 <23.0.0",
83
+ "@typescript-eslint/eslint-plugin": ">=8.0.0",
84
+ "eslint": ">=9.0.0"
85
+ },
86
+ "peerDependenciesMeta": {
87
+ "@angular-eslint/eslint-plugin": {
88
+ "optional": true
89
+ },
90
+ "@nx/angular": {
91
+ "optional": true
92
+ },
93
+ "@schematics/angular": {
94
+ "optional": true
95
+ },
96
+ "@typescript-eslint/eslint-plugin": {
97
+ "optional": true
98
+ },
99
+ "eslint": {
100
+ "optional": true
101
+ }
102
+ },
103
+ "engines": {
104
+ "node": ">=20.19.0"
105
+ },
106
+ "publishConfig": {
107
+ "access": "public"
108
+ },
109
+ "keywords": [
110
+ "craft-ts",
111
+ "angular",
112
+ "codemod",
113
+ "eslint",
114
+ "eslint-config",
115
+ "eslint-plugin",
116
+ "typescript"
117
+ ],
118
+ "module": "./src/index.js"
119
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ import { analyzeDependencyGraph, } from '../scripts/dependency-graph.js';
3
+ import { assertArchitecture, } from '../scripts/architecture-graph.js';
4
+ function parseArgs(argv) {
5
+ const options = {
6
+ rootDir: process.cwd(),
7
+ target: 'development',
8
+ };
9
+ for (let index = 0; index < argv.length; index += 1) {
10
+ const argument = argv[index];
11
+ if (argument === '--root') {
12
+ options.rootDir = argv[++index] ?? options.rootDir;
13
+ continue;
14
+ }
15
+ if (argument === '--project' || argument === '--tsconfig') {
16
+ options.tsConfigFilePath = argv[++index];
17
+ continue;
18
+ }
19
+ if (argument === '--target') {
20
+ const target = argv[++index];
21
+ if (target !== 'development' && target !== 'production') {
22
+ throw new Error('--target must be development or production.');
23
+ }
24
+ options.target = target;
25
+ continue;
26
+ }
27
+ if (argument === '--help' || argument === '-h') {
28
+ console.log(`Usage: craft-architecture-check [options]
29
+
30
+ Options:
31
+ --root <dir> Workspace root. Defaults to cwd.
32
+ --project, --tsconfig <path> TypeScript project configuration.
33
+ --target <target> development or production. Defaults to development.
34
+ `);
35
+ process.exit(0);
36
+ }
37
+ throw new Error(`Unknown argument: ${argument}`);
38
+ }
39
+ return options;
40
+ }
41
+ try {
42
+ const options = parseArgs(process.argv.slice(2));
43
+ const graph = analyzeDependencyGraph(options);
44
+ assertArchitecture(graph, { target: options.target });
45
+ console.log(`Craft architecture check passed for ${options.target}: ${graph.nodes.length} nodes, ${graph.edges.length} edges.`);
46
+ }
47
+ catch (error) {
48
+ console.error(error instanceof Error ? error.message : String(error));
49
+ process.exitCode = 1;
50
+ }
51
+ //# sourceMappingURL=craft-architecture-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-architecture-check.js","sourceRoot":"","sources":["../../../../../libs/dev-tools/src/bin/craft-architecture-check.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,GAEnB,MAAM,kCAAkC,CAAC;AAQ1C,SAAS,SAAS,CAAC,IAAuB;IACxC,MAAM,OAAO,GAAY;QACvB,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;QACtB,MAAM,EAAE,aAAa;KACtB,CAAC;IACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC;YACnD,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1D,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YACzC,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC;;;;;;CAMjB,CAAC,CAAC;YACG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC9C,kBAAkB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CACT,uCAAuC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,KAAK,CAAC,MAAM,SAAS,CACnH,CAAC;AACJ,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { runAngularBrandCodemod } from '../scripts/angular-brand-codemod.js';
3
+ runAngularBrandCodemod({
4
+ log: console.log,
5
+ }).catch((error) => {
6
+ console.error('Error running codemod:', error);
7
+ process.exit(1);
8
+ });
9
+ //# sourceMappingURL=craft-brand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-brand.js","sourceRoot":"","sources":["../../../../../libs/dev-tools/src/bin/craft-brand.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,sBAAsB,CAAC;IACrB,GAAG,EAAE,OAAO,CAAC,GAAG;CACjB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env node
2
+ import { writeDependencyGraph, } from '../scripts/dependency-graph.js';
3
+ function parseArgs(argv) {
4
+ const options = {
5
+ rootDir: process.cwd(),
6
+ outputPath: 'craft-dependency-graph',
7
+ format: 'both',
8
+ };
9
+ for (let index = 0; index < argv.length; index += 1) {
10
+ const argument = argv[index];
11
+ switch (argument) {
12
+ case '--project':
13
+ case '--tsconfig':
14
+ options.tsConfigFilePath = argv[++index];
15
+ break;
16
+ case '--root':
17
+ options.rootDir = argv[++index];
18
+ break;
19
+ case '--out':
20
+ options.outputPath = argv[++index];
21
+ break;
22
+ case '--format': {
23
+ const format = argv[++index];
24
+ if (format !== 'json' &&
25
+ format !== 'mermaid' &&
26
+ format !== 'html' &&
27
+ format !== 'both' &&
28
+ format !== 'all') {
29
+ throw new Error('--format must be json, mermaid, html, both, or all.');
30
+ }
31
+ options.format = format;
32
+ break;
33
+ }
34
+ case '--include':
35
+ options.include = [...(options.include ?? []), argv[++index]];
36
+ break;
37
+ case '--help':
38
+ case '-h':
39
+ printHelp();
40
+ process.exit(0);
41
+ break;
42
+ default:
43
+ throw new Error(`Unknown argument: ${argument}`);
44
+ }
45
+ }
46
+ return options;
47
+ }
48
+ function printHelp() {
49
+ console.log(`Usage: craft-graph [options]
50
+
51
+ Builds a static CraftTS dependency graph from TypeScript and type metadata.
52
+ No runtime instrumentation is used.
53
+
54
+ Options:
55
+ --project, --tsconfig <path> TypeScript application config.
56
+ --root <dir> Workspace root. Defaults to cwd.
57
+ --out <path> Output basename. Defaults to craft-dependency-graph.
58
+ --format <format> json, mermaid, html, both, or all. Defaults to both.
59
+ json/both/all also write a .architecture.ts catalog.
60
+ html creates one self-contained visualizer file.
61
+ --include <text> Restrict analysis to source paths containing text.
62
+ `);
63
+ }
64
+ writeDependencyGraph(parseArgs(process.argv.slice(2)))
65
+ .then((graph) => {
66
+ console.log(`Craft graph written: ${graph.nodes.length} nodes, ${graph.edges.length} edges.`);
67
+ })
68
+ .catch((error) => {
69
+ console.error(error instanceof Error ? error.message : error);
70
+ process.exitCode = 1;
71
+ });
72
+ //# sourceMappingURL=craft-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-graph.js","sourceRoot":"","sources":["../../../../../libs/dev-tools/src/bin/craft-graph.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,oBAAoB,GAErB,MAAM,gCAAgC,CAAC;AAExC,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAgC;QAC3C,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;QACtB,UAAU,EAAE,wBAAwB;QACpC,MAAM,EAAE,MAAM;KACf,CAAC;IACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,WAAW,CAAC;YACjB,KAAK,YAAY;gBACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,OAAO;gBACV,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC7B,IACE,MAAM,KAAK,MAAM;oBACjB,MAAM,KAAK,SAAS;oBACpB,MAAM,KAAK,MAAM;oBACjB,MAAM,KAAK,MAAM;oBACjB,MAAM,KAAK,KAAK,EAChB,CAAC;oBACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACzE,CAAC;gBACD,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxB,MAAM;YACR,CAAC;YACD,KAAK,WAAW;gBACd,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC9D,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,SAAS,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;CAab,CAAC,CAAC;AACH,CAAC;AAED,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACnD,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;IACd,OAAO,CAAC,GAAG,CACT,wBAAwB,KAAK,CAAC,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,KAAK,CAAC,MAAM,SAAS,CACjF,CAAC;AACJ,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env node
2
+ import { runArchitectureMigration } from '../scripts/architecture/migrate-architecture.js';
3
+ function parseArgs(argv) {
4
+ const options = {};
5
+ for (let index = 0; index < argv.length; index += 1) {
6
+ const argument = argv[index];
7
+ switch (argument) {
8
+ case '--project':
9
+ case '--tsconfig':
10
+ options.tsConfigFilePath = argv[++index];
11
+ break;
12
+ case '--root':
13
+ options.rootDir = argv[++index];
14
+ break;
15
+ case '--dry-run':
16
+ options.write = false;
17
+ break;
18
+ case '--write':
19
+ options.write = true;
20
+ break;
21
+ case '--check':
22
+ options.check = true;
23
+ break;
24
+ case '--json':
25
+ if (argv[index + 1] && !argv[index + 1].startsWith('-'))
26
+ options.jsonFilePath = argv[++index];
27
+ else
28
+ options.json = true;
29
+ break;
30
+ case '--help':
31
+ printHelp();
32
+ process.exit(0);
33
+ break;
34
+ default:
35
+ if (argument.startsWith('-'))
36
+ throw new Error(`Unknown argument: ${argument}`);
37
+ throw new Error(`Unexpected argument: ${argument}`);
38
+ }
39
+ }
40
+ return options;
41
+ }
42
+ function printHelp() {
43
+ console.log(`Usage: craft-migrate-architecture [options]
44
+
45
+ Scaffolds the baseline CraftTS architecture test suite (Vitest, Node).
46
+
47
+ Options:
48
+ --project, --tsconfig <path> Application tsconfig.
49
+ --root <dir> Source root. Defaults to cwd.
50
+ --dry-run Analyze without writing (default).
51
+ --write Write the architecture suite, overwriting it.
52
+ --check Fail when the suite is missing or drifted.
53
+ --json [path] Print JSON, or write it to path.
54
+ `);
55
+ }
56
+ runArchitectureMigration(parseArgs(process.argv.slice(2)))
57
+ .then((result) => {
58
+ process.exitCode = result.exitCode;
59
+ })
60
+ .catch((error) => {
61
+ console.error(error);
62
+ process.exitCode = 1;
63
+ });
64
+ //# sourceMappingURL=craft-migrate-architecture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-migrate-architecture.js","sourceRoot":"","sources":["../../../../../libs/dev-tools/src/bin/craft-migrate-architecture.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAI3F,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAY,EAAE,CAAC;IAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,WAAW,CAAC;YACjB,KAAK,YAAY;gBACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,WAAW;gBACd,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;gBACtB,MAAM;YACR,KAAK,SAAS;gBACZ,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;gBACrB,MAAM;YACR,KAAK,SAAS;gBACZ,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;gBACrB,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;oBACrD,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;;oBAClC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;gBACzB,MAAM;YACR,KAAK,QAAQ;gBACX,SAAS,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR;gBACE,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;CAWb,CAAC,CAAC;AACH,CAAC;AAED,wBAAwB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACvD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;IACf,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACrC,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env node
2
+ import { runComponentsMigration } from '../scripts/components/migrate-components.js';
3
+ function parseArgs(argv) {
4
+ const options = { files: [] };
5
+ const files = [];
6
+ for (let index = 0; index < argv.length; index += 1) {
7
+ const argument = argv[index];
8
+ switch (argument) {
9
+ case '--project':
10
+ case '--tsconfig':
11
+ options.tsConfigFilePath = argv[++index];
12
+ break;
13
+ case '--root':
14
+ options.rootDir = argv[++index];
15
+ break;
16
+ case '--dry-run':
17
+ options.write = false;
18
+ break;
19
+ case '--write':
20
+ options.write = true;
21
+ break;
22
+ case '--check':
23
+ options.check = true;
24
+ break;
25
+ case '--json':
26
+ options.json = true;
27
+ break;
28
+ case '--fail-on-manual':
29
+ options.failOnManual = true;
30
+ break;
31
+ case '--help':
32
+ printHelp();
33
+ process.exit(0);
34
+ break;
35
+ default:
36
+ if (argument.startsWith('-'))
37
+ throw new Error(`Unknown argument: ${argument}`);
38
+ files.push(argument);
39
+ }
40
+ }
41
+ options.files = files;
42
+ return options;
43
+ }
44
+ function printHelp() {
45
+ console.log(`Usage: craft-migrate-components [files...] [options]
46
+
47
+ Migrates the legacy component(...) factory to craftComponent(name, ...).
48
+
49
+ Options:
50
+ --project, --tsconfig <path> Application tsconfig.
51
+ --root <dir> Source root. Defaults to cwd.
52
+ --dry-run Analyze without writing (default).
53
+ --write Write migrated files.
54
+ --check Fail while legacy component calls remain.
55
+ --json Print JSON.
56
+ --fail-on-manual Fail when manual diagnostics are emitted.
57
+ `);
58
+ }
59
+ runComponentsMigration(parseArgs(process.argv.slice(2)))
60
+ .then((result) => {
61
+ process.exitCode = result.exitCode;
62
+ })
63
+ .catch((error) => {
64
+ console.error(error);
65
+ process.exitCode = 1;
66
+ });
67
+ //# sourceMappingURL=craft-migrate-components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-migrate-components.js","sourceRoot":"","sources":["../../../../../libs/dev-tools/src/bin/craft-migrate-components.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAIrF,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,WAAW,CAAC;YACjB,KAAK,YAAY;gBACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,WAAW;gBACd,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;gBACtB,MAAM;YACR,KAAK,SAAS;gBACZ,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;gBACrB,MAAM;YACR,KAAK,SAAS;gBACZ,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;gBACrB,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;gBACpB,MAAM;YACR,KAAK,kBAAkB;gBACrB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,QAAQ;gBACX,SAAS,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR;gBACE,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;gBACnD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYb,CAAC,CAAC;AACH,CAAC;AAED,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACrD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;IACf,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACrC,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};