on-zero 0.4.1 → 0.4.3

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 (41) hide show
  1. package/dist/cjs/generate-helpers.cjs +309 -0
  2. package/dist/cjs/generate-helpers.native.js +451 -0
  3. package/dist/cjs/generate-helpers.native.js.map +1 -0
  4. package/dist/cjs/generate-lite.cjs +150 -0
  5. package/dist/cjs/generate-lite.native.js +269 -0
  6. package/dist/cjs/generate-lite.native.js.map +1 -0
  7. package/dist/cjs/generate-lite.test.cjs +229 -0
  8. package/dist/cjs/generate-lite.test.native.js +234 -0
  9. package/dist/cjs/generate-lite.test.native.js.map +1 -0
  10. package/dist/cjs/generate.cjs +16 -285
  11. package/dist/cjs/generate.native.js +18 -432
  12. package/dist/cjs/generate.native.js.map +1 -1
  13. package/dist/esm/generate-helpers.mjs +272 -0
  14. package/dist/esm/generate-helpers.mjs.map +1 -0
  15. package/dist/esm/generate-helpers.native.js +411 -0
  16. package/dist/esm/generate-helpers.native.js.map +1 -0
  17. package/dist/esm/generate-lite.mjs +127 -0
  18. package/dist/esm/generate-lite.mjs.map +1 -0
  19. package/dist/esm/generate-lite.native.js +243 -0
  20. package/dist/esm/generate-lite.native.js.map +1 -0
  21. package/dist/esm/generate-lite.test.mjs +230 -0
  22. package/dist/esm/generate-lite.test.mjs.map +1 -0
  23. package/dist/esm/generate-lite.test.native.js +232 -0
  24. package/dist/esm/generate-lite.test.native.js.map +1 -0
  25. package/dist/esm/generate.mjs +6 -275
  26. package/dist/esm/generate.mjs.map +1 -1
  27. package/dist/esm/generate.native.js +9 -423
  28. package/dist/esm/generate.native.js.map +1 -1
  29. package/package.json +7 -2
  30. package/src/generate-helpers.ts +440 -0
  31. package/src/generate-lite.test.ts +310 -0
  32. package/src/generate-lite.ts +333 -0
  33. package/src/generate.ts +23 -415
  34. package/types/generate-helpers.d.ts +42 -0
  35. package/types/generate-helpers.d.ts.map +1 -0
  36. package/types/generate-lite.d.ts +40 -0
  37. package/types/generate-lite.d.ts.map +1 -0
  38. package/types/generate-lite.test.d.ts +2 -0
  39. package/types/generate-lite.test.d.ts.map +1 -0
  40. package/types/generate.d.ts +1 -6
  41. package/types/generate.d.ts.map +1 -1
@@ -0,0 +1,411 @@
1
+ function shouldSkipObjectKey(name) {
2
+ return name.startsWith("__@");
3
+ }
4
+ function formatObjectKey(name) {
5
+ return /^[$A-Z_a-z][$\w]*$/.test(name) ? name : JSON.stringify(name);
6
+ }
7
+ function getModelImportName(name) {
8
+ return name === "user" ? "userPublic" : name;
9
+ }
10
+ function parseTypeString(type) {
11
+ if (type = type.trim(), type === "string") return "v.string()";
12
+ if (type === "number") return "v.number()";
13
+ if (type === "boolean") return "v.boolean()";
14
+ if (type === "void" || type === "undefined") return "v.void_()";
15
+ if (type === "null") return "v.null_()";
16
+ if (type === "any" || type === "unknown") return "v.unknown()";
17
+ if (type.startsWith("{") && type.endsWith("}")) {
18
+ var inner = type.slice(1, -1).trim();
19
+ if (!inner) return "v.object({})";
20
+ var normalized = inner.replace(/\n/g, "; ").replace(/;\s*;/g, ";"),
21
+ entries = [],
22
+ _iteratorNormalCompletion = !0,
23
+ _didIteratorError = !1,
24
+ _iteratorError = void 0;
25
+ try {
26
+ for (var _iterator = normalized.split(";")[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
27
+ var part = _step.value,
28
+ trimmed = part.trim().replace(/,\s*$/, "");
29
+ if (trimmed) {
30
+ var match = trimmed.match(/^(?:readonly\s+)?(\w+)(\?)?:\s*(.+)$/);
31
+ if (match) {
32
+ var [, name, opt, typeStr] = match,
33
+ parsed = parseTypeString(typeStr.trim());
34
+ if (!parsed) return null;
35
+ var val = parsed;
36
+ opt && (val = `v.optional(${val})`), entries.push(`${formatObjectKey(name)}: ${val}`);
37
+ }
38
+ }
39
+ }
40
+ } catch (err) {
41
+ _didIteratorError = !0, _iteratorError = err;
42
+ } finally {
43
+ try {
44
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
45
+ } finally {
46
+ if (_didIteratorError) throw _iteratorError;
47
+ }
48
+ }
49
+ return entries.length === 0 ? "v.object({})" : `v.object({
50
+ ${entries.join(`,
51
+ `)},
52
+ })`;
53
+ }
54
+ if (type.endsWith("[]")) {
55
+ var inner1 = parseTypeString(type.slice(0, -2).trim());
56
+ return inner1 ? `v.array(${inner1})` : null;
57
+ }
58
+ return null;
59
+ }
60
+ function generateModelsFile(modelNames, modelsDirName) {
61
+ var sorted = [...modelNames].sort(),
62
+ imports = sorted.map(function (name) {
63
+ return `import * as ${getModelImportName(name)} from '../${modelsDirName}/${name}'`;
64
+ }).join(`
65
+ `),
66
+ sortedByImportName = [...sorted].sort(function (a, b) {
67
+ return getModelImportName(a).localeCompare(getModelImportName(b));
68
+ }),
69
+ modelsObj = `export const models = {
70
+ ${sortedByImportName.map(function (name) {
71
+ return ` ${getModelImportName(name)},`;
72
+ }).join(`
73
+ `)}
74
+ }`;
75
+ return `// auto-generated by: on-zero generate
76
+ ${imports}
77
+
78
+ ${modelsObj}
79
+ `;
80
+ }
81
+ function generateTypesFile(modelNames) {
82
+ var sorted = [...modelNames].sort(),
83
+ typeExports = sorted.map(function (name) {
84
+ var pascalName = name.charAt(0).toUpperCase() + name.slice(1),
85
+ schemaName = getModelImportName(name);
86
+ return `export type ${pascalName} = TableInsertRow<typeof schema.${schemaName}>
87
+ export type ${pascalName}Update = TableUpdateRow<typeof schema.${schemaName}>`;
88
+ }).join(`
89
+
90
+ `);
91
+ return `import type { TableInsertRow, TableUpdateRow } from 'on-zero'
92
+ import type * as schema from './tables'
93
+
94
+ ${typeExports}
95
+ `;
96
+ }
97
+ function generateTablesFile(modelNames, modelsDirName) {
98
+ var sorted = [...modelNames].sort(),
99
+ exports = sorted.map(function (name) {
100
+ return `export { schema as ${getModelImportName(name)} } from '../${modelsDirName}/${name}'`;
101
+ }).join(`
102
+ `);
103
+ return `// auto-generated by: on-zero generate
104
+
105
+ ${exports}
106
+ `;
107
+ }
108
+ function generateReadmeFile() {
109
+ return `# generated
110
+
111
+ this folder is auto-generated by on-zero. do not edit files here directly.
112
+
113
+ ## what's generated
114
+
115
+ - \`models.ts\` - exports all models from ../models
116
+ - \`types.ts\` - typescript types derived from table schemas
117
+ - \`tables.ts\` - exports table schemas for type inference
118
+ - \`groupedQueries.ts\` - namespaced query re-exports for client setup
119
+ - \`syncedQueries.ts\` - namespaced syncedQuery wrappers for server setup
120
+ - \`syncedMutations.ts\` - valibot validators for mutation args (server auto-validation)
121
+
122
+ ## usage guidelines
123
+
124
+ **do not import generated files outside of the data folder.**
125
+
126
+ ### queries
127
+
128
+ write your queries as plain functions in \`../queries/\` and import them directly:
129
+
130
+ \`\`\`ts
131
+ // \u2705 good - import from queries
132
+ import { channelMessages } from '~/data/queries/message'
133
+ \`\`\`
134
+
135
+ the generated query files are only used internally by zero client/server setup.
136
+
137
+ ### types
138
+
139
+ you can import types from this folder, but prefer re-exporting from \`../types.ts\`:
140
+
141
+ \`\`\`ts
142
+ // \u274C okay but not preferred
143
+ import type { Message } from '~/data/generated/types'
144
+
145
+ // \u2705 better - re-export from types.ts
146
+ import type { Message } from '~/data/types'
147
+ \`\`\`
148
+
149
+ ## regeneration
150
+
151
+ files are regenerated when you run:
152
+
153
+ \`\`\`bash
154
+ bun on-zero generate
155
+ \`\`\`
156
+
157
+ or in watch mode:
158
+
159
+ \`\`\`bash
160
+ bun on-zero generate --watch
161
+ \`\`\`
162
+
163
+ ## more info
164
+
165
+ see the [on-zero readme](./node_modules/on-zero/README.md) for full documentation.
166
+ `;
167
+ }
168
+ function generateGroupedQueriesFile(queries) {
169
+ var sortedFiles = [...new Set(queries.map(function (q) {
170
+ return q.sourceFile;
171
+ }))].sort(),
172
+ exports = sortedFiles.map(function (file) {
173
+ return `export * as ${file} from '../queries/${file}'`;
174
+ }).join(`
175
+ `);
176
+ return `/**
177
+ * auto-generated by: on-zero generate
178
+ *
179
+ * grouped query re-exports for minification-safe query identity.
180
+ * this file re-exports all query modules - while this breaks tree-shaking,
181
+ * queries are typically small and few in number even in larger apps.
182
+ */
183
+ ${exports}
184
+ `;
185
+ }
186
+ function generateSyncedQueriesFile(queries) {
187
+ var queryByFile = /* @__PURE__ */new Map(),
188
+ _iteratorNormalCompletion = !0,
189
+ _didIteratorError = !1,
190
+ _iteratorError = void 0;
191
+ try {
192
+ for (var _iterator = queries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
193
+ var q = _step.value;
194
+ queryByFile.has(q.sourceFile) || queryByFile.set(q.sourceFile, []), queryByFile.get(q.sourceFile).push(q);
195
+ }
196
+ } catch (err) {
197
+ _didIteratorError = !0, _iteratorError = err;
198
+ } finally {
199
+ try {
200
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
201
+ } finally {
202
+ if (_didIteratorError) throw _iteratorError;
203
+ }
204
+ }
205
+ var sortedFiles = Array.from(queryByFile.keys()).sort(),
206
+ imports = `// auto-generated by: on-zero generate
207
+ // server-side query definitions with validators
208
+ import { defineQuery, defineQueries } from '@rocicorp/zero'
209
+ import * as v from 'valibot'
210
+ import * as Queries from './groupedQueries'
211
+ `,
212
+ namespaceDefs = sortedFiles.map(function (file) {
213
+ var fileQueries = queryByFile.get(file).sort(function (a, b) {
214
+ return a.name.localeCompare(b.name);
215
+ }),
216
+ queryDefs = fileQueries.map(function (q2) {
217
+ var validatorDef = q2.valibotCode.trim();
218
+ if (q2.params === "void" || !validatorDef) return ` ${q2.name}: defineQuery(() => Queries.${file}.${q2.name}()),`;
219
+ var indentedValidator = validatorDef.split(`
220
+ `).map(function (line, i) {
221
+ return i === 0 ? line : ` ${line}`;
222
+ }).join(`
223
+ `);
224
+ return ` ${q2.name}: defineQuery(
225
+ ${indentedValidator},
226
+ ({ args }) => Queries.${file}.${q2.name}(args)
227
+ ),`;
228
+ }).join(`
229
+ `);
230
+ return `const ${file} = {
231
+ ${queryDefs}
232
+ }`;
233
+ }).join(`
234
+
235
+ `),
236
+ queriesObject = sortedFiles.map(function (file) {
237
+ return ` ${file},`;
238
+ }).join(`
239
+ `);
240
+ return `${imports}
241
+ ${namespaceDefs}
242
+
243
+ export const queries = defineQueries({
244
+ ${queriesObject}
245
+ })
246
+ `;
247
+ }
248
+ function columnTypeToValibot(col) {
249
+ var base = "v.string()";
250
+ switch (col.type) {
251
+ case "string":
252
+ base = "v.string()";
253
+ break;
254
+ case "number":
255
+ base = "v.number()";
256
+ break;
257
+ case "boolean":
258
+ base = "v.boolean()";
259
+ break;
260
+ case "json":
261
+ base = "v.unknown()";
262
+ break;
263
+ case "enum":
264
+ base = "v.string()";
265
+ break;
266
+ }
267
+ return col.optional ? `v.optional(v.nullable(${base}))` : base;
268
+ }
269
+ function schemaColumnsToValibot(columns, primaryKeys, mode) {
270
+ var entries = [];
271
+ if (mode === "delete") {
272
+ var _iteratorNormalCompletion = !0,
273
+ _didIteratorError = !1,
274
+ _iteratorError = void 0;
275
+ try {
276
+ for (var _iterator = primaryKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
277
+ var pk = _step.value,
278
+ col = columns[pk];
279
+ col && entries.push(`${formatObjectKey(pk)}: ${columnTypeToValibot({
280
+ ...col,
281
+ optional: !1
282
+ })}`);
283
+ }
284
+ } catch (err) {
285
+ _didIteratorError = !0, _iteratorError = err;
286
+ } finally {
287
+ try {
288
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
289
+ } finally {
290
+ if (_didIteratorError) throw _iteratorError;
291
+ }
292
+ }
293
+ } else if (mode === "update") {
294
+ var _iteratorNormalCompletion1 = !0,
295
+ _didIteratorError1 = !1,
296
+ _iteratorError1 = void 0;
297
+ try {
298
+ for (var _iterator1 = Object.entries(columns)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = !0) {
299
+ var [name, col1] = _step1.value,
300
+ isPK = primaryKeys.includes(name);
301
+ isPK ? entries.push(`${formatObjectKey(name)}: ${columnTypeToValibot({
302
+ ...col1,
303
+ optional: !1
304
+ })}`) : entries.push(`${formatObjectKey(name)}: ${columnTypeToValibot({
305
+ ...col1,
306
+ optional: !0
307
+ })}`);
308
+ }
309
+ } catch (err) {
310
+ _didIteratorError1 = !0, _iteratorError1 = err;
311
+ } finally {
312
+ try {
313
+ !_iteratorNormalCompletion1 && _iterator1.return != null && _iterator1.return();
314
+ } finally {
315
+ if (_didIteratorError1) throw _iteratorError1;
316
+ }
317
+ }
318
+ } else {
319
+ var _iteratorNormalCompletion2 = !0,
320
+ _didIteratorError2 = !1,
321
+ _iteratorError2 = void 0;
322
+ try {
323
+ for (var _iterator2 = Object.entries(columns)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = !0) {
324
+ var [name1, col2] = _step2.value;
325
+ entries.push(`${formatObjectKey(name1)}: ${columnTypeToValibot(col2)}`);
326
+ }
327
+ } catch (err) {
328
+ _didIteratorError2 = !0, _iteratorError2 = err;
329
+ } finally {
330
+ try {
331
+ !_iteratorNormalCompletion2 && _iterator2.return != null && _iterator2.return();
332
+ } finally {
333
+ if (_didIteratorError2) throw _iteratorError2;
334
+ }
335
+ }
336
+ }
337
+ return `v.object({
338
+ ${entries.join(`,
339
+ `)},
340
+ })`;
341
+ }
342
+ function extractValibotExpression(valibotCode) {
343
+ return valibotCode.trim() || "v.unknown()";
344
+ }
345
+ function parseColumnType(initText) {
346
+ var optional = initText.includes(".optional()"),
347
+ type = "string";
348
+ return initText.startsWith("number(") ? type = "number" : initText.startsWith("boolean(") ? type = "boolean" : initText.startsWith("json(") || initText.startsWith("json<") ? type = "json" : initText.startsWith("enumeration(") && (type = "enum"), {
349
+ type,
350
+ optional,
351
+ customType: void 0
352
+ };
353
+ }
354
+ function generateSyncedMutationsFile(modelMutations) {
355
+ var sorted = [...modelMutations].sort(function (a, b) {
356
+ return a.modelName.localeCompare(b.modelName);
357
+ }),
358
+ modelDefs = sorted.map(function (model) {
359
+ var entries = [];
360
+ if (model.hasCRUD && Object.keys(model.columns).length > 0) for (var _loop = function (_i2, _iter2) {
361
+ var mode = _iter2[_i2],
362
+ hasCustomOverride = model.custom.some(function (m) {
363
+ return m.name === mode;
364
+ });
365
+ if (hasCustomOverride) {
366
+ var customMut = model.custom.find(function (m) {
367
+ return m.name === mode;
368
+ });
369
+ customMut.valibotCode ? entries.push(` ${mode}: ${extractValibotExpression(customMut.valibotCode)},`) : entries.push(` ${mode}: ${schemaColumnsToValibot(model.columns, model.primaryKeys, mode)},`);
370
+ } else entries.push(` ${mode}: ${schemaColumnsToValibot(model.columns, model.primaryKeys, mode)},`);
371
+ }, _i = 0, _iter = ["insert", "update", "delete"]; _i < _iter.length; _i++) _loop(_i, _iter);
372
+ var _iteratorNormalCompletion = !0,
373
+ _didIteratorError = !1,
374
+ _iteratorError = void 0;
375
+ try {
376
+ for (var _iterator = model.custom[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
377
+ var mut = _step.value;
378
+ if (!(model.hasCRUD && ["insert", "update", "delete", "upsert"].includes(mut.name))) {
379
+ if (mut.paramType === "void" || !mut.valibotCode) {
380
+ entries.push(` ${mut.name}: v.void_(),`);
381
+ continue;
382
+ }
383
+ entries.push(` ${mut.name}: ${extractValibotExpression(mut.valibotCode)},`);
384
+ }
385
+ }
386
+ } catch (err) {
387
+ _didIteratorError = !0, _iteratorError = err;
388
+ } finally {
389
+ try {
390
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
391
+ } finally {
392
+ if (_didIteratorError) throw _iteratorError;
393
+ }
394
+ }
395
+ return ` ${model.modelName}: {
396
+ ${entries.join(`
397
+ `)}
398
+ },`;
399
+ }).join(`
400
+ `);
401
+ return `// auto-generated by: on-zero generate
402
+ // mutation validators derived from model schemas and handler types
403
+ import * as v from 'valibot'
404
+
405
+ export const mutationValidators = {
406
+ ${modelDefs}
407
+ }
408
+ `;
409
+ }
410
+ export { columnTypeToValibot, extractValibotExpression, formatObjectKey, generateGroupedQueriesFile, generateModelsFile, generateReadmeFile, generateSyncedMutationsFile, generateSyncedQueriesFile, generateTablesFile, generateTypesFile, getModelImportName, parseColumnType, parseTypeString, schemaColumnsToValibot, shouldSkipObjectKey };
411
+ //# sourceMappingURL=generate-helpers.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["shouldSkipObjectKey","name","startsWith","formatObjectKey","test","JSON","stringify","getModelImportName","parseTypeString","type","trim","endsWith","inner","slice","normalized","replace","entries","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","split","Symbol","iterator","_step","next","done","part","value","trimmed","match","opt","typeStr","parsed","val","push","err","return","length","join","inner1","generateModelsFile","modelNames","modelsDirName","sorted","sort","imports","map","sortedByImportName","a","b","localeCompare","modelsObj","generateTypesFile","typeExports","pascalName","charAt","toUpperCase","schemaName","generateTablesFile","exports","generateReadmeFile","generateGroupedQueriesFile","queries","sortedFiles","Set","q","sourceFile","file","generateSyncedQueriesFile","queryByFile","Map","has","set","get","Array","from","keys","namespaceDefs","fileQueries","queryDefs","q2","validatorDef","valibotCode","params","indentedValidator","line","i","queriesObject","columnTypeToValibot","col","base","optional","schemaColumnsToValibot","columns","primaryKeys","mode","pk"],"sources":["../../src/generate-helpers.ts"],"sourcesContent":[null],"mappings":"AAkCO,SAASA,oBAAoBC,IAAA,EAAuB;EAGzD,OAAOA,IAAA,CAAKC,UAAA,CAAW,KAAK;AAC9B;AAEO,SAASC,gBAAgBF,IAAA,EAAsB;EACpD,OAAO,qBAAqBG,IAAA,CAAKH,IAAI,IAAIA,IAAA,GAAOI,IAAA,CAAKC,SAAA,CAAUL,IAAI;AACrE;AAGO,SAASM,mBAAmBN,IAAA,EAAsB;EACvD,OAAOA,IAAA,KAAS,SAAS,eAAeA,IAAA;AAC1C;AAQO,SAASO,gBAAgBC,IAAA,EAA6B;EAI3D,IAHAA,IAAA,GAAOA,IAAA,CAAKC,IAAA,CAAK,GAGbD,IAAA,KAAS,UAAU,OAAO;EAC9B,IAAIA,IAAA,KAAS,UAAU,OAAO;EAC9B,IAAIA,IAAA,KAAS,WAAW,OAAO;EAC/B,IAAIA,IAAA,KAAS,UAAUA,IAAA,KAAS,aAAa,OAAO;EACpD,IAAIA,IAAA,KAAS,QAAQ,OAAO;EAC5B,IAAIA,IAAA,KAAS,SAASA,IAAA,KAAS,WAAW,OAAO;EAGjD,IAAIA,IAAA,CAAKP,UAAA,CAAW,GAAG,KAAKO,IAAA,CAAKE,QAAA,CAAS,GAAG,GAAG;IAC9C,IAAAC,KAAM,GAAAH,IAAQ,CAAAI,KAAK,IAAM,EAAG,EAAEH,IAAE;IAChC,IAAI,CAACE,KAAA,EAAO,OAAO;IAEnB,IAAAE,UAAM,GAAAF,KAAa,CAAAG,OAAM,MAAQ,MAAO,EAAIA,OAAE,SAAQ,KAAU;MAAGC,OAC7D,KAAoB;MAACC,yBAAA;MAAAC,iBAAA;MAAAC,cAAA;IAC3B;MACE,SAAMC,SAAU,GAAKN,UAAO,CAAAO,KAAQ,MAAAC,MAAW,CAAAC,QAAA,KAAAC,KAAA,IAAAP,yBAAA,IAAAO,KAAA,GAAAJ,SAAA,CAAAK,IAAA,IAAAC,IAAA,GAAAT,yBAAA;QAC/C,IAAKU,IAAA,GAASH,KAAA,CAAAI,KAAA;UAAAC,OAAA,GAAAF,IAAA,CAAAjB,IAAA,GAAAK,OAAA;QACd,IAAMc,OAAA,EAAQ;UACV,IAACC,KAAO,GAAAD,OAAA,CAAAC,KAAA;UACZ,IAAOA,KAAE,EAAM;YAEV,OAAQ7B,IAAA,EAAA8B,GAAO,EAAAC,OAAA,IAAAF,KAAA;cAAAG,MAAA,GAAAzB,eAAA,CAAAwB,OAAA,CAAAtB,IAAA;YAChB,IAAM,CAAAuB,MAAA;YACN,IAAKC,GAAA,GAAMD,MAAA;YAEjBF,GAAA,KAAAG,GAAA,iBAAAA,GAAA,MAAAlB,OAAA,CAAAmB,IAAA,IAAAhC,eAAA,CAAAF,IAAA,MAAAiC,GAAA;UACA;QAC0B;MAAuB;IAAA,SAAAE,GAAA;MACnDlB,iBAAA,OAAAC,cAAA,GAAAiB,GAAA;IAGA,UAAS;MACP,IAAM;QACN,CAAAnB,yBAA0B,IAAKG,SAAM,CAAAiB,MAAA,YAAAjB,SAAA,CAAAiB,MAAA;MACvC;QAGA,IAAOnB,iBAAA,EACT,MAAAC,cAAA;MAMO;IACL;IAII,OAACH,OACC,CAAAsB,MAAA,KAAe,kBAAmB;AAAuC,MAE5EtB,OAAK,CAAAuB,IAAA;AAAA,KAKF;AAAY,KAHU;EAAW;EAEvC,IAEG9B,IAAK,CAAAE,QAAS,KAAK;IACT,IAAA6B,MAAA,GAAAhC,eAAA,CAAAC,IAAA,CAAAI,KAAA,QAAAH,IAAA;IAAA,OAAA8B,MAAA,cAAAA,MAAA;EAEb;EAAkD,OAAO;AAAA;AAAA,SAAOC,kBAASA,CAAAC,UAAA,EAAAC,aAAA;EAAA,IAAAC,MAAA,IAC3E,GAAAF,UAAA,CAEO,CAAAG,IAAA,CAAS;IAAAC,OAAA,GAAAF,MAAkB,CAAAG,GAAA,WAA8B9C,IAAA;MAW9D,OAAO,eAAAM,kBAAA,CAAAN,IAAA,cAAA0C,aAAA,IAAA1C,IAAA;IAAA,GAAAsC,IAAA;AAAA;IAAAS,kBAAA,IAVS,GAAGJ,MAAA,CAIf,CAAAC,IAAA,WAAMI,CAAA,EAAAC,CAAA,EAAa;MAEnB,OAAO3C,kBAAe,CAAA0C,CAAA,EAAAE,aAAU,CAAA5C,kBAAA,CAAA2C,CAAA;IAA6C;IAAAE,SAAkB;AAA6D,EAC9JJ,kBACM,CAAAD,GAAA,WAAA9C,IAAA;MAAA,YAAAM,kBAAA,CAAAN,IAAA;IAEuH,GAAAsC,IAAA;AAAA;AACjI;EAEO,OAAS;AAUd,EAAAO,OAAO;AAAA;AAAA,EATQM,SAAI;AAGhB;AAEqF;AAEhF,SAEmDC,kBAAAX,UAAA;EAAA,IAAAE,MAAA,IAC7D,GAAAF,UAAA,CAEO,CAAAG,IAAA,CAAS;IAAAS,WAAA,GAAAV,MAA6B,CAAAG,GAAA,WAAA9C,IAAA;MAC3C,IAAAsD,UAAO,GAAAtD,IAAA,CAAAuD,MAAA,IAAAC,WAAA,KAAAxD,IAAA,CAAAY,KAAA;QAAA6C,UAAA,GAAAnD,kBAAA,CAAAN,IAAA;MAAA,sBAAAsD,UAAA,mCAAAG,UAAA;AAAA,cAAAH,UAAA,yCAAAG,UAAA;IAAA,GAAAnB,IAAA;AAAA;AAAA;EAAA;AAAA;AAAA;AAAA,EAAAe,WAAA;AAAA;AAAA;AAAA,SAAAK,mBAAAjB,UAAA,EAAAC,aAAA;EAAA,IAAAC,MAAA,OAAAF,UAAA,EAAAG,IAAA;IAAAe,OAAA,GAAAhB,MAAA,CAAAG,GAAA,WAAA9C,IAAA;MAAA,6BAAAM,kBAAA,CAAAN,IAAA,gBAAA0C,aAAA,IAAA1C,IAAA;IAAA,GAAAsC,IAAA;AAAA;EAAA;AAAA;AAAA,EAAAqB,OAAA;AAAA;AAAA;AAAA,SAAAC,mBAAA;EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0DT;AAEO;AASL;AAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFC;AASD;AAET;AAEO;AAQL;AACA;AACE;AAMF;AAEgB;AAAA;AAAA;AAAA;AAAA;AAaZ;AAEI;AAEA;AACE,SAAAC,0BAAkBA,CAAAC,OAAA;EAGpB,IAAAC,WAAM,IAEH,GAAI,IAACC,GAAM,CAAAF,OAAO,CAAAhB,GAAM,WAAImB,CAAO;MAC1B,OAAAA,CAAA,CAAAC,UAAA;IAEZ,IAAkB,CAAAtB,IACtB;IAAAe,OAAA,GAAAI,WAAiB,CAAAjB,GAAA,WAAAqB,IAAA;MAAA,sBAAAA,IACK,qBAAcA,IAAA;IAAA,GAAA7B,IAAA;AAAA;EAGxB;AAEZ;AAAoB;AAAkB;AAAA;AAElC;AAAA;AAE2D,EAAIqB,OAAA;AAEvE;AAAiB;AACJ,SAAAS,0BAAAN,OAAA;EAAA,IAAAO,WAAA,sBAAAC,GAAA;IAAAtD,yBAAA;IAAAC,iBAAA;IAAAC,cAAA;EAGb;IAAa,SAAAC,SAAA,GAAA2C,OAAA,CAAAzC,MAAA,CAAAC,QAAA,KAAAC,KAAA,IAAAP,yBAAA,IAAAO,KAAA,GAAAJ,SAAA,CAAAK,IAAA,IAAAC,IAAA,GAAAT,yBAAA;MAAA,IAAAiD,CAAA,GAAA1C,KAAA,CAAAI,KAAA;MAGf0C,WAAA,CAAAE,GAAA,CAAAN,CAAA,CAAAC,UAAA,KAAAG,WAAA,CAAAG,GAAA,CAAAP,CAAA,CAAAC,UAAA,OAAAG,WAAA,CAAAI,GAAA,CAAAR,CAAA,CAAAC,UAAA,EAAAhC,IAAA,CAAA+B,CAAA;IAIO;EACL,SAAI9B,GAAO;IACXlB,iBAAkB,OAAAC,cAAA,GAAAiB,GAAA;EAAA,UACX;IACH;MACA,CAAAnB,yBAAA,IAAAG,SAAA,CAAAiB,MAAA,YAAAjB,SAAA,CAAAiB,MAAA;IACF,UAAK;MACH,IAAAnB,iBAAO,EACP,MAAAC,cAAA;IACF;EACE;EACA,IAAA6C,WAAA,GAAAW,KAAA,CAAAC,IAAA,CAAAN,WAAA,CAAAO,IAAA,IAAAhC,IAAA;IAAAC,OAAA;AAAA;AAEA;AACA;AAAA;AAEA;IAAAgC,aAAO,GAAAd,WAAA,CAAAjB,GAAA,WAAAqB,IAAA;MACP,IAAAW,WAAA,GAAAT,WAAA,CAAAI,GAAA,CAAAN,IAAA,EAAAvB,IAAA,WAAAI,CAAA,EAAAC,CAAA;UACJ,OAAAD,CAAA,CAAAhD,IAAA,CAAAkD,aAAA,CAAAD,CAAA,CAAAjD,IAAA;QACA;QAAA+E,SAAW,GAAAD,WAAW,CAAAhC,GAAA,WAAAkC,EAAA,EAAyB;UACjD,IAAAC,YAAA,GAAAD,EAAA,CAAAE,WAAA,CAAAzE,IAAA;UAEO,IAASuE,EAAA,CAAAG,MAAA,eACd,CAAAF,YACA,EAGM,YAAqBD,EAAA,CAAAhF,IAAA,+BAAAmE,IAAA,IAAAa,EAAA,CAAAhF,IAAA;UAEvB,IAAAoF,iBAAS,GAAAH,YAAA,CAAA7D,KAAA;AAEX,GAAA0B,GAAA,WAAWuC,IAAA,EAAMC,CAAA;YACf,OAAMA,CAAA,KAAM,IAAAD,IAAU,UAAAA,IAAA;UAClB,GAAA/C,IACF;AAAQ;UAER,YAAA0C,EAAA,CAAAhF,IAAA;AAAA,MACJoF,iBAAA;AAAA,4BACkBjB,IAAA,IAAAa,EAAA,CAAAhF,IAAA;AAElB;QAEE,EADa,CAAAsC,IAAA;AAEH;MACuE,OAG/E,SAAQ6B,IAAA;AAAA,EAAAY,SACH;AAAyE;IAC9E,GAAAzC,IAAA;AAKJ;AACE;IAAAiD,aAAQ,GAAKxB,WAAG,CAAAjB,GAAA,WAAqBqB,IAAK;MAI9C,OAAO,KAAAA,IAAA;IAAA,GAAA7B,IAAmB;AAAa;EAAU,UAAAO,OAAA;AACnD,EAAAgC,aAAA;AAGO;AACL;AACF,EAAAU,aAAA;AAKO;AACL;AACA;AAEA,SAAIC,mBAASA,CAAWC,GAAA;EAM1B,IAAAC,IAAA;EAEO,QAASD,GAAA,CAAAjF,IAAA;IAkDd,KAAO;MAAAkF,IAAA;MAAA;IAAA;MAAAA,IAAA;MAjDY;IAAqB,KAAI,SACxC;MAIDA,IAAK,gBAAU;MACd;IAGA,KAAI,MAAM;MACRA,IAAA,gBAAoB;MAGlB;IAEE;MACAA,IAAI,eAAU;MACJ;EACyD;EAIzD,OAAAD,GACN,CAAAE,QAAO,GAAI,yBAAKD,IAAuB,IAAM,GAAAA,IAAA;AAAiC;AAChF,SAEJE,uBAAAC,OAAA,EAAAC,WAAA,EAAAC,IAAA;EACE,IAAAhF,OAAA,KAAQ;EAAA,IAAAgF,IAAA,KACN,QAAW;IAAmE,IAAA/E,yBAChF;MAAAC,iBAAA;MAAAC,cAAA;IAMN;MACE,KAAI,IAAAC,SAAM,GAAA2E,WAAY,CAAAzE,MAAU,CAAAC,QAAU,KAAAC,KAAU,IAAQP,yBAE5D,IAAAO,KAAA,GAAAJ,SAAA,CAAAK,IAAA,IAAAC,IAAA,GAAAT,yBAAA;QAAA,IAAIgF,EAAA,GAAIzE,KAAA,CAAAI,KAAA;UAAc8D,GAAA,GAAAI,OAAW,CAAAG,EAAI;QACnCP,GAAA,IAAA1E,OAAQ,CAAKmB,IAAA,IAAOhC,eAAQ,CAAA8F,EAAA,MAAcR,mBAAA;UAC1C,GAAAC,GAAA;UACFE,QAAA;QACA;MAA6E;IAG/E,SAAOxD,GAAK;MAAuBlB,iBAAa,OAAAC,cAAA,GAAAiB,GAAA;IAAK;MAAA;QAEtD,CAAAnB,yBAAK,IAAAG,SAAA,CAAAiB,MAAA,YAAAjB,SAAA,CAAAiB,MAAA;MAOC;QAAA,IAAAnB,iBAAA,QAAAC,cAAA;MAGX","ignoreList":[]}
@@ -0,0 +1,127 @@
1
+ import { generateGroupedQueriesFile, generateModelsFile, generateReadmeFile, generateSyncedMutationsFile, generateSyncedQueriesFile, generateTablesFile, generateTypesFile, parseColumnType, parseTypeString } from "./generate-helpers.mjs";
2
+ function stripTrailingSlash(s) {
3
+ return s.endsWith("/") ? s.slice(0, -1) : s;
4
+ }
5
+ function baseName(path, ext) {
6
+ const idx = path.lastIndexOf("/");
7
+ let base = idx >= 0 ? path.slice(idx + 1) : path;
8
+ return ext && base.endsWith(ext) && (base = base.slice(0, -ext.length)), base;
9
+ }
10
+ function listDirectTsFiles(files, dirPrefix) {
11
+ const prefix = stripTrailingSlash(dirPrefix) + "/",
12
+ out = [];
13
+ for (const path of Object.keys(files)) {
14
+ if (!path.startsWith(prefix)) continue;
15
+ const rest = path.slice(prefix.length);
16
+ rest.includes("/") || rest.endsWith(".ts") && (rest.endsWith(".d.ts") || out.push(path));
17
+ }
18
+ return out.sort();
19
+ }
20
+ function generateLite(opts) {
21
+ const {
22
+ files,
23
+ parse
24
+ } = opts,
25
+ baseDir = stripTrailingSlash(opts.dir);
26
+ let modelsDirName;
27
+ if (opts.modelsDir) modelsDirName = opts.modelsDir;else {
28
+ const mutationsPrefix = `${baseDir}/mutations/`;
29
+ modelsDirName = Object.keys(files).some(p => p.startsWith(mutationsPrefix)) ? "mutations" : "models";
30
+ }
31
+ const modelsDirPath = `${baseDir}/${modelsDirName}`,
32
+ queriesDirPath = `${baseDir}/queries`,
33
+ modelFilePaths = listDirectTsFiles(files, modelsDirPath),
34
+ queryFilePaths = listDirectTsFiles(files, queriesDirPath),
35
+ allModelMutations = [],
36
+ modelNamesWithSchema = [];
37
+ for (const filePath of modelFilePaths) {
38
+ const modelName = baseName(filePath, ".ts"),
39
+ content = files[filePath],
40
+ mutationExport = parse(content, filePath).mutations[0] ?? null,
41
+ columns = {},
42
+ primaryKeys = [];
43
+ let hasSchema = !1;
44
+ if (mutationExport?.schema) {
45
+ hasSchema = !0, modelNamesWithSchema.push(modelName);
46
+ for (const pk of mutationExport.schema.primaryKeys) primaryKeys.push(pk);
47
+ for (const col of mutationExport.schema.columns) columns[col.name] = parseColumnType(col.builderText);
48
+ }
49
+ const hasCRUD = hasSchema && mutationExport !== null,
50
+ custom = (mutationExport?.handlers ?? []).map(h => {
51
+ if (h.paramTypeText == null) return {
52
+ name: h.name,
53
+ paramType: "void",
54
+ valibotCode: ""
55
+ };
56
+ const paramType = h.paramTypeText.trim();
57
+ if (paramType === "unknown") return {
58
+ name: h.name,
59
+ paramType: "unknown",
60
+ valibotCode: ""
61
+ };
62
+ let valibotCode = null;
63
+ try {
64
+ valibotCode = parseTypeString(paramType);
65
+ } catch {
66
+ valibotCode = null;
67
+ }
68
+ return {
69
+ name: h.name,
70
+ paramType,
71
+ valibotCode: valibotCode ?? "v.unknown()"
72
+ };
73
+ });
74
+ allModelMutations.push({
75
+ modelName,
76
+ hasCRUD,
77
+ columns,
78
+ primaryKeys,
79
+ custom
80
+ });
81
+ }
82
+ const allQueries = [];
83
+ for (const filePath of queryFilePaths) {
84
+ const fileBaseName = baseName(filePath, ".ts"),
85
+ content = files[filePath],
86
+ parsed = parse(content, filePath);
87
+ for (const q of parsed.queries) {
88
+ if (q.name === "permission") continue;
89
+ if (q.paramTypeText == null) {
90
+ allQueries.push({
91
+ name: q.name,
92
+ params: "void",
93
+ valibotCode: "",
94
+ sourceFile: fileBaseName
95
+ });
96
+ continue;
97
+ }
98
+ const paramType = q.paramTypeText.trim();
99
+ let valibotCode = null;
100
+ try {
101
+ valibotCode = parseTypeString(paramType);
102
+ } catch {
103
+ valibotCode = null;
104
+ }
105
+ allQueries.push({
106
+ name: q.name,
107
+ params: paramType,
108
+ valibotCode: valibotCode ?? "v.unknown()",
109
+ sourceFile: fileBaseName
110
+ });
111
+ }
112
+ }
113
+ const modelNames = modelFilePaths.map(p => baseName(p, ".ts")),
114
+ out = {};
115
+ out["models.ts"] = generateModelsFile(modelNames, modelsDirName), modelNamesWithSchema.length > 0 && (out["types.ts"] = generateTypesFile(modelNamesWithSchema), out["tables.ts"] = generateTablesFile(modelNamesWithSchema, modelsDirName)), out["README.md"] = generateReadmeFile(), queryFilePaths.length > 0 && (out["groupedQueries.ts"] = generateGroupedQueriesFile(allQueries), out["syncedQueries.ts"] = generateSyncedQueriesFile(allQueries)), allModelMutations.length > 0 && (out["syncedMutations.ts"] = generateSyncedMutationsFile(allModelMutations));
116
+ let mutationCount = 0;
117
+ for (const m of allModelMutations) m.hasCRUD && (mutationCount += 3), mutationCount += m.custom.filter(mut => !m.hasCRUD || !["insert", "update", "delete", "upsert"].includes(mut.name)).length;
118
+ return {
119
+ files: out,
120
+ modelCount: modelNames.length,
121
+ queryCount: allQueries.length,
122
+ mutationCount,
123
+ schemaCount: modelNamesWithSchema.length
124
+ };
125
+ }
126
+ export { generateLite };
127
+ //# sourceMappingURL=generate-lite.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["generateGroupedQueriesFile","generateModelsFile","generateReadmeFile","generateSyncedMutationsFile","generateSyncedQueriesFile","generateTablesFile","generateTypesFile","parseColumnType","parseTypeString","stripTrailingSlash","s","endsWith","slice","baseName","path","ext","idx","lastIndexOf","base","length","listDirectTsFiles","files","dirPrefix","prefix","out","Object","keys","startsWith","rest","includes","push","sort","generateLite","opts","parse","baseDir","dir","modelsDirName","modelsDir","mutationsPrefix","some","p","modelsDirPath","queriesDirPath","modelFilePaths","queryFilePaths","allModelMutations","modelNamesWithSchema","filePath","modelName","content","mutationExport","mutations","columns","primaryKeys","hasSchema","schema","pk","col","name","builderText","hasCRUD","custom","handlers","map","h","paramTypeText","paramType","valibotCode","trim","allQueries","fileBaseName","parsed","q","queries","params","sourceFile","modelNames","mutationCount","m","filter","mut","modelCount","queryCount","schemaCount"],"sources":["../../src/generate-lite.ts"],"sourcesContent":[null],"mappings":"AAgBA,SACEA,0BAAA,EACAC,kBAAA,EACAC,kBAAA,EACAC,2BAAA,EACAC,yBAAA,EACAC,kBAAA,EACAC,iBAAA,EACAC,eAAA,EACAC,eAAA,QACK;AAuFP,SAASC,mBAAmBC,CAAA,EAAmB;EAC7C,OAAOA,CAAA,CAAEC,QAAA,CAAS,GAAG,IAAID,CAAA,CAAEE,KAAA,CAAM,GAAG,EAAE,IAAIF,CAAA;AAC5C;AAIA,SAASG,SAASC,IAAA,EAAcC,GAAA,EAAsB;EACpD,MAAMC,GAAA,GAAMF,IAAA,CAAKG,WAAA,CAAY,GAAG;EAChC,IAAIC,IAAA,GAAOF,GAAA,IAAO,IAAIF,IAAA,CAAKF,KAAA,CAAMI,GAAA,GAAM,CAAC,IAAIF,IAAA;EAC5C,OAAIC,GAAA,IAAOG,IAAA,CAAKP,QAAA,CAASI,GAAG,MAAGG,IAAA,GAAOA,IAAA,CAAKN,KAAA,CAAM,GAAG,CAACG,GAAA,CAAII,MAAM,IACxDD,IAAA;AACT;AAIA,SAASE,kBAAkBC,KAAA,EAA+BC,SAAA,EAA6B;EACrF,MAAMC,MAAA,GAASd,kBAAA,CAAmBa,SAAS,IAAI;IACzCE,GAAA,GAAgB,EAAC;EACvB,WAAWV,IAAA,IAAQW,MAAA,CAAOC,IAAA,CAAKL,KAAK,GAAG;IACrC,IAAI,CAACP,IAAA,CAAKa,UAAA,CAAWJ,MAAM,GAAG;IAC9B,MAAMK,IAAA,GAAOd,IAAA,CAAKF,KAAA,CAAMW,MAAA,CAAOJ,MAAM;IAEjCS,IAAA,CAAKC,QAAA,CAAS,GAAG,KAChBD,IAAA,CAAKjB,QAAA,CAAS,KAAK,MACpBiB,IAAA,CAAKjB,QAAA,CAAS,OAAO,KACzBa,GAAA,CAAIM,IAAA,CAAKhB,IAAI;EACf;EACA,OAAOU,GAAA,CAAIO,IAAA,CAAK;AAClB;AAIO,SAASC,aAAaC,IAAA,EAA+C;EAC1E,MAAM;MAAEZ,KAAA;MAAOa;IAAM,IAAID,IAAA;IACnBE,OAAA,GAAU1B,kBAAA,CAAmBwB,IAAA,CAAKG,GAAG;EAG3C,IAAIC,aAAA;EACJ,IAAIJ,IAAA,CAAKK,SAAA,EACPD,aAAA,GAAgBJ,IAAA,CAAKK,SAAA,MAChB;IAEL,MAAMC,eAAA,GAAkB,GAAGJ,OAAO;IAElCE,aAAA,GADwBZ,MAAA,CAAOC,IAAA,CAAKL,KAAK,EAAEmB,IAAA,CAAMC,CAAA,IAAMA,CAAA,CAAEd,UAAA,CAAWY,eAAe,CAAC,IAClD,cAAc;EAClD;EAEA,MAAMG,aAAA,GAAgB,GAAGP,OAAO,IAAIE,aAAa;IAC3CM,cAAA,GAAiB,GAAGR,OAAO;IAE3BS,cAAA,GAAiBxB,iBAAA,CAAkBC,KAAA,EAAOqB,aAAa;IACvDG,cAAA,GAAiBzB,iBAAA,CAAkBC,KAAA,EAAOsB,cAAc;IAGxDG,iBAAA,GAAsC,EAAC;IACvCC,oBAAA,GAAiC,EAAC;EAExC,WAAWC,QAAA,IAAYJ,cAAA,EAAgB;IACrC,MAAMK,SAAA,GAAYpC,QAAA,CAASmC,QAAA,EAAU,KAAK;MACpCE,OAAA,GAAU7B,KAAA,CAAM2B,QAAQ;MAIxBG,cAAA,GAHSjB,KAAA,CAAMgB,OAAA,EAASF,QAAQ,EAGRI,SAAA,CAAU,CAAC,KAAK;MAGxCC,OAAA,GAAwC,CAAC;MACzCC,WAAA,GAAwB,EAAC;IAC/B,IAAIC,SAAA,GAAY;IAEhB,IAAIJ,cAAA,EAAgBK,MAAA,EAAQ;MAC1BD,SAAA,GAAY,IACZR,oBAAA,CAAqBjB,IAAA,CAAKmB,SAAS;MACnC,WAAWQ,EAAA,IAAMN,cAAA,CAAeK,MAAA,CAAOF,WAAA,EAAaA,WAAA,CAAYxB,IAAA,CAAK2B,EAAE;MACvE,WAAWC,GAAA,IAAOP,cAAA,CAAeK,MAAA,CAAOH,OAAA,EACtCA,OAAA,CAAQK,GAAA,CAAIC,IAAI,IAAIpD,eAAA,CAAgBmD,GAAA,CAAIE,WAAW;IAEvD;IAWA,MAAMC,OAAA,GAAUN,SAAA,IAAaJ,cAAA,KAAmB;MAE1CW,MAAA,IAAUX,cAAA,EAAgBY,QAAA,IAAY,EAAC,EAAGC,GAAA,CAAKC,CAAA,IAAM;QAEzD,IAAIA,CAAA,CAAEC,aAAA,IAAiB,MACrB,OAAO;UAAEP,IAAA,EAAMM,CAAA,CAAEN,IAAA;UAAMQ,SAAA,EAAW;UAAQC,WAAA,EAAa;QAAG;QAG5D,MAAMD,SAAA,GAAYF,CAAA,CAAEC,aAAA,CAAcG,IAAA,CAAK;QAIvC,IAAIF,SAAA,KAAc,WAChB,OAAO;UAAER,IAAA,EAAMM,CAAA,CAAEN,IAAA;UAAMQ,SAAA,EAAW;UAAWC,WAAA,EAAa;QAAG;QAK/D,IAAIA,WAAA,GAA6B;QACjC,IAAI;UACFA,WAAA,GAAc5D,eAAA,CAAgB2D,SAAS;QACzC,QAAQ;UACNC,WAAA,GAAc;QAChB;QAEA,OAAO;UACLT,IAAA,EAAMM,CAAA,CAAEN,IAAA;UACRQ,SAAA;UACAC,WAAA,EAAaA,WAAA,IAAe;QAC9B;MACF,CAAC;IAEDtB,iBAAA,CAAkBhB,IAAA,CAAK;MACrBmB,SAAA;MACAY,OAAA;MACAR,OAAA;MACAC,WAAA;MACAQ;IACF,CAAC;EACH;EAGA,MAAMQ,UAAA,GAKD,EAAC;EAEN,WAAWtB,QAAA,IAAYH,cAAA,EAAgB;IACrC,MAAM0B,YAAA,GAAe1D,QAAA,CAASmC,QAAA,EAAU,KAAK;MACvCE,OAAA,GAAU7B,KAAA,CAAM2B,QAAQ;MACxBwB,MAAA,GAAStC,KAAA,CAAMgB,OAAA,EAASF,QAAQ;IAEtC,WAAWyB,CAAA,IAAKD,MAAA,CAAOE,OAAA,EAAS;MAE9B,IAAID,CAAA,CAAEd,IAAA,KAAS,cAAc;MAG7B,IAAIc,CAAA,CAAEP,aAAA,IAAiB,MAAM;QAC3BI,UAAA,CAAWxC,IAAA,CAAK;UACd6B,IAAA,EAAMc,CAAA,CAAEd,IAAA;UACRgB,MAAA,EAAQ;UACRP,WAAA,EAAa;UACbQ,UAAA,EAAYL;QACd,CAAC;QACD;MACF;MAEA,MAAMJ,SAAA,GAAYM,CAAA,CAAEP,aAAA,CAAcG,IAAA,CAAK;MAOvC,IAAID,WAAA,GAA6B;MACjC,IAAI;QACFA,WAAA,GAAc5D,eAAA,CAAgB2D,SAAS;MACzC,QAAQ;QACNC,WAAA,GAAc;MAChB;MAEAE,UAAA,CAAWxC,IAAA,CAAK;QACd6B,IAAA,EAAMc,CAAA,CAAEd,IAAA;QACRgB,MAAA,EAAQR,SAAA;QACRC,WAAA,EAAaA,WAAA,IAAe;QAC5BQ,UAAA,EAAYL;MACd,CAAC;IACH;EACF;EAGA,MAAMM,UAAA,GAAajC,cAAA,CAAeoB,GAAA,CAAKvB,CAAA,IAAM5B,QAAA,CAAS4B,CAAA,EAAG,KAAK,CAAC;IACzDjB,GAAA,GAA8B,CAAC;EAErCA,GAAA,CAAI,WAAW,IAAIvB,kBAAA,CAAmB4E,UAAA,EAAYxC,aAAa,GAE3DU,oBAAA,CAAqB5B,MAAA,GAAS,MAChCK,GAAA,CAAI,UAAU,IAAIlB,iBAAA,CAAkByC,oBAAoB,GACxDvB,GAAA,CAAI,WAAW,IAAInB,kBAAA,CAAmB0C,oBAAA,EAAsBV,aAAa,IAG3Eb,GAAA,CAAI,WAAW,IAAItB,kBAAA,CAAmB,GAElC2C,cAAA,CAAe1B,MAAA,GAAS,MAC1BK,GAAA,CAAI,mBAAmB,IAAIxB,0BAAA,CAA2BsE,UAAU,GAChE9C,GAAA,CAAI,kBAAkB,IAAIpB,yBAAA,CAA0BkE,UAAU,IAG5DxB,iBAAA,CAAkB3B,MAAA,GAAS,MAC7BK,GAAA,CAAI,oBAAoB,IAAIrB,2BAAA,CAA4B2C,iBAAiB;EAK3E,IAAIgC,aAAA,GAAgB;EACpB,WAAWC,CAAA,IAAKjC,iBAAA,EACViC,CAAA,CAAElB,OAAA,KAASiB,aAAA,IAAiB,IAChCA,aAAA,IAAiBC,CAAA,CAAEjB,MAAA,CAAOkB,MAAA,CACvBC,GAAA,IAAQ,CAACF,CAAA,CAAElB,OAAA,IAAW,CAAC,CAAC,UAAU,UAAU,UAAU,QAAQ,EAAEhC,QAAA,CAASoD,GAAA,CAAItB,IAAI,CACpF,EAAExC,MAAA;EAGJ,OAAO;IACLE,KAAA,EAAOG,GAAA;IACP0D,UAAA,EAAYL,UAAA,CAAW1D,MAAA;IACvBgE,UAAA,EAAYb,UAAA,CAAWnD,MAAA;IACvB2D,aAAA;IACAM,WAAA,EAAarC,oBAAA,CAAqB5B;EACpC;AACF","ignoreList":[]}