@jigx/sdk-tools 1.2.0-next.2 → 1.2.0-next.4

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 (200) hide show
  1. package/README.md +35 -44
  2. package/dist/cli.js +83 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +1 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/migrator/converters/app-index.d.ts +53 -0
  9. package/dist/migrator/converters/app-index.d.ts.map +1 -0
  10. package/dist/migrator/converters/app-index.js +206 -0
  11. package/dist/migrator/converters/app-index.js.map +1 -0
  12. package/dist/migrator/converters/assets.d.ts +7 -0
  13. package/dist/migrator/converters/assets.d.ts.map +1 -0
  14. package/dist/migrator/converters/assets.js +58 -0
  15. package/dist/migrator/converters/assets.js.map +1 -0
  16. package/dist/migrator/converters/components.d.ts +4 -0
  17. package/dist/migrator/converters/components.d.ts.map +1 -0
  18. package/dist/migrator/converters/components.js +7 -0
  19. package/dist/migrator/converters/components.js.map +1 -0
  20. package/dist/migrator/converters/databases.d.ts +9 -0
  21. package/dist/migrator/converters/databases.d.ts.map +1 -0
  22. package/dist/migrator/converters/databases.js +45 -0
  23. package/dist/migrator/converters/databases.js.map +1 -0
  24. package/dist/migrator/converters/datasources.d.ts +46 -0
  25. package/dist/migrator/converters/datasources.d.ts.map +1 -0
  26. package/dist/migrator/converters/datasources.js +445 -0
  27. package/dist/migrator/converters/datasources.js.map +1 -0
  28. package/dist/migrator/converters/functions.d.ts +13 -0
  29. package/dist/migrator/converters/functions.d.ts.map +1 -0
  30. package/dist/migrator/converters/functions.js +444 -0
  31. package/dist/migrator/converters/functions.js.map +1 -0
  32. package/dist/migrator/converters/index.d.ts +11 -0
  33. package/dist/migrator/converters/index.d.ts.map +1 -0
  34. package/dist/migrator/converters/index.js +9 -0
  35. package/dist/migrator/converters/index.js.map +1 -0
  36. package/dist/migrator/converters/scripts.d.ts +10 -0
  37. package/dist/migrator/converters/scripts.d.ts.map +1 -0
  38. package/dist/migrator/converters/scripts.js +28 -0
  39. package/dist/migrator/converters/scripts.js.map +1 -0
  40. package/dist/migrator/converters/translations.d.ts +5 -0
  41. package/dist/migrator/converters/translations.d.ts.map +1 -0
  42. package/dist/migrator/converters/translations.js +25 -0
  43. package/dist/migrator/converters/translations.js.map +1 -0
  44. package/dist/migrator/converters/types.d.ts +35 -0
  45. package/dist/migrator/converters/types.d.ts.map +1 -0
  46. package/dist/migrator/converters/types.js +2 -0
  47. package/dist/migrator/converters/types.js.map +1 -0
  48. package/dist/migrator/errors.d.ts +5 -0
  49. package/dist/migrator/errors.d.ts.map +1 -0
  50. package/dist/migrator/errors.js +8 -0
  51. package/dist/migrator/errors.js.map +1 -0
  52. package/dist/migrator/index.d.ts +6 -0
  53. package/dist/migrator/index.d.ts.map +1 -0
  54. package/dist/migrator/index.js +4 -0
  55. package/dist/migrator/index.js.map +1 -0
  56. package/dist/migrator/migrate.d.ts +75 -0
  57. package/dist/migrator/migrate.d.ts.map +1 -0
  58. package/dist/migrator/migrate.js +439 -0
  59. package/dist/migrator/migrate.js.map +1 -0
  60. package/dist/migrator/module-writer.d.ts +26 -0
  61. package/dist/migrator/module-writer.d.ts.map +1 -0
  62. package/dist/migrator/module-writer.js +26 -0
  63. package/dist/migrator/module-writer.js.map +1 -0
  64. package/dist/migrator/nodes/action-definition.d.ts +11 -0
  65. package/dist/migrator/nodes/action-definition.d.ts.map +1 -0
  66. package/dist/migrator/nodes/action-definition.js +75 -0
  67. package/dist/migrator/nodes/action-definition.js.map +1 -0
  68. package/dist/migrator/nodes/app-events.d.ts +29 -0
  69. package/dist/migrator/nodes/app-events.d.ts.map +1 -0
  70. package/dist/migrator/nodes/app-events.js +40 -0
  71. package/dist/migrator/nodes/app-events.js.map +1 -0
  72. package/dist/migrator/nodes/attach.d.ts +61 -0
  73. package/dist/migrator/nodes/attach.d.ts.map +1 -0
  74. package/dist/migrator/nodes/attach.js +174 -0
  75. package/dist/migrator/nodes/attach.js.map +1 -0
  76. package/dist/migrator/nodes/builder-access.d.ts +16 -0
  77. package/dist/migrator/nodes/builder-access.d.ts.map +1 -0
  78. package/dist/migrator/nodes/builder-access.js +81 -0
  79. package/dist/migrator/nodes/builder-access.js.map +1 -0
  80. package/dist/migrator/nodes/codegen.d.ts +33 -0
  81. package/dist/migrator/nodes/codegen.d.ts.map +1 -0
  82. package/dist/migrator/nodes/codegen.js +77 -0
  83. package/dist/migrator/nodes/codegen.js.map +1 -0
  84. package/dist/migrator/nodes/index.d.ts +6 -0
  85. package/dist/migrator/nodes/index.d.ts.map +1 -0
  86. package/dist/migrator/nodes/index.js +6 -0
  87. package/dist/migrator/nodes/index.js.map +1 -0
  88. package/dist/migrator/nodes/node-shape.d.ts +39 -0
  89. package/dist/migrator/nodes/node-shape.d.ts.map +1 -0
  90. package/dist/migrator/nodes/node-shape.js +65 -0
  91. package/dist/migrator/nodes/node-shape.js.map +1 -0
  92. package/dist/migrator/nodes/probe.d.ts +66 -0
  93. package/dist/migrator/nodes/probe.d.ts.map +1 -0
  94. package/dist/migrator/nodes/probe.js +46 -0
  95. package/dist/migrator/nodes/probe.js.map +1 -0
  96. package/dist/migrator/nodes/rules/action-list.d.ts +4 -0
  97. package/dist/migrator/nodes/rules/action-list.d.ts.map +1 -0
  98. package/dist/migrator/nodes/rules/action-list.js +14 -0
  99. package/dist/migrator/nodes/rules/action-list.js.map +1 -0
  100. package/dist/migrator/nodes/rules/action-slots.d.ts +13 -0
  101. package/dist/migrator/nodes/rules/action-slots.d.ts.map +1 -0
  102. package/dist/migrator/nodes/rules/action-slots.js +34 -0
  103. package/dist/migrator/nodes/rules/action-slots.js.map +1 -0
  104. package/dist/migrator/nodes/rules/custom-component.d.ts +7 -0
  105. package/dist/migrator/nodes/rules/custom-component.d.ts.map +1 -0
  106. package/dist/migrator/nodes/rules/custom-component.js +8 -0
  107. package/dist/migrator/nodes/rules/custom-component.js.map +1 -0
  108. package/dist/migrator/nodes/rules/dropdown.d.ts +4 -0
  109. package/dist/migrator/nodes/rules/dropdown.d.ts.map +1 -0
  110. package/dist/migrator/nodes/rules/dropdown.js +3 -0
  111. package/dist/migrator/nodes/rules/dropdown.js.map +1 -0
  112. package/dist/migrator/nodes/rules/execute-entity.d.ts +7 -0
  113. package/dist/migrator/nodes/rules/execute-entity.d.ts.map +1 -0
  114. package/dist/migrator/nodes/rules/execute-entity.js +40 -0
  115. package/dist/migrator/nodes/rules/execute-entity.js.map +1 -0
  116. package/dist/migrator/nodes/rules/field-row.d.ts +4 -0
  117. package/dist/migrator/nodes/rules/field-row.d.ts.map +1 -0
  118. package/dist/migrator/nodes/rules/field-row.js +3 -0
  119. package/dist/migrator/nodes/rules/field-row.js.map +1 -0
  120. package/dist/migrator/nodes/rules/index.d.ts +16 -0
  121. package/dist/migrator/nodes/rules/index.d.ts.map +1 -0
  122. package/dist/migrator/nodes/rules/index.js +42 -0
  123. package/dist/migrator/nodes/rules/index.js.map +1 -0
  124. package/dist/migrator/nodes/rules/list-item.d.ts +7 -0
  125. package/dist/migrator/nodes/rules/list-item.d.ts.map +1 -0
  126. package/dist/migrator/nodes/rules/list-item.js +40 -0
  127. package/dist/migrator/nodes/rules/list-item.js.map +1 -0
  128. package/dist/migrator/nodes/rules/list.d.ts +4 -0
  129. package/dist/migrator/nodes/rules/list.d.ts.map +1 -0
  130. package/dist/migrator/nodes/rules/list.js +7 -0
  131. package/dist/migrator/nodes/rules/list.js.map +1 -0
  132. package/dist/migrator/nodes/rules/method-names.d.ts +10 -0
  133. package/dist/migrator/nodes/rules/method-names.d.ts.map +1 -0
  134. package/dist/migrator/nodes/rules/method-names.js +33 -0
  135. package/dist/migrator/nodes/rules/method-names.js.map +1 -0
  136. package/dist/migrator/nodes/rules/screen-slots.d.ts +10 -0
  137. package/dist/migrator/nodes/rules/screen-slots.d.ts.map +1 -0
  138. package/dist/migrator/nodes/rules/screen-slots.js +9 -0
  139. package/dist/migrator/nodes/rules/screen-slots.js.map +1 -0
  140. package/dist/migrator/nodes/rules/set-jig-state.d.ts +4 -0
  141. package/dist/migrator/nodes/rules/set-jig-state.d.ts.map +1 -0
  142. package/dist/migrator/nodes/rules/set-jig-state.js +9 -0
  143. package/dist/migrator/nodes/rules/set-jig-state.js.map +1 -0
  144. package/dist/migrator/nodes/rules/state-key.d.ts +7 -0
  145. package/dist/migrator/nodes/rules/state-key.d.ts.map +1 -0
  146. package/dist/migrator/nodes/rules/state-key.js +16 -0
  147. package/dist/migrator/nodes/rules/state-key.js.map +1 -0
  148. package/dist/migrator/nodes/rules/summary.d.ts +7 -0
  149. package/dist/migrator/nodes/rules/summary.d.ts.map +1 -0
  150. package/dist/migrator/nodes/rules/summary.js +16 -0
  151. package/dist/migrator/nodes/rules/summary.js.map +1 -0
  152. package/dist/migrator/nodes/rules/sync-entities.d.ts +7 -0
  153. package/dist/migrator/nodes/rules/sync-entities.d.ts.map +1 -0
  154. package/dist/migrator/nodes/rules/sync-entities.js +17 -0
  155. package/dist/migrator/nodes/rules/sync-entities.js.map +1 -0
  156. package/dist/migrator/nodes/rules/types.d.ts +35 -0
  157. package/dist/migrator/nodes/rules/types.d.ts.map +1 -0
  158. package/dist/migrator/nodes/rules/types.js +7 -0
  159. package/dist/migrator/nodes/rules/types.js.map +1 -0
  160. package/dist/migrator/nodes/screen.d.ts +13 -0
  161. package/dist/migrator/nodes/screen.d.ts.map +1 -0
  162. package/dist/migrator/nodes/screen.js +403 -0
  163. package/dist/migrator/nodes/screen.js.map +1 -0
  164. package/dist/migrator/normalize.d.ts +42 -0
  165. package/dist/migrator/normalize.d.ts.map +1 -0
  166. package/dist/migrator/normalize.js +167 -0
  167. package/dist/migrator/normalize.js.map +1 -0
  168. package/dist/migrator/project-writer.d.ts +34 -0
  169. package/dist/migrator/project-writer.d.ts.map +1 -0
  170. package/dist/migrator/project-writer.js +65 -0
  171. package/dist/migrator/project-writer.js.map +1 -0
  172. package/dist/migrator/prune.d.ts +58 -0
  173. package/dist/migrator/prune.d.ts.map +1 -0
  174. package/dist/migrator/prune.js +171 -0
  175. package/dist/migrator/prune.js.map +1 -0
  176. package/dist/migrator/read-solution.d.ts +38 -0
  177. package/dist/migrator/read-solution.d.ts.map +1 -0
  178. package/dist/migrator/read-solution.js +144 -0
  179. package/dist/migrator/read-solution.js.map +1 -0
  180. package/dist/migrator/report.d.ts +76 -0
  181. package/dist/migrator/report.d.ts.map +1 -0
  182. package/dist/migrator/report.js +53 -0
  183. package/dist/migrator/report.js.map +1 -0
  184. package/dist/migrator/ts-printer.d.ts +19 -0
  185. package/dist/migrator/ts-printer.d.ts.map +1 -0
  186. package/dist/migrator/ts-printer.js +70 -0
  187. package/dist/migrator/ts-printer.js.map +1 -0
  188. package/dist/migrator/verify-entity.d.ts +21 -0
  189. package/dist/migrator/verify-entity.d.ts.map +1 -0
  190. package/dist/migrator/verify-entity.js +22 -0
  191. package/dist/migrator/verify-entity.js.map +1 -0
  192. package/dist/scaffolder/index.d.ts +1 -0
  193. package/dist/scaffolder/index.d.ts.map +1 -1
  194. package/dist/scaffolder/index.js +1 -0
  195. package/dist/scaffolder/index.js.map +1 -1
  196. package/dist/scaffolder/templates.d.ts +11 -2
  197. package/dist/scaffolder/templates.d.ts.map +1 -1
  198. package/dist/scaffolder/templates.js +7 -3
  199. package/dist/scaffolder/templates.js.map +1 -1
  200. package/package.json +2 -1
package/README.md CHANGED
@@ -1,69 +1,60 @@
1
1
  # @jigx/sdk-tools
2
2
 
3
- CLI for solution-designers to scaffold, build, and deploy Jigx Applications. Provides the `jigx` command with `create`, `build`, `login`, `init`, `deploy`, `whoami`, and `logout` verbs, backed by `@jigx/core-sdk` builders.
3
+ `jigx` CLI for solution designers to scaffold, build, and deploy Jigx Applications (backed by `@jigx/core-sdk` builders).
4
4
 
5
5
  ## Requirements
6
6
 
7
- - **Node.js ≥22** — install from [nodejs.org](https://nodejs.org/) or `brew install node`.
7
+ Node.js >=22. `jigx create` runs `npm install` in the new project; swap to yarn/pnpm afterwards if preferred.
8
8
 
9
- No package manager is required globally: `jigx create` runs `npm install` (which ships with Node) inside the new project. After scaffolding you can swap to yarn or pnpm in that project if you prefer.
10
-
11
- ## Onboarding
9
+ ## Quick start
12
10
 
13
11
  ```bash
14
- npm i -g @jigx/sdk-tools@next # 1. one-time per machine: puts `jigx` on PATH
15
- jigx create # 2. prompts → scaffolds <cwd>/<applicationName>, runs npm install
12
+ npm i -g @jigx/sdk-tools@next # once per machine
13
+ jigx create # scaffolds <cwd>/<applicationName>
16
14
  cd <applicationName>
17
- jigx deploy # 3. first run: interactive login + init, then deploys to prod
15
+ jigx deploy # first run: login + init inline, then deploy to prod
18
16
  ```
19
17
 
20
- On first `jigx deploy`, the CLI:
21
-
22
- 1. Detects no cached **RefreshToken** and runs `jigx login` inline (Cognito email + password). Stores the refresh token at `~/.jigx/refresh-tokens.json`.
23
- 2. Detects no **OrganizationBinding** in `<projectRoot>/jigx.json` and runs `jigx init` inline (Organization picker). Writes the binding to `jigx.json`.
24
- 3. Builds, then deploys content to the prod environment.
25
-
26
- Subsequent deploys reuse both artifacts and skip straight to build + deploy. Pass `--env dev` to target staging, `--env clf-dev` for the Cloudflare dev stamp, or `--env clf-prod` for the Cloudflare prod stamp.
27
-
28
- ## Commands
29
-
30
- | Command | What it does |
31
- | --- | --- |
32
- | `jigx create` | Prompts for Title → Name → Type, scaffolds a new Application project, runs `npm install`. |
33
- | `jigx build` | Compiles `src/app.ts` into `build/output.json` plus the canonical Builder folder layout under `build/app/` for inspection. |
34
- | `jigx login` | Signs in to Cognito (interactive email + password) and caches a refresh token in `~/.jigx/refresh-tokens.json`. |
35
- | `jigx init` | Picks an Organization for the current environment and writes the binding to `<projectRoot>/jigx.json`. |
36
- | `jigx deploy` | Builds, then deploys content. Defaults to prod. Pass `--env dev` for staging, `--env clf-dev` for the Cloudflare dev stamp, or `--env clf-prod` for the Cloudflare prod stamp. Auto-runs `jigx login` and `jigx init` if needed (TTY only). |
37
- | `jigx whoami` | Prints the live User identity and the project's Organization binding for the chosen environment. |
38
- | `jigx logout` | Clears cached refresh tokens for one env or all envs. |
18
+ Commands: `create`, `build`, `login`, `init`, `deploy`, `whoami`, `logout`, `migrate`. Run `jigx --help` for options.
39
19
 
40
- ## Auth model
20
+ `--env dev` (staging), `--env clf-dev`, `--env clf-prod` target other environments; default is prod. `jigx init --org <id>` skips the Organization picker.
41
21
 
42
- Three commands compose the auth flow:
22
+ ## Auth
43
23
 
44
- 1. **`jigx login`** — interactive Cognito SRP sign-in. Stores a long-lived refresh token at `~/.jigx/refresh-tokens.json`, file mode `0o600`, dir mode `0o700`. Keyed by `<env>:<userPoolId>` so dev and prod entries never collide.
45
- 2. **`jigx init`** — picks an Organization from the User's memberships and writes `<projectRoot>/jigx.json` (`{ "<env>": { "organizationId": "..." } }`). `jigx.json` is a per-project, per-environment binding and is intentionally committable — multiple developers on the same project share the same Organization mapping.
46
- 3. **`jigx deploy`** — refreshes a Cognito ID token from the cached refresh token, looks up the Organization in `jigx.json`, and `Bearer`s the ID token at the Strata API.
24
+ - `jigx login`: Cognito email + password; refresh token cached at `~/.jigx/refresh-tokens.json` (keyed per env).
25
+ - `jigx init`: writes the Organization binding to `<projectRoot>/jigx.json` (per env, safe to commit).
26
+ - `jigx deploy` runs login/init inline when missing (TTY only). Non-TTY (CI) fails with the command to run.
47
27
 
48
- In TTY mode, `jigx deploy` fills in missing pieces inline by invoking `jigx login` or `jigx init` as needed. In non-TTY mode (CI), missing pieces surface as typed errors naming the exact command to run.
28
+ Limitations: no CI/non-interactive auth (pre-populate `~/.jigx/refresh-tokens.json` from an interactive login), no SSO. Rationale: [ADR-0002](../../docs/adr/0002-sdk-tools-cognito-only-auth.md).
49
29
 
50
- ## Limitations
30
+ ## Migrating a YAML solution
51
31
 
52
- - **No CI / non-interactive auth.** The auth flow assumes a TTY for the email + password prompt. There is no service-account / API-key path. CI deploys must pre-populate `~/.jigx/refresh-tokens.json` from a prior interactive `jigx login` (out of scope for the CLI).
53
- - **No SSO.** Users whose Jigx accounts are managed by an external IdP cannot use `jigx login` today.
32
+ ```bash
33
+ jigx migrate ./my-solution --out ./my-app # writes the typed project + migration-report.json
34
+ cd my-app && npm install && jigx build
35
+ jigx migrate ../my-solution --check-build . # exits 1 when the build differs from the solution
36
+ ```
54
37
 
55
- See [ADR-0002](../../docs/adr/0002-sdk-tools-cognito-only-auth.md) for the rationale.
38
+ `jigx migrate` reads a **Legacy solution** (`index.jigx` plus the kind folders `databases/`, `functions/`, `datasources/`, `actions/`, `components/`, `jigs/`, `translations/`, `assets/`, and `scripts/expressions/*.js`) and writes one TypeScript module per entity under `src/`, registered from `src/app.ts`. Module paths keep the legacy folders (`jigs/Orders/order-list.jigx` → `src/jigs/Orders/order-list.ts`). Expression scripts are copied verbatim.
56
39
 
57
- ## Troubleshooting
40
+ Every node is written as a typed core-sdk call, and every migrated entity is verified in-process: the replayed calls must build to exactly the legacy YAML. A node, index key, or entity with no exact typed expression is a **Core SDK gap**. It is left out of the project, with a `// TODO(migrate): <gapId> - <reason>` comment where it was. There is no untyped fallback.
58
41
 
59
- ### `jigx: command not found`
42
+ `migration-report.json` holds:
60
43
 
61
- `@jigx/sdk-tools` is not installed globally. Run `npm i -g @jigx/sdk-tools@next` and retry.
44
+ | Field | Meaning |
45
+ | --- | --- |
46
+ | `coreSdkVersion` | Exact `@jigx/core-sdk` version the migration was verified against. The generated `package.json` pins it. |
47
+ | `entities` | `total`, `migrated`, `skipped` (entities that are one whole gap). |
48
+ | `nodes` | `total`, `typed`, `skipped`. A skipped node counts with all its descendant nodes. |
49
+ | `gaps` | One record per skipped node: `gapId`, `nodeType`, `reason`, `skippedNodes`, `location` (`relPath` of the legacy file and the `path` inside it, `[]` for the whole entity). Sorted by `relPath`, then `path`, then `gapId`. |
50
+ | `ignored` | Solution files that are not migrated (non-`.jigx` files in kind folders, non-script files under `scripts/`, unknown root files). |
62
51
 
63
- ### `Not authenticated. Run jigx login.`
52
+ A `gapId` is `<nodeType>:<reason>`, for example `component.view:no-factory-children`, `index:key-onAppActivated`, or `jigs:composition-differs`. The CLI prints the top 10 gap ids by skipped node count. Fix the gaps with the most skipped nodes first.
64
53
 
65
- `~/.jigx/refresh-tokens.json` is missing or the cached refresh token has expired/been revoked. Run `jigx login` (add `--env dev` for staging or `--env clf-dev` for the Cloudflare dev stamp) and retry.
54
+ `jigx build` output is flat: `build/app/jigs/order-list.jigx`, not `build/app/jigs/Orders/order-list.jigx`. Compare built files with the legacy files by id, not by path. The project is one-time output: edit it by hand from here on. Re-running `jigx migrate` on an existing dir needs `--force` and replaces its `src/`.
66
55
 
67
- ### `No Organization configured for env "<env>".`
56
+ ## Troubleshooting
68
57
 
69
- `<projectRoot>/jigx.json` has no binding for the requested environment. Run `jigx init` (add `--env dev` for staging or `--env clf-dev` for the Cloudflare dev stamp, optionally `--org <id>` to skip the picker).
58
+ - `jigx: command not found`: install globally (above).
59
+ - `Not authenticated. Run jigx login.`: refresh token missing/expired/revoked; run `jigx login` (with the same `--env`).
60
+ - `No Organization configured for env "<env>".`: run `jigx init` (with the same `--env`).
package/dist/cli.js CHANGED
@@ -29,6 +29,7 @@ Commands:
29
29
  deploy Build and deploy the Application content; deploys to prod (default), dev, clf-dev, or clf-prod
30
30
  whoami Print the live User identity and the project's Organization binding (per env)
31
31
  logout Clear cached refresh tokens for one env or all envs
32
+ migrate Migrate a legacy YAML solution into a typed SDK project
32
33
 
33
34
  Options:
34
35
  -v, --version Print the @jigx/sdk-tools package version
@@ -36,6 +37,9 @@ Options:
36
37
  --env <target> Target environment: prod (default) | dev | clf-dev | clf-prod
37
38
  --org <id> Organization id (skip the picker on jigx init)
38
39
  --all jigx logout: clear all envs from ~/.jigx/refresh-tokens.json
40
+ --out <dir> jigx migrate: project dir to write (default: ./<index name>)
41
+ --force jigx migrate: overwrite an existing out dir
42
+ --check-build <dir> jigx migrate: compare a built migrated project with the solution (writes nothing)
39
43
  `;
40
44
  async function runBuild() {
41
45
  const result = await build({ projectRoot: process.cwd() });
@@ -80,7 +84,23 @@ const KNOWN_FLAGS_BY_COMMAND = {
80
84
  login: ['--env'],
81
85
  whoami: ['--env'],
82
86
  logout: ['--env', '--all'],
87
+ migrate: ['--out', '--force', '--check-build'],
83
88
  };
89
+ /** Flags that take a value; their value is never a positional argument. */
90
+ const VALUE_FLAGS = ['--env', '--org', '--out', '--check-build'];
91
+ function positionalArgs(args) {
92
+ const positional = [];
93
+ for (let index = 0; index < args.length; index++) {
94
+ const arg = args[index] ?? '';
95
+ if (VALUE_FLAGS.includes(arg)) {
96
+ index++;
97
+ continue;
98
+ }
99
+ if (!arg.startsWith('--'))
100
+ positional.push(arg);
101
+ }
102
+ return positional;
103
+ }
84
104
  function rejectUnknownFlags(command, args) {
85
105
  const known = KNOWN_FLAGS_BY_COMMAND[command];
86
106
  if (!known)
@@ -130,6 +150,66 @@ async function runLogout(args) {
130
150
  const result = await logout({ environment, all });
131
151
  console.log(result.formatted);
132
152
  }
153
+ /** Gaps listed in the `jigx migrate` summary, largest first. */
154
+ const MIGRATE_SUMMARY_GAPS = 10;
155
+ const MIGRATE_USAGE = 'Usage: jigx migrate <solution-dir> [--out <dir>] [--force] | jigx migrate <solution-dir> --check-build <project-dir>';
156
+ async function runMigrate(args) {
157
+ const [solutionDir] = positionalArgs(args);
158
+ if (!solutionDir)
159
+ throw new CliFlagError(`Missing solution dir. ${MIGRATE_USAGE}`);
160
+ const outDir = parseFlagValue(args, '--out');
161
+ const force = args.includes('--force');
162
+ const checkBuildDir = parseFlagValue(args, '--check-build');
163
+ if (checkBuildDir !== undefined && (outDir !== undefined || force)) {
164
+ throw new CliFlagError(`--check-build writes nothing; drop --out and --force. ${MIGRATE_USAGE}`);
165
+ }
166
+ // Loaded lazily: the migrator pulls in @jigx/core-sdk (and its native better-sqlite3),
167
+ // which no other command needs.
168
+ const { checkBuild, migrate, MigrateError, summarizeGaps } = await import('./migrator/index.js');
169
+ try {
170
+ if (checkBuildDir !== undefined) {
171
+ const { checked, mismatches } = await checkBuild({
172
+ solutionDir,
173
+ projectDir: checkBuildDir,
174
+ cwd: process.cwd(),
175
+ });
176
+ if (mismatches.length === 0) {
177
+ console.log(`Build matches the pruned legacy solution (${checked} entities).`);
178
+ return;
179
+ }
180
+ console.error(`Build differs from the pruned legacy solution in ${mismatches.length}/${checked} entities:`);
181
+ for (const { kind, id, differingKeys } of mismatches) {
182
+ const keys = differingKeys.length > 0 ? ` (${differingKeys.join(', ')})` : '';
183
+ console.error(` ${kind}/${id}${keys}`);
184
+ }
185
+ process.exit(1);
186
+ }
187
+ const { outDir: writtenTo, report } = await migrate({
188
+ solutionDir,
189
+ outDir,
190
+ force,
191
+ cwd: process.cwd(),
192
+ });
193
+ console.log(`Migrated ${report.entities.migrated}/${report.entities.total} entities, typed ${report.nodes.typed}/${report.nodes.total} nodes, ${report.gaps.length} gaps (see migration-report.json)`);
194
+ console.log(` ${writtenTo}`);
195
+ const top = summarizeGaps({ gaps: report.gaps, limit: MIGRATE_SUMMARY_GAPS });
196
+ if (top.length > 0) {
197
+ console.log(`\nTop gaps by skipped nodes (gapId, occurrences, skipped nodes):`);
198
+ const width = Math.max(...top.map(({ gapId }) => gapId.length));
199
+ for (const { gapId, occurrences, skippedNodes } of top) {
200
+ console.log(` ${gapId.padEnd(width)} ${occurrences} ${skippedNodes}`);
201
+ }
202
+ }
203
+ }
204
+ catch (error) {
205
+ if (error instanceof MigrateError) {
206
+ const label = checkBuildDir === undefined ? 'Cannot migrate solution' : 'Cannot check build';
207
+ console.error(`${label}: ${error.message}`);
208
+ process.exit(1);
209
+ }
210
+ throw error;
211
+ }
212
+ }
133
213
  async function runCreate() {
134
214
  const result = await create({ cwd: process.cwd() });
135
215
  console.log(`\nScaffolded Application "${result.answers.applicationName}" at ${result.scaffold.destinationPath}`);
@@ -174,6 +254,9 @@ async function main() {
174
254
  case 'logout':
175
255
  await runLogout(rest);
176
256
  return;
257
+ case 'migrate':
258
+ await runMigrate(rest);
259
+ return;
177
260
  default:
178
261
  console.error(`Unknown command: ${command}\n\n${HELP}`);
179
262
  process.exit(1);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,+BAA+B;AAE/B,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EACL,MAAM,EAEN,WAAW,EACX,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,IAAI,EACJ,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,iCAAiC,GAClC,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,MAAM,YAAa,SAAQ,KAAK;IAC9B,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AAED,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;CAmBZ,CAAA;AAED,KAAK,UAAU,QAAQ;IACrB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC1D,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,WAAW,OAAO,MAAM,CAAC,eAAe,SAAS,CAAC,CAAA;IAC7F,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,mBAAmB,KAAK,MAAM,CAAC,cAAc,SAAS,CAAC,CAAA;AACjF,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAuB;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACvC,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,YAAY,CACpB,4EAA4E,CAC7E,CAAA;IACH,CAAC;IACD,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACvF,MAAM,IAAI,YAAY,CACpB,yBAAyB,KAAK,sDAAsD,CACrF,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAuB;IAC/C,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAA;AAC9C,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAuB;IACvD,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAA;AACpC,CAAC;AAED,SAAS,cAAc,CAAC,IAAuB,EAAE,IAAY;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IACjC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,YAAY,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,sBAAsB,GAA+C;IACzE,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,CAAC,OAAO,CAAC;IACjB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,MAAM,EAAE,CAAC,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAA;AAED,SAAS,kBAAkB,CAAC,OAAe,EAAE,IAAuB;IAClE,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC7C,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,YAAY,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAuB;IAC9C,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;IACxE,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,UAAU,CAAA;IAC1E,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,iBAAiB,MAAM,CAAC,eAAe,QAAQ,WAAW,GAAG,CAAC,CAAA;IACjF,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;AACtC,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAuB;IAC5C,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,sBAAsB,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;QACxB,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE;QAC1B,WAAW;QACX,sBAAsB;KACvB,CAAC,CAAA;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAA;IACrD,OAAO,CAAC,GAAG,CACT,GAAG,IAAI,SAAS,MAAM,CAAC,WAAW,OAAO,MAAM,CAAC,YAAY,CAAC,gBAAgB,KAAK,MAAM,CAAC,YAAY,CAAC,cAAc,IAAI,CACzH,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,CAAA;AACpE,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAuB;IAC7C,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC,CAAA;IAC3C,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,CAAA;IACpE,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;AACnD,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAuB;IAC9C,MAAM,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAA;IAC5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;IACxE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC7B,IAAI,CAAC,MAAM,CAAC,aAAa;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAuB;IAC9C,MAAM,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAA;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AAC/B,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACnD,OAAO,CAAC,GAAG,CACT,6BAA6B,MAAM,CAAC,OAAO,CAAC,eAAe,QAAQ,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CACrG,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,qCAAqC,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,CAAC,CAAA;IAChF,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAC5B,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAA;IAC5F,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;IAC7E,OAAO,CAAC,GAAG,CACT,sFAAsF,CACvF,CAAA;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAElC,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACxB,OAAM;IACR,CAAC;IAED,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjB,OAAM;IACR,CAAC;IAED,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAEjC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,MAAM,QAAQ,EAAE,CAAA;YAChB,OAAM;QACR,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,IAAI,CAAC,CAAA;YACrB,OAAM;QACR,KAAK,QAAQ;YACX,MAAM,SAAS,EAAE,CAAA;YACjB,OAAM;QACR,KAAK,MAAM;YACT,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;YACnB,OAAM;QACR,KAAK,OAAO;YACV,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAA;YACpB,OAAM;QACR,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,IAAI,CAAC,CAAA;YACrB,OAAM;QACR,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,IAAI,CAAC,CAAA;YACrB,OAAM;QACR;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,OAAO,IAAI,EAAE,CAAC,CAAA;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,IACE,KAAK,YAAY,oBAAoB;QACrC,KAAK,YAAY,mBAAmB;QACpC,KAAK,YAAY,oBAAoB;QACrC,KAAK,YAAY,kBAAkB,EACnC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACrE,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,OAAO,OAAO,IAAI,EAAE,CAAC,CAAA;IAClD,CAAC;SAAM,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/C,CAAC;SAAM,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/D,CAAC;SAAM,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAChD,CAAC;SAAM,IAAI,GAAG,YAAY,wBAAwB,IAAI,GAAG,YAAY,wBAAwB,EAAE,CAAC;QAC9F,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC5D,CAAC;SAAM,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC5D,CAAC;SAAM,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC5C,CAAC;SAAM,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC5C,CAAC;SAAM,IAAI,GAAG,YAAY,iCAAiC,EAAE,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC5C,CAAC;SAAM,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC9C,CAAC;SAAM,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC5D,CAAC;SAAM,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,2CAA2C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IACzE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -12,6 +12,8 @@ export { logout, LogoutCancelledError } from './logout/index.js';
12
12
  export type { LogoutEnvOutcome, LogoutOptions, LogoutResult, LogoutScope } from './logout/index.js';
13
13
  export { whoami } from './whoami/index.js';
14
14
  export type { WhoamiOptions, WhoamiProjectOrganization, WhoamiResult, WhoamiUser, } from './whoami/index.js';
15
+ export { checkBuild, migrate, MigrateError } from './migrator/index.js';
16
+ export type { CheckBuildOptions, CheckBuildResult, EntityMismatch, GapRecord, MigrateOptions, MigrateResult, MigrationReport, } from './migrator/index.js';
15
17
  export { PromptCancelledError, runCreatePrompts } from './prompts/index.js';
16
18
  export type { CreatePromptAnswers } from './prompts/index.js';
17
19
  export { scaffold, ScaffoldError } from './scaffolder/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEnE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEpG,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACzE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,YAAY,GACb,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC7D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEjE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAChE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEnG,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,YAAY,EACV,aAAa,EACb,yBAAyB,EACzB,YAAY,EACZ,UAAU,GACX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE7D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC/D,YAAY,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACvE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEnE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEpG,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACzE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,YAAY,GACb,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC7D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEjE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAChE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEnG,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,YAAY,EACV,aAAa,EACb,yBAAyB,EACzB,YAAY,EACZ,UAAU,GACX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvE,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,EACb,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE7D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC/D,YAAY,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACvE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA"}
package/dist/index.js CHANGED
@@ -5,6 +5,7 @@ export { AuthHttpError, COGNITO_CONFIG, CognitoAuth, CredentialsSchemaError, Cre
5
5
  export { login, LoginCancelledError } from './login/index.js';
6
6
  export { logout, LogoutCancelledError } from './logout/index.js';
7
7
  export { whoami } from './whoami/index.js';
8
+ export { checkBuild, migrate, MigrateError } from './migrator/index.js';
8
9
  export { PromptCancelledError, runCreatePrompts } from './prompts/index.js';
9
10
  export { scaffold, ScaffoldError } from './scaffolder/index.js';
10
11
  export { slugifyTitle, validateApplicationName } from './slug/index.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAG1C,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAG/D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AASzE,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAmBxB,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAG7D,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAGhE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAQ1C,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAG3E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAQ/D,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAGvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAG1C,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAG/D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AASzE,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAmBxB,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAG7D,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAGhE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAQ1C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAWvE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAG3E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAQ/D,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAGvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,53 @@
1
+ import { type ApplicationInput } from '@jigx/core-sdk';
2
+ import { type LegacyEntry } from '../read-solution.js';
3
+ import { type NodeGap } from '../report.js';
4
+ import { type Statement } from './types.js';
5
+ /** Index key carried by the `ApplicationBuilder` constructor input. */
6
+ interface IndexInputKey {
7
+ readonly type: 'input';
8
+ readonly key: string;
9
+ readonly input: Partial<ApplicationInput>;
10
+ }
11
+ /** Index key migrated into typed statements. */
12
+ interface IndexStatementsKey {
13
+ readonly type: 'statements';
14
+ readonly key: string;
15
+ readonly statements: readonly Statement[];
16
+ /** Nodes skipped inside the key's action tree (node-level gaps). */
17
+ readonly gaps?: readonly NodeGap[];
18
+ }
19
+ /**
20
+ * Index key with no verified typed call: index-level gap `index:key-<key>`, or the
21
+ * root node's gap for an app event whose root action does not verify.
22
+ */
23
+ interface IndexSkippedKey {
24
+ readonly type: 'skip';
25
+ readonly key: string;
26
+ readonly gapId: string;
27
+ readonly reason: string;
28
+ /** Node type of the gap; defaults to `index`. */
29
+ readonly nodeType?: string;
30
+ }
31
+ export type IndexKey = IndexInputKey | IndexStatementsKey | IndexSkippedKey;
32
+ export interface IndexConversion {
33
+ readonly name: string;
34
+ /** One result per legacy index key, in legacy key order. */
35
+ readonly keys: readonly IndexKey[];
36
+ }
37
+ /** Index-level gap id for a skipped index key. */
38
+ export declare function indexKeyGapId(key: string): string;
39
+ /**
40
+ * Converts `index.jigx`. `name` is required. Every other key is verified by probe on a
41
+ * scratch ApplicationBuilder; a key that does not verify is skipped as `index:key-<key>`.
42
+ * @throws MigrateError when `name` is missing or not a valid Application name
43
+ */
44
+ export declare function convertIndex(entry: LegacyEntry): IndexConversion;
45
+ /** The ApplicationBuilder constructor input carried by the index keys. */
46
+ export declare function applicationInput(conversion: IndexConversion): ApplicationInput;
47
+ /** Renders `src/index.ts`: the `application` constructor input and `register` for the other keys. */
48
+ export declare function renderIndexModule(options: {
49
+ readonly relPath: string;
50
+ readonly conversion: IndexConversion;
51
+ }): string;
52
+ export {};
53
+ //# sourceMappingURL=app-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-index.d.ts","sourceRoot":"","sources":["../../../src/migrator/converters/app-index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,gBAAgB,EAItB,MAAM,gBAAgB,CAAA;AAKvB,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,cAAc,CAAA;AAEvD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAI3C,uEAAuE;AACvE,UAAU,aAAa;IACrB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAC1C;AAED,gDAAgD;AAChD,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAA;IACzC,oEAAoE;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;CACnC;AAED;;;GAGG;AACH,UAAU,eAAe;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,kBAAkB,GAAG,eAAe,CAAA;AAE3E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAA;CACnC;AAWD,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AA0JD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,eAAe,CAehE;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,eAAe,GAAG,gBAAgB,CAM9E;AAED,qGAAqG;AACrG,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAA;CACrC,GAAG,MAAM,CAeT"}
@@ -0,0 +1,206 @@
1
+ import { isDeepStrictEqual } from 'node:util';
2
+ import { ApplicationBuilder, CategorySchema, isApplicationName, isExpression, } from '@jigx/core-sdk';
3
+ import { MigrateError } from '../errors.js';
4
+ import { renderModule, todoComment } from '../module-writer.js';
5
+ import { APP_EVENTS, convertAppEvent, Gen } from '../nodes/index.js';
6
+ import { dropUndefined, isPlainObject } from '../normalize.js';
7
+ import { countNodes } from '../report.js';
8
+ import { lit, str } from '../ts-printer.js';
9
+ const STRING_INPUT_KEYS = ['title', 'description', 'type', 'imageUrl'];
10
+ const TAB_KEYS = ['jigId', 'icon', 'label', 'badge', 'when'];
11
+ const KEY_REASONS = {
12
+ onAppActivated: 'ApplicationBuilder has no onAppActivated event',
13
+ onTableChanged: 'listeners carry action trees and app.onTableChanged() is untyped; untyped passthroughs must not carry nodes',
14
+ };
15
+ /** Index-level gap id for a skipped index key. */
16
+ export function indexKeyGapId(key) {
17
+ return `index:key-${key}`;
18
+ }
19
+ function skip(key, reason) {
20
+ return {
21
+ type: 'skip',
22
+ key,
23
+ gapId: indexKeyGapId(key),
24
+ reason: reason ?? KEY_REASONS[key] ?? 'no typed ApplicationBuilder call for this index key',
25
+ };
26
+ }
27
+ function inputCandidate(key, value) {
28
+ if (typeof value !== 'string')
29
+ return undefined;
30
+ if (key === 'category') {
31
+ const parsed = CategorySchema.safeParse(value);
32
+ return parsed.success ? { category: parsed.data } : undefined;
33
+ }
34
+ const stringKey = STRING_INPUT_KEYS.find((name) => name === key);
35
+ return stringKey ? { [stringKey]: value } : undefined;
36
+ }
37
+ function expressionStatements(value) {
38
+ if (!isPlainObject(value))
39
+ return undefined;
40
+ const statements = [];
41
+ for (const [name, expression] of Object.entries(value)) {
42
+ if (typeof expression === 'string') {
43
+ statements.push({
44
+ code: `app.expression(${str(name)}, ${str(expression)})`,
45
+ run: (app) => {
46
+ app.expression(name, expression);
47
+ },
48
+ });
49
+ }
50
+ else if (isPlainObject(expression) &&
51
+ countNodes({ value: expression, asRoot: false }) === 0) {
52
+ statements.push({
53
+ code: `app.expression(${str(name)}, ${lit(expression, ' ')})`,
54
+ run: (app) => {
55
+ app.expression(name, expression);
56
+ },
57
+ });
58
+ }
59
+ else {
60
+ return undefined;
61
+ }
62
+ }
63
+ return statements;
64
+ }
65
+ function tabInput(tabId, tab) {
66
+ if (!isPlainObject(tab) || !Object.keys(tab).every((name) => TAB_KEYS.includes(name))) {
67
+ return undefined;
68
+ }
69
+ const { jigId, icon, label, badge, when } = tab;
70
+ if (typeof jigId !== 'string' || typeof icon !== 'string')
71
+ return undefined;
72
+ if (label !== undefined && typeof label !== 'string')
73
+ return undefined;
74
+ const badgeOk = badge === undefined ||
75
+ typeof badge === 'number' ||
76
+ typeof badge === 'boolean' ||
77
+ isExpression(badge);
78
+ if (!badgeOk)
79
+ return undefined;
80
+ if (when !== undefined && typeof when !== 'boolean' && !isExpression(when))
81
+ return undefined;
82
+ return {
83
+ screenId: jigId,
84
+ ...(tabId === jigId ? {} : { tabId }),
85
+ icon,
86
+ ...(label === undefined ? {} : { label }),
87
+ ...(badge === undefined ? {} : { badge }),
88
+ ...(when === undefined ? {} : { when }),
89
+ };
90
+ }
91
+ function tabStatements(value) {
92
+ if (!isPlainObject(value))
93
+ return undefined;
94
+ const statements = [];
95
+ for (const [tabId, tab] of Object.entries(value)) {
96
+ const input = tabInput(tabId, tab);
97
+ if (!input)
98
+ return undefined;
99
+ statements.push({
100
+ code: `app.addTab(${lit(input, ' ')})`,
101
+ run: (app) => {
102
+ app.addTab(input);
103
+ },
104
+ });
105
+ }
106
+ return statements;
107
+ }
108
+ /** Builds one key on a scratch ApplicationBuilder and compares it with the legacy value. */
109
+ function verifiesOnScratch(options) {
110
+ const { name, key, legacy, input = {}, statements = [] } = options;
111
+ try {
112
+ const app = new ApplicationBuilder({ ...input, name });
113
+ for (const statement of statements)
114
+ statement.run(app);
115
+ const built = app.build();
116
+ return isDeepStrictEqual(dropUndefined(built[key]), dropUndefined(legacy));
117
+ }
118
+ catch {
119
+ return false;
120
+ }
121
+ }
122
+ function convertAppEventKey(options) {
123
+ const { key } = options;
124
+ const result = convertAppEvent(options);
125
+ if (result.type === 'not-node')
126
+ return skip(key, 'the app event is not an action node');
127
+ if (result.type === 'skip') {
128
+ const { gapId, reason, nodeType } = result.gap;
129
+ return { type: 'skip', key, gapId, reason, nodeType };
130
+ }
131
+ const { code, run, gaps } = result;
132
+ return { type: 'statements', key, statements: [{ code, run }], gaps };
133
+ }
134
+ function convertKey(options) {
135
+ const { name, key, value } = options;
136
+ if (key in KEY_REASONS)
137
+ return skip(key);
138
+ if (APP_EVENTS.includes(key))
139
+ return convertAppEventKey(options);
140
+ const input = inputCandidate(key, value);
141
+ if (input) {
142
+ return verifiesOnScratch({ name, key, legacy: value, input })
143
+ ? { type: 'input', key, input }
144
+ : skip(key, 'the typed constructor input does not reproduce the legacy value');
145
+ }
146
+ const statements = key === 'expressions'
147
+ ? expressionStatements(value)
148
+ : key === 'tabs'
149
+ ? tabStatements(value)
150
+ : undefined;
151
+ if (!statements)
152
+ return skip(key);
153
+ return verifiesOnScratch({ name, key, legacy: value, statements })
154
+ ? { type: 'statements', key, statements }
155
+ : skip(key, 'the typed calls do not reproduce the legacy value');
156
+ }
157
+ /**
158
+ * Converts `index.jigx`. `name` is required. Every other key is verified by probe on a
159
+ * scratch ApplicationBuilder; a key that does not verify is skipped as `index:key-<key>`.
160
+ * @throws MigrateError when `name` is missing or not a valid Application name
161
+ */
162
+ export function convertIndex(entry) {
163
+ const { entity, relPath } = entry;
164
+ if (!isPlainObject(entity))
165
+ throw new MigrateError(`${relPath} must be a YAML mapping`);
166
+ const { name } = entity;
167
+ if (!isApplicationName(name)) {
168
+ throw new MigrateError(`${relPath} needs a valid "name" (lower-kebab, 2-50 chars), got ${JSON.stringify(name)}`);
169
+ }
170
+ const gen = new Gen();
171
+ const keys = Object.entries(entity).map(([key, value]) => {
172
+ if (key === 'name')
173
+ return { type: 'input', key, input: { name } };
174
+ return convertKey({ name, key, value, gen });
175
+ });
176
+ return { name, keys };
177
+ }
178
+ /** The ApplicationBuilder constructor input carried by the index keys. */
179
+ export function applicationInput(conversion) {
180
+ let input = { name: conversion.name };
181
+ for (const key of conversion.keys) {
182
+ if (key.type === 'input')
183
+ input = { ...input, ...key.input };
184
+ }
185
+ return input;
186
+ }
187
+ /** Renders `src/index.ts`: the `application` constructor input and `register` for the other keys. */
188
+ export function renderIndexModule(options) {
189
+ const { relPath, conversion } = options;
190
+ const body = [];
191
+ for (const key of conversion.keys) {
192
+ if (key.type === 'statements')
193
+ body.push(...key.statements.map((statement) => statement.code));
194
+ if (key.type === 'skip')
195
+ body.push(todoComment(key));
196
+ }
197
+ return renderModule({
198
+ sources: [relPath],
199
+ coreSdkTypes: ['ApplicationBuilder', 'ApplicationInput'],
200
+ preamble: [
201
+ `export const application = ${lit(applicationInput(conversion))} satisfies ApplicationInput`,
202
+ ],
203
+ body,
204
+ });
205
+ }
206
+ //# sourceMappingURL=app-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-index.js","sourceRoot":"","sources":["../../../src/migrator/converters/app-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type LegacyEntry } from '../read-solution.js';
2
+ import { type EntityConversion } from './types.js';
3
+ /**
4
+ * `assets/<id>.jigx` (`{ <id>: value }`) → `app.images(…)`, `app.icons(…)` or `app.themePalette(…)`.
5
+ */
6
+ export declare function convertAsset(entry: LegacyEntry): EntityConversion;
7
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../src/migrator/converters/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGtD,OAAO,EAAE,KAAK,gBAAgB,EAAkB,MAAM,YAAY,CAAA;AAuDlE;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,gBAAgB,CAMjE"}