on-zero 0.16.17 → 0.16.19
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/createZeroClient.cjs +44 -11
- package/dist/cjs/createZeroClient.native.js +54 -17
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroClient.recovery.test.cjs +49 -0
- package/dist/cjs/createZeroClient.recovery.test.native.js +53 -0
- package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -1
- package/dist/cjs/generate-helpers.cjs +28 -0
- package/dist/cjs/generate-helpers.native.js +36 -0
- package/dist/cjs/generate-helpers.native.js.map +1 -1
- package/dist/cjs/generate-layout.cjs +62 -53
- package/dist/cjs/generate-layout.native.js +62 -54
- package/dist/cjs/generate-layout.native.js.map +1 -1
- package/dist/cjs/generate-lite.cjs +28 -0
- package/dist/cjs/generate-lite.native.js +89 -33
- package/dist/cjs/generate-lite.native.js.map +1 -1
- package/dist/cjs/generate-lite.test.cjs +46 -0
- package/dist/cjs/generate-lite.test.native.js +46 -0
- package/dist/cjs/generate-lite.test.native.js.map +1 -1
- package/dist/cjs/generate.cjs +237 -243
- package/dist/cjs/generate.native.js +352 -353
- package/dist/cjs/generate.native.js.map +1 -1
- package/dist/cjs/generate.test.cjs +35 -0
- package/dist/cjs/generate.test.native.js +35 -0
- package/dist/cjs/generate.test.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.cjs +2 -1
- package/dist/cjs/helpers/createMutators.native.js +3 -1
- package/dist/cjs/helpers/createMutators.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.cjs +8 -2
- package/dist/cjs/helpers/recoverZeroClient.native.js +10 -2
- package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.test.cjs +53 -0
- package/dist/cjs/helpers/recoverZeroClient.test.native.js +55 -0
- package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/cjs/native-typescript.cjs +190 -0
- package/dist/cjs/native-typescript.native.js +255 -0
- package/dist/cjs/native-typescript.native.js.map +1 -0
- package/dist/esm/createZeroClient.mjs +44 -11
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +54 -17
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroClient.recovery.test.mjs +50 -1
- package/dist/esm/createZeroClient.recovery.test.mjs.map +1 -1
- package/dist/esm/createZeroClient.recovery.test.native.js +54 -1
- package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -1
- package/dist/esm/generate-helpers.mjs +27 -1
- package/dist/esm/generate-helpers.mjs.map +1 -1
- package/dist/esm/generate-helpers.native.js +35 -1
- package/dist/esm/generate-helpers.native.js.map +1 -1
- package/dist/esm/generate-layout.mjs +52 -54
- package/dist/esm/generate-layout.mjs.map +1 -1
- package/dist/esm/generate-layout.native.js +52 -55
- package/dist/esm/generate-layout.native.js.map +1 -1
- package/dist/esm/generate-lite.mjs +29 -1
- package/dist/esm/generate-lite.mjs.map +1 -1
- package/dist/esm/generate-lite.native.js +90 -34
- package/dist/esm/generate-lite.native.js.map +1 -1
- package/dist/esm/generate-lite.test.mjs +46 -0
- package/dist/esm/generate-lite.test.mjs.map +1 -1
- package/dist/esm/generate-lite.test.native.js +46 -0
- package/dist/esm/generate-lite.test.native.js.map +1 -1
- package/dist/esm/generate.mjs +238 -244
- package/dist/esm/generate.mjs.map +1 -1
- package/dist/esm/generate.native.js +353 -354
- package/dist/esm/generate.native.js.map +1 -1
- package/dist/esm/generate.test.mjs +35 -0
- package/dist/esm/generate.test.mjs.map +1 -1
- package/dist/esm/generate.test.native.js +35 -0
- package/dist/esm/generate.test.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.mjs +2 -1
- package/dist/esm/helpers/createMutators.mjs.map +1 -1
- package/dist/esm/helpers/createMutators.native.js +3 -1
- package/dist/esm/helpers/createMutators.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.mjs +8 -2
- package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.native.js +10 -2
- package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.mjs +53 -0
- package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js +55 -0
- package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/native-typescript.mjs +164 -0
- package/dist/esm/native-typescript.mjs.map +1 -0
- package/dist/esm/native-typescript.native.js +226 -0
- package/dist/esm/native-typescript.native.js.map +1 -0
- package/package.json +4 -3
- package/src/createZeroClient.recovery.test.tsx +56 -1
- package/src/createZeroClient.tsx +54 -15
- package/src/generate-helpers.ts +79 -0
- package/src/generate-layout.ts +64 -108
- package/src/generate-lite.test.ts +49 -0
- package/src/generate-lite.ts +44 -0
- package/src/generate.test.ts +52 -0
- package/src/generate.ts +313 -366
- package/src/helpers/createMutators.ts +14 -3
- package/src/helpers/recoverZeroClient.test.ts +50 -0
- package/src/helpers/recoverZeroClient.ts +12 -2
- package/src/native-typescript.ts +176 -0
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/generate-helpers.d.ts +13 -0
- package/types/generate-helpers.d.ts.map +1 -1
- package/types/generate-layout.d.ts +2 -1
- package/types/generate-layout.d.ts.map +1 -1
- package/types/generate-lite.d.ts +1 -0
- package/types/generate-lite.d.ts.map +1 -1
- package/types/generate.d.ts.map +1 -1
- package/types/helpers/createMutators.d.ts.map +1 -1
- package/types/helpers/recoverZeroClient.d.ts.map +1 -1
- package/types/native-typescript.d.ts +11 -0
- package/types/native-typescript.d.ts.map +1 -0
|
@@ -45,12 +45,15 @@ module.exports = __toCommonJS(generate_exports);
|
|
|
45
45
|
var import_crypto = require("crypto");
|
|
46
46
|
var import_fs = require("fs");
|
|
47
47
|
var import_path = require("path");
|
|
48
|
+
var ts = __toESM(require("typescript/unstable/ast"), 1);
|
|
49
|
+
var import_async = require("typescript/unstable/async");
|
|
48
50
|
var import_generate_helpers = require("./generate-helpers.native.js");
|
|
49
51
|
var import_generate_layout = require("./generate-layout.native.js");
|
|
52
|
+
var import_native_typescript = require("./native-typescript.native.js");
|
|
50
53
|
var hash = function hash2(s) {
|
|
51
54
|
return (0, import_crypto.createHash)("sha256").update(s).digest("hex");
|
|
52
55
|
};
|
|
53
|
-
var GENERATOR_CACHE_VERSION = "
|
|
56
|
+
var GENERATOR_CACHE_VERSION = "7";
|
|
54
57
|
var isGeneratorSourceFile = function isGeneratorSourceFile2(name) {
|
|
55
58
|
return name.endsWith(".ts") && !name.endsWith(".d.ts") && !name.endsWith(".test.ts") && !name.endsWith(".spec.ts");
|
|
56
59
|
};
|
|
@@ -155,99 +158,39 @@ function saveCache() {
|
|
|
155
158
|
}
|
|
156
159
|
function writeFileIfChanged(filePath, content) {
|
|
157
160
|
var contentHash = hash(content);
|
|
158
|
-
var
|
|
159
|
-
|
|
161
|
+
var onDisk = null;
|
|
162
|
+
try {
|
|
163
|
+
onDisk = (0, import_fs.readFileSync)(filePath, "utf-8");
|
|
164
|
+
} catch (unused) {}
|
|
165
|
+
if (onDisk !== null && hash(onDisk) === contentHash) {
|
|
166
|
+
generateCache[filePath] = contentHash;
|
|
160
167
|
return false;
|
|
161
168
|
}
|
|
162
169
|
(0, import_fs.writeFileSync)(filePath, content, "utf-8");
|
|
163
170
|
generateCache[filePath] = contentHash;
|
|
164
171
|
return true;
|
|
165
172
|
}
|
|
166
|
-
function createTypeResolver(
|
|
167
|
-
var configPath = ts.findConfigFile(dir, ts.sys.fileExists, "tsconfig.json");
|
|
168
|
-
var compilerOptions = {
|
|
169
|
-
target: ts.ScriptTarget.Latest,
|
|
170
|
-
module: ts.ModuleKind.ESNext,
|
|
171
|
-
moduleResolution: ts.ModuleResolutionKind.Bundler,
|
|
172
|
-
strict: false,
|
|
173
|
-
skipLibCheck: true,
|
|
174
|
-
noEmit: true
|
|
175
|
-
};
|
|
176
|
-
if (configPath) {
|
|
177
|
-
var configFile = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
178
|
-
if (configFile.config) {
|
|
179
|
-
var parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, (0, import_path.dirname)(configPath));
|
|
180
|
-
compilerOptions = {
|
|
181
|
-
...compilerOptions,
|
|
182
|
-
...parsed.options
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
var fileMap = /* @__PURE__ */new Map();
|
|
187
|
-
var _iteratorNormalCompletion = true,
|
|
188
|
-
_didIteratorError = false,
|
|
189
|
-
_iteratorError = void 0;
|
|
190
|
-
try {
|
|
191
|
-
for (var _iterator = files[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
192
|
-
var f = _step.value;
|
|
193
|
-
fileMap.set(f.path, f.content);
|
|
194
|
-
}
|
|
195
|
-
} catch (err) {
|
|
196
|
-
_didIteratorError = true;
|
|
197
|
-
_iteratorError = err;
|
|
198
|
-
} finally {
|
|
199
|
-
try {
|
|
200
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
201
|
-
_iterator.return();
|
|
202
|
-
}
|
|
203
|
-
} finally {
|
|
204
|
-
if (_didIteratorError) {
|
|
205
|
-
throw _iteratorError;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
var host = ts.createCompilerHost(compilerOptions);
|
|
210
|
-
var originalGetSourceFile = host.getSourceFile.bind(host);
|
|
211
|
-
host.getSourceFile = function (fileName, languageVersion, onError) {
|
|
212
|
-
var content = fileMap.get(fileName);
|
|
213
|
-
if (content !== void 0) {
|
|
214
|
-
return ts.createSourceFile(fileName, content, languageVersion, true);
|
|
215
|
-
}
|
|
216
|
-
return originalGetSourceFile(fileName, languageVersion, onError);
|
|
217
|
-
};
|
|
218
|
-
host.fileExists = function (fileName) {
|
|
219
|
-
return fileMap.has(fileName) || ts.sys.fileExists(fileName);
|
|
220
|
-
};
|
|
221
|
-
host.readFile = function (fileName) {
|
|
222
|
-
var _fileMap_get;
|
|
223
|
-
return (_fileMap_get = fileMap.get(fileName)) !== null && _fileMap_get !== void 0 ? _fileMap_get : ts.sys.readFile(fileName);
|
|
224
|
-
};
|
|
225
|
-
var program = ts.createProgram(files.map(function (f2) {
|
|
226
|
-
return f2.path;
|
|
227
|
-
}), compilerOptions, host);
|
|
228
|
-
var checker = program.getTypeChecker();
|
|
173
|
+
function createTypeResolver(project) {
|
|
229
174
|
return {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
// resolve a type annotation node to a ts.Type
|
|
233
|
-
resolveType(node) {
|
|
175
|
+
project,
|
|
176
|
+
async resolveType(node) {
|
|
234
177
|
try {
|
|
235
|
-
|
|
178
|
+
var _ref;
|
|
179
|
+
return (_ref = await project.checker.getTypeFromTypeNode(node)) !== null && _ref !== void 0 ? _ref : null;
|
|
236
180
|
} catch (unused) {
|
|
237
181
|
return null;
|
|
238
182
|
}
|
|
239
183
|
},
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
return tsTypeToValibot(ts, checker, type);
|
|
184
|
+
async typeToValibot(type) {
|
|
185
|
+
return tsTypeToValibot(project, type);
|
|
243
186
|
}
|
|
244
187
|
};
|
|
245
188
|
}
|
|
246
|
-
function resolveParamType(
|
|
247
|
-
var
|
|
248
|
-
|
|
189
|
+
async function resolveParamType(resolver, sourceFile, exportName, paramIndex) {
|
|
190
|
+
var typeNode = null;
|
|
191
|
+
sourceFile.forEachChild(function (node) {
|
|
249
192
|
var _node_modifiers;
|
|
250
|
-
if (
|
|
193
|
+
if (typeNode) return;
|
|
251
194
|
if (!ts.isVariableStatement(node)) return;
|
|
252
195
|
if (!((_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.some(function (m) {
|
|
253
196
|
return m.kind === ts.SyntaxKind.ExportKeyword;
|
|
@@ -258,13 +201,13 @@ function resolveParamType(ts, resolver, sourceFile, exportName, paramIndex) {
|
|
|
258
201
|
if (decl.initializer && ts.isArrowFunction(decl.initializer)) {
|
|
259
202
|
var param = decl.initializer.parameters[paramIndex];
|
|
260
203
|
if (param === null || param === void 0 ? void 0 : param.type) {
|
|
261
|
-
|
|
204
|
+
typeNode = param.type;
|
|
262
205
|
}
|
|
263
206
|
}
|
|
264
207
|
});
|
|
265
|
-
return
|
|
208
|
+
return typeNode ? resolver.resolveType(typeNode) : null;
|
|
266
209
|
}
|
|
267
|
-
function readMutationsCall(
|
|
210
|
+
function readMutationsCall(call) {
|
|
268
211
|
var args = call.arguments;
|
|
269
212
|
if (args.length < 2) {
|
|
270
213
|
var only = args[0];
|
|
@@ -309,32 +252,32 @@ function readMutationsCall(ts, call) {
|
|
|
309
252
|
handlersArg: handlers && ts.isObjectLiteralExpression(handlers) ? handlers : null
|
|
310
253
|
};
|
|
311
254
|
}
|
|
312
|
-
function resolveMutationParamTypes(
|
|
313
|
-
var
|
|
314
|
-
|
|
255
|
+
async function resolveMutationParamTypes(resolver, sourceFile) {
|
|
256
|
+
var nodes = /* @__PURE__ */new Map();
|
|
257
|
+
sourceFile.forEachChild(function (node2) {
|
|
315
258
|
var _node_modifiers;
|
|
316
|
-
if (!ts.isVariableStatement(
|
|
317
|
-
if (!((_node_modifiers =
|
|
259
|
+
if (!ts.isVariableStatement(node2)) return;
|
|
260
|
+
if (!((_node_modifiers = node2.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.some(function (m) {
|
|
318
261
|
return m.kind === ts.SyntaxKind.ExportKeyword;
|
|
319
262
|
}))) return;
|
|
320
|
-
var decl =
|
|
263
|
+
var decl = node2.declarationList.declarations[0];
|
|
321
264
|
if (!decl || !ts.isVariableDeclaration(decl)) return;
|
|
322
265
|
if (decl.name.getText(sourceFile) !== "mutate") return;
|
|
323
266
|
if (!decl.initializer || !ts.isCallExpression(decl.initializer)) return;
|
|
324
267
|
var {
|
|
325
268
|
handlersArg
|
|
326
|
-
} = readMutationsCall(
|
|
269
|
+
} = readMutationsCall(decl.initializer);
|
|
327
270
|
if (!handlersArg) return;
|
|
328
|
-
var
|
|
329
|
-
|
|
330
|
-
|
|
271
|
+
var _iteratorNormalCompletion2 = true,
|
|
272
|
+
_didIteratorError2 = false,
|
|
273
|
+
_iteratorError2 = void 0;
|
|
331
274
|
try {
|
|
332
|
-
for (var
|
|
333
|
-
var prop =
|
|
275
|
+
for (var _iterator2 = handlersArg.properties[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
276
|
+
var prop = _step2.value;
|
|
334
277
|
var _prop_name;
|
|
335
278
|
if (!ts.isPropertyAssignment(prop) && !ts.isMethodDeclaration(prop)) continue;
|
|
336
|
-
var
|
|
337
|
-
if (!
|
|
279
|
+
var name2 = (_prop_name = prop.name) === null || _prop_name === void 0 ? void 0 : _prop_name.getText(sourceFile);
|
|
280
|
+
if (!name2) continue;
|
|
338
281
|
var params = null;
|
|
339
282
|
if (ts.isPropertyAssignment(prop)) {
|
|
340
283
|
var init = prop.initializer;
|
|
@@ -347,31 +290,52 @@ function resolveMutationParamTypes(ts, resolver, sourceFile) {
|
|
|
347
290
|
if (!params || params.length < 2) continue;
|
|
348
291
|
var typeNode = params[1].type;
|
|
349
292
|
if (!typeNode) continue;
|
|
350
|
-
|
|
351
|
-
if (expanded) {
|
|
352
|
-
resolved.set(name, expanded);
|
|
353
|
-
}
|
|
293
|
+
nodes.set(name2, typeNode);
|
|
354
294
|
}
|
|
355
295
|
} catch (err) {
|
|
356
|
-
|
|
357
|
-
|
|
296
|
+
_didIteratorError2 = true;
|
|
297
|
+
_iteratorError2 = err;
|
|
358
298
|
} finally {
|
|
359
299
|
try {
|
|
360
|
-
if (!
|
|
361
|
-
|
|
300
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
301
|
+
_iterator2.return();
|
|
362
302
|
}
|
|
363
303
|
} finally {
|
|
364
|
-
if (
|
|
365
|
-
throw
|
|
304
|
+
if (_didIteratorError2) {
|
|
305
|
+
throw _iteratorError2;
|
|
366
306
|
}
|
|
367
307
|
}
|
|
368
308
|
}
|
|
369
309
|
});
|
|
310
|
+
var resolved = /* @__PURE__ */new Map();
|
|
311
|
+
var _iteratorNormalCompletion = true,
|
|
312
|
+
_didIteratorError = false,
|
|
313
|
+
_iteratorError = void 0;
|
|
314
|
+
try {
|
|
315
|
+
for (var _iterator = nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
316
|
+
var [name, node] = _step.value;
|
|
317
|
+
var expanded = await resolver.resolveType(node);
|
|
318
|
+
if (expanded) resolved.set(name, expanded);
|
|
319
|
+
}
|
|
320
|
+
} catch (err) {
|
|
321
|
+
_didIteratorError = true;
|
|
322
|
+
_iteratorError = err;
|
|
323
|
+
} finally {
|
|
324
|
+
try {
|
|
325
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
326
|
+
_iterator.return();
|
|
327
|
+
}
|
|
328
|
+
} finally {
|
|
329
|
+
if (_didIteratorError) {
|
|
330
|
+
throw _iteratorError;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
370
334
|
return resolved;
|
|
371
335
|
}
|
|
372
|
-
function extractMutationsFromModel(
|
|
336
|
+
function extractMutationsFromModel(sourceFile, content, fileName, silent, typeToValibot, resolvedValibot) {
|
|
373
337
|
var mutateNode = null;
|
|
374
|
-
|
|
338
|
+
sourceFile.forEachChild(function (node) {
|
|
375
339
|
var _node_modifiers;
|
|
376
340
|
if (!ts.isVariableStatement(node)) return;
|
|
377
341
|
if (!((_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.some(function (m) {
|
|
@@ -398,12 +362,12 @@ function extractMutationsFromModel(ts, sourceFile, content, fileName, silent, ty
|
|
|
398
362
|
hasTable,
|
|
399
363
|
crud,
|
|
400
364
|
handlersArg
|
|
401
|
-
} = readMutationsCall(
|
|
365
|
+
} = readMutationsCall(call);
|
|
402
366
|
var hasCRUD = hasTable && crud;
|
|
403
367
|
var columns = {};
|
|
404
368
|
var primaryKeys = [];
|
|
405
369
|
if (hasCRUD) {
|
|
406
|
-
extractSchemaColumns(
|
|
370
|
+
extractSchemaColumns(sourceFile, columns, primaryKeys);
|
|
407
371
|
}
|
|
408
372
|
var custom = [];
|
|
409
373
|
if (handlersArg) {
|
|
@@ -446,11 +410,9 @@ function extractMutationsFromModel(ts, sourceFile, content, fileName, silent, ty
|
|
|
446
410
|
continue;
|
|
447
411
|
}
|
|
448
412
|
var valibotCode = typeToValibot(paramType);
|
|
449
|
-
if (!valibotCode &&
|
|
450
|
-
var
|
|
451
|
-
|
|
452
|
-
valibotCode = resolvedTypeToValibot(resolvedType);
|
|
453
|
-
}
|
|
413
|
+
if (!valibotCode && resolvedValibot) {
|
|
414
|
+
var _resolvedValibot_get;
|
|
415
|
+
valibotCode = (_resolvedValibot_get = resolvedValibot.get(name)) !== null && _resolvedValibot_get !== void 0 ? _resolvedValibot_get : null;
|
|
454
416
|
}
|
|
455
417
|
custom.push({
|
|
456
418
|
name,
|
|
@@ -481,7 +443,7 @@ function extractMutationsFromModel(ts, sourceFile, content, fileName, silent, ty
|
|
|
481
443
|
custom
|
|
482
444
|
};
|
|
483
445
|
}
|
|
484
|
-
function extractSchemaColumns(
|
|
446
|
+
function extractSchemaColumns(sourceFile, columns, primaryKeys) {
|
|
485
447
|
function visit(node) {
|
|
486
448
|
if (ts.isCallExpression(node)) {
|
|
487
449
|
var text = node.expression.getText(sourceFile);
|
|
@@ -545,64 +507,59 @@ function extractSchemaColumns(ts, sourceFile, columns, primaryKeys) {
|
|
|
545
507
|
}
|
|
546
508
|
}
|
|
547
509
|
}
|
|
548
|
-
|
|
510
|
+
node.forEachChild(visit);
|
|
549
511
|
}
|
|
550
512
|
visit(sourceFile);
|
|
551
513
|
}
|
|
552
|
-
function
|
|
553
|
-
var
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
if (!seen) seen = /* @__PURE__ */new Set();
|
|
560
|
-
var flags = type.getFlags();
|
|
561
|
-
if (flags & (ts.TypeFlags.Object | ts.TypeFlags.Intersection)) {
|
|
562
|
-
if (seen.has(type)) return "v.unknown()";
|
|
563
|
-
seen.add(type);
|
|
514
|
+
async function tsTypeToValibot(project, type) {
|
|
515
|
+
var seen = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : /* @__PURE__ */new Set();
|
|
516
|
+
var checker = project.checker;
|
|
517
|
+
var flags = type.flags;
|
|
518
|
+
if (flags & (import_async.TypeFlags.Object | import_async.TypeFlags.Intersection)) {
|
|
519
|
+
if (seen.has(type.id)) return "v.unknown()";
|
|
520
|
+
seen.add(type.id);
|
|
564
521
|
}
|
|
565
|
-
var recurse = function recurse2(
|
|
566
|
-
return tsTypeToValibot(
|
|
522
|
+
var recurse = function recurse2(value) {
|
|
523
|
+
return tsTypeToValibot(project, value, seen);
|
|
567
524
|
};
|
|
568
|
-
if (flags &
|
|
569
|
-
if (flags &
|
|
570
|
-
if (flags &
|
|
571
|
-
if (flags &
|
|
572
|
-
if (flags &
|
|
573
|
-
if (flags &
|
|
574
|
-
if (flags &
|
|
575
|
-
if (flags &
|
|
576
|
-
if (flags &
|
|
577
|
-
var
|
|
578
|
-
var
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
525
|
+
if (flags & import_async.TypeFlags.String) return "v.string()";
|
|
526
|
+
if (flags & import_async.TypeFlags.Number) return "v.number()";
|
|
527
|
+
if (flags & import_async.TypeFlags.Boolean) return "v.boolean()";
|
|
528
|
+
if (flags & import_async.TypeFlags.Void || flags & import_async.TypeFlags.Undefined) return "v.void_()";
|
|
529
|
+
if (flags & import_async.TypeFlags.Null) return "v.null_()";
|
|
530
|
+
if (flags & import_async.TypeFlags.Any || flags & import_async.TypeFlags.Unknown) return "v.unknown()";
|
|
531
|
+
if (flags & import_async.TypeFlags.Never) return "v.never()";
|
|
532
|
+
if (flags & import_async.TypeFlags.TemplateLiteral) return "v.string()";
|
|
533
|
+
if (flags & import_async.TypeFlags.Object && (await checker.isArrayLikeType(type))) {
|
|
534
|
+
var typeArgs = type.isTypeReference() ? await checker.getTypeArguments(type) : [];
|
|
535
|
+
var indexInfo = (await checker.getIndexInfosOfType(type)).find(function (info) {
|
|
536
|
+
return Boolean(info.keyType.flags & import_async.TypeFlags.Number);
|
|
537
|
+
});
|
|
538
|
+
var elementType = typeArgs.length === 1 ? typeArgs[0] : indexInfo === null || indexInfo === void 0 ? void 0 : indexInfo.valueType;
|
|
539
|
+
return `v.array(${elementType ? await recurse(elementType) : "v.unknown()"})`;
|
|
582
540
|
}
|
|
583
|
-
if (
|
|
541
|
+
if (type.isStringLiteralType()) {
|
|
584
542
|
return `v.literal(${JSON.stringify(type.value)})`;
|
|
585
543
|
}
|
|
586
|
-
if (
|
|
544
|
+
if (type.isNumberLiteralType()) {
|
|
587
545
|
return `v.literal(${type.value})`;
|
|
588
546
|
}
|
|
589
|
-
if (
|
|
590
|
-
|
|
591
|
-
return `v.literal(${name === "true"})`;
|
|
547
|
+
if (type.isBooleanLiteralType()) {
|
|
548
|
+
return `v.literal(${type.value})`;
|
|
592
549
|
}
|
|
593
|
-
if (type.
|
|
594
|
-
var members = type.
|
|
595
|
-
var hasNull = members.some(function (
|
|
596
|
-
return
|
|
550
|
+
if (type.isUnionType()) {
|
|
551
|
+
var members = await type.getTypes();
|
|
552
|
+
var hasNull = members.some(function (member) {
|
|
553
|
+
return member.flags & import_async.TypeFlags.Null;
|
|
597
554
|
});
|
|
598
|
-
var hasUndefined = members.some(function (
|
|
599
|
-
return
|
|
555
|
+
var hasUndefined = members.some(function (member) {
|
|
556
|
+
return member.flags & (import_async.TypeFlags.Undefined | import_async.TypeFlags.Void);
|
|
600
557
|
});
|
|
601
|
-
var rest = members.filter(function (
|
|
602
|
-
return !(
|
|
558
|
+
var rest = members.filter(function (member) {
|
|
559
|
+
return !(member.flags & (import_async.TypeFlags.Null | import_async.TypeFlags.Undefined | import_async.TypeFlags.Void));
|
|
603
560
|
});
|
|
604
|
-
if (rest.length === 2 && rest.every(function (
|
|
605
|
-
return
|
|
561
|
+
if (rest.length === 2 && rest.every(function (member) {
|
|
562
|
+
return member.flags & import_async.TypeFlags.BooleanLiteral;
|
|
606
563
|
})) {
|
|
607
564
|
var inner = "v.boolean()";
|
|
608
565
|
if (hasNull) inner = `v.nullable(${inner})`;
|
|
@@ -610,52 +567,50 @@ function tsTypeToValibot(ts, checker, type, seen) {
|
|
|
610
567
|
return inner;
|
|
611
568
|
}
|
|
612
569
|
if (rest.length === 0) return "v.unknown()";
|
|
613
|
-
var inner1 = rest.length === 1 ? recurse(rest[0]) : `v.union([${rest.map(
|
|
614
|
-
return recurse(t);
|
|
615
|
-
}).join(", ")}])`;
|
|
570
|
+
var inner1 = rest.length === 1 ? await recurse(rest[0]) : `v.union([${(await Promise.all(rest.map(recurse))).join(", ")}])`;
|
|
616
571
|
if (hasNull) inner1 = `v.nullable(${inner1})`;
|
|
617
572
|
if (hasUndefined) inner1 = `v.optional(${inner1})`;
|
|
618
573
|
return inner1;
|
|
619
574
|
}
|
|
620
|
-
var resolveSymbolType = function resolveSymbolType2(
|
|
621
|
-
var
|
|
622
|
-
var
|
|
623
|
-
if (
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
return checker.
|
|
575
|
+
var resolveSymbolType = async function resolveSymbolType2(property) {
|
|
576
|
+
var _property_valueDeclaration;
|
|
577
|
+
var symbolType = await checker.getTypeOfSymbol(property);
|
|
578
|
+
if (symbolType && !symbolType.isErrorType()) return symbolType;
|
|
579
|
+
var declaration = (_property_valueDeclaration = property.valueDeclaration) !== null && _property_valueDeclaration !== void 0 ? _property_valueDeclaration : property.declarations[0];
|
|
580
|
+
var node = declaration ? await declaration.resolve(project) : void 0;
|
|
581
|
+
if (node) return checker.getTypeOfSymbolAtLocation(property, node);
|
|
582
|
+
return checker.getDeclaredTypeOfSymbol(property);
|
|
627
583
|
};
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
if (props.length === 0) return "v.object({})";
|
|
584
|
+
var objectToValibot = async function objectToValibot2(props2) {
|
|
585
|
+
if (props2.length === 0) return "v.object({})";
|
|
631
586
|
var entries = [];
|
|
632
|
-
var
|
|
633
|
-
|
|
634
|
-
|
|
587
|
+
var _iteratorNormalCompletion2 = true,
|
|
588
|
+
_didIteratorError2 = false,
|
|
589
|
+
_iteratorError2 = void 0;
|
|
635
590
|
try {
|
|
636
|
-
for (var
|
|
637
|
-
var prop =
|
|
638
|
-
var
|
|
639
|
-
if ((0, import_generate_helpers.shouldSkipObjectKey)(
|
|
640
|
-
var propType = resolveSymbolType(
|
|
641
|
-
var isOptional =
|
|
642
|
-
var val = recurse(propType);
|
|
591
|
+
for (var _iterator2 = props2[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
592
|
+
var prop = _step2.value;
|
|
593
|
+
var name = prop.name;
|
|
594
|
+
if ((0, import_generate_helpers.shouldSkipObjectKey)(name)) continue;
|
|
595
|
+
var propType = await resolveSymbolType(prop);
|
|
596
|
+
var isOptional = Boolean(prop.flags & import_async.SymbolFlags.Optional);
|
|
597
|
+
var val = await recurse(propType);
|
|
643
598
|
if (isOptional && !val.startsWith("v.optional(")) {
|
|
644
599
|
val = `v.optional(${val})`;
|
|
645
600
|
}
|
|
646
|
-
entries.push(`${(0, import_generate_helpers.formatObjectKey)(
|
|
601
|
+
entries.push(`${(0, import_generate_helpers.formatObjectKey)(name)}: ${val}`);
|
|
647
602
|
}
|
|
648
603
|
} catch (err) {
|
|
649
|
-
|
|
650
|
-
|
|
604
|
+
_didIteratorError2 = true;
|
|
605
|
+
_iteratorError2 = err;
|
|
651
606
|
} finally {
|
|
652
607
|
try {
|
|
653
|
-
if (!
|
|
654
|
-
|
|
608
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
609
|
+
_iterator2.return();
|
|
655
610
|
}
|
|
656
611
|
} finally {
|
|
657
|
-
if (
|
|
658
|
-
throw
|
|
612
|
+
if (_didIteratorError2) {
|
|
613
|
+
throw _iteratorError2;
|
|
659
614
|
}
|
|
660
615
|
}
|
|
661
616
|
}
|
|
@@ -663,70 +618,51 @@ function tsTypeToValibot(ts, checker, type, seen) {
|
|
|
663
618
|
return `v.object({
|
|
664
619
|
${entries.join(",\n ")},
|
|
665
620
|
})`;
|
|
621
|
+
};
|
|
622
|
+
if (type.isIntersectionType()) {
|
|
623
|
+
return objectToValibot(await checker.getPropertiesOfType(type));
|
|
666
624
|
}
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
var
|
|
674
|
-
var
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
return `v.array(${recurse(typeRef.typeArguments[0])})`;
|
|
625
|
+
if (type.isTupleType()) {
|
|
626
|
+
var typeArgs1 = await checker.getTypeArguments(type);
|
|
627
|
+
return `v.tuple([${(await Promise.all(typeArgs1.map(recurse))).join(", ")}])`;
|
|
628
|
+
}
|
|
629
|
+
if (type.isObjectType()) {
|
|
630
|
+
if (type.objectFlags & import_async.ObjectFlags.Reference && type.isTypeReference()) {
|
|
631
|
+
var symbol = await type.getSymbol();
|
|
632
|
+
var typeArgs2 = await checker.getTypeArguments(type);
|
|
633
|
+
if (((symbol === null || symbol === void 0 ? void 0 : symbol.name) === "Array" || (symbol === null || symbol === void 0 ? void 0 : symbol.name) === "ReadonlyArray") && typeArgs2.length === 1) {
|
|
634
|
+
return `v.array(${await recurse(typeArgs2[0])})`;
|
|
678
635
|
}
|
|
679
636
|
}
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
637
|
+
var props = await checker.getPropertiesOfType(type);
|
|
638
|
+
if (props.length > 0) return objectToValibot(props);
|
|
639
|
+
}
|
|
640
|
+
var _iteratorNormalCompletion = true,
|
|
641
|
+
_didIteratorError = false,
|
|
642
|
+
_iteratorError = void 0;
|
|
643
|
+
try {
|
|
644
|
+
for (var _iterator = (await checker.getIndexInfosOfType(type))[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
645
|
+
var indexInfo1 = _step.value;
|
|
646
|
+
if (indexInfo1.keyType.flags & import_async.TypeFlags.String) {
|
|
647
|
+
return `v.record(v.string(), ${await recurse(indexInfo1.valueType)})`;
|
|
648
|
+
}
|
|
649
|
+
if (indexInfo1.keyType.flags & import_async.TypeFlags.Number) {
|
|
650
|
+
return `v.record(v.number(), ${await recurse(indexInfo1.valueType)})`;
|
|
651
|
+
}
|
|
686
652
|
}
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
653
|
+
} catch (err) {
|
|
654
|
+
_didIteratorError = true;
|
|
655
|
+
_iteratorError = err;
|
|
656
|
+
} finally {
|
|
691
657
|
try {
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
var name3 = prop1.getName();
|
|
695
|
-
if ((0, import_generate_helpers.shouldSkipObjectKey)(name3)) continue;
|
|
696
|
-
var propType1 = resolveSymbolType(type, prop1);
|
|
697
|
-
var isOptional1 = !!(prop1.getFlags() & ts.SymbolFlags.Optional);
|
|
698
|
-
var val1 = recurse(propType1);
|
|
699
|
-
if (isOptional1 && !val1.startsWith("v.optional(")) {
|
|
700
|
-
val1 = `v.optional(${val1})`;
|
|
701
|
-
}
|
|
702
|
-
entries1.push(`${(0, import_generate_helpers.formatObjectKey)(name3)}: ${val1}`);
|
|
658
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
659
|
+
_iterator.return();
|
|
703
660
|
}
|
|
704
|
-
} catch (err) {
|
|
705
|
-
_didIteratorError1 = true;
|
|
706
|
-
_iteratorError1 = err;
|
|
707
661
|
} finally {
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
_iterator1.return();
|
|
711
|
-
}
|
|
712
|
-
} finally {
|
|
713
|
-
if (_didIteratorError1) {
|
|
714
|
-
throw _iteratorError1;
|
|
715
|
-
}
|
|
662
|
+
if (_didIteratorError) {
|
|
663
|
+
throw _iteratorError;
|
|
716
664
|
}
|
|
717
665
|
}
|
|
718
|
-
if (entries1.length === 0) return "v.object({})";
|
|
719
|
-
return `v.object({
|
|
720
|
-
${entries1.join(",\n ")},
|
|
721
|
-
})`;
|
|
722
|
-
}
|
|
723
|
-
var stringIndex = type.getStringIndexType();
|
|
724
|
-
if (stringIndex) {
|
|
725
|
-
return `v.record(v.string(), ${recurse(stringIndex)})`;
|
|
726
|
-
}
|
|
727
|
-
var numberIndex = type.getNumberIndexType();
|
|
728
|
-
if (numberIndex) {
|
|
729
|
-
return `v.record(v.number(), ${recurse(numberIndex)})`;
|
|
730
666
|
}
|
|
731
667
|
return "v.unknown()";
|
|
732
668
|
}
|
|
@@ -882,16 +818,33 @@ function dataMembershipFromLayout(layout) {
|
|
|
882
818
|
}))].sort()
|
|
883
819
|
};
|
|
884
820
|
}
|
|
821
|
+
async function loadGeneratorProject(baseDir) {
|
|
822
|
+
var sourcePaths = (0, import_native_typescript.collectTypeScriptSourcePaths)([baseDir, (0, import_path.resolve)((0, import_path.dirname)(baseDir), "database")]);
|
|
823
|
+
return (0, import_native_typescript.createNativeTypeScriptProject)(baseDir, sourcePaths);
|
|
824
|
+
}
|
|
885
825
|
async function deriveDataMembership(options) {
|
|
886
|
-
var
|
|
887
|
-
var
|
|
888
|
-
|
|
826
|
+
var baseDir = (0, import_path.resolve)(options.dir);
|
|
827
|
+
var project = await loadGeneratorProject(baseDir);
|
|
828
|
+
try {
|
|
829
|
+
var layout = (0, import_generate_layout.discoverDataLayout)(project, baseDir, options.config ? (0, import_path.resolve)(options.config) : void 0);
|
|
830
|
+
return dataMembershipFromLayout(layout);
|
|
831
|
+
} finally {
|
|
832
|
+
await project.close();
|
|
833
|
+
}
|
|
889
834
|
}
|
|
890
835
|
async function generateDrizzleSchemaInputFile(options) {
|
|
836
|
+
var baseDir = (0, import_path.resolve)(options.dir);
|
|
837
|
+
var project = await loadGeneratorProject(baseDir);
|
|
838
|
+
try {
|
|
839
|
+
return generateDrizzleSchemaInputFileWithProject(options, project);
|
|
840
|
+
} finally {
|
|
841
|
+
await project.close();
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
async function generateDrizzleSchemaInputFileWithProject(options, project) {
|
|
891
845
|
var _layout_metadataPaths_find;
|
|
892
|
-
var ts = await import("typescript");
|
|
893
846
|
var baseDir = (0, import_path.resolve)(options.dir);
|
|
894
|
-
var layout = (0, import_generate_layout.discoverDataLayout)(
|
|
847
|
+
var layout = (0, import_generate_layout.discoverDataLayout)(project, baseDir, options.config ? (0, import_path.resolve)(options.config) : void 0);
|
|
895
848
|
var tableNames = dataMembershipFromLayout(layout).allTables;
|
|
896
849
|
var relationsPath = (_layout_metadataPaths_find = layout.metadataPaths.find(function (path) {
|
|
897
850
|
return (0, import_path.basename)(path) === "relations.ts" && (0, import_path.dirname)(path) === (0, import_path.resolve)((0, import_path.dirname)(baseDir), "database");
|
|
@@ -900,11 +853,11 @@ async function generateDrizzleSchemaInputFile(options) {
|
|
|
900
853
|
});
|
|
901
854
|
var relationEntries = [];
|
|
902
855
|
if (relationsPath) {
|
|
903
|
-
var source =
|
|
856
|
+
var source = project.sourceFile(relationsPath);
|
|
904
857
|
var included = new Set(tableNames);
|
|
905
858
|
var visit = function visit1(node) {
|
|
906
859
|
if (!ts.isCallExpression(node) || node.expression.getText(source) !== "defineRelations") {
|
|
907
|
-
|
|
860
|
+
node.forEachChild(visit);
|
|
908
861
|
return;
|
|
909
862
|
}
|
|
910
863
|
var factory = node.arguments[1];
|
|
@@ -978,6 +931,14 @@ ${relations.map(function (relation) {
|
|
|
978
931
|
return ["// auto-generated from the on-zero data layout", `import { defineRelations } from 'drizzle-orm'`, `import * as schema from ${schemaImportPath}`, "", `export { ${tableNames.join(", ")} } from ${schemaImportPath}`, `export const relations = defineRelations(schema, (r) => ({`, ...relationEntries, `}))`, ""].join("\n");
|
|
979
932
|
}
|
|
980
933
|
async function generate(options) {
|
|
934
|
+
var project = await loadGeneratorProject((0, import_path.resolve)(options.dir));
|
|
935
|
+
try {
|
|
936
|
+
return await generateWithProject(options, project);
|
|
937
|
+
} finally {
|
|
938
|
+
await project.close();
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
async function generateWithProject(options, project) {
|
|
981
942
|
var {
|
|
982
943
|
dir,
|
|
983
944
|
after,
|
|
@@ -993,13 +954,44 @@ async function generate(options) {
|
|
|
993
954
|
});
|
|
994
955
|
}
|
|
995
956
|
loadCache();
|
|
996
|
-
var
|
|
997
|
-
var layout = (0, import_generate_layout.discoverDataLayout)(ts, baseDir, config ? (0, import_path.resolve)(config) : void 0);
|
|
957
|
+
var layout = (0, import_generate_layout.discoverDataLayout)(project, baseDir, config ? (0, import_path.resolve)(config) : void 0);
|
|
998
958
|
var metadataHash = hash(layout.metadataPaths.map(function (path) {
|
|
999
959
|
return `${path}\0${(0, import_fs.readFileSync)(path, "utf8")}`;
|
|
1000
960
|
}).join("\0"));
|
|
961
|
+
var databaseSchemaPath = (0, import_path.resolve)((0, import_path.dirname)(baseDir), "database/schema.ts");
|
|
962
|
+
var needsSqliteZeroSchema = (0, import_fs.existsSync)(databaseSchemaPath);
|
|
1001
963
|
var inputHash = hash(`${hashInputTree(layout.sourceRoots, generatedDir)}\0${metadataHash}`);
|
|
1002
|
-
if (!force && generateCache.__generatorVersion === GENERATOR_CACHE_VERSION && generateCache.__inputHash === inputHash &&
|
|
964
|
+
if (!force && generateCache.__generatorVersion === GENERATOR_CACHE_VERSION && generateCache.__inputHash === inputHash &&
|
|
965
|
+
// the input hash deliberately skips the generated directory, so it cannot
|
|
966
|
+
// notice that the outputs themselves moved. existence is not correctness
|
|
967
|
+
// either: a checkout, merge or revert leaves every file present and stale.
|
|
968
|
+
// confirm the bytes on disk still match what the cache says it wrote there
|
|
969
|
+
// before skipping the build, or the fast path serves someone else's output.
|
|
970
|
+
//
|
|
971
|
+
// a consumer that formats generated output after this runs never hits the
|
|
972
|
+
// fast path again, because the cache holds the bytes written here and disk
|
|
973
|
+
// holds the formatted ones. soot does exactly that, `on-zero generate &&
|
|
974
|
+
// generate-instance-tables && oxfmt src/data/generated/`, and the number is
|
|
975
|
+
// already taken: 2.50s median before, 3.69s after, four warm runs each in
|
|
976
|
+
// one checkout with only the pin swapped, so about 1.2 seconds or 47
|
|
977
|
+
// percent on this step. the full three-command script went 2.65s to 3.14s
|
|
978
|
+
// with a spread that swallows most of it.
|
|
979
|
+
//
|
|
980
|
+
// the shape matters more than the number. this is not a cache that hits
|
|
981
|
+
// less often, it is a cache that never hits, so the cost does not degrade
|
|
982
|
+
// gracefully and grows with the generated output rather than staying at
|
|
983
|
+
// 1.2s. correct and slower beats fast and stale, which is why it is written
|
|
984
|
+
// this way, but if generate time ever becomes the complaint, record the
|
|
985
|
+
// hash after the consumer's formatter runs rather than weakening this.
|
|
986
|
+
Object.entries(generateCache).every(function (param) {
|
|
987
|
+
var [cachedPath, cachedHash] = param;
|
|
988
|
+
if (!cachedPath.startsWith(generatedDir)) return true;
|
|
989
|
+
try {
|
|
990
|
+
return hash((0, import_fs.readFileSync)(cachedPath, "utf-8")) === cachedHash;
|
|
991
|
+
} catch (unused) {
|
|
992
|
+
return false;
|
|
993
|
+
}
|
|
994
|
+
}) && (0, import_fs.existsSync)((0, import_path.resolve)(generatedDir, "models.ts")) && (!needsSqliteZeroSchema || (0, import_fs.existsSync)((0, import_path.resolve)(generatedDir, "schema.ts")))) {
|
|
1003
995
|
var _counts_modelCount, _counts_schemaCount, _counts_queryCount, _counts_mutationCount;
|
|
1004
996
|
var counts = {};
|
|
1005
997
|
try {
|
|
@@ -1039,6 +1031,24 @@ async function generate(options) {
|
|
|
1039
1031
|
return module2.name;
|
|
1040
1032
|
}))), writeFileIfChanged((0, import_path.resolve)(generatedDir, "tables.ts"), (0, import_generate_helpers.generateTablesFile)(schemaModules))] : []), writeFileIfChanged((0, import_path.resolve)(generatedDir, "README.md"), (0, import_generate_helpers.generateReadmeFile)())];
|
|
1041
1033
|
var filesChanged = writeResults.filter(Boolean).length;
|
|
1034
|
+
if (needsSqliteZeroSchema) {
|
|
1035
|
+
var membership = dataMembershipFromLayout(layout);
|
|
1036
|
+
var drizzleSchema = await generateDrizzleSchemaInputFileWithProject({
|
|
1037
|
+
dir: baseDir,
|
|
1038
|
+
schemaImportPath: "../../database/schema",
|
|
1039
|
+
config
|
|
1040
|
+
}, project);
|
|
1041
|
+
var sqliteSchema = (0, import_generate_helpers.renderDrizzleZeroSqliteSchemaModule)({
|
|
1042
|
+
importPath: "./drizzleSchema",
|
|
1043
|
+
tableNames: membership.allTables
|
|
1044
|
+
});
|
|
1045
|
+
if (writeFileIfChanged((0, import_path.resolve)(generatedDir, "drizzleSchema.ts"), drizzleSchema)) {
|
|
1046
|
+
filesChanged++;
|
|
1047
|
+
}
|
|
1048
|
+
if (writeFileIfChanged((0, import_path.resolve)(generatedDir, "schema.ts"), sqliteSchema)) {
|
|
1049
|
+
filesChanged++;
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1042
1052
|
var queryCount = 0;
|
|
1043
1053
|
var mutationCount = 0;
|
|
1044
1054
|
var typeToValibot = function typeToValibot2(paramType) {
|
|
@@ -1049,32 +1059,17 @@ async function generate(options) {
|
|
|
1049
1059
|
}
|
|
1050
1060
|
};
|
|
1051
1061
|
var allQueries = [];
|
|
1052
|
-
var queryResolver = null;
|
|
1053
|
-
var getQueryResolver = function getQueryResolver2() {
|
|
1054
|
-
if (!queryResolver) {
|
|
1055
|
-
var allFiles2 = [...new Set(layout.namespaces.flatMap(function (namespace2) {
|
|
1056
|
-
return namespace2.sourcePaths;
|
|
1057
|
-
}))].map(function (path) {
|
|
1058
|
-
return {
|
|
1059
|
-
path,
|
|
1060
|
-
content: (0, import_fs.readFileSync)(path, "utf-8")
|
|
1061
|
-
};
|
|
1062
|
-
});
|
|
1063
|
-
queryResolver = createTypeResolver(ts, allFiles2, baseDir);
|
|
1064
|
-
}
|
|
1065
|
-
return queryResolver;
|
|
1066
|
-
};
|
|
1067
1062
|
var _iteratorNormalCompletion = true,
|
|
1068
1063
|
_didIteratorError = false,
|
|
1069
1064
|
_iteratorError = void 0;
|
|
1070
1065
|
try {
|
|
1071
|
-
var _loop = function () {
|
|
1066
|
+
var _loop = async function () {
|
|
1072
1067
|
var namespace2 = _step.value;
|
|
1073
1068
|
var filePath2 = namespace2.queryPath;
|
|
1074
1069
|
try {
|
|
1075
|
-
var
|
|
1076
|
-
var
|
|
1077
|
-
|
|
1070
|
+
var sourceFile2 = project.sourceFile(filePath2);
|
|
1071
|
+
var candidates = [];
|
|
1072
|
+
sourceFile2.forEachChild(function (node) {
|
|
1078
1073
|
if (ts.isVariableStatement(node)) {
|
|
1079
1074
|
var _node_modifiers;
|
|
1080
1075
|
var exportModifier = (_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.find(function (m) {
|
|
@@ -1086,6 +1081,8 @@ async function generate(options) {
|
|
|
1086
1081
|
var name = declaration.name.getText(sourceFile2);
|
|
1087
1082
|
if (["mutate", "permission", "schema", "where"].includes(name)) return;
|
|
1088
1083
|
if (declaration.initializer && ts.isArrowFunction(declaration.initializer)) {
|
|
1084
|
+
var _ref;
|
|
1085
|
+
var _params_;
|
|
1089
1086
|
var params = declaration.initializer.parameters;
|
|
1090
1087
|
var paramType = "void";
|
|
1091
1088
|
if (params.length > 0) {
|
|
@@ -1093,38 +1090,59 @@ async function generate(options) {
|
|
|
1093
1090
|
var param = params[0];
|
|
1094
1091
|
paramType = ((_param_type = param.type) === null || _param_type === void 0 ? void 0 : _param_type.getText(sourceFile2)) || "unknown";
|
|
1095
1092
|
}
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
var resolvedType = resolveParamType(ts, resolver, resolverSourceFile, name, 0);
|
|
1102
|
-
if (resolvedType) {
|
|
1103
|
-
valibotCode = resolver.typeToValibot(resolvedType);
|
|
1104
|
-
}
|
|
1105
|
-
}
|
|
1106
|
-
}
|
|
1107
|
-
if (valibotCode) {
|
|
1108
|
-
allQueries.push({
|
|
1109
|
-
name,
|
|
1110
|
-
params: paramType,
|
|
1111
|
-
valibotCode,
|
|
1112
|
-
sourceFile: namespace2.name,
|
|
1113
|
-
importPath: (0, import_generate_layout.namespaceImportPath)(baseDir, filePath2)
|
|
1114
|
-
});
|
|
1115
|
-
} else if (!silent && paramType !== "void") {
|
|
1116
|
-
console.error(`\u2717 ${name}: could not resolve type "${paramType}"`);
|
|
1117
|
-
}
|
|
1093
|
+
candidates.push({
|
|
1094
|
+
name,
|
|
1095
|
+
paramType,
|
|
1096
|
+
typeNode: (_ref = (_params_ = params[0]) === null || _params_ === void 0 ? void 0 : _params_.type) !== null && _ref !== void 0 ? _ref : null
|
|
1097
|
+
});
|
|
1118
1098
|
}
|
|
1119
1099
|
}
|
|
1120
1100
|
});
|
|
1101
|
+
var resolver = createTypeResolver(project.projectForFile(filePath2));
|
|
1102
|
+
var _iteratorNormalCompletion4 = true,
|
|
1103
|
+
_didIteratorError4 = false,
|
|
1104
|
+
_iteratorError4 = void 0;
|
|
1105
|
+
try {
|
|
1106
|
+
for (var _iterator4 = candidates[Symbol.iterator](), _step12; !(_iteratorNormalCompletion4 = (_step12 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
1107
|
+
var candidate = _step12.value;
|
|
1108
|
+
var valibotCode = typeToValibot(candidate.paramType);
|
|
1109
|
+
if (!valibotCode && candidate.typeNode) {
|
|
1110
|
+
var resolvedType = await resolveParamType(resolver, sourceFile2, candidate.name, 0);
|
|
1111
|
+
if (resolvedType) valibotCode = await resolver.typeToValibot(resolvedType);
|
|
1112
|
+
}
|
|
1113
|
+
if (valibotCode) {
|
|
1114
|
+
allQueries.push({
|
|
1115
|
+
name: candidate.name,
|
|
1116
|
+
params: candidate.paramType,
|
|
1117
|
+
valibotCode,
|
|
1118
|
+
sourceFile: namespace2.name,
|
|
1119
|
+
importPath: (0, import_generate_layout.namespaceImportPath)(baseDir, filePath2)
|
|
1120
|
+
});
|
|
1121
|
+
} else if (!silent && candidate.paramType !== "void") {
|
|
1122
|
+
console.error(`\u2717 ${candidate.name}: could not resolve type "${candidate.paramType}"`);
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
} catch (err) {
|
|
1126
|
+
_didIteratorError4 = true;
|
|
1127
|
+
_iteratorError4 = err;
|
|
1128
|
+
} finally {
|
|
1129
|
+
try {
|
|
1130
|
+
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
|
|
1131
|
+
_iterator4.return();
|
|
1132
|
+
}
|
|
1133
|
+
} finally {
|
|
1134
|
+
if (_didIteratorError4) {
|
|
1135
|
+
throw _iteratorError4;
|
|
1136
|
+
}
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1121
1139
|
} catch (err) {
|
|
1122
1140
|
if (!silent) console.error(`Error processing ${filePath2}:`, err);
|
|
1123
1141
|
}
|
|
1124
1142
|
};
|
|
1125
1143
|
for (var _iterator = layout.namespaces.filter(function (namespace2) {
|
|
1126
1144
|
return namespace2.queryPath !== null;
|
|
1127
|
-
})[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop();
|
|
1145
|
+
})[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) await _loop();
|
|
1128
1146
|
} catch (err) {
|
|
1129
1147
|
_didIteratorError = true;
|
|
1130
1148
|
_iteratorError = err;
|
|
@@ -1179,7 +1197,6 @@ async function generate(options) {
|
|
|
1179
1197
|
if (aggregatesChanged) filesChanged++;
|
|
1180
1198
|
}
|
|
1181
1199
|
var allModelMutations = [];
|
|
1182
|
-
var mutationFiles = [];
|
|
1183
1200
|
var unresolvedModels = [];
|
|
1184
1201
|
var _iteratorNormalCompletion1 = true,
|
|
1185
1202
|
_didIteratorError1 = false,
|
|
@@ -1191,13 +1208,8 @@ async function generate(options) {
|
|
|
1191
1208
|
var fileBaseName = namespace.name;
|
|
1192
1209
|
try {
|
|
1193
1210
|
var content = (0, import_fs.readFileSync)(filePath, "utf-8");
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
content,
|
|
1197
|
-
baseName: fileBaseName
|
|
1198
|
-
});
|
|
1199
|
-
var sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
|
|
1200
|
-
var result = extractMutationsFromModel(ts, sourceFile, content, filePath, !!silent, typeToValibot);
|
|
1211
|
+
var sourceFile = project.sourceFile(filePath);
|
|
1212
|
+
var result = extractMutationsFromModel(sourceFile, content, filePath, !!silent, typeToValibot);
|
|
1201
1213
|
if (result) {
|
|
1202
1214
|
result.modelName = fileBaseName;
|
|
1203
1215
|
allModelMutations.push(result);
|
|
@@ -1230,62 +1242,44 @@ async function generate(options) {
|
|
|
1230
1242
|
}
|
|
1231
1243
|
}
|
|
1232
1244
|
if (unresolvedModels.length > 0) {
|
|
1233
|
-
var collectTsFiles = function collectTsFiles1(dir2) {
|
|
1234
|
-
var results = [];
|
|
1235
|
-
var _iteratorNormalCompletion4 = true,
|
|
1236
|
-
_didIteratorError4 = false,
|
|
1237
|
-
_iteratorError4 = void 0;
|
|
1238
|
-
try {
|
|
1239
|
-
for (var _iterator4 = (0, import_fs.readdirSync)(dir2, {
|
|
1240
|
-
withFileTypes: true
|
|
1241
|
-
})[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
1242
|
-
var entry = _step4.value;
|
|
1243
|
-
var fullPath = (0, import_path.resolve)(dir2, entry.name);
|
|
1244
|
-
if (entry.isDirectory() && entry.name !== "node_modules") {
|
|
1245
|
-
results.push(...collectTsFiles(fullPath));
|
|
1246
|
-
} else if (entry.isFile() && isGeneratorSourceFile(entry.name)) {
|
|
1247
|
-
results.push({
|
|
1248
|
-
path: fullPath,
|
|
1249
|
-
content: (0, import_fs.readFileSync)(fullPath, "utf-8")
|
|
1250
|
-
});
|
|
1251
|
-
}
|
|
1252
|
-
}
|
|
1253
|
-
} catch (err) {
|
|
1254
|
-
_didIteratorError4 = true;
|
|
1255
|
-
_iteratorError4 = err;
|
|
1256
|
-
} finally {
|
|
1257
|
-
try {
|
|
1258
|
-
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
|
|
1259
|
-
_iterator4.return();
|
|
1260
|
-
}
|
|
1261
|
-
} finally {
|
|
1262
|
-
if (_didIteratorError4) {
|
|
1263
|
-
throw _iteratorError4;
|
|
1264
|
-
}
|
|
1265
|
-
}
|
|
1266
|
-
}
|
|
1267
|
-
return results;
|
|
1268
|
-
};
|
|
1269
|
-
var allFiles = [...new Map(layout.sourceRoots.flatMap(collectTsFiles).map(function (file) {
|
|
1270
|
-
return [file.path, file];
|
|
1271
|
-
})).values()];
|
|
1272
|
-
var modelResolver = createTypeResolver(ts, allFiles, baseDir);
|
|
1273
1245
|
var _iteratorNormalCompletion2 = true,
|
|
1274
1246
|
_didIteratorError2 = false,
|
|
1275
1247
|
_iteratorError2 = void 0;
|
|
1276
1248
|
try {
|
|
1277
|
-
var _loop1 = function () {
|
|
1249
|
+
var _loop1 = async function () {
|
|
1278
1250
|
var {
|
|
1279
1251
|
baseName,
|
|
1280
1252
|
filePath: filePath2
|
|
1281
1253
|
} = _step2.value;
|
|
1282
|
-
var
|
|
1283
|
-
|
|
1284
|
-
var resolvedTypes = resolveMutationParamTypes(
|
|
1254
|
+
var sourceFile2 = project.sourceFile(filePath2);
|
|
1255
|
+
var modelResolver = createTypeResolver(project.projectForFile(filePath2));
|
|
1256
|
+
var resolvedTypes = await resolveMutationParamTypes(modelResolver, sourceFile2);
|
|
1285
1257
|
if (resolvedTypes.size === 0) return "continue";
|
|
1258
|
+
var resolvedValibot = /* @__PURE__ */new Map();
|
|
1259
|
+
var _iteratorNormalCompletion4 = true,
|
|
1260
|
+
_didIteratorError4 = false,
|
|
1261
|
+
_iteratorError4 = void 0;
|
|
1262
|
+
try {
|
|
1263
|
+
for (var _iterator4 = resolvedTypes[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
1264
|
+
var [name, type] = _step4.value;
|
|
1265
|
+
resolvedValibot.set(name, await modelResolver.typeToValibot(type));
|
|
1266
|
+
}
|
|
1267
|
+
} catch (err) {
|
|
1268
|
+
_didIteratorError4 = true;
|
|
1269
|
+
_iteratorError4 = err;
|
|
1270
|
+
} finally {
|
|
1271
|
+
try {
|
|
1272
|
+
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
|
|
1273
|
+
_iterator4.return();
|
|
1274
|
+
}
|
|
1275
|
+
} finally {
|
|
1276
|
+
if (_didIteratorError4) {
|
|
1277
|
+
throw _iteratorError4;
|
|
1278
|
+
}
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1286
1281
|
var content2 = (0, import_fs.readFileSync)(filePath2, "utf-8");
|
|
1287
|
-
var
|
|
1288
|
-
var result2 = extractMutationsFromModel(ts, sourceFile2, content2, filePath2, !!silent, typeToValibot, resolvedTypes, modelResolver.typeToValibot);
|
|
1282
|
+
var result2 = extractMutationsFromModel(sourceFile2, content2, filePath2, !!silent, typeToValibot, resolvedValibot);
|
|
1289
1283
|
if (result2) {
|
|
1290
1284
|
result2.modelName = baseName;
|
|
1291
1285
|
var idx = allModelMutations.findIndex(function (m) {
|
|
@@ -1294,7 +1288,7 @@ async function generate(options) {
|
|
|
1294
1288
|
if (idx >= 0) allModelMutations[idx] = result2;
|
|
1295
1289
|
}
|
|
1296
1290
|
};
|
|
1297
|
-
for (var _iterator2 = unresolvedModels[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) _loop1();
|
|
1291
|
+
for (var _iterator2 = unresolvedModels[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) await _loop1();
|
|
1298
1292
|
} catch (err) {
|
|
1299
1293
|
_didIteratorError2 = true;
|
|
1300
1294
|
_iteratorError2 = err;
|
|
@@ -1404,8 +1398,13 @@ ${event} ${path}`);
|
|
|
1404
1398
|
}, debounce);
|
|
1405
1399
|
};
|
|
1406
1400
|
var databaseDir = (0, import_path.resolve)((0, import_path.dirname)(baseDir), "database");
|
|
1407
|
-
var
|
|
1408
|
-
var layout
|
|
1401
|
+
var project = await loadGeneratorProject(baseDir);
|
|
1402
|
+
var layout;
|
|
1403
|
+
try {
|
|
1404
|
+
layout = (0, import_generate_layout.discoverDataLayout)(project, baseDir, options.config ? (0, import_path.resolve)(options.config) : void 0);
|
|
1405
|
+
} finally {
|
|
1406
|
+
await project.close();
|
|
1407
|
+
}
|
|
1409
1408
|
var watcher = chokidar.watch([... /* @__PURE__ */new Set([...layout.sourceRoots, ...((0, import_fs.existsSync)(databaseDir) ? [databaseDir] : [])])], {
|
|
1410
1409
|
persistent: true,
|
|
1411
1410
|
ignoreInitial: true,
|