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.
- package/dist/cjs/generate-helpers.cjs +309 -0
- package/dist/cjs/generate-helpers.native.js +451 -0
- package/dist/cjs/generate-helpers.native.js.map +1 -0
- package/dist/cjs/generate-lite.cjs +150 -0
- package/dist/cjs/generate-lite.native.js +269 -0
- package/dist/cjs/generate-lite.native.js.map +1 -0
- package/dist/cjs/generate-lite.test.cjs +229 -0
- package/dist/cjs/generate-lite.test.native.js +234 -0
- package/dist/cjs/generate-lite.test.native.js.map +1 -0
- package/dist/cjs/generate.cjs +16 -285
- package/dist/cjs/generate.native.js +18 -432
- package/dist/cjs/generate.native.js.map +1 -1
- package/dist/esm/generate-helpers.mjs +272 -0
- package/dist/esm/generate-helpers.mjs.map +1 -0
- package/dist/esm/generate-helpers.native.js +411 -0
- package/dist/esm/generate-helpers.native.js.map +1 -0
- package/dist/esm/generate-lite.mjs +127 -0
- package/dist/esm/generate-lite.mjs.map +1 -0
- package/dist/esm/generate-lite.native.js +243 -0
- package/dist/esm/generate-lite.native.js.map +1 -0
- package/dist/esm/generate-lite.test.mjs +230 -0
- package/dist/esm/generate-lite.test.mjs.map +1 -0
- package/dist/esm/generate-lite.test.native.js +232 -0
- package/dist/esm/generate-lite.test.native.js.map +1 -0
- package/dist/esm/generate.mjs +6 -275
- package/dist/esm/generate.mjs.map +1 -1
- package/dist/esm/generate.native.js +9 -423
- package/dist/esm/generate.native.js.map +1 -1
- package/package.json +7 -2
- package/src/generate-helpers.ts +440 -0
- package/src/generate-lite.test.ts +310 -0
- package/src/generate-lite.ts +333 -0
- package/src/generate.ts +23 -415
- package/types/generate-helpers.d.ts +42 -0
- package/types/generate-helpers.d.ts.map +1 -0
- package/types/generate-lite.d.ts +40 -0
- package/types/generate-lite.d.ts.map +1 -0
- package/types/generate-lite.test.d.ts +2 -0
- package/types/generate-lite.test.d.ts.map +1 -0
- package/types/generate.d.ts +1 -6
- 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
|
+
}
|