@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.
- package/LICENSE +21 -0
- package/README.md +154 -0
- package/generators.json +26 -0
- package/package.json +119 -0
- package/src/bin/craft-architecture-check.d.ts +2 -0
- package/src/bin/craft-architecture-check.js +51 -0
- package/src/bin/craft-architecture-check.js.map +1 -0
- package/src/bin/craft-brand.d.ts +2 -0
- package/src/bin/craft-brand.js +9 -0
- package/src/bin/craft-brand.js.map +1 -0
- package/src/bin/craft-graph.d.ts +2 -0
- package/src/bin/craft-graph.js +72 -0
- package/src/bin/craft-graph.js.map +1 -0
- package/src/bin/craft-migrate-architecture.d.ts +2 -0
- package/src/bin/craft-migrate-architecture.js +64 -0
- package/src/bin/craft-migrate-architecture.js.map +1 -0
- package/src/bin/craft-migrate-components.d.ts +2 -0
- package/src/bin/craft-migrate-components.js +67 -0
- package/src/bin/craft-migrate-components.js.map +1 -0
- package/src/bin/craft-migrate-primitives.d.ts +2 -0
- package/src/bin/craft-migrate-primitives.js +71 -0
- package/src/bin/craft-migrate-primitives.js.map +1 -0
- package/src/bin/craft-migrate-routes.d.ts +2 -0
- package/src/bin/craft-migrate-routes.js +77 -0
- package/src/bin/craft-migrate-routes.js.map +1 -0
- package/src/bin/craft-migrate-services.d.ts +2 -0
- package/src/bin/craft-migrate-services.js +75 -0
- package/src/bin/craft-migrate-services.js.map +1 -0
- package/src/bin/craft-migrate-template.d.ts +2 -0
- package/src/bin/craft-migrate-template.js +68 -0
- package/src/bin/craft-migrate-template.js.map +1 -0
- package/src/bin/craft-migrate.d.ts +2 -0
- package/src/bin/craft-migrate.js +91 -0
- package/src/bin/craft-migrate.js.map +1 -0
- package/src/bin/craft.d.ts +2 -0
- package/src/bin/craft.js +318 -0
- package/src/bin/craft.js.map +1 -0
- package/src/eslint-rules/anchor-has-href.cjs +35 -0
- package/src/eslint-rules/app-start-registry-match.cjs +355 -0
- package/src/eslint-rules/button-has-type.cjs +50 -0
- package/src/eslint-rules/control-has-accessible-name.cjs +56 -0
- package/src/eslint-rules/craft-component-name-match.cjs +8 -0
- package/src/eslint-rules/craft-computed-name-match.cjs +63 -0
- package/src/eslint-rules/craft-css-token-registry.cjs +17 -0
- package/src/eslint-rules/craft-css-var-naming.cjs +18 -0
- package/src/eslint-rules/craft-css-vars-contract.cjs +34 -0
- package/src/eslint-rules/craft-directive-name-match.cjs +8 -0
- package/src/eslint-rules/craft-method-name-match.cjs +8 -0
- package/src/eslint-rules/craft-name-match-utils.cjs +179 -0
- package/src/eslint-rules/craft-primitive-context.cjs +46 -0
- package/src/eslint-rules/craft-signal-source-name-match.cjs +8 -0
- package/src/eslint-rules/craft-source-name-match.cjs +8 -0
- package/src/eslint-rules/craft-styles-scope-safe.cjs +25 -0
- package/src/eslint-rules/css-rule-utils.cjs +109 -0
- package/src/eslint-rules/global-exception-registry-match.cjs +562 -0
- package/src/eslint-rules/heading-has-content.cjs +31 -0
- package/src/eslint-rules/html-helpers.cjs +115 -0
- package/src/eslint-rules/hyperscript-walk.cjs +249 -0
- package/src/eslint-rules/iframe-has-title.cjs +26 -0
- package/src/eslint-rules/img-has-alt.cjs +28 -0
- package/src/eslint-rules/index.cjs +209 -0
- package/src/eslint-rules/index.d.cts +5 -0
- package/src/eslint-rules/label-has-associated-control.cjs +67 -0
- package/src/eslint-rules/no-async-await.cjs +46 -0
- package/src/eslint-rules/no-craft-computed-side-effects.cjs +301 -0
- package/src/eslint-rules/no-craft-use-in-template.cjs +89 -0
- package/src/eslint-rules/no-craft-use.cjs +42 -0
- package/src/eslint-rules/no-direct-temporal-globals.cjs +73 -0
- package/src/eslint-rules/no-effect-in-params.cjs +265 -0
- package/src/eslint-rules/no-effect-outside-loaders.cjs +3 -0
- package/src/eslint-rules/no-ephemeral-template-form-state.cjs +131 -0
- package/src/eslint-rules/no-hardcoded-design-values.cjs +15 -0
- package/src/eslint-rules/no-heading-level-skip.cjs +101 -0
- package/src/eslint-rules/no-imperative-craft-resource-trigger.cjs +291 -0
- package/src/eslint-rules/no-important-in-component-styles.cjs +12 -0
- package/src/eslint-rules/no-injection-token.cjs +173 -0
- package/src/eslint-rules/no-invalid-insertion-pipe.cjs +162 -0
- package/src/eslint-rules/no-manual-route-provider-list.cjs +85 -0
- package/src/eslint-rules/no-noninteractive-element-interactions.cjs +66 -0
- package/src/eslint-rules/no-positive-tabindex.cjs +44 -0
- package/src/eslint-rules/no-redundant-primitive-insertion.cjs +361 -0
- package/src/eslint-rules/no-render-writes.cjs +106 -0
- package/src/eslint-rules/no-throw.cjs +132 -0
- package/src/eslint-rules/no-transition-actions.cjs +133 -0
- package/src/eslint-rules/no-type-assertions-in-template.cjs +211 -0
- package/src/eslint-rules/no-widened-route-provider-context.cjs +39 -0
- package/src/eslint-rules/prefer-browser-boundaries.cjs +92 -0
- package/src/eslint-rules/prefer-craft-http-transport.cjs +103 -0
- package/src/eslint-rules/prefer-craft-template-blocks.cjs +492 -0
- package/src/eslint-rules/prefer-direct-yieldable-callback.cjs +105 -0
- package/src/eslint-rules/prefer-named-html-helpers.cjs +33 -0
- package/src/eslint-rules/prefer-query-method-over-state-trigger.cjs +282 -0
- package/src/eslint-rules/prefer-relative-heading.cjs +43 -0
- package/src/eslint-rules/provide-host-name-match-component.cjs +455 -0
- package/src/eslint-rules/recommended-config.cjs +77 -0
- package/src/eslint-rules/require-assert-exhaustive-route-exceptions.cjs +259 -0
- package/src/eslint-rules/require-cascade-route-di-check.cjs +223 -0
- package/src/eslint-rules/require-child-route-mount-check.cjs +224 -0
- package/src/eslint-rules/require-component-monitoring.cjs +212 -0
- package/src/eslint-rules/require-craft-exception-handler.cjs +142 -0
- package/src/eslint-rules/require-craft-method-for-yieldable-callback.cjs +236 -0
- package/src/eslint-rules/require-craft-resource-trigger-yield.cjs +209 -0
- package/src/eslint-rules/require-effect-adapters.cjs +86 -0
- package/src/eslint-rules/require-exception-component-di-check.cjs +314 -0
- package/src/eslint-rules/require-focus-visible.cjs +36 -0
- package/src/eslint-rules/require-interactive-local-name.cjs +105 -0
- package/src/eslint-rules/require-lazy-load-with-retry.cjs +148 -0
- package/src/eslint-rules/require-outlet-heading-section.cjs +70 -0
- package/src/eslint-rules/require-pending-component-di-check.cjs +490 -0
- package/src/eslint-rules/require-primitive-context.cjs +156 -0
- package/src/eslint-rules/require-primitive-derived-property.cjs +598 -0
- package/src/eslint-rules/require-primitive-generator-unwrap.cjs +274 -0
- package/src/eslint-rules/require-reactive-template-bindings.cjs +305 -0
- package/src/eslint-rules/require-reduced-motion.cjs +38 -0
- package/src/eslint-rules/require-route-heading-outline.cjs +166 -0
- package/src/eslint-rules/require-yieldable-insertion-write.cjs +98 -0
- package/src/eslint-rules/require-yieldable-reactive-read.cjs +102 -0
- package/src/eslint-rules/require-yieldable-template-method.cjs +424 -0
- package/src/eslint-rules/role-has-required-aria.cjs +38 -0
- package/src/eslint-rules/server-function-client-match.cjs +283 -0
- package/src/eslint-rules/target-blank-noopener.cjs +31 -0
- package/src/eslint-rules/template-element-name-unique.cjs +124 -0
- package/src/eslint-rules/valid-aria.cjs +38 -0
- package/src/generators/route/compat.d.ts +3 -0
- package/src/generators/route/compat.js +6 -0
- package/src/generators/route/compat.js.map +1 -0
- package/src/generators/route/generator.d.ts +31 -0
- package/src/generators/route/generator.js +402 -0
- package/src/generators/route/generator.js.map +1 -0
- package/src/generators/route/schema.json +50 -0
- package/src/generators/route/split-schema.json +19 -0
- package/src/index.d.ts +21 -0
- package/src/index.js +23 -0
- package/src/index.js.map +1 -0
- package/src/scripts/angular-brand-codemod.d.ts +139 -0
- package/src/scripts/angular-brand-codemod.js +2318 -0
- package/src/scripts/angular-brand-codemod.js.map +1 -0
- package/src/scripts/angular-brand-codemod.ts +3985 -0
- package/src/scripts/architecture/migrate-architecture.d.ts +14 -0
- package/src/scripts/architecture/migrate-architecture.js +534 -0
- package/src/scripts/architecture/migrate-architecture.js.map +1 -0
- package/src/scripts/architecture/migrate-architecture.ts +653 -0
- package/src/scripts/architecture-graph.d.ts +368 -0
- package/src/scripts/architecture-graph.js +2191 -0
- package/src/scripts/architecture-graph.js.map +1 -0
- package/src/scripts/architecture-graph.ts +3136 -0
- package/src/scripts/components/migrate-components.d.ts +20 -0
- package/src/scripts/components/migrate-components.js +163 -0
- package/src/scripts/components/migrate-components.js.map +1 -0
- package/src/scripts/components/migrate-components.ts +227 -0
- package/src/scripts/components/migration-diagnostic.d.ts +7 -0
- package/src/scripts/components/migration-diagnostic.js +2 -0
- package/src/scripts/components/migration-diagnostic.js.map +1 -0
- package/src/scripts/components/migration-diagnostic.ts +8 -0
- package/src/scripts/create/create-project.d.ts +20 -0
- package/src/scripts/create/create-project.js +783 -0
- package/src/scripts/create/create-project.js.map +1 -0
- package/src/scripts/create/create-project.ts +849 -0
- package/src/scripts/data-flow-graph.d.ts +36 -0
- package/src/scripts/data-flow-graph.js +186 -0
- package/src/scripts/data-flow-graph.js.map +1 -0
- package/src/scripts/data-flow-graph.ts +240 -0
- package/src/scripts/dependency-graph.d.ts +152 -0
- package/src/scripts/dependency-graph.js +4456 -0
- package/src/scripts/dependency-graph.js.map +1 -0
- package/src/scripts/dependency-graph.ts +5908 -0
- package/src/scripts/effect-dependency-graph.d.ts +89 -0
- package/src/scripts/effect-dependency-graph.js +487 -0
- package/src/scripts/effect-dependency-graph.js.map +1 -0
- package/src/scripts/effect-dependency-graph.ts +630 -0
- package/src/scripts/migrate.d.ts +37 -0
- package/src/scripts/migrate.js +98 -0
- package/src/scripts/migrate.js.map +1 -0
- package/src/scripts/migrate.ts +162 -0
- package/src/scripts/migration-workspace.d.ts +2 -0
- package/src/scripts/migration-workspace.js +67 -0
- package/src/scripts/migration-workspace.js.map +1 -0
- package/src/scripts/migration-workspace.ts +93 -0
- package/src/scripts/primitives/migrate-named-primitives.d.ts +50 -0
- package/src/scripts/primitives/migrate-named-primitives.js +487 -0
- package/src/scripts/primitives/migrate-named-primitives.js.map +1 -0
- package/src/scripts/primitives/migrate-named-primitives.ts +627 -0
- package/src/scripts/primitives/migrate-primitive-generators.d.ts +30 -0
- package/src/scripts/primitives/migrate-primitive-generators.js +309 -0
- package/src/scripts/primitives/migrate-primitive-generators.js.map +1 -0
- package/src/scripts/primitives/migrate-primitive-generators.ts +410 -0
- package/src/scripts/primitives/migrate-primitives.d.ts +27 -0
- package/src/scripts/primitives/migrate-primitives.js +427 -0
- package/src/scripts/primitives/migrate-primitives.js.map +1 -0
- package/src/scripts/primitives/migrate-primitives.ts +655 -0
- package/src/scripts/primitives/migrate-yieldable-reactive-reads.d.ts +23 -0
- package/src/scripts/primitives/migrate-yieldable-reactive-reads.js +382 -0
- package/src/scripts/primitives/migrate-yieldable-reactive-reads.js.map +1 -0
- package/src/scripts/primitives/migrate-yieldable-reactive-reads.ts +499 -0
- package/src/scripts/primitives/migration-diagnostic.d.ts +8 -0
- package/src/scripts/primitives/migration-diagnostic.js +2 -0
- package/src/scripts/primitives/migration-diagnostic.js.map +1 -0
- package/src/scripts/primitives/migration-diagnostic.ts +15 -0
- package/src/scripts/routes/migrate-routes.d.ts +34 -0
- package/src/scripts/routes/migrate-routes.js +657 -0
- package/src/scripts/routes/migrate-routes.js.map +1 -0
- package/src/scripts/routes/migrate-routes.ts +895 -0
- package/src/scripts/routes/migration-diagnostic.d.ts +16 -0
- package/src/scripts/routes/migration-diagnostic.js +2 -0
- package/src/scripts/routes/migration-diagnostic.js.map +1 -0
- package/src/scripts/routes/migration-diagnostic.ts +25 -0
- package/src/scripts/routes/route-command.d.ts +75 -0
- package/src/scripts/routes/route-command.js +1169 -0
- package/src/scripts/routes/route-command.js.map +1 -0
- package/src/scripts/routes/route-command.ts +1807 -0
- package/src/scripts/routes/verify-routes.d.ts +60 -0
- package/src/scripts/routes/verify-routes.js +1121 -0
- package/src/scripts/routes/verify-routes.js.map +1 -0
- package/src/scripts/routes/verify-routes.ts +1511 -0
- package/src/scripts/services/config.d.ts +2 -0
- package/src/scripts/services/config.js +38 -0
- package/src/scripts/services/config.js.map +1 -0
- package/src/scripts/services/config.ts +60 -0
- package/src/scripts/services/migrate-services.d.ts +29 -0
- package/src/scripts/services/migrate-services.js +924 -0
- package/src/scripts/services/migrate-services.js.map +1 -0
- package/src/scripts/services/migrate-services.ts +1348 -0
- package/src/scripts/services/migration-diagnostic.d.ts +8 -0
- package/src/scripts/services/migration-diagnostic.js +2 -0
- package/src/scripts/services/migration-diagnostic.js.map +1 -0
- package/src/scripts/services/migration-diagnostic.ts +28 -0
- package/src/scripts/template/migrate-template.d.ts +16 -0
- package/src/scripts/template/migrate-template.js +349 -0
- package/src/scripts/template/migrate-template.js.map +1 -0
- package/src/scripts/template/migrate-template.ts +418 -0
- package/src/template-migration.d.ts +1 -0
- package/src/template-migration.js +2 -0
- package/src/template-migration.js.map +1 -0
- package/src/testing.d.ts +19 -0
- package/src/testing.js +2 -0
- package/src/testing.js.map +1 -0
- 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)
|
package/generators.json
ADDED
|
@@ -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,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,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,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,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,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"}
|