@craft-ng/dev-tools 0.5.0-beta.5 → 0.6.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +198 -23
  2. package/generators.json +26 -0
  3. package/package.json +23 -2
  4. package/src/bin/craft-migrate-primitives.d.ts +2 -0
  5. package/src/bin/craft-migrate-primitives.js +71 -0
  6. package/src/bin/craft-migrate-primitives.js.map +1 -0
  7. package/src/bin/craft-migrate-routes.d.ts +2 -0
  8. package/src/bin/craft-migrate-routes.js +77 -0
  9. package/src/bin/craft-migrate-routes.js.map +1 -0
  10. package/src/bin/craft-migrate-services.d.ts +2 -0
  11. package/src/bin/craft-migrate-services.js +75 -0
  12. package/src/bin/craft-migrate-services.js.map +1 -0
  13. package/src/bin/craft-migrate.d.ts +2 -0
  14. package/src/bin/craft-migrate.js +90 -0
  15. package/src/bin/craft-migrate.js.map +1 -0
  16. package/src/bin/craft.d.ts +2 -0
  17. package/src/bin/craft.js +166 -0
  18. package/src/bin/craft.js.map +1 -0
  19. package/src/eslint-rules/craft-computed-name-match.cjs +8 -125
  20. package/src/eslint-rules/craft-method-name-match.cjs +8 -166
  21. package/src/eslint-rules/craft-name-match-utils.cjs +179 -0
  22. package/src/eslint-rules/craft-signal-source-name-match.cjs +8 -0
  23. package/src/eslint-rules/craft-source-name-match.cjs +8 -0
  24. package/src/eslint-rules/global-exception-registry-match.cjs +78 -13
  25. package/src/eslint-rules/index.cjs +10 -2
  26. package/src/eslint-rules/require-cascade-route-di-check.cjs +223 -0
  27. package/src/eslint-rules/require-exception-component-di-check.cjs +66 -10
  28. package/src/eslint-rules/require-lazy-load-with-retry.cjs +148 -0
  29. package/src/eslint-rules/require-primitive-generator-unwrap.cjs +267 -0
  30. package/src/generators/route/compat.d.ts +3 -0
  31. package/src/generators/route/compat.js +6 -0
  32. package/src/generators/route/compat.js.map +1 -0
  33. package/src/generators/route/generator.d.ts +31 -0
  34. package/src/generators/route/generator.js +434 -0
  35. package/src/generators/route/generator.js.map +1 -0
  36. package/src/generators/route/schema.json +50 -0
  37. package/src/generators/route/split-schema.json +19 -0
  38. package/src/index.d.ts +9 -0
  39. package/src/index.js +9 -0
  40. package/src/index.js.map +1 -1
  41. package/src/scripts/angular-brand-codemod.d.ts +17 -0
  42. package/src/scripts/angular-brand-codemod.js +44 -8
  43. package/src/scripts/angular-brand-codemod.js.map +1 -1
  44. package/src/scripts/angular-brand-codemod.spec.ts +3 -3
  45. package/src/scripts/angular-brand-codemod.ts +78 -7
  46. package/src/scripts/migrate.d.ts +32 -0
  47. package/src/scripts/migrate.js +67 -0
  48. package/src/scripts/migrate.js.map +1 -0
  49. package/src/scripts/migrate.ts +128 -0
  50. package/src/scripts/migration-workspace.d.ts +2 -0
  51. package/src/scripts/migration-workspace.js +72 -0
  52. package/src/scripts/migration-workspace.js.map +1 -0
  53. package/src/scripts/migration-workspace.ts +93 -0
  54. package/src/scripts/primitives/migrate-primitive-generators.d.ts +27 -0
  55. package/src/scripts/primitives/migrate-primitive-generators.js +315 -0
  56. package/src/scripts/primitives/migrate-primitive-generators.js.map +1 -0
  57. package/src/scripts/primitives/migrate-primitive-generators.ts +402 -0
  58. package/src/scripts/primitives/migrate-primitives.d.ts +27 -0
  59. package/src/scripts/primitives/migrate-primitives.js +386 -0
  60. package/src/scripts/primitives/migrate-primitives.js.map +1 -0
  61. package/src/scripts/primitives/migrate-primitives.spec.ts +322 -0
  62. package/src/scripts/primitives/migrate-primitives.ts +601 -0
  63. package/src/scripts/primitives/migration-diagnostic.d.ts +8 -0
  64. package/src/scripts/primitives/migration-diagnostic.js +2 -0
  65. package/src/scripts/primitives/migration-diagnostic.js.map +1 -0
  66. package/src/scripts/primitives/migration-diagnostic.ts +14 -0
  67. package/src/scripts/routes/migrate-routes.d.ts +34 -0
  68. package/src/scripts/routes/migrate-routes.js +669 -0
  69. package/src/scripts/routes/migrate-routes.js.map +1 -0
  70. package/src/scripts/routes/migrate-routes.spec.ts +264 -0
  71. package/src/scripts/routes/migrate-routes.ts +895 -0
  72. package/src/scripts/routes/migration-diagnostic.d.ts +16 -0
  73. package/src/scripts/routes/migration-diagnostic.js +2 -0
  74. package/src/scripts/routes/migration-diagnostic.js.map +1 -0
  75. package/src/scripts/routes/migration-diagnostic.ts +25 -0
  76. package/src/scripts/routes/route-command.d.ts +75 -0
  77. package/src/scripts/routes/route-command.js +1187 -0
  78. package/src/scripts/routes/route-command.js.map +1 -0
  79. package/src/scripts/routes/route-command.spec.ts +553 -0
  80. package/src/scripts/routes/route-command.ts +1790 -0
  81. package/src/scripts/services/config.d.ts +2 -0
  82. package/src/scripts/services/config.js +39 -0
  83. package/src/scripts/services/config.js.map +1 -0
  84. package/src/scripts/services/config.ts +60 -0
  85. package/src/scripts/services/migrate-services.d.ts +29 -0
  86. package/src/scripts/services/migrate-services.js +929 -0
  87. package/src/scripts/services/migrate-services.js.map +1 -0
  88. package/src/scripts/services/migrate-services.spec.ts +761 -0
  89. package/src/scripts/services/migrate-services.ts +1333 -0
  90. package/src/scripts/services/migration-diagnostic.d.ts +8 -0
  91. package/src/scripts/services/migration-diagnostic.js +2 -0
  92. package/src/scripts/services/migration-diagnostic.js.map +1 -0
  93. package/src/scripts/services/migration-diagnostic.ts +28 -0
  94. package/src/eslint-rules/require-track-on-dependent-primitives.cjs +0 -219
package/README.md CHANGED
@@ -10,27 +10,45 @@ Development tools for ng-craft: ESLint configs, ESLint rules, and codemods.
10
10
  npm install -D @craft-ng/dev-tools
11
11
  ```
12
12
 
13
- ## Angular Brand Codemod Config
13
+ ## Dev-tools configuration
14
14
 
15
- `craft-brand` can load a typed project config from `craft-brand.config.ts`.
15
+ `craft-brand` and the migrations load a typed project config from
16
+ `craft-dev-tools.config.ts`. The legacy `craft-brand.config.ts` format remains
17
+ supported.
16
18
 
17
19
  ```ts
18
- import { defineAngularBrandConfig } from '@craft-ng/dev-tools';
19
-
20
- export default defineAngularBrandConfig({
21
- importAugmentations: [
22
- {
23
- match: {
24
- module: '@ngx-translate/core',
25
- symbols: ['TranslatePipe'],
26
- metadata: ['imports'],
20
+ import { defineCraftDevToolsConfig } from '@craft-ng/dev-tools';
21
+
22
+ export default defineCraftDevToolsConfig({
23
+ brand: {
24
+ importAugmentations: [
25
+ {
26
+ match: {
27
+ module: '@ngx-translate/core',
28
+ symbols: ['TranslatePipe'],
29
+ metadata: ['imports'],
30
+ },
31
+ deps: [
32
+ {
33
+ key: 'TranslateService',
34
+ symbol: 'TranslateService',
35
+ typeText: 'TranslateService<unknown>',
36
+ },
37
+ ],
27
38
  },
28
- deps: [{ key: 'TranslateService', symbol: 'TranslateService' }],
29
- missingProvider: [
30
- { key: 'TranslateService', symbol: 'TranslateService' },
31
- ],
32
- },
33
- ],
39
+ ],
40
+ },
41
+ serviceMigration: {
42
+ overrides: [
43
+ {
44
+ file: 'src/app/legacy-api.service.ts',
45
+ symbol: 'LegacyApiService',
46
+ name: 'Api',
47
+ scope: 'manuallyProvidedAtRoot',
48
+ strategy: 'craftService',
49
+ },
50
+ ],
51
+ },
34
52
  });
35
53
  ```
36
54
 
@@ -57,12 +75,9 @@ Discovery behavior:
57
75
  - `brand-angular-deps-match` can autofix an existing `GenDeps_*` alias in the current file
58
76
  - `component-test-gen-deps-match` verifies component test helpers use the matching `GenDeps_*` alias
59
77
 
60
- Current scope:
61
-
62
- - `TypeScript` config file only
63
- - declarative rules only
64
- - matching only from Angular `imports` and `hostDirectives`
65
- - no arbitrary `typeText` generation and no helper-local `typeof injectX` expressions
78
+ `typeText` supports generic dependency spellings that cannot be inferred from
79
+ Angular metadata. Service overrides match by file/module/symbol; later matching
80
+ entries take precedence.
66
81
 
67
82
  Example CLI usage:
68
83
 
@@ -71,6 +86,164 @@ craft-brand --root apps/demo/src
71
86
  craft-brand --root apps/demo/src --config ./craft-brand.config.ts
72
87
  ```
73
88
 
89
+ ## Angular services migration
90
+
91
+ Run services before routes so generated `GenDeps` and route provider names see
92
+ the craft helpers:
93
+
94
+ ```bash
95
+ craft-migrate --project apps/my-app/tsconfig.app.json --root apps/my-app/src --dry-run
96
+ craft-migrate --project apps/my-app/tsconfig.app.json --root apps/my-app/src --write
97
+ ```
98
+
99
+ `craft-migrate` runs primitives, services, then routes and can emit one combined
100
+ report with `--json [path]`. The individual commands remain available for
101
+ targeted migrations:
102
+
103
+ ```bash
104
+ craft-migrate-primitives --project apps/my-app/tsconfig.app.json --root apps/my-app/src --dry-run
105
+ craft-migrate-primitives --project apps/my-app/tsconfig.app.json --root apps/my-app/src --write
106
+ craft-migrate-services --project apps/my-app/tsconfig.app.json --root apps/my-app/src --dry-run
107
+ craft-migrate-services --project apps/my-app/tsconfig.app.json --root apps/my-app/src --write
108
+ craft-migrate-routes --project apps/my-app/tsconfig.app.json --root apps/my-app/src --write
109
+ ng build my-app
110
+ ```
111
+
112
+ `--write` runs ESLint on touched files by default; use `--no-eslint` only when
113
+ the caller owns that step. `--json [path]`, `--check`, and `--fail-on-manual`
114
+ support CI and staged migrations. Ambiguous classes are retained and receive an
115
+ idempotent `.craft.ts` companion containing `CRAFT_IMPLEMENTATION_REQUIRED`.
116
+ The companion uses a valid inferred scope and consumers import its generated
117
+ helpers, so a manual service rewrite no longer leaves broken imports behind.
118
+
119
+ `craft-migrate-primitives` runs before service migration. It converts simple
120
+ Angular `signal(...)` calls to the craft `state(...)` primitive and reports
121
+ signal-form migration points. Signal forms are intentionally diagnostic-first:
122
+ `form(...)` must become `state(..., insertForm(...))`, but field paths and
123
+ validators change shape. For async validators, the script reports the
124
+ `validateAsync(...) + rxResource(...)` pattern so it can be rewritten as a local
125
+ `query(...)` triggered by the field value plus `cAsyncValidate(queryRef, ...)`.
126
+
127
+ The service migration also:
128
+
129
+ - preserves method type parameters and avoids property/parameter shadowing
130
+ - removes replaced Angular service imports
131
+ - converts simple `httpResource(...)` calls to `query(...)` backed by
132
+ `CraftHttpClient.request(...)`
133
+ - converts simple writable service methods using `HttpClient.post/put/patch/delete`
134
+ into generator operations backed by `CraftHttpClient`
135
+ - when a component already performs a simple `.subscribe()`, creates a
136
+ component-local `mutation(...)` and replaces the subscription trigger with
137
+ `.mutate(...)`; complex subscriptions keep a manual diagnostic so callback
138
+ semantics are not silently moved to a shared service lifecycle
139
+ - rewrites simple `chain(resource)` dependencies to `resource.value()` and
140
+ reports only complex chains that require a semantic decision
141
+ - disables `@typescript-eslint/explicit-function-return-type` in the nearest
142
+ flat ESLint config, because generated craft callbacks rely on inference
143
+
144
+ ## Angular routes migration
145
+
146
+ `craft-migrate-routes` converts exported `Routes` arrays to `craftRoutes`, wraps
147
+ statically resolvable component routes with `craftRoute`, generates or reuses
148
+ their `GenDeps_*` type, and adds the file-level DI check.
149
+
150
+ For new routes, use the `craft` façade rather than the migration command:
151
+
152
+ ```bash
153
+ npx craft route add /users/:userId --component src/app/users/user-detail.ts#UserDetailComponent
154
+ npx craft route add /users/:userId --create-component users/user-detail
155
+ npx craft route add /legacy --redirect-to /users --parent src/app/app.routes.ts#appRoutes
156
+ npx craft route split --parent src/app/app.routes.ts#appRoutes --prefix users --target src/app/users/users.routes.ts
157
+ ```
158
+
159
+ The same route engine is also published as a native Nx generator and as an
160
+ Angular CLI schematic. Both use a virtual workspace tree, so their host CLI
161
+ provides project-name resolution and `--dry-run` without direct filesystem
162
+ writes:
163
+
164
+ ```bash
165
+ # Nx workspace
166
+ npx nx g @craft-ng/dev-tools:route /users/:userId \
167
+ --project=my-app \
168
+ --create-component=users/UserDetail
169
+
170
+ npx nx g @craft-ng/dev-tools:route-split \
171
+ --project=my-app \
172
+ --parent=apps/my-app/src/app/app.routes.ts#appRoutes \
173
+ --prefix=users \
174
+ --target=apps/my-app/src/app/users/users.routes.ts
175
+
176
+ # Angular CLI workspace
177
+ npx ng g @craft-ng/dev-tools:route /users/:userId \
178
+ --project=my-app \
179
+ --create-component=users/UserDetail
180
+ ```
181
+
182
+ Without route target options, the generator asks for the target kind. Component
183
+ creation then asks for the path relative to the application's `src/app` base,
184
+ followed by the component name. Before mutating the virtual tree it prints the
185
+ planned `CREATE` and `UPDATE` operations and asks for confirmation. Use `--yes`
186
+ for non-interactive automation; Nx/Angular `--dry-run` prints the preview without
187
+ asking for confirmation or writing files.
188
+
189
+ When `--parent` is omitted in an interactive terminal, the generator discovers
190
+ every `craftRoutes(...)` collection in the selected Angular project and lists
191
+ its exported routes name, source file, and prefix. Select `0` to retain route
192
+ path-based auto-detection, or choose a collection number. Scripted calls can
193
+ still pass `--parent=path/to/routes.ts#routesName` directly.
194
+
195
+ Pass `--skip-validation` when another task will run lint and the Angular build.
196
+ Otherwise validation runs after the virtual tree has been committed. Nx
197
+ workspaces compose the native `@nx/angular:component` generator; Angular CLI
198
+ workspaces compose the local `@schematics/angular:component` schematic. New
199
+ components use an inline template and inline styles, so the generator creates a
200
+ single component `.ts` file rather than separate `.ts`, `.html`, and `.css`
201
+ files. Component filenames are always normalized to kebab-case: a component
202
+ name such as `DemoPage` produces `demo-page.ts` while retaining the `DemoPage`
203
+ class name.
204
+
205
+ The add command defaults to a lazy routes file per feature and generates
206
+ `componentDeps`, `withRetry`, the cascade DI proof, exception assertion,
207
+ `.withParent`, and the parent mount assertion. Both commands print their plan
208
+ before writing. `--dry-run`, `--yes`, `--json`, `--project`, `--parent`, and
209
+ `--feature-file` support scripted usage. After writing, ESLint autofix and the
210
+ project TypeScript diagnostics run automatically; failed validation leaves the
211
+ changes in place and returns a non-zero exit code with diagnostics.
212
+ Component creation uses the local Angular CLI in an `angular.json` workspace,
213
+ or the local Nx Angular schematic in an `nx.json` workspace.
214
+
215
+ Start with a dry run:
216
+
217
+ ```bash
218
+ craft-migrate-routes \
219
+ --project apps/my-app/tsconfig.app.json \
220
+ --root apps/my-app/src/app \
221
+ --dry-run
222
+ ```
223
+
224
+ Then write the deterministic changes and let the project rules refresh their
225
+ generated assertions:
226
+
227
+ ```bash
228
+ craft-migrate-routes --project apps/my-app/tsconfig.app.json --root apps/my-app/src/app --write
229
+ eslint --fix "apps/my-app/src/**/*.ts"
230
+ ng build my-app
231
+ ```
232
+
233
+ When the root collection is fully migratable, the routes migration also updates
234
+ `app.config.ts` to `craftAppConfig(...)` + `provideCraftRouter(routes.toRoutes())`
235
+ and wraps the bootstrap config with `toApplicationConfig(...)`. Collections
236
+ containing Angular guards or nested `children` are kept as Angular `Routes`
237
+ instead of being half-converted; the CLI emits manual diagnostics and leaves
238
+ `app.config.ts` unchanged until the root route tree is craft-compatible.
239
+
240
+ The migration deliberately reports guards, dynamic paths/redirects, ambiguous
241
+ components, inherited providers, and route splits instead of guessing their
242
+ business semantics. Use `--fail-on-manual` to make these diagnostics fail the
243
+ command, `--json <path>` for a machine-readable report, and `--check` in CI to
244
+ reject remaining legacy collections. Lazy collections can declare their mount
245
+ context with `--parent-mount <path>` and `--parent-names <name,...>`.
246
+
74
247
  ```bash
75
248
  import craftRules from '@craft-ng/dev-tools/eslint-rules';
76
249
 
@@ -88,6 +261,8 @@ export default [
88
261
  'craft-ng/prefer-craft-service': 'error',
89
262
  'craft-ng/prefer-craft-http-client': 'error',
90
263
  'craft-ng/prefer-browser-boundaries': 'error',
264
+ 'craft-ng/require-lazy-load-with-retry': 'error',
265
+ 'craft-ng/require-cascade-route-di-check': 'error',
91
266
  }
92
267
  }
93
268
  ];
@@ -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 Craft NG route."
7
+ },
8
+ "route-split": {
9
+ "factory": "./src/generators/route/generator#routeSplitGenerator",
10
+ "schema": "./src/generators/route/split-schema.json",
11
+ "description": "Split Craft NG 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 Craft NG route."
19
+ },
20
+ "route-split": {
21
+ "factory": "./src/generators/route/compat#routeSplitSchematic",
22
+ "schema": "./src/generators/route/split-schema.json",
23
+ "description": "Split Craft NG routes into a lazy collection."
24
+ }
25
+ }
26
+ }
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "@craft-ng/dev-tools",
3
- "version": "0.5.0-beta.5",
3
+ "version": "0.6.0-beta.1",
4
4
  "description": "Development tools for ng-craft: ESLint configs, ESLint rules, and codemods",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/ng-angular-stack/ng-craft.git"
8
+ },
5
9
  "type": "module",
6
10
  "main": "./src/index.js",
7
11
  "types": "./src/index.d.ts",
@@ -16,14 +20,23 @@
16
20
  },
17
21
  "./package.json": "./package.json"
18
22
  },
23
+ "generators": "./generators.json",
24
+ "schematics": "./generators.json",
19
25
  "bin": {
20
- "craft-brand": "./src/bin/craft-brand.js"
26
+ "craft": "./src/bin/craft.js",
27
+ "craft-brand": "./src/bin/craft-brand.js",
28
+ "craft-migrate": "./src/bin/craft-migrate.js",
29
+ "craft-migrate-primitives": "./src/bin/craft-migrate-primitives.js",
30
+ "craft-migrate-services": "./src/bin/craft-migrate-services.js",
31
+ "craft-migrate-routes": "./src/bin/craft-migrate-routes.js"
21
32
  },
22
33
  "files": [
34
+ "generators.json",
23
35
  "src/**/*",
24
36
  "README.md"
25
37
  ],
26
38
  "dependencies": {
39
+ "@nx/devkit": "^22.3.1",
27
40
  "tslib": "^2.3.0",
28
41
  "ts-morph": "^24.0.0",
29
42
  "ts-node": "^10.9.2",
@@ -31,6 +44,8 @@
31
44
  },
32
45
  "peerDependencies": {
33
46
  "@angular-eslint/eslint-plugin": ">=21.0.0",
47
+ "@nx/angular": ">=21.0.0 <24.0.0",
48
+ "@schematics/angular": ">=20.0.0 <23.0.0",
34
49
  "@typescript-eslint/eslint-plugin": ">=8.0.0",
35
50
  "eslint": ">=9.0.0"
36
51
  },
@@ -38,6 +53,12 @@
38
53
  "@angular-eslint/eslint-plugin": {
39
54
  "optional": true
40
55
  },
56
+ "@nx/angular": {
57
+ "optional": true
58
+ },
59
+ "@schematics/angular": {
60
+ "optional": true
61
+ },
41
62
  "@typescript-eslint/eslint-plugin": {
42
63
  "optional": true
43
64
  },
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env node
2
+ import { runPrimitivesMigration } from '../scripts/primitives/migrate-primitives.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
+ 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 '--fail-on-manual':
31
+ options.failOnManual = true;
32
+ break;
33
+ case '--no-eslint':
34
+ options.eslint = false;
35
+ break;
36
+ case '--help':
37
+ printHelp();
38
+ process.exit(0);
39
+ break;
40
+ default:
41
+ if (argument.startsWith('-'))
42
+ throw new Error(`Unknown argument: ${argument}`);
43
+ files.push(argument);
44
+ }
45
+ }
46
+ options.files = files;
47
+ return options;
48
+ }
49
+ function printHelp() {
50
+ console.log(`Usage: craft-migrate-primitives [files...] [options]
51
+
52
+ Options:
53
+ --project <path> Application tsconfig.
54
+ --root <dir> Source root. Defaults to cwd.
55
+ --dry-run Analyze without writing (default).
56
+ --write Write migrated files.
57
+ --check Fail while Angular signals or signal forms remain.
58
+ --json [path] Print JSON, or write it to path.
59
+ --fail-on-manual Fail when manual diagnostics are emitted.
60
+ --no-eslint Do not run ESLint --fix after --write.
61
+ `);
62
+ }
63
+ runPrimitivesMigration(parseArgs(process.argv.slice(2)))
64
+ .then((result) => {
65
+ process.exitCode = result.exitCode;
66
+ })
67
+ .catch((error) => {
68
+ console.error(error);
69
+ process.exitCode = 1;
70
+ });
71
+ //# sourceMappingURL=craft-migrate-primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-migrate-primitives.js","sourceRoot":"","sources":["../../../../../libs/dev-tools/src/bin/craft-migrate-primitives.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAIrF,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAe,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC1C,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;gBACd,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,kBAAkB;gBACrB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,aAAa;gBAChB,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;gBACvB,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;;;;;;;;;;;CAWb,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 {};
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+ import { runRoutesMigration } from '../scripts/routes/migrate-routes.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 '--root':
10
+ options.rootDir = argv[++index];
11
+ break;
12
+ case '--project':
13
+ case '--tsconfig':
14
+ options.tsConfigFilePath = argv[++index];
15
+ break;
16
+ case '--write':
17
+ options.write = true;
18
+ break;
19
+ case '--dry-run':
20
+ options.write = false;
21
+ break;
22
+ case '--check':
23
+ options.check = true;
24
+ break;
25
+ case '--collection-name':
26
+ options.collectionName = argv[++index];
27
+ break;
28
+ case '--parent-mount':
29
+ options.parentMount = argv[++index];
30
+ break;
31
+ case '--parent-names':
32
+ options.parentNames = argv[++index].split(',').filter(Boolean);
33
+ break;
34
+ case '--json':
35
+ options.jsonFilePath = argv[++index];
36
+ break;
37
+ case '--fail-on-manual':
38
+ options.failOnManual = true;
39
+ break;
40
+ case '--help':
41
+ printHelp();
42
+ process.exit(0);
43
+ break;
44
+ default:
45
+ if (argument.startsWith('-'))
46
+ throw new Error(`Unknown argument: ${argument}`);
47
+ files.push(argument);
48
+ }
49
+ }
50
+ options.files = files;
51
+ return options;
52
+ }
53
+ function printHelp() {
54
+ console.log(`Usage: craft-migrate-routes [files...] [options]
55
+
56
+ Options:
57
+ --root <dir> Source root. Defaults to cwd.
58
+ --project, --tsconfig <path> Application tsconfig.
59
+ --dry-run Analyze and print without writing (default).
60
+ --write Write migrated files.
61
+ --check Fail when legacy Routes collections remain.
62
+ --collection-name <name> Override the inferred craftRoutes name.
63
+ --parent-mount <path> Pin the collection with ParentRoutes<path>.
64
+ --parent-names <a,b> Named providers inherited at the mount point.
65
+ --json <path> Write the complete migration report as JSON.
66
+ --fail-on-manual Fail when manual diagnostics are emitted.
67
+ `);
68
+ }
69
+ runRoutesMigration(parseArgs(process.argv.slice(2)))
70
+ .then((result) => {
71
+ process.exitCode = result.exitCode;
72
+ })
73
+ .catch((error) => {
74
+ console.error(error);
75
+ process.exitCode = 1;
76
+ });
77
+ //# sourceMappingURL=craft-migrate-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-migrate-routes.js","sourceRoot":"","sources":["../../../../../libs/dev-tools/src/bin/craft-migrate-routes.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAIzE,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAe,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC1C,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,QAAQ;gBACX,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,WAAW,CAAC;YACjB,KAAK,YAAY;gBACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM;YACR,KAAK,SAAS;gBACZ,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;gBACrB,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,mBAAmB;gBACtB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACvC,MAAM;YACR,KAAK,gBAAgB;gBACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACpC,MAAM;YACR,KAAK,gBAAgB;gBACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC/D,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACrC,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;oBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;gBAC/E,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;;;;;;;;;;;;;CAab,CAAC,CAAC;AACH,CAAC;AAED,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACjD,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,75 @@
1
+ #!/usr/bin/env node
2
+ import { runServicesMigration } from '../scripts/services/migrate-services.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
+ options.tsConfigFilePath = argv[++index];
11
+ break;
12
+ case '--root':
13
+ options.rootDir = argv[++index];
14
+ break;
15
+ case '--config':
16
+ options.configFilePath = argv[++index];
17
+ break;
18
+ case '--dry-run':
19
+ options.write = false;
20
+ break;
21
+ case '--write':
22
+ options.write = true;
23
+ break;
24
+ case '--check':
25
+ options.check = true;
26
+ break;
27
+ case '--json':
28
+ if (argv[index + 1] && !argv[index + 1].startsWith('-'))
29
+ options.jsonFilePath = argv[++index];
30
+ else
31
+ options.json = true;
32
+ break;
33
+ case '--fail-on-manual':
34
+ options.failOnManual = true;
35
+ break;
36
+ case '--no-eslint':
37
+ options.eslint = false;
38
+ break;
39
+ case '--help':
40
+ printHelp();
41
+ process.exit(0);
42
+ break;
43
+ default:
44
+ if (argument.startsWith('-'))
45
+ throw new Error(`Unknown argument: ${argument}`);
46
+ files.push(argument);
47
+ }
48
+ }
49
+ options.files = files;
50
+ return options;
51
+ }
52
+ function printHelp() {
53
+ console.log(`Usage: craft-migrate-services [files...] [options]
54
+
55
+ Options:
56
+ --project <path> Application tsconfig.
57
+ --root <dir> Source root. Defaults to cwd.
58
+ --config <path> craft-dev-tools.config.ts override.
59
+ --dry-run Analyze without writing (default).
60
+ --write Write migrated and companion files.
61
+ --check Fail while legacy services remain.
62
+ --json [path] Print JSON, or write it to path.
63
+ --fail-on-manual Fail when manual diagnostics are emitted.
64
+ --no-eslint Do not run ESLint --fix after --write.
65
+ `);
66
+ }
67
+ runServicesMigration(parseArgs(process.argv.slice(2)))
68
+ .then((result) => {
69
+ process.exitCode = result.exitCode;
70
+ })
71
+ .catch((error) => {
72
+ console.error(error);
73
+ process.exitCode = 1;
74
+ });
75
+ //# sourceMappingURL=craft-migrate-services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft-migrate-services.js","sourceRoot":"","sources":["../../../../../libs/dev-tools/src/bin/craft-migrate-services.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAI/E,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAe,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC1C,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;gBACd,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,UAAU;gBACb,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACvC,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,kBAAkB;gBACrB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,aAAa;gBAChB,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;gBACvB,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,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACnD,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 {};