on-zero 0.4.1 → 0.4.2

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,451 @@
1
+ "use strict";
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: !0
11
+ });
12
+ },
13
+ __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
15
+ get: () => from[key],
16
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
+ });
18
+ return to;
19
+ };
20
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
21
+ value: !0
22
+ }), mod);
23
+ var generate_helpers_exports = {};
24
+ __export(generate_helpers_exports, {
25
+ columnTypeToValibot: () => columnTypeToValibot,
26
+ extractValibotExpression: () => extractValibotExpression,
27
+ formatObjectKey: () => formatObjectKey,
28
+ generateGroupedQueriesFile: () => generateGroupedQueriesFile,
29
+ generateModelsFile: () => generateModelsFile,
30
+ generateReadmeFile: () => generateReadmeFile,
31
+ generateSyncedMutationsFile: () => generateSyncedMutationsFile,
32
+ generateSyncedQueriesFile: () => generateSyncedQueriesFile,
33
+ generateTablesFile: () => generateTablesFile,
34
+ generateTypesFile: () => generateTypesFile,
35
+ getModelImportName: () => getModelImportName,
36
+ parseColumnType: () => parseColumnType,
37
+ parseTypeString: () => parseTypeString,
38
+ schemaColumnsToValibot: () => schemaColumnsToValibot,
39
+ shouldSkipObjectKey: () => shouldSkipObjectKey
40
+ });
41
+ module.exports = __toCommonJS(generate_helpers_exports);
42
+ function shouldSkipObjectKey(name) {
43
+ return name.startsWith("__@");
44
+ }
45
+ function formatObjectKey(name) {
46
+ return /^[$A-Z_a-z][$\w]*$/.test(name) ? name : JSON.stringify(name);
47
+ }
48
+ function getModelImportName(name) {
49
+ return name === "user" ? "userPublic" : name;
50
+ }
51
+ function parseTypeString(type) {
52
+ if (type = type.trim(), type === "string") return "v.string()";
53
+ if (type === "number") return "v.number()";
54
+ if (type === "boolean") return "v.boolean()";
55
+ if (type === "void" || type === "undefined") return "v.void_()";
56
+ if (type === "null") return "v.null_()";
57
+ if (type === "any" || type === "unknown") return "v.unknown()";
58
+ if (type.startsWith("{") && type.endsWith("}")) {
59
+ var inner = type.slice(1, -1).trim();
60
+ if (!inner) return "v.object({})";
61
+ var normalized = inner.replace(/\n/g, "; ").replace(/;\s*;/g, ";"),
62
+ entries = [],
63
+ _iteratorNormalCompletion = !0,
64
+ _didIteratorError = !1,
65
+ _iteratorError = void 0;
66
+ try {
67
+ for (var _iterator = normalized.split(";")[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
68
+ var part = _step.value,
69
+ trimmed = part.trim().replace(/,\s*$/, "");
70
+ if (trimmed) {
71
+ var match = trimmed.match(/^(?:readonly\s+)?(\w+)(\?)?:\s*(.+)$/);
72
+ if (match) {
73
+ var [, name, opt, typeStr] = match,
74
+ parsed = parseTypeString(typeStr.trim());
75
+ if (!parsed) return null;
76
+ var val = parsed;
77
+ opt && (val = `v.optional(${val})`), entries.push(`${formatObjectKey(name)}: ${val}`);
78
+ }
79
+ }
80
+ }
81
+ } catch (err) {
82
+ _didIteratorError = !0, _iteratorError = err;
83
+ } finally {
84
+ try {
85
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
86
+ } finally {
87
+ if (_didIteratorError) throw _iteratorError;
88
+ }
89
+ }
90
+ return entries.length === 0 ? "v.object({})" : `v.object({
91
+ ${entries.join(`,
92
+ `)},
93
+ })`;
94
+ }
95
+ if (type.endsWith("[]")) {
96
+ var inner1 = parseTypeString(type.slice(0, -2).trim());
97
+ return inner1 ? `v.array(${inner1})` : null;
98
+ }
99
+ return null;
100
+ }
101
+ function generateModelsFile(modelNames, modelsDirName) {
102
+ var sorted = [...modelNames].sort(),
103
+ imports = sorted.map(function (name) {
104
+ return `import * as ${getModelImportName(name)} from '../${modelsDirName}/${name}'`;
105
+ }).join(`
106
+ `),
107
+ sortedByImportName = [...sorted].sort(function (a, b) {
108
+ return getModelImportName(a).localeCompare(getModelImportName(b));
109
+ }),
110
+ modelsObj = `export const models = {
111
+ ${sortedByImportName.map(function (name) {
112
+ return ` ${getModelImportName(name)},`;
113
+ }).join(`
114
+ `)}
115
+ }`;
116
+ return `// auto-generated by: on-zero generate
117
+ ${imports}
118
+
119
+ ${modelsObj}
120
+ `;
121
+ }
122
+ function generateTypesFile(modelNames) {
123
+ var sorted = [...modelNames].sort(),
124
+ typeExports = sorted.map(function (name) {
125
+ var pascalName = name.charAt(0).toUpperCase() + name.slice(1),
126
+ schemaName = getModelImportName(name);
127
+ return `export type ${pascalName} = TableInsertRow<typeof schema.${schemaName}>
128
+ export type ${pascalName}Update = TableUpdateRow<typeof schema.${schemaName}>`;
129
+ }).join(`
130
+
131
+ `);
132
+ return `import type { TableInsertRow, TableUpdateRow } from 'on-zero'
133
+ import type * as schema from './tables'
134
+
135
+ ${typeExports}
136
+ `;
137
+ }
138
+ function generateTablesFile(modelNames, modelsDirName) {
139
+ var sorted = [...modelNames].sort(),
140
+ exports = sorted.map(function (name) {
141
+ return `export { schema as ${getModelImportName(name)} } from '../${modelsDirName}/${name}'`;
142
+ }).join(`
143
+ `);
144
+ return `// auto-generated by: on-zero generate
145
+
146
+ ${exports}
147
+ `;
148
+ }
149
+ function generateReadmeFile() {
150
+ return `# generated
151
+
152
+ this folder is auto-generated by on-zero. do not edit files here directly.
153
+
154
+ ## what's generated
155
+
156
+ - \`models.ts\` - exports all models from ../models
157
+ - \`types.ts\` - typescript types derived from table schemas
158
+ - \`tables.ts\` - exports table schemas for type inference
159
+ - \`groupedQueries.ts\` - namespaced query re-exports for client setup
160
+ - \`syncedQueries.ts\` - namespaced syncedQuery wrappers for server setup
161
+ - \`syncedMutations.ts\` - valibot validators for mutation args (server auto-validation)
162
+
163
+ ## usage guidelines
164
+
165
+ **do not import generated files outside of the data folder.**
166
+
167
+ ### queries
168
+
169
+ write your queries as plain functions in \`../queries/\` and import them directly:
170
+
171
+ \`\`\`ts
172
+ // \u2705 good - import from queries
173
+ import { channelMessages } from '~/data/queries/message'
174
+ \`\`\`
175
+
176
+ the generated query files are only used internally by zero client/server setup.
177
+
178
+ ### types
179
+
180
+ you can import types from this folder, but prefer re-exporting from \`../types.ts\`:
181
+
182
+ \`\`\`ts
183
+ // \u274C okay but not preferred
184
+ import type { Message } from '~/data/generated/types'
185
+
186
+ // \u2705 better - re-export from types.ts
187
+ import type { Message } from '~/data/types'
188
+ \`\`\`
189
+
190
+ ## regeneration
191
+
192
+ files are regenerated when you run:
193
+
194
+ \`\`\`bash
195
+ bun on-zero generate
196
+ \`\`\`
197
+
198
+ or in watch mode:
199
+
200
+ \`\`\`bash
201
+ bun on-zero generate --watch
202
+ \`\`\`
203
+
204
+ ## more info
205
+
206
+ see the [on-zero readme](./node_modules/on-zero/README.md) for full documentation.
207
+ `;
208
+ }
209
+ function generateGroupedQueriesFile(queries) {
210
+ var sortedFiles = [...new Set(queries.map(function (q) {
211
+ return q.sourceFile;
212
+ }))].sort(),
213
+ exports = sortedFiles.map(function (file) {
214
+ return `export * as ${file} from '../queries/${file}'`;
215
+ }).join(`
216
+ `);
217
+ return `/**
218
+ * auto-generated by: on-zero generate
219
+ *
220
+ * grouped query re-exports for minification-safe query identity.
221
+ * this file re-exports all query modules - while this breaks tree-shaking,
222
+ * queries are typically small and few in number even in larger apps.
223
+ */
224
+ ${exports}
225
+ `;
226
+ }
227
+ function generateSyncedQueriesFile(queries) {
228
+ var queryByFile = /* @__PURE__ */new Map(),
229
+ _iteratorNormalCompletion = !0,
230
+ _didIteratorError = !1,
231
+ _iteratorError = void 0;
232
+ try {
233
+ for (var _iterator = queries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
234
+ var q = _step.value;
235
+ queryByFile.has(q.sourceFile) || queryByFile.set(q.sourceFile, []), queryByFile.get(q.sourceFile).push(q);
236
+ }
237
+ } catch (err) {
238
+ _didIteratorError = !0, _iteratorError = err;
239
+ } finally {
240
+ try {
241
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
242
+ } finally {
243
+ if (_didIteratorError) throw _iteratorError;
244
+ }
245
+ }
246
+ var sortedFiles = Array.from(queryByFile.keys()).sort(),
247
+ imports = `// auto-generated by: on-zero generate
248
+ // server-side query definitions with validators
249
+ import { defineQuery, defineQueries } from '@rocicorp/zero'
250
+ import * as v from 'valibot'
251
+ import * as Queries from './groupedQueries'
252
+ `,
253
+ namespaceDefs = sortedFiles.map(function (file) {
254
+ var fileQueries = queryByFile.get(file).sort(function (a, b) {
255
+ return a.name.localeCompare(b.name);
256
+ }),
257
+ queryDefs = fileQueries.map(function (q2) {
258
+ var validatorDef = q2.valibotCode.trim();
259
+ if (q2.params === "void" || !validatorDef) return ` ${q2.name}: defineQuery(() => Queries.${file}.${q2.name}()),`;
260
+ var indentedValidator = validatorDef.split(`
261
+ `).map(function (line, i) {
262
+ return i === 0 ? line : ` ${line}`;
263
+ }).join(`
264
+ `);
265
+ return ` ${q2.name}: defineQuery(
266
+ ${indentedValidator},
267
+ ({ args }) => Queries.${file}.${q2.name}(args)
268
+ ),`;
269
+ }).join(`
270
+ `);
271
+ return `const ${file} = {
272
+ ${queryDefs}
273
+ }`;
274
+ }).join(`
275
+
276
+ `),
277
+ queriesObject = sortedFiles.map(function (file) {
278
+ return ` ${file},`;
279
+ }).join(`
280
+ `);
281
+ return `${imports}
282
+ ${namespaceDefs}
283
+
284
+ export const queries = defineQueries({
285
+ ${queriesObject}
286
+ })
287
+ `;
288
+ }
289
+ function columnTypeToValibot(col) {
290
+ var base = "v.string()";
291
+ switch (col.type) {
292
+ case "string":
293
+ base = "v.string()";
294
+ break;
295
+ case "number":
296
+ base = "v.number()";
297
+ break;
298
+ case "boolean":
299
+ base = "v.boolean()";
300
+ break;
301
+ case "json":
302
+ base = "v.unknown()";
303
+ break;
304
+ case "enum":
305
+ base = "v.string()";
306
+ break;
307
+ }
308
+ return col.optional ? `v.optional(v.nullable(${base}))` : base;
309
+ }
310
+ function schemaColumnsToValibot(columns, primaryKeys, mode) {
311
+ var entries = [];
312
+ if (mode === "delete") {
313
+ var _iteratorNormalCompletion = !0,
314
+ _didIteratorError = !1,
315
+ _iteratorError = void 0;
316
+ try {
317
+ for (var _iterator = primaryKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
318
+ var pk = _step.value,
319
+ col = columns[pk];
320
+ col && entries.push(`${formatObjectKey(pk)}: ${columnTypeToValibot({
321
+ ...col,
322
+ optional: !1
323
+ })}`);
324
+ }
325
+ } catch (err) {
326
+ _didIteratorError = !0, _iteratorError = err;
327
+ } finally {
328
+ try {
329
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
330
+ } finally {
331
+ if (_didIteratorError) throw _iteratorError;
332
+ }
333
+ }
334
+ } else if (mode === "update") {
335
+ var _iteratorNormalCompletion1 = !0,
336
+ _didIteratorError1 = !1,
337
+ _iteratorError1 = void 0;
338
+ try {
339
+ for (var _iterator1 = Object.entries(columns)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = !0) {
340
+ var [name, col1] = _step1.value,
341
+ isPK = primaryKeys.includes(name);
342
+ isPK ? entries.push(`${formatObjectKey(name)}: ${columnTypeToValibot({
343
+ ...col1,
344
+ optional: !1
345
+ })}`) : entries.push(`${formatObjectKey(name)}: ${columnTypeToValibot({
346
+ ...col1,
347
+ optional: !0
348
+ })}`);
349
+ }
350
+ } catch (err) {
351
+ _didIteratorError1 = !0, _iteratorError1 = err;
352
+ } finally {
353
+ try {
354
+ !_iteratorNormalCompletion1 && _iterator1.return != null && _iterator1.return();
355
+ } finally {
356
+ if (_didIteratorError1) throw _iteratorError1;
357
+ }
358
+ }
359
+ } else {
360
+ var _iteratorNormalCompletion2 = !0,
361
+ _didIteratorError2 = !1,
362
+ _iteratorError2 = void 0;
363
+ try {
364
+ for (var _iterator2 = Object.entries(columns)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = !0) {
365
+ var [name1, col2] = _step2.value;
366
+ entries.push(`${formatObjectKey(name1)}: ${columnTypeToValibot(col2)}`);
367
+ }
368
+ } catch (err) {
369
+ _didIteratorError2 = !0, _iteratorError2 = err;
370
+ } finally {
371
+ try {
372
+ !_iteratorNormalCompletion2 && _iterator2.return != null && _iterator2.return();
373
+ } finally {
374
+ if (_didIteratorError2) throw _iteratorError2;
375
+ }
376
+ }
377
+ }
378
+ return `v.object({
379
+ ${entries.join(`,
380
+ `)},
381
+ })`;
382
+ }
383
+ function extractValibotExpression(valibotCode) {
384
+ return valibotCode.trim() || "v.unknown()";
385
+ }
386
+ function parseColumnType(initText) {
387
+ var optional = initText.includes(".optional()"),
388
+ type = "string";
389
+ return initText.startsWith("number(") ? type = "number" : initText.startsWith("boolean(") ? type = "boolean" : initText.startsWith("json(") || initText.startsWith("json<") ? type = "json" : initText.startsWith("enumeration(") && (type = "enum"), {
390
+ type,
391
+ optional,
392
+ customType: void 0
393
+ };
394
+ }
395
+ function generateSyncedMutationsFile(modelMutations) {
396
+ var sorted = [...modelMutations].sort(function (a, b) {
397
+ return a.modelName.localeCompare(b.modelName);
398
+ }),
399
+ modelDefs = sorted.map(function (model) {
400
+ var entries = [];
401
+ if (model.hasCRUD && Object.keys(model.columns).length > 0) for (var _loop = function (_i2, _iter2) {
402
+ var mode = _iter2[_i2],
403
+ hasCustomOverride = model.custom.some(function (m) {
404
+ return m.name === mode;
405
+ });
406
+ if (hasCustomOverride) {
407
+ var customMut = model.custom.find(function (m) {
408
+ return m.name === mode;
409
+ });
410
+ customMut.valibotCode ? entries.push(` ${mode}: ${extractValibotExpression(customMut.valibotCode)},`) : entries.push(` ${mode}: ${schemaColumnsToValibot(model.columns, model.primaryKeys, mode)},`);
411
+ } else entries.push(` ${mode}: ${schemaColumnsToValibot(model.columns, model.primaryKeys, mode)},`);
412
+ }, _i = 0, _iter = ["insert", "update", "delete"]; _i < _iter.length; _i++) _loop(_i, _iter);
413
+ var _iteratorNormalCompletion = !0,
414
+ _didIteratorError = !1,
415
+ _iteratorError = void 0;
416
+ try {
417
+ for (var _iterator = model.custom[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
418
+ var mut = _step.value;
419
+ if (!(model.hasCRUD && ["insert", "update", "delete", "upsert"].includes(mut.name))) {
420
+ if (mut.paramType === "void" || !mut.valibotCode) {
421
+ entries.push(` ${mut.name}: v.void_(),`);
422
+ continue;
423
+ }
424
+ entries.push(` ${mut.name}: ${extractValibotExpression(mut.valibotCode)},`);
425
+ }
426
+ }
427
+ } catch (err) {
428
+ _didIteratorError = !0, _iteratorError = err;
429
+ } finally {
430
+ try {
431
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
432
+ } finally {
433
+ if (_didIteratorError) throw _iteratorError;
434
+ }
435
+ }
436
+ return ` ${model.modelName}: {
437
+ ${entries.join(`
438
+ `)}
439
+ },`;
440
+ }).join(`
441
+ `);
442
+ return `// auto-generated by: on-zero generate
443
+ // mutation validators derived from model schemas and handler types
444
+ import * as v from 'valibot'
445
+
446
+ export const mutationValidators = {
447
+ ${modelDefs}
448
+ }
449
+ `;
450
+ }
451
+ //# sourceMappingURL=generate-helpers.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","generate_helpers_exports","__export","columnTypeToValibot","extractValibotExpression","formatObjectKey","generateGroupedQueriesFile","generateModelsFile","generateReadmeFile","generateSyncedMutationsFile","generateSyncedQueriesFile","generateTablesFile","generateTypesFile","getModelImportName","parseColumnType","parseTypeString","schemaColumnsToValibot","shouldSkipObjectKey","module","exports","name","startsWith","test","JSON","stringify","type","trim","endsWith","inner","slice","normalized","replace","entries","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","split","Symbol","iterator","_step","next","done","part","trimmed","match","opt","typeStr","parsed","val","push","err","return","length","join","inner1","modelNames","modelsDirName","sorted","sort","imports","map","sortedByImportName","a","b","localeCompare","modelsObj","typeExports","pascalName","charAt","toUpperCase","schemaName","queries","sortedFiles","Set","q","sourceFile","file","queryByFile","Map","has","set","get","Array","from","keys","namespaceDefs","fileQueries","queryDefs","q2","validatorDef","valibotCode","params","indentedValidator","line","i","queriesObject","col","base","optional","columns","primaryKeys","mode","pk"],"sources":["../../src/generate-helpers.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,150 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: !0
9
+ });
10
+ },
11
+ __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ });
16
+ return to;
17
+ };
18
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
19
+ value: !0
20
+ }), mod);
21
+ var generate_lite_exports = {};
22
+ __export(generate_lite_exports, {
23
+ generateLite: () => generateLite
24
+ });
25
+ module.exports = __toCommonJS(generate_lite_exports);
26
+ var import_generate_helpers = require("./generate-helpers.cjs");
27
+ function stripTrailingSlash(s) {
28
+ return s.endsWith("/") ? s.slice(0, -1) : s;
29
+ }
30
+ function baseName(path, ext) {
31
+ const idx = path.lastIndexOf("/");
32
+ let base = idx >= 0 ? path.slice(idx + 1) : path;
33
+ return ext && base.endsWith(ext) && (base = base.slice(0, -ext.length)), base;
34
+ }
35
+ function listDirectTsFiles(files, dirPrefix) {
36
+ const prefix = stripTrailingSlash(dirPrefix) + "/",
37
+ out = [];
38
+ for (const path of Object.keys(files)) {
39
+ if (!path.startsWith(prefix)) continue;
40
+ const rest = path.slice(prefix.length);
41
+ rest.includes("/") || rest.endsWith(".ts") && (rest.endsWith(".d.ts") || out.push(path));
42
+ }
43
+ return out.sort();
44
+ }
45
+ function generateLite(opts) {
46
+ const {
47
+ files,
48
+ parse
49
+ } = opts,
50
+ baseDir = stripTrailingSlash(opts.dir);
51
+ let modelsDirName;
52
+ if (opts.modelsDir) modelsDirName = opts.modelsDir;else {
53
+ const mutationsPrefix = `${baseDir}/mutations/`;
54
+ modelsDirName = Object.keys(files).some(p => p.startsWith(mutationsPrefix)) ? "mutations" : "models";
55
+ }
56
+ const modelsDirPath = `${baseDir}/${modelsDirName}`,
57
+ queriesDirPath = `${baseDir}/queries`,
58
+ modelFilePaths = listDirectTsFiles(files, modelsDirPath),
59
+ queryFilePaths = listDirectTsFiles(files, queriesDirPath),
60
+ allModelMutations = [],
61
+ modelNamesWithSchema = [];
62
+ for (const filePath of modelFilePaths) {
63
+ const modelName = baseName(filePath, ".ts"),
64
+ content = files[filePath],
65
+ mutationExport = parse(content, filePath).mutations[0] ?? null,
66
+ columns = {},
67
+ primaryKeys = [];
68
+ let hasSchema = !1;
69
+ if (mutationExport?.schema) {
70
+ hasSchema = !0, modelNamesWithSchema.push(modelName);
71
+ for (const pk of mutationExport.schema.primaryKeys) primaryKeys.push(pk);
72
+ for (const col of mutationExport.schema.columns) columns[col.name] = (0, import_generate_helpers.parseColumnType)(col.builderText);
73
+ }
74
+ const hasCRUD = hasSchema && mutationExport !== null,
75
+ custom = (mutationExport?.handlers ?? []).map(h => {
76
+ if (h.paramTypeText == null) return {
77
+ name: h.name,
78
+ paramType: "void",
79
+ valibotCode: ""
80
+ };
81
+ const paramType = h.paramTypeText.trim();
82
+ if (paramType === "unknown") return {
83
+ name: h.name,
84
+ paramType: "unknown",
85
+ valibotCode: ""
86
+ };
87
+ let valibotCode = null;
88
+ try {
89
+ valibotCode = (0, import_generate_helpers.parseTypeString)(paramType);
90
+ } catch {
91
+ valibotCode = null;
92
+ }
93
+ return {
94
+ name: h.name,
95
+ paramType,
96
+ valibotCode: valibotCode ?? "v.unknown()"
97
+ };
98
+ });
99
+ allModelMutations.push({
100
+ modelName,
101
+ hasCRUD,
102
+ columns,
103
+ primaryKeys,
104
+ custom
105
+ });
106
+ }
107
+ const allQueries = [];
108
+ for (const filePath of queryFilePaths) {
109
+ const fileBaseName = baseName(filePath, ".ts"),
110
+ content = files[filePath],
111
+ parsed = parse(content, filePath);
112
+ for (const q of parsed.queries) {
113
+ if (q.name === "permission") continue;
114
+ if (q.paramTypeText == null) {
115
+ allQueries.push({
116
+ name: q.name,
117
+ params: "void",
118
+ valibotCode: "",
119
+ sourceFile: fileBaseName
120
+ });
121
+ continue;
122
+ }
123
+ const paramType = q.paramTypeText.trim();
124
+ let valibotCode = null;
125
+ try {
126
+ valibotCode = (0, import_generate_helpers.parseTypeString)(paramType);
127
+ } catch {
128
+ valibotCode = null;
129
+ }
130
+ allQueries.push({
131
+ name: q.name,
132
+ params: paramType,
133
+ valibotCode: valibotCode ?? "v.unknown()",
134
+ sourceFile: fileBaseName
135
+ });
136
+ }
137
+ }
138
+ const modelNames = modelFilePaths.map(p => baseName(p, ".ts")),
139
+ out = {};
140
+ out["models.ts"] = (0, import_generate_helpers.generateModelsFile)(modelNames, modelsDirName), modelNamesWithSchema.length > 0 && (out["types.ts"] = (0, import_generate_helpers.generateTypesFile)(modelNamesWithSchema), out["tables.ts"] = (0, import_generate_helpers.generateTablesFile)(modelNamesWithSchema, modelsDirName)), out["README.md"] = (0, import_generate_helpers.generateReadmeFile)(), queryFilePaths.length > 0 && (out["groupedQueries.ts"] = (0, import_generate_helpers.generateGroupedQueriesFile)(allQueries), out["syncedQueries.ts"] = (0, import_generate_helpers.generateSyncedQueriesFile)(allQueries)), allModelMutations.length > 0 && (out["syncedMutations.ts"] = (0, import_generate_helpers.generateSyncedMutationsFile)(allModelMutations));
141
+ let mutationCount = 0;
142
+ for (const m of allModelMutations) m.hasCRUD && (mutationCount += 3), mutationCount += m.custom.filter(mut => !m.hasCRUD || !["insert", "update", "delete", "upsert"].includes(mut.name)).length;
143
+ return {
144
+ files: out,
145
+ modelCount: modelNames.length,
146
+ queryCount: allQueries.length,
147
+ mutationCount,
148
+ schemaCount: modelNamesWithSchema.length
149
+ };
150
+ }