@jigx/sdk-tools 1.2.0-next.3 → 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 +27 -1
  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
@@ -0,0 +1,34 @@
1
+ /** A file of the generated project, relative to the project root. */
2
+ export interface ProjectFile {
3
+ readonly relPath: string;
4
+ readonly content: string;
5
+ }
6
+ /** One line group of `src/app.ts`: a registered module, or the TODO for a skipped entity. */
7
+ export type AppEntry = {
8
+ readonly type: 'module';
9
+ /** Module path under `src/` without extension (e.g. `jigs/Orders/view-order`). */
10
+ readonly modulePath: string;
11
+ } | {
12
+ readonly type: 'todo';
13
+ readonly gapId: string;
14
+ readonly reason: string;
15
+ readonly relPath: string;
16
+ };
17
+ /**
18
+ * Renders `src/app.ts`: imports every module in register order, creates the
19
+ * ApplicationBuilder from the index `application` input and calls each `register`.
20
+ */
21
+ export declare function renderAppTs(options: {
22
+ readonly entries: readonly AppEntry[];
23
+ }): string;
24
+ /**
25
+ * Renders the project files around the migrated modules: `package.json` (exact
26
+ * `@jigx/core-sdk` pin, `@types/node`), `tsconfig.json` (`types: ["node"]`), `.gitignore`
27
+ * and `src/app.ts`.
28
+ */
29
+ export declare function renderProjectFiles(options: {
30
+ readonly applicationName: string;
31
+ readonly coreSdkVersion: string;
32
+ readonly entries: readonly AppEntry[];
33
+ }): readonly ProjectFile[];
34
+ //# sourceMappingURL=project-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-writer.d.ts","sourceRoot":"","sources":["../../src/migrator/project-writer.ts"],"names":[],"mappings":"AAKA,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,6FAA6F;AAC7F,MAAM,MAAM,QAAQ,GAChB;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,kFAAkF;IAClF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAYL;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAA;CAAE,GAAG,MAAM,CA+BtF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAA;CACtC,GAAG,SAAS,WAAW,EAAE,CAWzB"}
@@ -0,0 +1,65 @@
1
+ import { gitignore, packageJson, tsconfigJson } from '../scaffolder/index.js';
2
+ import { todoComment } from './module-writer.js';
3
+ import { ENTITY_KINDS } from './read-solution.js';
4
+ import { str } from './ts-printer.js';
5
+ const INDEX_MODULE_PATH = 'index';
6
+ function pascalCase(text) {
7
+ return text
8
+ .split(/[^A-Za-z0-9]+/)
9
+ .filter((part) => part.length > 0)
10
+ .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)
11
+ .join('');
12
+ }
13
+ /**
14
+ * Renders `src/app.ts`: imports every module in register order, creates the
15
+ * ApplicationBuilder from the index `application` input and calls each `register`.
16
+ */
17
+ export function renderAppTs(options) {
18
+ const used = new Set();
19
+ const imports = [];
20
+ const calls = [];
21
+ for (const entry of options.entries) {
22
+ if (entry.type === 'todo') {
23
+ calls.push(todoComment({ gapId: entry.gapId, reason: `${entry.relPath}: ${entry.reason}` }));
24
+ continue;
25
+ }
26
+ const isIndex = entry.modulePath === INDEX_MODULE_PATH;
27
+ const base = `register${pascalCase(entry.modulePath)}`;
28
+ let identifier = base;
29
+ for (let suffix = 2; used.has(identifier); suffix++)
30
+ identifier = `${base}${suffix}`;
31
+ used.add(identifier);
32
+ const specifier = str(`./${entry.modulePath}.js`);
33
+ imports.push(isIndex
34
+ ? `import ${identifier}, { application } from ${specifier}`
35
+ : `import ${identifier} from ${specifier}`);
36
+ calls.push(`${identifier}(app)`);
37
+ }
38
+ return [
39
+ `// Generated by jigx migrate. Register order: ${ENTITY_KINDS.join(', ')}.`,
40
+ `import { ApplicationBuilder } from '@jigx/core-sdk'`,
41
+ ...imports,
42
+ '',
43
+ 'export const app = new ApplicationBuilder(application)',
44
+ ...calls,
45
+ '',
46
+ ].join('\n');
47
+ }
48
+ /**
49
+ * Renders the project files around the migrated modules: `package.json` (exact
50
+ * `@jigx/core-sdk` pin, `@types/node`), `tsconfig.json` (`types: ["node"]`), `.gitignore`
51
+ * and `src/app.ts`.
52
+ */
53
+ export function renderProjectFiles(options) {
54
+ const { applicationName, coreSdkVersion, entries } = options;
55
+ return [
56
+ {
57
+ relPath: 'package.json',
58
+ content: packageJson({ applicationName, coreSdkVersion, nodeTypes: true }),
59
+ },
60
+ { relPath: 'tsconfig.json', content: tsconfigJson({ nodeTypes: true }) },
61
+ { relPath: '.gitignore', content: gitignore() },
62
+ { relPath: 'src/app.ts', content: renderAppTs({ entries }) },
63
+ ];
64
+ }
65
+ //# sourceMappingURL=project-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-writer.js","sourceRoot":"","sources":["../../src/migrator/project-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { type ComparableApplication } from './normalize.js';
2
+ import { type LegacyEntry } from './read-solution.js';
3
+ import { type GapLocation, type NodePathSegment } from './report.js';
4
+ export interface PruneOptions {
5
+ readonly entries: readonly LegacyEntry[];
6
+ /** Skipped locations; an empty path removes the whole entity. */
7
+ readonly gaps: ReadonlyArray<{
8
+ readonly location: GapLocation;
9
+ }>;
10
+ }
11
+ type Path = readonly NodePathSegment[];
12
+ /**
13
+ * Removes skipped subtrees from one legacy value that sits at `path` inside its entity,
14
+ * then the lists and `options` the skips emptied. Gap paths are entity paths (like
15
+ * `GapRecord.location.path`).
16
+ */
17
+ export declare function pruneAt(options: {
18
+ readonly value: unknown;
19
+ readonly path: Path;
20
+ readonly gaps: ReadonlyArray<{
21
+ readonly path: Path;
22
+ }>;
23
+ }): unknown;
24
+ /**
25
+ * Built counterpart of `pruneAt`: removes from the built value the lists and `options`
26
+ * that pruning `legacy` empties, when they are empty in the build too.
27
+ */
28
+ export declare function pruneBuiltAt(options: {
29
+ readonly built: unknown;
30
+ readonly legacy: unknown;
31
+ readonly path: Path;
32
+ readonly gaps: ReadonlyArray<{
33
+ readonly path: Path;
34
+ }>;
35
+ }): unknown;
36
+ /**
37
+ * Removes skipped nodes from legacy entries ("pruned legacy").
38
+ *
39
+ * A gap with an empty path drops its entity; any other path drops that subtree, then
40
+ * the lists and `options` the skips emptied (see `emptiedPaths`). Array items are
41
+ * removed, not nulled, so the remaining siblings keep their order. Paths refer to the
42
+ * original (unpruned) entity.
43
+ */
44
+ export declare function prune(options: PruneOptions): readonly LegacyEntry[];
45
+ /**
46
+ * Built counterpart of `prune`: removes from each built entity the lists and `options`
47
+ * its skips emptied, and from the built index its skipped top-level keys (a skipped
48
+ * constructor key such as `title` or `category` still appears with its SDK default).
49
+ */
50
+ export declare function pruneBuilt(options: {
51
+ readonly built: ComparableApplication;
52
+ readonly entries: readonly LegacyEntry[];
53
+ readonly gaps: ReadonlyArray<{
54
+ readonly location: GapLocation;
55
+ }>;
56
+ }): ComparableApplication;
57
+ export {};
58
+ //# sourceMappingURL=prune.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../../src/migrator/prune.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAiB,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAEpE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IACxC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;KAAE,CAAC,CAAA;CACjE;AAED,KAAK,IAAI,GAAG,SAAS,eAAe,EAAE,CAAA;AA0HtC;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;CACtD,GAAG,OAAO,CAKV;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;CACtD,GAAG,OAAO,CAIV;AAcD;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,WAAW,EAAE,CAgBnE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE;IAClC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IACxC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;KAAE,CAAC,CAAA;CACjE,GAAG,qBAAqB,CAkBxB"}
@@ -0,0 +1,171 @@
1
+ import { isPlainObject } from './normalize.js';
2
+ import { INDEX_REL_PATH } from './read-solution.js';
3
+ function pathKey(path) {
4
+ return JSON.stringify(path);
5
+ }
6
+ function pruneValue(options) {
7
+ const { value, path, skipped } = options;
8
+ if (Array.isArray(value)) {
9
+ const out = [];
10
+ value.forEach((item, index) => {
11
+ const childPath = [...path, index];
12
+ if (!skipped.has(pathKey(childPath))) {
13
+ out.push(pruneValue({ value: item, path: childPath, skipped }));
14
+ }
15
+ });
16
+ return out;
17
+ }
18
+ if (isPlainObject(value)) {
19
+ const out = {};
20
+ for (const [name, item] of Object.entries(value)) {
21
+ const childPath = [...path, name];
22
+ if (!skipped.has(pathKey(childPath))) {
23
+ out[name] = pruneValue({ value: item, path: childPath, skipped });
24
+ }
25
+ }
26
+ return out;
27
+ }
28
+ return value;
29
+ }
30
+ /**
31
+ * Paths the skips empty: a list whose items are all skipped, and an `options` object
32
+ * whose remaining keys are all such lists (or none). Builders create a slot on its first
33
+ * entry, so these are absent in the build and empty in the pruned legacy.
34
+ *
35
+ * Returned in pruned coordinates: list indices shift when siblings are removed.
36
+ */
37
+ function emptiedPaths(options) {
38
+ const { value, original, pruned, skipped } = options;
39
+ if (Array.isArray(value)) {
40
+ const out = [];
41
+ let next = 0;
42
+ value.forEach((item, index) => {
43
+ const at = [...original, index];
44
+ if (skipped.has(pathKey(at)))
45
+ return;
46
+ out.push(...emptiedPaths({ value: item, original: at, pruned: [...pruned, next], skipped }));
47
+ next++;
48
+ });
49
+ return value.length > 0 && next === 0 ? [pruned] : out;
50
+ }
51
+ if (isPlainObject(value)) {
52
+ const out = [];
53
+ const kept = [];
54
+ for (const [name, item] of Object.entries(value)) {
55
+ const at = [...original, name];
56
+ if (skipped.has(pathKey(at)))
57
+ continue;
58
+ kept.push(name);
59
+ out.push(...emptiedPaths({ value: item, original: at, pruned: [...pruned, name], skipped }));
60
+ }
61
+ const emptiedHere = new Set(out.filter((path) => path.length === pruned.length + 1).map((path) => pathKey(path)));
62
+ const optionsEmptied = pruned.at(-1) === 'options' &&
63
+ Object.keys(value).length > 0 &&
64
+ kept.every((name) => emptiedHere.has(pathKey([...pruned, name])));
65
+ return optionsEmptied ? [...out, pruned] : out;
66
+ }
67
+ return [];
68
+ }
69
+ /** Removes the values at `drop` when they are an empty list or object; everything else stays. */
70
+ function withoutEmptyAt(options) {
71
+ const { value, path, drop } = options;
72
+ if (Array.isArray(value)) {
73
+ return value.map((item, index) => withoutEmptyAt({ value: item, path: [...path, index], drop }));
74
+ }
75
+ if (isPlainObject(value)) {
76
+ const out = {};
77
+ for (const [name, item] of Object.entries(value)) {
78
+ const at = [...path, name];
79
+ const kept = withoutEmptyAt({ value: item, path: at, drop });
80
+ const empty = (Array.isArray(kept) || isPlainObject(kept)) && Object.keys(kept).length === 0;
81
+ if (empty && drop.has(pathKey(at)))
82
+ continue;
83
+ out[name] = kept;
84
+ }
85
+ return out;
86
+ }
87
+ return value;
88
+ }
89
+ function emptiedSet(options) {
90
+ const { value, path, skipped } = options;
91
+ return new Set(emptiedPaths({ value, original: path, pruned: path, skipped }).map((emptied) => pathKey(emptied)));
92
+ }
93
+ /**
94
+ * Removes skipped subtrees from one legacy value that sits at `path` inside its entity,
95
+ * then the lists and `options` the skips emptied. Gap paths are entity paths (like
96
+ * `GapRecord.location.path`).
97
+ */
98
+ export function pruneAt(options) {
99
+ const { value, path, gaps } = options;
100
+ const skipped = new Set(gaps.map((gap) => pathKey(gap.path)));
101
+ const pruned = pruneValue({ value, path, skipped });
102
+ return withoutEmptyAt({ value: pruned, path, drop: emptiedSet({ value, path, skipped }) });
103
+ }
104
+ /**
105
+ * Built counterpart of `pruneAt`: removes from the built value the lists and `options`
106
+ * that pruning `legacy` empties, when they are empty in the build too.
107
+ */
108
+ export function pruneBuiltAt(options) {
109
+ const { built, legacy, path, gaps } = options;
110
+ const skipped = new Set(gaps.map((gap) => pathKey(gap.path)));
111
+ return withoutEmptyAt({ value: built, path, drop: emptiedSet({ value: legacy, path, skipped }) });
112
+ }
113
+ function skippedByRelPath(gaps) {
114
+ const byRelPath = new Map();
115
+ for (const { location } of gaps) {
116
+ const paths = byRelPath.get(location.relPath) ?? new Set();
117
+ paths.add(pathKey(location.path));
118
+ byRelPath.set(location.relPath, paths);
119
+ }
120
+ return byRelPath;
121
+ }
122
+ /**
123
+ * Removes skipped nodes from legacy entries ("pruned legacy").
124
+ *
125
+ * A gap with an empty path drops its entity; any other path drops that subtree, then
126
+ * the lists and `options` the skips emptied (see `emptiedPaths`). Array items are
127
+ * removed, not nulled, so the remaining siblings keep their order. Paths refer to the
128
+ * original (unpruned) entity.
129
+ */
130
+ export function prune(options) {
131
+ const { entries, gaps } = options;
132
+ const byRelPath = skippedByRelPath(gaps);
133
+ const out = [];
134
+ for (const entry of entries) {
135
+ const skipped = byRelPath.get(entry.relPath);
136
+ if (!skipped) {
137
+ out.push(entry);
138
+ continue;
139
+ }
140
+ if (skipped.has(pathKey([])))
141
+ continue;
142
+ const pruned = pruneValue({ value: entry.entity, path: [], skipped });
143
+ const drop = emptiedSet({ value: entry.entity, path: [], skipped });
144
+ out.push({ ...entry, entity: withoutEmptyAt({ value: pruned, path: [], drop }) });
145
+ }
146
+ return out;
147
+ }
148
+ /**
149
+ * Built counterpart of `prune`: removes from each built entity the lists and `options`
150
+ * its skips emptied, and from the built index its skipped top-level keys (a skipped
151
+ * constructor key such as `title` or `category` still appears with its SDK default).
152
+ */
153
+ export function pruneBuilt(options) {
154
+ const { built, entries, gaps } = options;
155
+ const byRelPath = skippedByRelPath(gaps);
156
+ let out = built;
157
+ for (const entry of entries) {
158
+ const skipped = byRelPath.get(entry.relPath);
159
+ const builtEntity = out[entry.kind]?.[entry.id];
160
+ if (!skipped || builtEntity === undefined)
161
+ continue;
162
+ const drop = emptiedSet({ value: entry.entity, path: [], skipped });
163
+ let kept = withoutEmptyAt({ value: builtEntity, path: [], drop });
164
+ if (entry.relPath === INDEX_REL_PATH && isPlainObject(kept)) {
165
+ kept = Object.fromEntries(Object.entries(kept).filter(([name]) => !skipped.has(pathKey([name]))));
166
+ }
167
+ out = { ...out, [entry.kind]: { ...out[entry.kind], [entry.id]: kept } };
168
+ }
169
+ return out;
170
+ }
171
+ //# sourceMappingURL=prune.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/migrator/prune.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAoB,MAAM,oBAAoB,CAAA;AAWrE,SAAS,OAAO,CAAC,IAAU;IACzB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,UAAU,CAAC,OAInB;IACC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAc,EAAE,CAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAa,EAAE,KAAK,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAA;YAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACrC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;YACjE,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAA4B,EAAE,CAAA;QACvC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAA;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACrC,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;YACnE,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,OAOrB;IACC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAW,EAAE,CAAA;QACtB,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,KAAK,CAAC,OAAO,CAAC,CAAC,IAAa,EAAE,KAAK,EAAE,EAAE;YACrC,MAAM,EAAE,GAAG,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAAE,OAAM;YACpC,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;YAC5F,IAAI,EAAE,CAAA;QACR,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACxD,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAW,EAAE,CAAA;QACtB,MAAM,IAAI,GAAa,EAAE,CAAA;QACzB,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,EAAE,GAAG,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAA;YAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAAE,SAAQ;YACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QAC9F,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACrF,CAAA;QACD,MAAM,cAAc,GAClB,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;YAC3B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACnE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAChD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,iGAAiG;AACjG,SAAS,cAAc,CAAC,OAIvB;IACC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAa,EAAE,KAAK,EAAE,EAAE,CACxC,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAC9D,CAAA;IACH,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAA4B,EAAE,CAAA;QACvC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAA;YAC1B,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;YAC5D,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAA;YAC5F,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAAE,SAAQ;YAC5C,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;QAClB,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,UAAU,CAAC,OAInB;IACC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IACxC,OAAO,IAAI,GAAG,CACZ,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7E,OAAO,CAAC,OAAO,CAAC,CACjB,CACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,OAIvB;IACC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7D,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACnD,OAAO,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;AAC5F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAK5B;IACC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7D,OAAO,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;AACnG,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAuD;IAEvD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAA;IAChD,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAU,CAAA;QAClE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QACjC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,KAAK,CAAC,OAAqB;IACzC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IACjC,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACxC,MAAM,GAAG,GAAkB,EAAE,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACf,SAAQ;QACV,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAAE,SAAQ;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QACrE,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QACnE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;IACnF,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,OAI1B;IACC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IACxC,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACxC,IAAI,GAAG,GAAG,KAAK,CAAA;IACf,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC5C,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC/C,IAAI,CAAC,OAAO,IAAI,WAAW,KAAK,SAAS;YAAE,SAAQ;QACnD,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QACnE,IAAI,IAAI,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,IAAI,KAAK,CAAC,OAAO,KAAK,cAAc,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,IAAI,GAAG,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACvE,CAAA;QACH,CAAC;QACD,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAA;IAC1E,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,38 @@
1
+ /** Legacy folder kinds holding one `.jigx` entity per file. */
2
+ export type FolderKind = 'databases' | 'functions' | 'datasources' | 'actions' | 'components' | 'jigs' | 'translations' | 'assets';
3
+ /** Every entity kind of a legacy solution: the root `index.jigx`, the folder kinds and expression scripts. */
4
+ export type EntityKind = 'index' | FolderKind | 'scripts';
5
+ /** Register order of the generated `src/app.ts`; also the order of `readSolution` entries. */
6
+ export declare const ENTITY_KINDS: readonly EntityKind[];
7
+ export declare const FOLDER_KINDS: readonly FolderKind[];
8
+ /** One legacy entity: a `.jigx` file, the root `index.jigx`, or one `scripts/expressions/*.js` file. */
9
+ export interface LegacyEntry {
10
+ readonly kind: EntityKind;
11
+ /** Path relative to the solution dir, `/`-separated (e.g. `jigs/Orders/view-order.jigx`). */
12
+ readonly relPath: string;
13
+ /** File id: basename without `.jigx`; `index` for the root; the file name (with `.js`) for scripts. */
14
+ readonly id: string;
15
+ /** Parsed YAML value; the file content (string) for scripts. */
16
+ readonly entity: unknown;
17
+ }
18
+ export interface LegacySolution {
19
+ readonly entries: readonly LegacyEntry[];
20
+ /** Files that are not migrated (non-`.jigx` files in kind folders, non-script files, unknown root files). */
21
+ readonly ignored: readonly string[];
22
+ }
23
+ export interface ReadSolutionOptions {
24
+ readonly solutionDir: string;
25
+ }
26
+ /** relPath of the root index entity. */
27
+ export declare const INDEX_REL_PATH = "index.jigx";
28
+ /** Code-unit string order (locale independent, matches `Array.prototype.sort`). */
29
+ export declare function compareText(a: string, b: string): number;
30
+ /**
31
+ * Reads a legacy Jigx solution folder.
32
+ *
33
+ * Walks every kind folder recursively (nested subfolders keep their relPath),
34
+ * parses each `.jigx` file strictly and rejects duplicate ids within a kind.
35
+ * Only `scripts/expressions/*.js` are read as scripts; other files are listed as ignored.
36
+ */
37
+ export declare function readSolution(options: ReadSolutionOptions): Promise<LegacySolution>;
38
+ //# sourceMappingURL=read-solution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-solution.d.ts","sourceRoot":"","sources":["../../src/migrator/read-solution.ts"],"names":[],"mappings":"AAKA,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAClB,WAAW,GACX,WAAW,GACX,aAAa,GACb,SAAS,GACT,YAAY,GACZ,MAAM,GACN,cAAc,GACd,QAAQ,CAAA;AAEZ,8GAA8G;AAC9G,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAA;AAEzD,8FAA8F;AAC9F,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAW7C,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAS7C,CAAA;AAED,wGAAwG;AACxG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,uGAAuG;IACvG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IACxC,6GAA6G;IAC7G,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,wCAAwC;AACxC,eAAO,MAAM,cAAc,eAAe,CAAA;AAyC1C,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxD;AAMD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAmExF"}
@@ -0,0 +1,144 @@
1
+ import { readdir, readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { parseDocument } from 'yaml';
4
+ import { MigrateError } from './errors.js';
5
+ /** Register order of the generated `src/app.ts`; also the order of `readSolution` entries. */
6
+ export const ENTITY_KINDS = [
7
+ 'index',
8
+ 'databases',
9
+ 'functions',
10
+ 'datasources',
11
+ 'actions',
12
+ 'components',
13
+ 'jigs',
14
+ 'translations',
15
+ 'assets',
16
+ 'scripts',
17
+ ];
18
+ export const FOLDER_KINDS = [
19
+ 'databases',
20
+ 'functions',
21
+ 'datasources',
22
+ 'actions',
23
+ 'components',
24
+ 'jigs',
25
+ 'translations',
26
+ 'assets',
27
+ ];
28
+ /** relPath of the root index entity. */
29
+ export const INDEX_REL_PATH = 'index.jigx';
30
+ const INDEX_FILE = INDEX_REL_PATH;
31
+ const SCRIPTS_DIR = 'scripts';
32
+ const EXPRESSIONS_DIR = 'expressions';
33
+ function isFolderKind(name) {
34
+ return FOLDER_KINDS.some((kind) => kind === name);
35
+ }
36
+ function toPosix(relPath) {
37
+ return relPath.split(path.sep).join('/');
38
+ }
39
+ /** Parses one `.jigx` file strictly: duplicate keys, multiple documents and syntax errors fail. */
40
+ function parseJigx(options) {
41
+ const { relPath, source } = options;
42
+ const doc = parseDocument(source, { merge: true, uniqueKeys: true });
43
+ if (doc.errors.length > 0) {
44
+ const messages = doc.errors.map((error) => error.message.split('\n')[0]).join('; ');
45
+ throw new MigrateError(`Invalid YAML in ${relPath}: ${messages}`);
46
+ }
47
+ const value = doc.toJS();
48
+ if (value === null || value === undefined) {
49
+ throw new MigrateError(`Empty .jigx file: ${relPath}`);
50
+ }
51
+ return value;
52
+ }
53
+ async function listFiles(dir) {
54
+ try {
55
+ const entries = await readdir(dir, { recursive: true, withFileTypes: true });
56
+ return entries
57
+ .filter((entry) => entry.isFile() && !entry.name.startsWith('.'))
58
+ .map((entry) => path.relative(dir, path.join(entry.parentPath, entry.name)))
59
+ .sort();
60
+ }
61
+ catch (error) {
62
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT')
63
+ return [];
64
+ throw error;
65
+ }
66
+ }
67
+ /** Code-unit string order (locale independent, matches `Array.prototype.sort`). */
68
+ export function compareText(a, b) {
69
+ if (a === b)
70
+ return 0;
71
+ return a < b ? -1 : 1;
72
+ }
73
+ function kindOrder(kind) {
74
+ return ENTITY_KINDS.indexOf(kind);
75
+ }
76
+ /**
77
+ * Reads a legacy Jigx solution folder.
78
+ *
79
+ * Walks every kind folder recursively (nested subfolders keep their relPath),
80
+ * parses each `.jigx` file strictly and rejects duplicate ids within a kind.
81
+ * Only `scripts/expressions/*.js` are read as scripts; other files are listed as ignored.
82
+ */
83
+ export async function readSolution(options) {
84
+ const { solutionDir } = options;
85
+ const entries = [];
86
+ const ignored = [];
87
+ const rootEntries = await readdir(solutionDir, { withFileTypes: true }).catch((error) => {
88
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
89
+ throw new MigrateError(`Solution dir not found: ${solutionDir}`);
90
+ }
91
+ throw error;
92
+ });
93
+ if (!rootEntries.some((entry) => entry.isFile() && entry.name === INDEX_FILE)) {
94
+ throw new MigrateError(`Missing ${INDEX_FILE} in ${solutionDir}`);
95
+ }
96
+ for (const rootEntry of rootEntries) {
97
+ const name = rootEntry.name;
98
+ if (name.startsWith('.') || name === INDEX_FILE)
99
+ continue;
100
+ if (rootEntry.isDirectory() && (isFolderKind(name) || name === SCRIPTS_DIR))
101
+ continue;
102
+ ignored.push(rootEntry.isDirectory() ? `${name}/` : name);
103
+ }
104
+ const indexSource = await readFile(path.join(solutionDir, INDEX_FILE), 'utf8');
105
+ entries.push({
106
+ kind: 'index',
107
+ relPath: INDEX_FILE,
108
+ id: 'index',
109
+ entity: parseJigx({ relPath: INDEX_FILE, source: indexSource }),
110
+ });
111
+ for (const kind of FOLDER_KINDS) {
112
+ const kindDir = path.join(solutionDir, kind);
113
+ const seen = new Map();
114
+ for (const file of await listFiles(kindDir)) {
115
+ const relPath = toPosix(path.join(kind, file));
116
+ if (!file.endsWith('.jigx')) {
117
+ ignored.push(relPath);
118
+ continue;
119
+ }
120
+ const id = path.basename(file, '.jigx');
121
+ const previous = seen.get(id);
122
+ if (previous !== undefined) {
123
+ throw new MigrateError(`Duplicate ${kind} id "${id}": ${previous} and ${relPath}`);
124
+ }
125
+ seen.set(id, relPath);
126
+ const source = await readFile(path.join(kindDir, file), 'utf8');
127
+ entries.push({ kind, relPath, id, entity: parseJigx({ relPath, source }) });
128
+ }
129
+ }
130
+ const scriptsDir = path.join(solutionDir, SCRIPTS_DIR);
131
+ for (const file of await listFiles(scriptsDir)) {
132
+ const relPath = toPosix(path.join(SCRIPTS_DIR, file));
133
+ const isExpressionScript = path.dirname(file) === EXPRESSIONS_DIR && path.extname(file) === '.js';
134
+ if (!isExpressionScript) {
135
+ ignored.push(relPath);
136
+ continue;
137
+ }
138
+ const source = await readFile(path.join(scriptsDir, file), 'utf8');
139
+ entries.push({ kind: 'scripts', relPath, id: path.basename(file), entity: source });
140
+ }
141
+ entries.sort((a, b) => kindOrder(a.kind) - kindOrder(b.kind) || compareText(a.relPath, b.relPath));
142
+ return { entries, ignored: ignored.sort() };
143
+ }
144
+ //# sourceMappingURL=read-solution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-solution.js","sourceRoot":"","sources":["../../src/migrator/read-solution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /** Path segment inside a legacy entity: an object key or an array index. */
2
+ export type NodePathSegment = string | number;
3
+ /** Where a skipped node sits: the legacy file and the path inside it (`[]` for the whole entity). */
4
+ export interface GapLocation {
5
+ readonly relPath: string;
6
+ readonly path: readonly NodePathSegment[];
7
+ }
8
+ /**
9
+ * One skipped node, index key or entity.
10
+ *
11
+ * `gapId` is `<nodeType>:<reason-slug>` and links the report, the `// TODO(migrate)`
12
+ * comment, the gap registry and its expected-failure test.
13
+ */
14
+ export interface GapRecord {
15
+ readonly gapId: string;
16
+ readonly nodeType: string;
17
+ readonly reason: string;
18
+ /** The skipped node and all its descendant nodes. */
19
+ readonly skippedNodes: number;
20
+ readonly location: GapLocation;
21
+ }
22
+ /** A skipped node inside an entity: a `GapRecord` whose location is relative to the entity. */
23
+ export interface NodeGap {
24
+ readonly gapId: string;
25
+ readonly nodeType: string;
26
+ readonly reason: string;
27
+ /** The skipped node and all its descendant nodes. */
28
+ readonly skippedNodes: number;
29
+ /** Path of the skipped node inside its entity. */
30
+ readonly path: readonly NodePathSegment[];
31
+ }
32
+ export interface MigrationReport {
33
+ /** Exact `@jigx/core-sdk` version the migrator verified against (and the project pins). */
34
+ readonly coreSdkVersion: string;
35
+ readonly entities: {
36
+ readonly total: number;
37
+ readonly migrated: number;
38
+ readonly skipped: number;
39
+ };
40
+ /** `typed + skipped = total`. */
41
+ readonly nodes: {
42
+ readonly total: number;
43
+ readonly typed: number;
44
+ readonly skipped: number;
45
+ };
46
+ readonly gaps: readonly GapRecord[];
47
+ /** Solution files that are not migrated (relPaths). */
48
+ readonly ignored: readonly string[];
49
+ }
50
+ /**
51
+ * Counts the nodes in a value: nested nodes, plus the value itself when it is a node
52
+ * or when `asRoot` is set (an entity root always counts as one node).
53
+ */
54
+ export declare function countNodes(options: {
55
+ readonly value: unknown;
56
+ readonly asRoot: boolean;
57
+ }): number;
58
+ /** Stable gap order: by relPath, then path, then gapId. */
59
+ export declare function sortGaps(gaps: readonly GapRecord[]): readonly GapRecord[];
60
+ /** Totals of one gap id across the report. */
61
+ export interface GapSummary {
62
+ readonly gapId: string;
63
+ /** Gap records with this id. */
64
+ readonly occurrences: number;
65
+ /** Skipped nodes of all its records. */
66
+ readonly skippedNodes: number;
67
+ }
68
+ /**
69
+ * Groups gaps by `gapId`, largest first: by skipped nodes, then occurrences, then gapId.
70
+ * Returns at most `limit` entries (all when omitted).
71
+ */
72
+ export declare function summarizeGaps(options: {
73
+ readonly gaps: readonly GapRecord[];
74
+ readonly limit?: number;
75
+ }): readonly GapSummary[];
76
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/migrator/report.ts"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,CAAA;AAE7C,qGAAqG;AACrG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,CAAA;CAC1C;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;CAC/B;AAED,+FAA+F;AAC/F,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,CAAA;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,2FAA2F;IAC3F,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KACzB,CAAA;IACD,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KACzB,CAAA;IACD,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAA;IACnC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAsBD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAGjG;AAED,2DAA2D;AAC3D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,SAAS,EAAE,CAOzE;AAED,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gCAAgC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,wCAAwC;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC9B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAA;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB,GAAG,SAAS,UAAU,EAAE,CAiBxB"}