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.
Files changed (110) hide show
  1. package/dist/cjs/createZeroClient.cjs +44 -11
  2. package/dist/cjs/createZeroClient.native.js +54 -17
  3. package/dist/cjs/createZeroClient.native.js.map +1 -1
  4. package/dist/cjs/createZeroClient.recovery.test.cjs +49 -0
  5. package/dist/cjs/createZeroClient.recovery.test.native.js +53 -0
  6. package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -1
  7. package/dist/cjs/generate-helpers.cjs +28 -0
  8. package/dist/cjs/generate-helpers.native.js +36 -0
  9. package/dist/cjs/generate-helpers.native.js.map +1 -1
  10. package/dist/cjs/generate-layout.cjs +62 -53
  11. package/dist/cjs/generate-layout.native.js +62 -54
  12. package/dist/cjs/generate-layout.native.js.map +1 -1
  13. package/dist/cjs/generate-lite.cjs +28 -0
  14. package/dist/cjs/generate-lite.native.js +89 -33
  15. package/dist/cjs/generate-lite.native.js.map +1 -1
  16. package/dist/cjs/generate-lite.test.cjs +46 -0
  17. package/dist/cjs/generate-lite.test.native.js +46 -0
  18. package/dist/cjs/generate-lite.test.native.js.map +1 -1
  19. package/dist/cjs/generate.cjs +237 -243
  20. package/dist/cjs/generate.native.js +352 -353
  21. package/dist/cjs/generate.native.js.map +1 -1
  22. package/dist/cjs/generate.test.cjs +35 -0
  23. package/dist/cjs/generate.test.native.js +35 -0
  24. package/dist/cjs/generate.test.native.js.map +1 -1
  25. package/dist/cjs/helpers/createMutators.cjs +2 -1
  26. package/dist/cjs/helpers/createMutators.native.js +3 -1
  27. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  28. package/dist/cjs/helpers/recoverZeroClient.cjs +8 -2
  29. package/dist/cjs/helpers/recoverZeroClient.native.js +10 -2
  30. package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
  31. package/dist/cjs/helpers/recoverZeroClient.test.cjs +53 -0
  32. package/dist/cjs/helpers/recoverZeroClient.test.native.js +55 -0
  33. package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
  34. package/dist/cjs/native-typescript.cjs +190 -0
  35. package/dist/cjs/native-typescript.native.js +255 -0
  36. package/dist/cjs/native-typescript.native.js.map +1 -0
  37. package/dist/esm/createZeroClient.mjs +44 -11
  38. package/dist/esm/createZeroClient.mjs.map +1 -1
  39. package/dist/esm/createZeroClient.native.js +54 -17
  40. package/dist/esm/createZeroClient.native.js.map +1 -1
  41. package/dist/esm/createZeroClient.recovery.test.mjs +50 -1
  42. package/dist/esm/createZeroClient.recovery.test.mjs.map +1 -1
  43. package/dist/esm/createZeroClient.recovery.test.native.js +54 -1
  44. package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -1
  45. package/dist/esm/generate-helpers.mjs +27 -1
  46. package/dist/esm/generate-helpers.mjs.map +1 -1
  47. package/dist/esm/generate-helpers.native.js +35 -1
  48. package/dist/esm/generate-helpers.native.js.map +1 -1
  49. package/dist/esm/generate-layout.mjs +52 -54
  50. package/dist/esm/generate-layout.mjs.map +1 -1
  51. package/dist/esm/generate-layout.native.js +52 -55
  52. package/dist/esm/generate-layout.native.js.map +1 -1
  53. package/dist/esm/generate-lite.mjs +29 -1
  54. package/dist/esm/generate-lite.mjs.map +1 -1
  55. package/dist/esm/generate-lite.native.js +90 -34
  56. package/dist/esm/generate-lite.native.js.map +1 -1
  57. package/dist/esm/generate-lite.test.mjs +46 -0
  58. package/dist/esm/generate-lite.test.mjs.map +1 -1
  59. package/dist/esm/generate-lite.test.native.js +46 -0
  60. package/dist/esm/generate-lite.test.native.js.map +1 -1
  61. package/dist/esm/generate.mjs +238 -244
  62. package/dist/esm/generate.mjs.map +1 -1
  63. package/dist/esm/generate.native.js +353 -354
  64. package/dist/esm/generate.native.js.map +1 -1
  65. package/dist/esm/generate.test.mjs +35 -0
  66. package/dist/esm/generate.test.mjs.map +1 -1
  67. package/dist/esm/generate.test.native.js +35 -0
  68. package/dist/esm/generate.test.native.js.map +1 -1
  69. package/dist/esm/helpers/createMutators.mjs +2 -1
  70. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  71. package/dist/esm/helpers/createMutators.native.js +3 -1
  72. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  73. package/dist/esm/helpers/recoverZeroClient.mjs +8 -2
  74. package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
  75. package/dist/esm/helpers/recoverZeroClient.native.js +10 -2
  76. package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
  77. package/dist/esm/helpers/recoverZeroClient.test.mjs +53 -0
  78. package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
  79. package/dist/esm/helpers/recoverZeroClient.test.native.js +55 -0
  80. package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
  81. package/dist/esm/index.native.js.map +1 -1
  82. package/dist/esm/native-typescript.mjs +164 -0
  83. package/dist/esm/native-typescript.mjs.map +1 -0
  84. package/dist/esm/native-typescript.native.js +226 -0
  85. package/dist/esm/native-typescript.native.js.map +1 -0
  86. package/package.json +4 -3
  87. package/src/createZeroClient.recovery.test.tsx +56 -1
  88. package/src/createZeroClient.tsx +54 -15
  89. package/src/generate-helpers.ts +79 -0
  90. package/src/generate-layout.ts +64 -108
  91. package/src/generate-lite.test.ts +49 -0
  92. package/src/generate-lite.ts +44 -0
  93. package/src/generate.test.ts +52 -0
  94. package/src/generate.ts +313 -366
  95. package/src/helpers/createMutators.ts +14 -3
  96. package/src/helpers/recoverZeroClient.test.ts +50 -0
  97. package/src/helpers/recoverZeroClient.ts +12 -2
  98. package/src/native-typescript.ts +176 -0
  99. package/types/createZeroClient.d.ts.map +1 -1
  100. package/types/generate-helpers.d.ts +13 -0
  101. package/types/generate-helpers.d.ts.map +1 -1
  102. package/types/generate-layout.d.ts +2 -1
  103. package/types/generate-layout.d.ts.map +1 -1
  104. package/types/generate-lite.d.ts +1 -0
  105. package/types/generate-lite.d.ts.map +1 -1
  106. package/types/generate.d.ts.map +1 -1
  107. package/types/helpers/createMutators.d.ts.map +1 -1
  108. package/types/helpers/recoverZeroClient.d.ts.map +1 -1
  109. package/types/native-typescript.d.ts +11 -0
  110. 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 = "6";
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 cachedHash = generateCache[filePath];
159
- if (cachedHash === contentHash && (0, import_fs.existsSync)(filePath)) {
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(ts, files, dir) {
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
- program,
231
- checker,
232
- // resolve a type annotation node to a ts.Type
233
- resolveType(node) {
175
+ project,
176
+ async resolveType(node) {
234
177
  try {
235
- return checker.getTypeFromTypeNode(node);
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
- // convert a resolved type to valibot code
241
- typeToValibot(type) {
242
- return tsTypeToValibot(ts, checker, type);
184
+ async typeToValibot(type) {
185
+ return tsTypeToValibot(project, type);
243
186
  }
244
187
  };
245
188
  }
246
- function resolveParamType(ts, resolver, sourceFile, exportName, paramIndex) {
247
- var result = null;
248
- ts.forEachChild(sourceFile, function (node) {
189
+ async function resolveParamType(resolver, sourceFile, exportName, paramIndex) {
190
+ var typeNode = null;
191
+ sourceFile.forEachChild(function (node) {
249
192
  var _node_modifiers;
250
- if (result) return;
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
- result = resolver.resolveType(param.type);
204
+ typeNode = param.type;
262
205
  }
263
206
  }
264
207
  });
265
- return result;
208
+ return typeNode ? resolver.resolveType(typeNode) : null;
266
209
  }
267
- function readMutationsCall(ts, call) {
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(ts, resolver, sourceFile) {
313
- var resolved = /* @__PURE__ */new Map();
314
- ts.forEachChild(sourceFile, function (node) {
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(node)) return;
317
- if (!((_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.some(function (m) {
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 = node.declarationList.declarations[0];
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(ts, decl.initializer);
269
+ } = readMutationsCall(decl.initializer);
327
270
  if (!handlersArg) return;
328
- var _iteratorNormalCompletion = true,
329
- _didIteratorError = false,
330
- _iteratorError = void 0;
271
+ var _iteratorNormalCompletion2 = true,
272
+ _didIteratorError2 = false,
273
+ _iteratorError2 = void 0;
331
274
  try {
332
- for (var _iterator = handlersArg.properties[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
333
- var prop = _step.value;
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 name = (_prop_name = prop.name) === null || _prop_name === void 0 ? void 0 : _prop_name.getText(sourceFile);
337
- if (!name) continue;
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
- var expanded = resolver.resolveType(typeNode);
351
- if (expanded) {
352
- resolved.set(name, expanded);
353
- }
293
+ nodes.set(name2, typeNode);
354
294
  }
355
295
  } catch (err) {
356
- _didIteratorError = true;
357
- _iteratorError = err;
296
+ _didIteratorError2 = true;
297
+ _iteratorError2 = err;
358
298
  } finally {
359
299
  try {
360
- if (!_iteratorNormalCompletion && _iterator.return != null) {
361
- _iterator.return();
300
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
301
+ _iterator2.return();
362
302
  }
363
303
  } finally {
364
- if (_didIteratorError) {
365
- throw _iteratorError;
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(ts, sourceFile, content, fileName, silent, typeToValibot, resolvedTypes, resolvedTypeToValibot) {
336
+ function extractMutationsFromModel(sourceFile, content, fileName, silent, typeToValibot, resolvedValibot) {
373
337
  var mutateNode = null;
374
- ts.forEachChild(sourceFile, function (node) {
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(ts, call);
365
+ } = readMutationsCall(call);
402
366
  var hasCRUD = hasTable && crud;
403
367
  var columns = {};
404
368
  var primaryKeys = [];
405
369
  if (hasCRUD) {
406
- extractSchemaColumns(ts, sourceFile, columns, primaryKeys);
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 && resolvedTypes && resolvedTypeToValibot) {
450
- var resolvedType = resolvedTypes.get(name);
451
- if (resolvedType) {
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(ts, sourceFile, columns, primaryKeys) {
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
- ts.forEachChild(node, visit);
510
+ node.forEachChild(visit);
549
511
  }
550
512
  visit(sourceFile);
551
513
  }
552
- function getInstantiatedPropertyType(checker, parent, name) {
553
- var resolveProperty = Reflect.get(checker, "getTypeOfPropertyOfType");
554
- if (typeof resolveProperty !== "function") return void 0;
555
- return Reflect.apply(resolveProperty, checker, [parent, name]);
556
- }
557
- function tsTypeToValibot(ts, checker, type, seen) {
558
- var _checker_isArrayType, _checker_isArrayLikeType;
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(t) {
566
- return tsTypeToValibot(ts, checker, t, seen);
522
+ var recurse = function recurse2(value) {
523
+ return tsTypeToValibot(project, value, seen);
567
524
  };
568
- if (flags & ts.TypeFlags.String) return "v.string()";
569
- if (flags & ts.TypeFlags.Number) return "v.number()";
570
- if (flags & ts.TypeFlags.Boolean) return "v.boolean()";
571
- if (flags & ts.TypeFlags.Void || flags & ts.TypeFlags.Undefined) return "v.void_()";
572
- if (flags & ts.TypeFlags.Null) return "v.null_()";
573
- if (flags & ts.TypeFlags.Any || flags & ts.TypeFlags.Unknown) return "v.unknown()";
574
- if (flags & ts.TypeFlags.Never) return "v.never()";
575
- if (flags & ts.TypeFlags.TemplateLiteral) return "v.string()";
576
- if (flags & ts.TypeFlags.Object && (((_checker_isArrayType = checker.isArrayType) === null || _checker_isArrayType === void 0 ? void 0 : _checker_isArrayType.call(checker, type)) || ((_checker_isArrayLikeType = checker.isArrayLikeType) === null || _checker_isArrayLikeType === void 0 ? void 0 : _checker_isArrayLikeType.call(checker, type)))) {
577
- var _ref;
578
- var _checker_getTypeArguments, _type_getNumberIndexType;
579
- var typeArgs = (_ref = (_checker_getTypeArguments = checker.getTypeArguments) === null || _checker_getTypeArguments === void 0 ? void 0 : _checker_getTypeArguments.call(checker, type)) !== null && _ref !== void 0 ? _ref : [];
580
- var elementType = typeArgs.length === 1 ? typeArgs[0] : (_type_getNumberIndexType = type.getNumberIndexType) === null || _type_getNumberIndexType === void 0 ? void 0 : _type_getNumberIndexType.call(type);
581
- return `v.array(${elementType ? recurse(elementType) : "v.unknown()"})`;
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 (flags & ts.TypeFlags.StringLiteral) {
541
+ if (type.isStringLiteralType()) {
584
542
  return `v.literal(${JSON.stringify(type.value)})`;
585
543
  }
586
- if (flags & ts.TypeFlags.NumberLiteral) {
544
+ if (type.isNumberLiteralType()) {
587
545
  return `v.literal(${type.value})`;
588
546
  }
589
- if (flags & ts.TypeFlags.BooleanLiteral) {
590
- var name = type.intrinsicName;
591
- return `v.literal(${name === "true"})`;
547
+ if (type.isBooleanLiteralType()) {
548
+ return `v.literal(${type.value})`;
592
549
  }
593
- if (type.isUnion()) {
594
- var members = type.types;
595
- var hasNull = members.some(function (t) {
596
- return t.getFlags() & ts.TypeFlags.Null;
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 (t) {
599
- return t.getFlags() & (ts.TypeFlags.Undefined | ts.TypeFlags.Void);
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 (t) {
602
- return !(t.getFlags() & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void));
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 (t) {
605
- return t.getFlags() & ts.TypeFlags.BooleanLiteral;
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(function (t) {
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(parent, prop2) {
621
- var _prop_declarations;
622
- var instantiated = getInstantiatedPropertyType(checker, parent, prop2.getName());
623
- if (instantiated) return instantiated;
624
- if (prop2.valueDeclaration) return checker.getTypeOfSymbolAtLocation(prop2, prop2.valueDeclaration);
625
- if ((_prop_declarations = prop2.declarations) === null || _prop_declarations === void 0 ? void 0 : _prop_declarations[0]) return checker.getTypeOfSymbolAtLocation(prop2, prop2.declarations[0]);
626
- return checker.getDeclaredTypeOfSymbol(prop2);
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
- if (type.isIntersection()) {
629
- var props = type.getProperties();
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 _iteratorNormalCompletion = true,
633
- _didIteratorError = false,
634
- _iteratorError = void 0;
587
+ var _iteratorNormalCompletion2 = true,
588
+ _didIteratorError2 = false,
589
+ _iteratorError2 = void 0;
635
590
  try {
636
- for (var _iterator = props[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
637
- var prop = _step.value;
638
- var name1 = prop.getName();
639
- if ((0, import_generate_helpers.shouldSkipObjectKey)(name1)) continue;
640
- var propType = resolveSymbolType(type, prop);
641
- var isOptional = !!(prop.getFlags() & ts.SymbolFlags.Optional);
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)(name1)}: ${val}`);
601
+ entries.push(`${(0, import_generate_helpers.formatObjectKey)(name)}: ${val}`);
647
602
  }
648
603
  } catch (err) {
649
- _didIteratorError = true;
650
- _iteratorError = err;
604
+ _didIteratorError2 = true;
605
+ _iteratorError2 = err;
651
606
  } finally {
652
607
  try {
653
- if (!_iteratorNormalCompletion && _iterator.return != null) {
654
- _iterator.return();
608
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
609
+ _iterator2.return();
655
610
  }
656
611
  } finally {
657
- if (_didIteratorError) {
658
- throw _iteratorError;
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
- var props1 = type.getProperties();
668
- if (props1.length > 0 && (type.getFlags() & ts.TypeFlags.Object || type.objectFlags)) {
669
- var _type_objectFlags;
670
- var objectFlags = (_type_objectFlags = type.objectFlags) !== null && _type_objectFlags !== void 0 ? _type_objectFlags : 0;
671
- if (objectFlags & ts.ObjectFlags.Reference) {
672
- var _typeRef_typeArguments;
673
- var typeRef = type;
674
- var symbol = type.getSymbol();
675
- var name2 = symbol === null || symbol === void 0 ? void 0 : symbol.getName();
676
- if ((name2 === "Array" || name2 === "ReadonlyArray") && ((_typeRef_typeArguments = typeRef.typeArguments) === null || _typeRef_typeArguments === void 0 ? void 0 : _typeRef_typeArguments.length) === 1) {
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
- if (objectFlags & ts.ObjectFlags.Tuple) {
681
- var typeRef1 = type;
682
- var typeArgs1 = typeRef1.typeArguments || [];
683
- return `v.tuple([${typeArgs1.map(function (t) {
684
- return recurse(t);
685
- }).join(", ")}])`;
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
- var entries1 = [];
688
- var _iteratorNormalCompletion1 = true,
689
- _didIteratorError1 = false,
690
- _iteratorError1 = void 0;
653
+ } catch (err) {
654
+ _didIteratorError = true;
655
+ _iteratorError = err;
656
+ } finally {
691
657
  try {
692
- for (var _iterator1 = props1[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
693
- var prop1 = _step1.value;
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
- try {
709
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
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 ts = await import("typescript");
887
- var layout = (0, import_generate_layout.discoverDataLayout)(ts, (0, import_path.resolve)(options.dir), options.config ? (0, import_path.resolve)(options.config) : void 0);
888
- return dataMembershipFromLayout(layout);
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)(ts, baseDir, options.config ? (0, import_path.resolve)(options.config) : void 0);
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 = ts.createSourceFile(relationsPath, (0, import_fs.readFileSync)(relationsPath, "utf8"), ts.ScriptTarget.Latest, true);
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
- ts.forEachChild(node, visit);
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 ts = await import("typescript");
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 && (0, import_fs.existsSync)((0, import_path.resolve)(generatedDir, "models.ts"))) {
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 content2 = (0, import_fs.readFileSync)(filePath2, "utf-8");
1076
- var sourceFile2 = ts.createSourceFile(filePath2, content2, ts.ScriptTarget.Latest, true);
1077
- ts.forEachChild(sourceFile2, function (node) {
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
- var valibotCode = typeToValibot(paramType);
1097
- if (!valibotCode && params.length > 0 && params[0].type) {
1098
- var resolver = getQueryResolver();
1099
- var resolverSourceFile = resolver.program.getSourceFile(filePath2);
1100
- if (resolverSourceFile) {
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
- mutationFiles.push({
1195
- path: filePath,
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 resolverSourceFile = modelResolver.program.getSourceFile(filePath2);
1283
- if (!resolverSourceFile) return "continue";
1284
- var resolvedTypes = resolveMutationParamTypes(ts, modelResolver, resolverSourceFile);
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 sourceFile2 = ts.createSourceFile(filePath2, content2, ts.ScriptTarget.Latest, true);
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 ts = await import("typescript");
1408
- var layout = (0, import_generate_layout.discoverDataLayout)(ts, baseDir, options.config ? (0, import_path.resolve)(options.config) : void 0);
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,