@integromat/module-migrator-core 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +11 -0
  2. package/cjs/lib/blueprint-parser.d.ts +7 -0
  3. package/cjs/lib/blueprint-parser.js +60 -0
  4. package/cjs/lib/blueprint-parser.js.map +1 -0
  5. package/cjs/lib/domain/field-entry.d.ts +16 -0
  6. package/cjs/lib/domain/field-entry.js +36 -0
  7. package/cjs/lib/domain/field-entry.js.map +1 -0
  8. package/cjs/lib/domain/field-mapping.d.ts +32 -0
  9. package/cjs/lib/domain/field-mapping.js +104 -0
  10. package/cjs/lib/domain/field-mapping.js.map +1 -0
  11. package/cjs/lib/domain/migration.d.ts +12 -0
  12. package/cjs/lib/domain/migration.js +19 -0
  13. package/cjs/lib/domain/migration.js.map +1 -0
  14. package/cjs/lib/errors/migration-error.d.ts +37 -0
  15. package/cjs/lib/errors/migration-error.js +53 -0
  16. package/cjs/lib/errors/migration-error.js.map +1 -0
  17. package/cjs/lib/expression-parser.d.ts +26 -0
  18. package/cjs/lib/expression-parser.js +155 -0
  19. package/cjs/lib/expression-parser.js.map +1 -0
  20. package/cjs/lib/migrator.d.ts +16 -0
  21. package/cjs/lib/migrator.js +264 -0
  22. package/cjs/lib/migrator.js.map +1 -0
  23. package/cjs/lib/ports/config-repository.d.ts +19 -0
  24. package/cjs/lib/ports/migration-service.d.ts +28 -0
  25. package/cjs/lib/schemas.d.ts +246 -0
  26. package/cjs/lib/types.d.ts +322 -0
  27. package/cjs/lib/types.js +81 -0
  28. package/cjs/lib/types.js.map +1 -0
  29. package/cjs/lib/utils/path.d.ts +25 -0
  30. package/cjs/lib/utils/path.js +55 -0
  31. package/cjs/lib/utils/path.js.map +1 -0
  32. package/cjs/lib/utils/type-guards.d.ts +16 -0
  33. package/cjs/lib/utils/type-guards.js +22 -0
  34. package/cjs/lib/utils/type-guards.js.map +1 -0
  35. package/cjs/lib/validation.d.ts +17 -0
  36. package/cjs/lib/validation.js +55 -0
  37. package/cjs/lib/validation.js.map +1 -0
  38. package/cjs/main.d.ts +9 -0
  39. package/cjs/main.js +24 -0
  40. package/cjs/main.js.map +1 -0
  41. package/esm/lib/blueprint-parser.d.ts +7 -0
  42. package/esm/lib/blueprint-parser.js +54 -0
  43. package/esm/lib/blueprint-parser.js.map +1 -0
  44. package/esm/lib/domain/field-entry.d.ts +16 -0
  45. package/esm/lib/domain/field-entry.js +32 -0
  46. package/esm/lib/domain/field-entry.js.map +1 -0
  47. package/esm/lib/domain/field-mapping.d.ts +32 -0
  48. package/esm/lib/domain/field-mapping.js +100 -0
  49. package/esm/lib/domain/field-mapping.js.map +1 -0
  50. package/esm/lib/domain/migration.d.ts +12 -0
  51. package/esm/lib/domain/migration.js +17 -0
  52. package/esm/lib/domain/migration.js.map +1 -0
  53. package/esm/lib/errors/migration-error.d.ts +37 -0
  54. package/esm/lib/errors/migration-error.js +50 -0
  55. package/esm/lib/errors/migration-error.js.map +1 -0
  56. package/esm/lib/expression-parser.d.ts +26 -0
  57. package/esm/lib/expression-parser.js +151 -0
  58. package/esm/lib/expression-parser.js.map +1 -0
  59. package/esm/lib/migrator.d.ts +16 -0
  60. package/esm/lib/migrator.js +262 -0
  61. package/esm/lib/migrator.js.map +1 -0
  62. package/esm/lib/ports/config-repository.d.ts +19 -0
  63. package/esm/lib/ports/migration-service.d.ts +28 -0
  64. package/esm/lib/schemas.d.ts +246 -0
  65. package/esm/lib/types.d.ts +322 -0
  66. package/esm/lib/types.js +74 -0
  67. package/esm/lib/types.js.map +1 -0
  68. package/esm/lib/utils/path.d.ts +25 -0
  69. package/esm/lib/utils/path.js +52 -0
  70. package/esm/lib/utils/path.js.map +1 -0
  71. package/esm/lib/utils/type-guards.d.ts +16 -0
  72. package/esm/lib/utils/type-guards.js +20 -0
  73. package/esm/lib/utils/type-guards.js.map +1 -0
  74. package/esm/lib/validation.d.ts +17 -0
  75. package/esm/lib/validation.js +51 -0
  76. package/esm/lib/validation.js.map +1 -0
  77. package/esm/main.d.ts +9 -0
  78. package/esm/main.js +6 -0
  79. package/esm/main.js.map +1 -0
  80. package/esm/package.json +3 -0
  81. package/package.json +35 -0
@@ -0,0 +1,322 @@
1
+ type KeepField = {
2
+ op: 'keep';
3
+ fields?: FieldMappings;
4
+ items?: FieldMappings;
5
+ };
6
+ type MapField = {
7
+ op: 'map';
8
+ to?: string;
9
+ toSection?: 'parameters' | 'mapper';
10
+ fields?: FieldMappings;
11
+ items?: FieldMappings;
12
+ };
13
+ type RemoveField = {
14
+ op: 'remove';
15
+ note?: string;
16
+ };
17
+ type FieldEntry = KeepField | MapField | RemoveField;
18
+ type FieldMappings = Record<string, FieldEntry>;
19
+ declare const FieldEntrySchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
20
+ op: import("@sinclair/typebox").TLiteral<"keep">;
21
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
22
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
23
+ }>, import("@sinclair/typebox").TObject<{
24
+ op: import("@sinclair/typebox").TLiteral<"map">;
25
+ to: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
26
+ toSection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"parameters">, import("@sinclair/typebox").TLiteral<"mapper">]>>;
27
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
28
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
29
+ }>, import("@sinclair/typebox").TObject<{
30
+ op: import("@sinclair/typebox").TLiteral<"remove">;
31
+ note: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
32
+ }>]>;
33
+ declare const FieldMappingsSchema: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
34
+ op: import("@sinclair/typebox").TLiteral<"keep">;
35
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
36
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
37
+ }>, import("@sinclair/typebox").TObject<{
38
+ op: import("@sinclair/typebox").TLiteral<"map">;
39
+ to: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
40
+ toSection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"parameters">, import("@sinclair/typebox").TLiteral<"mapper">]>>;
41
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
42
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
43
+ }>, import("@sinclair/typebox").TObject<{
44
+ op: import("@sinclair/typebox").TLiteral<"remove">;
45
+ note: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
46
+ }>]>>;
47
+ type MigrationConfigV1 = {
48
+ configVersion: '1.0';
49
+ from: {
50
+ module: string;
51
+ version: number;
52
+ };
53
+ to: {
54
+ module: string;
55
+ version: number;
56
+ };
57
+ parameters?: FieldMappings;
58
+ mapper?: FieldMappings;
59
+ outputs?: FieldMappings;
60
+ };
61
+ type Bundle = {
62
+ generatedAt: string;
63
+ migrations: MigrationConfigV1[];
64
+ };
65
+ declare const MigrationConfigV1Schema: import("@sinclair/typebox").TObject<{
66
+ configVersion: import("@sinclair/typebox").TLiteral<"1.0">;
67
+ from: import("@sinclair/typebox").TObject<{
68
+ module: import("@sinclair/typebox").TString;
69
+ version: import("@sinclair/typebox").TNumber;
70
+ }>;
71
+ to: import("@sinclair/typebox").TObject<{
72
+ module: import("@sinclair/typebox").TString;
73
+ version: import("@sinclair/typebox").TNumber;
74
+ }>;
75
+ parameters: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
76
+ op: import("@sinclair/typebox").TLiteral<"keep">;
77
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
78
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
79
+ }>, import("@sinclair/typebox").TObject<{
80
+ op: import("@sinclair/typebox").TLiteral<"map">;
81
+ to: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
82
+ toSection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"parameters">, import("@sinclair/typebox").TLiteral<"mapper">]>>;
83
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
84
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
85
+ }>, import("@sinclair/typebox").TObject<{
86
+ op: import("@sinclair/typebox").TLiteral<"remove">;
87
+ note: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
88
+ }>]>>>;
89
+ mapper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
90
+ op: import("@sinclair/typebox").TLiteral<"keep">;
91
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
92
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
93
+ }>, import("@sinclair/typebox").TObject<{
94
+ op: import("@sinclair/typebox").TLiteral<"map">;
95
+ to: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
96
+ toSection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"parameters">, import("@sinclair/typebox").TLiteral<"mapper">]>>;
97
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
98
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
99
+ }>, import("@sinclair/typebox").TObject<{
100
+ op: import("@sinclair/typebox").TLiteral<"remove">;
101
+ note: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
102
+ }>]>>>;
103
+ outputs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
104
+ op: import("@sinclair/typebox").TLiteral<"keep">;
105
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
106
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
107
+ }>, import("@sinclair/typebox").TObject<{
108
+ op: import("@sinclair/typebox").TLiteral<"map">;
109
+ to: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
110
+ toSection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"parameters">, import("@sinclair/typebox").TLiteral<"mapper">]>>;
111
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
112
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
113
+ }>, import("@sinclair/typebox").TObject<{
114
+ op: import("@sinclair/typebox").TLiteral<"remove">;
115
+ note: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
116
+ }>]>>>;
117
+ }>;
118
+ declare const BundleSchema: import("@sinclair/typebox").TObject<{
119
+ generatedAt: import("@sinclair/typebox").TString;
120
+ migrations: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
121
+ configVersion: import("@sinclair/typebox").TLiteral<"1.0">;
122
+ from: import("@sinclair/typebox").TObject<{
123
+ module: import("@sinclair/typebox").TString;
124
+ version: import("@sinclair/typebox").TNumber;
125
+ }>;
126
+ to: import("@sinclair/typebox").TObject<{
127
+ module: import("@sinclair/typebox").TString;
128
+ version: import("@sinclair/typebox").TNumber;
129
+ }>;
130
+ parameters: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
131
+ op: import("@sinclair/typebox").TLiteral<"keep">;
132
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
133
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
134
+ }>, import("@sinclair/typebox").TObject<{
135
+ op: import("@sinclair/typebox").TLiteral<"map">;
136
+ to: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
137
+ toSection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"parameters">, import("@sinclair/typebox").TLiteral<"mapper">]>>;
138
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
139
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
140
+ }>, import("@sinclair/typebox").TObject<{
141
+ op: import("@sinclair/typebox").TLiteral<"remove">;
142
+ note: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
143
+ }>]>>>;
144
+ mapper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
145
+ op: import("@sinclair/typebox").TLiteral<"keep">;
146
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
147
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
148
+ }>, import("@sinclair/typebox").TObject<{
149
+ op: import("@sinclair/typebox").TLiteral<"map">;
150
+ to: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
151
+ toSection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"parameters">, import("@sinclair/typebox").TLiteral<"mapper">]>>;
152
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
153
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
154
+ }>, import("@sinclair/typebox").TObject<{
155
+ op: import("@sinclair/typebox").TLiteral<"remove">;
156
+ note: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
157
+ }>]>>>;
158
+ outputs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
159
+ op: import("@sinclair/typebox").TLiteral<"keep">;
160
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
161
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
162
+ }>, import("@sinclair/typebox").TObject<{
163
+ op: import("@sinclair/typebox").TLiteral<"map">;
164
+ to: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
165
+ toSection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"parameters">, import("@sinclair/typebox").TLiteral<"mapper">]>>;
166
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
167
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRef<import("@sinclair/typebox").TSchema>>;
168
+ }>, import("@sinclair/typebox").TObject<{
169
+ op: import("@sinclair/typebox").TLiteral<"remove">;
170
+ note: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
171
+ }>]>>>;
172
+ }>>;
173
+ }>;
174
+ type FlowModule = {
175
+ id: number;
176
+ module: string;
177
+ version: number;
178
+ parameters?: Record<string, unknown> | undefined;
179
+ mapper?: Record<string, unknown> | undefined;
180
+ metadata?: {
181
+ designer?: {
182
+ x: number;
183
+ y: number;
184
+ } | undefined;
185
+ expect?: unknown[] | undefined;
186
+ interface?: unknown[] | undefined;
187
+ restore?: Record<string, unknown> | undefined;
188
+ parameters?: unknown[] | undefined;
189
+ };
190
+ routes?: {
191
+ flow: FlowModule[];
192
+ }[] | undefined;
193
+ };
194
+ type Blueprint = {
195
+ name: string;
196
+ flow: FlowModule[];
197
+ metadata: {
198
+ instant: boolean;
199
+ version: number;
200
+ scenario: Record<string, unknown>;
201
+ designer: {
202
+ orphans: FlowModule[];
203
+ };
204
+ zone: string;
205
+ notes: unknown[];
206
+ };
207
+ };
208
+ declare const FlowModuleSchema: import("@sinclair/typebox").TRecursive<import("@sinclair/typebox").TObject<{
209
+ id: import("@sinclair/typebox").TNumber;
210
+ module: import("@sinclair/typebox").TString;
211
+ version: import("@sinclair/typebox").TNumber;
212
+ parameters: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
213
+ mapper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
214
+ metadata: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
215
+ designer: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
216
+ x: import("@sinclair/typebox").TNumber;
217
+ y: import("@sinclair/typebox").TNumber;
218
+ }>>;
219
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>>;
220
+ interface: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>>;
221
+ restore: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
222
+ parameters: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>>;
223
+ }>>;
224
+ routes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
225
+ flow: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TThis>;
226
+ }>>>;
227
+ }>>;
228
+ declare const BlueprintSchema: import("@sinclair/typebox").TObject<{
229
+ name: import("@sinclair/typebox").TString;
230
+ flow: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TRecursive<import("@sinclair/typebox").TObject<{
231
+ id: import("@sinclair/typebox").TNumber;
232
+ module: import("@sinclair/typebox").TString;
233
+ version: import("@sinclair/typebox").TNumber;
234
+ parameters: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
235
+ mapper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
236
+ metadata: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
237
+ designer: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
238
+ x: import("@sinclair/typebox").TNumber;
239
+ y: import("@sinclair/typebox").TNumber;
240
+ }>>;
241
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>>;
242
+ interface: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>>;
243
+ restore: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
244
+ parameters: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>>;
245
+ }>>;
246
+ routes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
247
+ flow: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TThis>;
248
+ }>>>;
249
+ }>>>;
250
+ metadata: import("@sinclair/typebox").TObject<{
251
+ instant: import("@sinclair/typebox").TBoolean;
252
+ version: import("@sinclair/typebox").TNumber;
253
+ scenario: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>;
254
+ designer: import("@sinclair/typebox").TObject<{
255
+ orphans: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TRecursive<import("@sinclair/typebox").TObject<{
256
+ id: import("@sinclair/typebox").TNumber;
257
+ module: import("@sinclair/typebox").TString;
258
+ version: import("@sinclair/typebox").TNumber;
259
+ parameters: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
260
+ mapper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
261
+ metadata: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
262
+ designer: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
263
+ x: import("@sinclair/typebox").TNumber;
264
+ y: import("@sinclair/typebox").TNumber;
265
+ }>>;
266
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>>;
267
+ interface: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>>;
268
+ restore: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
269
+ parameters: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>>;
270
+ }>>;
271
+ routes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
272
+ flow: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TThis>;
273
+ }>>>;
274
+ }>>>;
275
+ }>;
276
+ zone: import("@sinclair/typebox").TString;
277
+ notes: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>;
278
+ }>;
279
+ }>;
280
+ type MigrationReport = {
281
+ summary: {
282
+ totalModules: number;
283
+ deprecatedFound: number;
284
+ migrated: number;
285
+ warnings: number;
286
+ infos: number;
287
+ };
288
+ modules: ModuleReport[];
289
+ };
290
+ type ModuleReport = {
291
+ moduleId: number;
292
+ fromModule: string;
293
+ toModule: string;
294
+ messages: ReportMessage[];
295
+ };
296
+ type ReportMessage = {
297
+ type: 'warning' | 'info';
298
+ category: 'input' | 'output' | 'reference';
299
+ field: string;
300
+ message: string;
301
+ note?: string | undefined;
302
+ certain: boolean;
303
+ referencedBy?: number[] | undefined;
304
+ autoFixed?: boolean | undefined;
305
+ };
306
+ type DeprecatedModule = {
307
+ id: number;
308
+ fromModule: string;
309
+ toModule: string;
310
+ toVersion: number;
311
+ flowModule: FlowModule;
312
+ };
313
+ /**
314
+ * Flattened representation of a field entry with full path.
315
+ */
316
+ type FlatFieldEntry = {
317
+ field: string;
318
+ mapsTo: string | undefined;
319
+ note?: string | undefined;
320
+ };
321
+ export { BlueprintSchema, BundleSchema, FieldEntrySchema, FieldMappingsSchema, FlowModuleSchema, MigrationConfigV1Schema, };
322
+ export type { Blueprint, Bundle, DeprecatedModule, FieldEntry, FieldMappings, FlatFieldEntry, FlowModule, KeepField, MapField, MigrationConfigV1, MigrationReport, ModuleReport, RemoveField, ReportMessage, };
@@ -0,0 +1,74 @@
1
+ import { Type } from '@sinclair/typebox';
2
+
3
+ // Field Entry Schemas (mirror the types above)
4
+ const KeepFieldSchema = Type.Object({
5
+ op: Type.Literal('keep'),
6
+ fields: Type.Optional(Type.Ref('FieldMappings')),
7
+ items: Type.Optional(Type.Ref('FieldMappings')),
8
+ });
9
+ const MapFieldSchema = Type.Object({
10
+ op: Type.Literal('map'),
11
+ to: Type.Optional(Type.String()),
12
+ toSection: Type.Optional(Type.Union([Type.Literal('parameters'), Type.Literal('mapper')])),
13
+ fields: Type.Optional(Type.Ref('FieldMappings')),
14
+ items: Type.Optional(Type.Ref('FieldMappings')),
15
+ });
16
+ const RemoveFieldSchema = Type.Object({
17
+ op: Type.Literal('remove'),
18
+ note: Type.Optional(Type.String()),
19
+ });
20
+ const FieldEntrySchema = Type.Union([KeepFieldSchema, MapFieldSchema, RemoveFieldSchema], {
21
+ $id: 'FieldEntry',
22
+ });
23
+ const FieldMappingsSchema = Type.Record(Type.String(), FieldEntrySchema, {
24
+ $id: 'FieldMappings',
25
+ });
26
+ // Migration Config Schemas
27
+ const ModuleRefSchema = Type.Object({
28
+ module: Type.String(),
29
+ version: Type.Number(),
30
+ });
31
+ const MigrationConfigV1Schema = Type.Object({
32
+ configVersion: Type.Literal('1.0'),
33
+ from: ModuleRefSchema,
34
+ to: ModuleRefSchema,
35
+ parameters: Type.Optional(FieldMappingsSchema),
36
+ mapper: Type.Optional(FieldMappingsSchema),
37
+ outputs: Type.Optional(FieldMappingsSchema),
38
+ });
39
+ const BundleSchema = Type.Object({
40
+ generatedAt: Type.String(),
41
+ migrations: Type.Array(MigrationConfigV1Schema),
42
+ });
43
+ // Flow Module Schemas
44
+ const FlowModuleMetadataSchema = Type.Optional(Type.Object({
45
+ designer: Type.Optional(Type.Object({ x: Type.Number(), y: Type.Number() })),
46
+ expect: Type.Optional(Type.Array(Type.Unknown())),
47
+ interface: Type.Optional(Type.Array(Type.Unknown())),
48
+ restore: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
49
+ parameters: Type.Optional(Type.Array(Type.Unknown())),
50
+ }));
51
+ const FlowModuleSchema = Type.Recursive((self) => Type.Object({
52
+ id: Type.Number(),
53
+ module: Type.String(),
54
+ version: Type.Number(),
55
+ parameters: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
56
+ mapper: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
57
+ metadata: FlowModuleMetadataSchema,
58
+ routes: Type.Optional(Type.Array(Type.Object({ flow: Type.Array(self) }))),
59
+ }));
60
+ const BlueprintSchema = Type.Object({
61
+ name: Type.String(),
62
+ flow: Type.Array(FlowModuleSchema),
63
+ metadata: Type.Object({
64
+ instant: Type.Boolean(),
65
+ version: Type.Number(),
66
+ scenario: Type.Record(Type.String(), Type.Unknown()),
67
+ designer: Type.Object({ orphans: Type.Array(FlowModuleSchema) }),
68
+ zone: Type.String(),
69
+ notes: Type.Array(Type.Unknown()),
70
+ }),
71
+ });
72
+
73
+ export { BlueprintSchema, BundleSchema, FieldEntrySchema, FieldMappingsSchema, FlowModuleSchema, MigrationConfigV1Schema };
74
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../src/lib/types.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Path parsing utilities for field references.
3
+ * Handles paths like "a.b[0].c" → ["a", "b", 0, "c"]
4
+ */
5
+ /**
6
+ * Parses a dot/bracket notation path into an array of segments.
7
+ * Numbers are parsed as numeric indices.
8
+ *
9
+ * @example
10
+ * parsePath("a.b[0].c") // ["a", "b", 0, "c"]
11
+ * parsePath("1.key.0.asdasd[1].hello") // [1, "key", 0, "asdasd", 1, "hello"]
12
+ * parsePath("items[0].name") // ["items", 0, "name"]
13
+ */
14
+ declare const parsePath: (path: string) => (string | number)[];
15
+ /**
16
+ * Gets the root field name from a path.
17
+ * Returns empty string if path is empty.
18
+ *
19
+ * @example
20
+ * getRootField("user.name") // "user"
21
+ * getRootField("items[0].value") // "items"
22
+ * getRootField("") // ""
23
+ */
24
+ declare const getRootField: (path: string) => string;
25
+ export { getRootField, parsePath };
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Path parsing utilities for field references.
3
+ * Handles paths like "a.b[0].c" → ["a", "b", 0, "c"]
4
+ */
5
+ /**
6
+ * Parses a dot/bracket notation path into an array of segments.
7
+ * Numbers are parsed as numeric indices.
8
+ *
9
+ * @example
10
+ * parsePath("a.b[0].c") // ["a", "b", 0, "c"]
11
+ * parsePath("1.key.0.asdasd[1].hello") // [1, "key", 0, "asdasd", 1, "hello"]
12
+ * parsePath("items[0].name") // ["items", 0, "name"]
13
+ */
14
+ const parsePath = (path) => {
15
+ if (!path) {
16
+ return [];
17
+ }
18
+ const segments = [];
19
+ // Match either bracket notation [index] or dot notation segments
20
+ const regex = /\[(\d+)\]|([^.[\]]+)/g;
21
+ let match;
22
+ while ((match = regex.exec(path)) !== null) {
23
+ if (match[1] !== undefined) {
24
+ // Bracket notation - always numeric index
25
+ segments.push(Number(match[1]));
26
+ }
27
+ else if (match[2] !== undefined) {
28
+ // Dot notation segment - could be number or string
29
+ const segment = match[2];
30
+ const asNumber = Number(segment);
31
+ segments.push(Number.isNaN(asNumber) ? segment : asNumber);
32
+ }
33
+ }
34
+ return segments;
35
+ };
36
+ /**
37
+ * Gets the root field name from a path.
38
+ * Returns empty string if path is empty.
39
+ *
40
+ * @example
41
+ * getRootField("user.name") // "user"
42
+ * getRootField("items[0].value") // "items"
43
+ * getRootField("") // ""
44
+ */
45
+ const getRootField = (path) => {
46
+ const segments = parsePath(path);
47
+ const first = segments.at(0);
48
+ return first === undefined ? '' : String(first);
49
+ };
50
+
51
+ export { getRootField, parsePath };
52
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sources":["../../../src/lib/utils/path.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;AAGG;AAEH;;;;;;;;AAQG;AACH,MAAM,SAAS,GAAG,CAAC,IAAY,KAAyB;IACvD,IAAI,CAAC,IAAI,EAAE;AACV,QAAA,OAAO,EAAE;IACV;IAEA,MAAM,QAAQ,GAAwB,EAAE;;IAExC,MAAM,KAAK,GAAG,uBAAuB;AACrC,IAAA,IAAI,KAA6B;AAEjC,IAAA,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;AAC3C,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;;YAE3B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC;AAAO,aAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;;AAElC,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;AACxB,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAChC,YAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC;QAC3D;IACD;AAEA,IAAA,OAAO,QAAQ;AAChB;AAEA;;;;;;;;AAQG;AACH,MAAM,YAAY,GAAG,CAAC,IAAY,KAAY;AAC7C,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5B,IAAA,OAAO,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;AAChD;;;;"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Type guard utilities for runtime type checking.
3
+ */
4
+ /**
5
+ * Checks if a value is a plain object (not null, not an array).
6
+ * This is a type guard that narrows the type to Record<string, unknown>.
7
+ *
8
+ * @example
9
+ * isPlainObject({}) // true
10
+ * isPlainObject({ a: 1 }) // true
11
+ * isPlainObject([]) // false
12
+ * isPlainObject(null) // false
13
+ * isPlainObject("string") // false
14
+ */
15
+ declare const isPlainObject: (value: unknown) => value is Record<string, unknown>;
16
+ export { isPlainObject };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Type guard utilities for runtime type checking.
3
+ */
4
+ /**
5
+ * Checks if a value is a plain object (not null, not an array).
6
+ * This is a type guard that narrows the type to Record<string, unknown>.
7
+ *
8
+ * @example
9
+ * isPlainObject({}) // true
10
+ * isPlainObject({ a: 1 }) // true
11
+ * isPlainObject([]) // false
12
+ * isPlainObject(null) // false
13
+ * isPlainObject("string") // false
14
+ */
15
+ const isPlainObject = (value) => {
16
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
17
+ };
18
+
19
+ export { isPlainObject };
20
+ //# sourceMappingURL=type-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-guards.js","sources":["../../../src/lib/utils/type-guards.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;AAEG;AAEH;;;;;;;;;;AAUG;AACH,MAAM,aAAa,GAAG,CAAC,KAAc,KAAsC;AAC1E,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC5E;;;;"}
@@ -0,0 +1,17 @@
1
+ import type { Blueprint, Bundle } from './types.ts';
2
+ /**
3
+ * Validates a blueprint using TypeBox schema.
4
+ * Throws MigrationError if validation fails.
5
+ */
6
+ declare const validateBlueprint: (value: unknown) => Blueprint;
7
+ /**
8
+ * Validates a bundle using TypeBox schema.
9
+ * Throws MigrationError if validation fails.
10
+ */
11
+ declare const validateBundle: (value: unknown) => Bundle;
12
+ /**
13
+ * Validates an array of module IDs.
14
+ * Throws MigrationError if validation fails.
15
+ */
16
+ declare const validateModuleIds: (value: unknown) => number[];
17
+ export { validateBlueprint, validateBundle, validateModuleIds };
@@ -0,0 +1,51 @@
1
+ import { Type } from '@sinclair/typebox';
2
+ import { Value } from '@sinclair/typebox/value';
3
+ import { MigrationError, MigrationErrorCode } from './errors/migration-error.js';
4
+ import { BlueprintSchema, BundleSchema } from './types.js';
5
+
6
+ /**
7
+ * Validates a blueprint using TypeBox schema.
8
+ * Throws MigrationError if validation fails.
9
+ */
10
+ const validateBlueprint = (value) => {
11
+ if (!Value.Check(BlueprintSchema, value)) {
12
+ const errors = [...Value.Errors(BlueprintSchema, value)];
13
+ const firstError = errors[0];
14
+ const errorMessage = firstError
15
+ ? `Invalid blueprint: ${firstError.message} at ${firstError.path}`
16
+ : 'Invalid blueprint structure';
17
+ throw new MigrationError(MigrationErrorCode.INVALID_BLUEPRINT, errorMessage);
18
+ }
19
+ // TypeBox validation guarantees structure, cast is safe
20
+ return value;
21
+ };
22
+ /**
23
+ * Validates a bundle using TypeBox schema.
24
+ * Throws MigrationError if validation fails.
25
+ */
26
+ const validateBundle = (value) => {
27
+ if (!Value.Check(BundleSchema, value)) {
28
+ const errors = [...Value.Errors(BundleSchema, value)];
29
+ const firstError = errors[0];
30
+ const errorMessage = firstError
31
+ ? `Invalid bundle: ${firstError.message} at ${firstError.path}`
32
+ : 'Invalid bundle structure';
33
+ throw new MigrationError(MigrationErrorCode.INVALID_BUNDLE, errorMessage);
34
+ }
35
+ // TypeBox validation guarantees structure, cast is safe
36
+ return value;
37
+ };
38
+ /**
39
+ * Validates an array of module IDs.
40
+ * Throws MigrationError if validation fails.
41
+ */
42
+ const validateModuleIds = (value) => {
43
+ const ModuleIdsSchema = Type.Array(Type.Integer());
44
+ if (!Value.Check(ModuleIdsSchema, value)) {
45
+ throw new MigrationError(MigrationErrorCode.INVALID_BLUEPRINT, 'Module IDs must be an array of integers');
46
+ }
47
+ return value;
48
+ };
49
+
50
+ export { validateBlueprint, validateBundle, validateModuleIds };
51
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sources":["../../src/lib/validation.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAOA;;;AAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,KAAc,KAAe;IACvD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE;AACzC,QAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AACxD,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,YAAY,GAAG;cAClB,sBAAsB,UAAU,CAAC,OAAO,CAAA,IAAA,EAAO,UAAU,CAAC,IAAI,CAAA;cAC9D,6BAA6B;QAChC,MAAM,IAAI,cAAc,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,YAAY,CAAC;IAC7E;;AAEA,IAAA,OAAO,KAAkB;AAC1B;AAEA;;;AAGG;AACH,MAAM,cAAc,GAAG,CAAC,KAAc,KAAY;IACjD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;AACtC,QAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACrD,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,YAAY,GAAG;cAClB,mBAAmB,UAAU,CAAC,OAAO,CAAA,IAAA,EAAO,UAAU,CAAC,IAAI,CAAA;cAC3D,0BAA0B;QAC7B,MAAM,IAAI,cAAc,CAAC,kBAAkB,CAAC,cAAc,EAAE,YAAY,CAAC;IAC1E;;AAEA,IAAA,OAAO,KAAe;AACvB;AAEA;;;AAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,KAAc,KAAc;IACtD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAClD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE;QACzC,MAAM,IAAI,cAAc,CACvB,kBAAkB,CAAC,iBAAiB,EACpC,yCAAyC,CACzC;IACF;AACA,IAAA,OAAO,KAAK;AACb;;;;"}
package/esm/main.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export { cloneBlueprint, collectAllModules, findDeprecatedModules, parseBlueprint, serializeBlueprint, } from './lib/blueprint-parser.ts';
2
+ export { getFieldMapsTo, getFieldNote, isFieldRemoved } from './lib/domain/field-entry.ts';
3
+ export { findMigration } from './lib/domain/migration.ts';
4
+ export type { FieldReference } from './lib/expression-parser.ts';
5
+ export { findAllReferences, parseExpressions, rewriteReferences } from './lib/expression-parser.ts';
6
+ export { migrateBlueprint } from './lib/migrator.ts';
7
+ export type { ConfigRepository } from './lib/ports/config-repository.ts';
8
+ export type { MigrationService } from './lib/ports/migration-service.ts';
9
+ export type { Blueprint, Bundle, DeprecatedModule, FieldEntry, FieldMappings, FlowModule, KeepField, MapField, MigrationConfigV1, MigrationReport, ModuleReport, RemoveField, ReportMessage, } from './lib/types.ts';
package/esm/main.js ADDED
@@ -0,0 +1,6 @@
1
+ export { cloneBlueprint, collectAllModules, findDeprecatedModules, parseBlueprint, serializeBlueprint } from './lib/blueprint-parser.js';
2
+ export { getFieldMapsTo, getFieldNote, isFieldRemoved } from './lib/domain/field-entry.js';
3
+ export { findMigration } from './lib/domain/migration.js';
4
+ export { findAllReferences, parseExpressions, rewriteReferences } from './lib/expression-parser.js';
5
+ export { migrateBlueprint } from './lib/migrator.js';
6
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }