over-zero 0.0.32 → 0.0.34

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 (254) hide show
  1. package/cli.cjs +3 -0
  2. package/dist/cjs/cli.cjs +224 -205
  3. package/dist/cjs/cli.js +57 -40
  4. package/dist/cjs/cli.js.map +1 -1
  5. package/dist/cjs/cli.native.js +270 -248
  6. package/dist/cjs/cli.native.js.map +1 -1
  7. package/dist/cjs/createPermissions.js.map +1 -1
  8. package/dist/cjs/createPermissions.native.js.map +1 -1
  9. package/dist/cjs/createZeroClient.cjs +6 -3
  10. package/dist/cjs/createZeroClient.js +11 -4
  11. package/dist/cjs/createZeroClient.js.map +1 -1
  12. package/dist/cjs/createZeroClient.native.js +40 -5
  13. package/dist/cjs/createZeroClient.native.js.map +1 -1
  14. package/dist/cjs/createZeroServer.cjs +5 -3
  15. package/dist/cjs/createZeroServer.js +8 -3
  16. package/dist/cjs/createZeroServer.js.map +1 -1
  17. package/dist/cjs/createZeroServer.native.js +39 -3
  18. package/dist/cjs/createZeroServer.native.js.map +1 -1
  19. package/dist/cjs/helpers/batchQuery.js.map +1 -1
  20. package/dist/cjs/helpers/batchQuery.native.js.map +1 -1
  21. package/dist/cjs/helpers/createMutators.js.map +1 -1
  22. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  23. package/dist/cjs/helpers/didRunPermissionCheck.js.map +1 -1
  24. package/dist/cjs/helpers/didRunPermissionCheck.native.js.map +1 -1
  25. package/dist/cjs/helpers/ensureLoggedIn.js.map +1 -1
  26. package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
  27. package/dist/cjs/helpers/getQueryOrMutatorAuthData.js.map +1 -1
  28. package/dist/cjs/helpers/getQueryOrMutatorAuthData.native.js.map +1 -1
  29. package/dist/cjs/helpers/mutatorContext.js.map +1 -1
  30. package/dist/cjs/helpers/mutatorContext.native.js.map +1 -1
  31. package/dist/cjs/helpers/prettyFormatZeroQuery.js.map +1 -1
  32. package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +1 -1
  33. package/dist/cjs/helpers/useZeroDebug.js.map +1 -1
  34. package/dist/cjs/helpers/useZeroDebug.native.js.map +1 -1
  35. package/dist/cjs/index.cjs +1 -0
  36. package/dist/cjs/index.js +1 -0
  37. package/dist/cjs/index.js.map +1 -1
  38. package/dist/cjs/index.native.js +1 -0
  39. package/dist/cjs/index.native.js.map +1 -1
  40. package/dist/cjs/mutations.js.map +1 -1
  41. package/dist/cjs/mutations.native.js.map +1 -1
  42. package/dist/cjs/{builder.cjs → queryRegistry.cjs} +12 -10
  43. package/dist/cjs/{queryBuilder.js → queryRegistry.js} +13 -11
  44. package/dist/cjs/queryRegistry.js.map +6 -0
  45. package/dist/cjs/{queryBuilder.native.js → queryRegistry.native.js} +13 -12
  46. package/dist/cjs/queryRegistry.native.js.map +1 -0
  47. package/dist/cjs/serverWhere.js.map +1 -1
  48. package/dist/cjs/serverWhere.native.js.map +1 -1
  49. package/dist/cjs/state.cjs +1 -4
  50. package/dist/cjs/state.js +1 -4
  51. package/dist/cjs/state.js.map +1 -1
  52. package/dist/cjs/state.native.js +1 -2
  53. package/dist/cjs/state.native.js.map +1 -1
  54. package/dist/cjs/where.js.map +1 -1
  55. package/dist/cjs/where.native.js.map +1 -1
  56. package/dist/cjs/zql.js.map +1 -1
  57. package/dist/cjs/zql.native.js.map +1 -1
  58. package/dist/esm/cli.js +58 -41
  59. package/dist/esm/cli.js.map +1 -1
  60. package/dist/esm/cli.mjs +223 -204
  61. package/dist/esm/cli.mjs.map +1 -1
  62. package/dist/esm/cli.native.js +269 -247
  63. package/dist/esm/cli.native.js.map +1 -1
  64. package/dist/esm/createPermissions.js.map +1 -1
  65. package/dist/esm/createPermissions.mjs.map +1 -1
  66. package/dist/esm/createPermissions.native.js.map +1 -1
  67. package/dist/esm/createZeroClient.js +11 -3
  68. package/dist/esm/createZeroClient.js.map +1 -1
  69. package/dist/esm/createZeroClient.mjs +6 -3
  70. package/dist/esm/createZeroClient.mjs.map +1 -1
  71. package/dist/esm/createZeroClient.native.js +40 -5
  72. package/dist/esm/createZeroClient.native.js.map +1 -1
  73. package/dist/esm/createZeroServer.js +8 -3
  74. package/dist/esm/createZeroServer.js.map +1 -1
  75. package/dist/esm/createZeroServer.mjs +5 -3
  76. package/dist/esm/createZeroServer.mjs.map +1 -1
  77. package/dist/esm/createZeroServer.native.js +39 -3
  78. package/dist/esm/createZeroServer.native.js.map +1 -1
  79. package/dist/esm/helpers/batchQuery.js.map +1 -1
  80. package/dist/esm/helpers/batchQuery.mjs.map +1 -1
  81. package/dist/esm/helpers/batchQuery.native.js.map +1 -1
  82. package/dist/esm/helpers/createMutators.js.map +1 -1
  83. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  84. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  85. package/dist/esm/helpers/didRunPermissionCheck.js.map +1 -1
  86. package/dist/esm/helpers/didRunPermissionCheck.mjs.map +1 -1
  87. package/dist/esm/helpers/didRunPermissionCheck.native.js.map +1 -1
  88. package/dist/esm/helpers/ensureLoggedIn.js.map +1 -1
  89. package/dist/esm/helpers/ensureLoggedIn.mjs.map +1 -1
  90. package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -1
  91. package/dist/esm/helpers/getQueryOrMutatorAuthData.js.map +1 -1
  92. package/dist/esm/helpers/getQueryOrMutatorAuthData.mjs.map +1 -1
  93. package/dist/esm/helpers/getQueryOrMutatorAuthData.native.js.map +1 -1
  94. package/dist/esm/helpers/mutatorContext.js.map +1 -1
  95. package/dist/esm/helpers/mutatorContext.mjs.map +1 -1
  96. package/dist/esm/helpers/mutatorContext.native.js.map +1 -1
  97. package/dist/esm/helpers/prettyFormatZeroQuery.js.map +1 -1
  98. package/dist/esm/helpers/prettyFormatZeroQuery.mjs.map +1 -1
  99. package/dist/esm/helpers/prettyFormatZeroQuery.native.js.map +1 -1
  100. package/dist/esm/helpers/useZeroDebug.js.map +1 -1
  101. package/dist/esm/helpers/useZeroDebug.mjs.map +1 -1
  102. package/dist/esm/helpers/useZeroDebug.native.js.map +1 -1
  103. package/dist/esm/index.js +1 -0
  104. package/dist/esm/index.js.map +1 -1
  105. package/dist/esm/index.mjs +1 -0
  106. package/dist/esm/index.mjs.map +1 -1
  107. package/dist/esm/index.native.js +1 -0
  108. package/dist/esm/index.native.js.map +1 -1
  109. package/dist/esm/mutations.js.map +1 -1
  110. package/dist/esm/mutations.mjs.map +1 -1
  111. package/dist/esm/mutations.native.js.map +1 -1
  112. package/dist/esm/queryRegistry.js +12 -0
  113. package/dist/esm/queryRegistry.js.map +6 -0
  114. package/dist/esm/queryRegistry.mjs +9 -0
  115. package/dist/esm/queryRegistry.mjs.map +1 -0
  116. package/dist/esm/queryRegistry.native.js +9 -0
  117. package/dist/esm/queryRegistry.native.js.map +1 -0
  118. package/dist/esm/serverWhere.js.map +1 -1
  119. package/dist/esm/serverWhere.mjs.map +1 -1
  120. package/dist/esm/serverWhere.native.js.map +1 -1
  121. package/dist/esm/state.js +1 -4
  122. package/dist/esm/state.js.map +1 -1
  123. package/dist/esm/state.mjs +1 -4
  124. package/dist/esm/state.mjs.map +1 -1
  125. package/dist/esm/state.native.js +1 -2
  126. package/dist/esm/state.native.js.map +1 -1
  127. package/dist/esm/where.js.map +1 -1
  128. package/dist/esm/where.mjs.map +1 -1
  129. package/dist/esm/where.native.js.map +1 -1
  130. package/dist/esm/zql.js.map +1 -1
  131. package/dist/esm/zql.mjs.map +1 -1
  132. package/dist/esm/zql.native.js.map +1 -1
  133. package/package.json +4 -4
  134. package/src/cli.ts +119 -122
  135. package/src/createPermissions.ts +8 -6
  136. package/src/createZeroClient.tsx +37 -15
  137. package/src/createZeroServer.ts +30 -15
  138. package/src/helpers/batchQuery.ts +2 -1
  139. package/src/helpers/createMutators.ts +3 -1
  140. package/src/helpers/didRunPermissionCheck.ts +1 -0
  141. package/src/helpers/ensureLoggedIn.ts +3 -1
  142. package/src/helpers/getQueryOrMutatorAuthData.ts +2 -1
  143. package/src/helpers/mutatorContext.ts +1 -0
  144. package/src/helpers/prettyFormatZeroQuery.ts +2 -1
  145. package/src/helpers/useZeroDebug.ts +3 -1
  146. package/src/index.ts +1 -0
  147. package/src/mutations.ts +2 -1
  148. package/src/queryRegistry.ts +12 -0
  149. package/src/serverWhere.ts +3 -2
  150. package/src/state.ts +2 -2
  151. package/src/types.ts +10 -9
  152. package/src/where.ts +3 -1
  153. package/src/zql.ts +1 -0
  154. package/types/createPermissions.d.ts +1 -1
  155. package/types/createPermissions.d.ts.map +1 -1
  156. package/types/createZeroClient.d.ts +5 -3
  157. package/types/createZeroClient.d.ts.map +1 -1
  158. package/types/createZeroServer.d.ts +4 -3
  159. package/types/createZeroServer.d.ts.map +1 -1
  160. package/types/helpers/batchQuery.d.ts.map +1 -1
  161. package/types/helpers/createMutators.d.ts.map +1 -1
  162. package/types/helpers/didRunPermissionCheck.d.ts.map +1 -1
  163. package/types/helpers/ensureLoggedIn.d.ts.map +1 -1
  164. package/types/helpers/getQueryOrMutatorAuthData.d.ts.map +1 -1
  165. package/types/helpers/mutatorContext.d.ts.map +1 -1
  166. package/types/helpers/prettyFormatZeroQuery.d.ts.map +1 -1
  167. package/types/helpers/useZeroDebug.d.ts.map +1 -1
  168. package/types/index.d.ts +1 -0
  169. package/types/index.d.ts.map +1 -1
  170. package/types/mutations.d.ts +1 -1
  171. package/types/mutations.d.ts.map +1 -1
  172. package/types/queryRegistry.d.ts +3 -0
  173. package/types/queryRegistry.d.ts.map +1 -0
  174. package/types/serverWhere.d.ts +1 -1
  175. package/types/serverWhere.d.ts.map +1 -1
  176. package/types/state.d.ts.map +1 -1
  177. package/types/types.d.ts.map +1 -1
  178. package/types/where.d.ts +1 -1
  179. package/types/where.d.ts.map +1 -1
  180. package/types/zql.d.ts.map +1 -1
  181. package/dist/cjs/builder.js +0 -26
  182. package/dist/cjs/builder.js.map +0 -6
  183. package/dist/cjs/builder.native.js +0 -35
  184. package/dist/cjs/builder.native.js.map +0 -1
  185. package/dist/cjs/helpers/context.cjs +0 -40
  186. package/dist/cjs/helpers/context.js +0 -36
  187. package/dist/cjs/helpers/context.js.map +0 -6
  188. package/dist/cjs/helpers/context.native.js +0 -43
  189. package/dist/cjs/helpers/context.native.js.map +0 -1
  190. package/dist/cjs/helpers/queryContext.cjs +0 -40
  191. package/dist/cjs/helpers/queryContext.js +0 -36
  192. package/dist/cjs/helpers/queryContext.js.map +0 -6
  193. package/dist/cjs/helpers/queryContext.native.js +0 -43
  194. package/dist/cjs/helpers/queryContext.native.js.map +0 -1
  195. package/dist/cjs/helpers/queryOrMutatorAuthData.cjs +0 -0
  196. package/dist/cjs/helpers/queryOrMutatorAuthData.js +0 -1
  197. package/dist/cjs/helpers/queryOrMutatorAuthData.js.map +0 -6
  198. package/dist/cjs/helpers/queryOrMutatorAuthData.native.js +0 -2
  199. package/dist/cjs/helpers/queryOrMutatorAuthData.native.js.map +0 -1
  200. package/dist/cjs/helpers/queryOrMutatorContext.cjs +0 -0
  201. package/dist/cjs/helpers/queryOrMutatorContext.js +0 -1
  202. package/dist/cjs/helpers/queryOrMutatorContext.js.map +0 -6
  203. package/dist/cjs/helpers/queryOrMutatorContext.native.js +0 -2
  204. package/dist/cjs/helpers/queryOrMutatorContext.native.js.map +0 -1
  205. package/dist/cjs/query.cjs +0 -34
  206. package/dist/cjs/query.js +0 -28
  207. package/dist/cjs/query.js.map +0 -6
  208. package/dist/cjs/query.native.js +0 -39
  209. package/dist/cjs/query.native.js.map +0 -1
  210. package/dist/cjs/queryBuilder.cjs +0 -31
  211. package/dist/cjs/queryBuilder.js.map +0 -6
  212. package/dist/cjs/queryBuilder.native.js.map +0 -1
  213. package/dist/esm/builder.js +0 -10
  214. package/dist/esm/builder.js.map +0 -6
  215. package/dist/esm/builder.mjs +0 -8
  216. package/dist/esm/builder.mjs.map +0 -1
  217. package/dist/esm/builder.native.js +0 -9
  218. package/dist/esm/builder.native.js.map +0 -1
  219. package/dist/esm/helpers/context.js +0 -20
  220. package/dist/esm/helpers/context.js.map +0 -6
  221. package/dist/esm/helpers/context.mjs +0 -15
  222. package/dist/esm/helpers/context.mjs.map +0 -1
  223. package/dist/esm/helpers/context.native.js +0 -15
  224. package/dist/esm/helpers/context.native.js.map +0 -1
  225. package/dist/esm/helpers/queryContext.js +0 -20
  226. package/dist/esm/helpers/queryContext.js.map +0 -6
  227. package/dist/esm/helpers/queryContext.mjs +0 -15
  228. package/dist/esm/helpers/queryContext.mjs.map +0 -1
  229. package/dist/esm/helpers/queryContext.native.js +0 -15
  230. package/dist/esm/helpers/queryContext.native.js.map +0 -1
  231. package/dist/esm/helpers/queryOrMutatorAuthData.js +0 -1
  232. package/dist/esm/helpers/queryOrMutatorAuthData.js.map +0 -6
  233. package/dist/esm/helpers/queryOrMutatorAuthData.mjs +0 -2
  234. package/dist/esm/helpers/queryOrMutatorAuthData.mjs.map +0 -1
  235. package/dist/esm/helpers/queryOrMutatorAuthData.native.js +0 -2
  236. package/dist/esm/helpers/queryOrMutatorAuthData.native.js.map +0 -1
  237. package/dist/esm/helpers/queryOrMutatorContext.js +0 -1
  238. package/dist/esm/helpers/queryOrMutatorContext.js.map +0 -6
  239. package/dist/esm/helpers/queryOrMutatorContext.mjs +0 -2
  240. package/dist/esm/helpers/queryOrMutatorContext.mjs.map +0 -1
  241. package/dist/esm/helpers/queryOrMutatorContext.native.js +0 -2
  242. package/dist/esm/helpers/queryOrMutatorContext.native.js.map +0 -1
  243. package/dist/esm/query.js +0 -13
  244. package/dist/esm/query.js.map +0 -6
  245. package/dist/esm/query.mjs +0 -11
  246. package/dist/esm/query.mjs.map +0 -1
  247. package/dist/esm/query.native.js +0 -13
  248. package/dist/esm/query.native.js.map +0 -1
  249. package/dist/esm/queryBuilder.js +0 -10
  250. package/dist/esm/queryBuilder.js.map +0 -6
  251. package/dist/esm/queryBuilder.mjs +0 -8
  252. package/dist/esm/queryBuilder.mjs.map +0 -1
  253. package/dist/esm/queryBuilder.native.js +0 -9
  254. package/dist/esm/queryBuilder.native.js.map +0 -1
@@ -23,11 +23,11 @@ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
23
  value: mod,
24
24
  enumerable: !0
25
25
  }) : target, mod));
26
- var import_model = require("@sinclair/typebox-codegen/model"),
26
+ var import_fs = require("fs"),
27
+ import_path = require("path"),
28
+ import_model = require("@sinclair/typebox-codegen/model"),
27
29
  import_typescript = require("@sinclair/typebox-codegen/typescript"),
28
30
  import_citty = require("citty"),
29
- import_fs = require("fs"),
30
- import_path = require("path"),
31
31
  ts = __toESM(require("typescript"), 1);
32
32
  function writeFileIfChanged(filePath, content) {
33
33
  try {
@@ -39,224 +39,226 @@ function writeFileIfChanged(filePath, content) {
39
39
  return (0, import_fs.writeFileSync)(filePath, content, "utf-8"), !0;
40
40
  }
41
41
  var generateQueries = (0, import_citty.defineCommand)({
42
- meta: {
43
- name: "generate-queries",
44
- description: "Generate server-side query validators from TypeScript query functions"
45
- },
46
- args: {
47
- dir: {
48
- type: "positional",
49
- description: "Directory containing query files",
50
- required: !1,
51
- default: "."
52
- }
53
- },
54
- async run(param) {
55
- var {
56
- args
57
- } = param,
58
- dir = (0, import_path.resolve)(args.dir),
59
- {
60
- readdirSync: readdirSync2,
61
- writeFileSync: writeFileSync2
62
- } = await import("fs"),
63
- files = readdirSync2(dir).filter(function (f) {
64
- return f.endsWith(".ts");
65
- }),
66
- allQueries = [],
67
- results = await Promise.all(files.map(async function (file) {
68
- var filePath = (0, import_path.resolve)(dir, file),
69
- queries = [];
70
- try {
71
- var content = (0, import_fs.readFileSync)(filePath, "utf-8"),
72
- sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, !0);
73
- ts.forEachChild(sourceFile, function (node) {
74
- if (ts.isVariableStatement(node)) {
75
- var _node_modifiers,
76
- exportModifier = (_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.find(function (m) {
77
- return m.kind === ts.SyntaxKind.ExportKeyword;
78
- });
79
- if (!exportModifier) return;
80
- var declaration = node.declarationList.declarations[0];
81
- if (!declaration || !ts.isVariableDeclaration(declaration)) return;
82
- var name = declaration.name.getText(sourceFile);
83
- if (declaration.initializer && ts.isArrowFunction(declaration.initializer)) {
84
- var params = declaration.initializer.parameters,
85
- paramType = "void";
86
- if (params.length > 0) {
87
- var _param_type,
88
- _$param = params[0];
89
- paramType = ((_param_type = _$param.type) === null || _param_type === void 0 ? void 0 : _param_type.getText(sourceFile)) || "unknown";
90
- }
91
- try {
92
- var typeString = `type QueryParams = ${paramType}`,
93
- model = import_typescript.TypeScriptToModel.Generate(typeString),
94
- valibotCode = import_model.ModelToValibot.Generate(model);
95
- queries.push({
96
- name,
97
- params: paramType,
98
- valibotCode
42
+ meta: {
43
+ name: "generate-queries",
44
+ description: "Generate server-side query validators from TypeScript query functions"
45
+ },
46
+ args: {
47
+ dir: {
48
+ type: "positional",
49
+ description: "Directory containing query files",
50
+ required: !1,
51
+ default: "."
52
+ }
53
+ },
54
+ async run(param) {
55
+ var {
56
+ args
57
+ } = param,
58
+ dir = (0, import_path.resolve)(args.dir),
59
+ {
60
+ readdirSync: readdirSync2,
61
+ writeFileSync: writeFileSync2
62
+ } = await import("fs"),
63
+ files = readdirSync2(dir).filter(function (f) {
64
+ return f.endsWith(".ts");
65
+ }),
66
+ allQueries = [],
67
+ results = await Promise.all(files.map(async function (file) {
68
+ var filePath = (0, import_path.resolve)(dir, file),
69
+ queries = [];
70
+ try {
71
+ var content = (0, import_fs.readFileSync)(filePath, "utf-8"),
72
+ sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, !0);
73
+ ts.forEachChild(sourceFile, function (node) {
74
+ if (ts.isVariableStatement(node)) {
75
+ var _node_modifiers,
76
+ exportModifier = (_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.find(function (m) {
77
+ return m.kind === ts.SyntaxKind.ExportKeyword;
99
78
  });
100
- } catch (err) {
101
- console.error(`\u2717 ${name}: ${err}`);
79
+ if (!exportModifier) return;
80
+ var declaration = node.declarationList.declarations[0];
81
+ if (!declaration || !ts.isVariableDeclaration(declaration)) return;
82
+ var name = declaration.name.getText(sourceFile);
83
+ if (declaration.initializer && ts.isArrowFunction(declaration.initializer)) {
84
+ var params = declaration.initializer.parameters,
85
+ paramType = "void";
86
+ if (params.length > 0) {
87
+ var _param_type,
88
+ _$param = params[0];
89
+ paramType = ((_param_type = _$param.type) === null || _param_type === void 0 ? void 0 : _param_type.getText(sourceFile)) || "unknown";
90
+ }
91
+ try {
92
+ var typeString = `type QueryParams = ${paramType}`,
93
+ model = import_typescript.TypeScriptToModel.Generate(typeString),
94
+ valibotCode = import_model.ModelToValibot.Generate(model);
95
+ queries.push({
96
+ name,
97
+ params: paramType,
98
+ valibotCode
99
+ });
100
+ } catch (err) {
101
+ console.error(`\u2717 ${name}: ${err}`);
102
+ }
102
103
  }
103
104
  }
104
- }
105
- });
106
- } catch (err) {
107
- console.error(`Error processing ${file}:`, err);
108
- }
109
- return queries;
110
- }));
111
- allQueries.push(...results.flat()), console.info(`\u2713 ${allQueries.length} query validators`);
112
- }
113
- });
114
- var generate = (0, import_citty.defineCommand)({
115
- meta: {
116
- name: "generate",
117
- description: "Generate models, types, tables, and query validators"
118
- },
119
- args: {
120
- dir: {
121
- type: "positional",
122
- description: "Base directory (defaults to src/data)",
123
- required: !1,
124
- default: "src/data"
105
+ });
106
+ } catch (err) {
107
+ console.error(`Error processing ${file}:`, err);
108
+ }
109
+ return queries;
110
+ }));
111
+ allQueries.push(...results.flat()), console.info(`\u2713 ${allQueries.length} query validators`);
112
+ }
113
+ }),
114
+ generate = (0, import_citty.defineCommand)({
115
+ meta: {
116
+ name: "generate",
117
+ description: "Generate models, types, tables, and query validators"
125
118
  },
126
- watch: {
127
- type: "boolean",
128
- description: "Watch for changes and regenerate",
129
- required: !1,
130
- default: !1
119
+ args: {
120
+ dir: {
121
+ type: "positional",
122
+ description: "Base directory (defaults to src/data)",
123
+ required: !1,
124
+ default: "src/data"
125
+ },
126
+ watch: {
127
+ type: "boolean",
128
+ description: "Watch for changes and regenerate",
129
+ required: !1,
130
+ default: !1
131
+ },
132
+ after: {
133
+ type: "string",
134
+ description: "Command to run after generation completes",
135
+ required: !1
136
+ }
131
137
  },
132
- after: {
133
- type: "string",
134
- description: "Command to run after generation completes",
135
- required: !1
136
- }
137
- },
138
- async run(param) {
139
- var {
140
- args
141
- } = param,
142
- baseDir = (0, import_path.resolve)(args.dir),
143
- modelsDir = (0, import_path.resolve)(baseDir, "models"),
144
- generatedDir = (0, import_path.resolve)(baseDir, "generated"),
145
- queriesDir = (0, import_path.resolve)(baseDir, "queries"),
146
- runGenerate = async function () {
147
- (0, import_fs.existsSync)(generatedDir) || (0, import_fs.mkdirSync)(generatedDir, {
148
- recursive: !0
149
- });
150
- var allModelFiles = (0, import_fs.readdirSync)(modelsDir).filter(function (f) {
151
- return f.endsWith(".ts");
152
- }).sort(),
153
- schemaChecks = await Promise.all(allModelFiles.map(async function (f) {
154
- return {
155
- file: f,
156
- hasSchema: (0, import_fs.readFileSync)((0, import_path.resolve)(modelsDir, f), "utf-8").includes("export const schema = table(")
157
- };
158
- })),
159
- filesWithSchema = schemaChecks.filter(function (c) {
160
- return c.hasSchema;
161
- }).map(function (c) {
162
- return c.file;
163
- }),
164
- [modelsOutput, typesOutput, tablesOutput, readmeOutput] = await Promise.all([Promise.resolve(generateModelsFile(allModelFiles)), Promise.resolve(generateTypesFile(filesWithSchema)), Promise.resolve(generateTablesFile(filesWithSchema)), Promise.resolve(generateReadmeFile())]),
165
- writeResults = await Promise.all([Promise.resolve(writeFileIfChanged((0, import_path.resolve)(generatedDir, "models.ts"), modelsOutput)), Promise.resolve(writeFileIfChanged((0, import_path.resolve)(generatedDir, "types.ts"), typesOutput)), Promise.resolve(writeFileIfChanged((0, import_path.resolve)(generatedDir, "tables.ts"), tablesOutput)), Promise.resolve(writeFileIfChanged((0, import_path.resolve)(generatedDir, "README.md"), readmeOutput))]),
166
- filesChanged = writeResults.filter(Boolean).length;
167
- if (filesChanged > 0 && console.info(` \u{1F4DD} Updated ${filesChanged} file(s)`), (0, import_fs.existsSync)(queriesDir)) {
168
- var queryFiles = (0, import_fs.readdirSync)(queriesDir).filter(function (f) {
138
+ async run(param) {
139
+ var {
140
+ args
141
+ } = param,
142
+ baseDir = (0, import_path.resolve)(args.dir),
143
+ modelsDir = (0, import_path.resolve)(baseDir, "models"),
144
+ generatedDir = (0, import_path.resolve)(baseDir, "generated"),
145
+ queriesDir = (0, import_path.resolve)(baseDir, "queries"),
146
+ runGenerate = async function () {
147
+ (0, import_fs.existsSync)(generatedDir) || (0, import_fs.mkdirSync)(generatedDir, {
148
+ recursive: !0
149
+ });
150
+ var allModelFiles = (0, import_fs.readdirSync)(modelsDir).filter(function (f) {
169
151
  return f.endsWith(".ts");
152
+ }).sort(),
153
+ schemaChecks = await Promise.all(allModelFiles.map(async function (f) {
154
+ return {
155
+ file: f,
156
+ hasSchema: (0, import_fs.readFileSync)((0, import_path.resolve)(modelsDir, f), "utf-8").includes("export const schema = table(")
157
+ };
158
+ })),
159
+ filesWithSchema = schemaChecks.filter(function (c) {
160
+ return c.hasSchema;
161
+ }).map(function (c) {
162
+ return c.file;
170
163
  }),
171
- queryResults = await Promise.all(queryFiles.map(async function (file) {
172
- var filePath = (0, import_path.resolve)(queriesDir, file),
173
- fileBaseName = (0, import_path.basename)(file, ".ts"),
174
- queries = [];
175
- try {
176
- var content = (0, import_fs.readFileSync)(filePath, "utf-8"),
177
- sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, !0);
178
- ts.forEachChild(sourceFile, function (node) {
179
- if (ts.isVariableStatement(node)) {
180
- var _node_modifiers,
181
- exportModifier = (_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.find(function (m) {
182
- return m.kind === ts.SyntaxKind.ExportKeyword;
183
- });
184
- if (!exportModifier) return;
185
- var declaration = node.declarationList.declarations[0];
186
- if (!declaration || !ts.isVariableDeclaration(declaration)) return;
187
- var name = declaration.name.getText(sourceFile);
188
- if (name === "permission") return;
189
- if (declaration.initializer && ts.isArrowFunction(declaration.initializer)) {
190
- var params = declaration.initializer.parameters,
191
- paramType = "void";
192
- if (params.length > 0) {
193
- var _param_type,
194
- _$param = params[0];
195
- paramType = ((_param_type = _$param.type) === null || _param_type === void 0 ? void 0 : _param_type.getText(sourceFile)) || "unknown";
196
- }
197
- try {
198
- var typeString = `type QueryParams = ${paramType}`,
199
- model = import_typescript.TypeScriptToModel.Generate(typeString),
200
- valibotCode = import_model.ModelToValibot.Generate(model);
201
- queries.push({
202
- name,
203
- params: paramType,
204
- valibotCode,
205
- sourceFile: fileBaseName
164
+ [modelsOutput, typesOutput, tablesOutput, readmeOutput] = await Promise.all([Promise.resolve(generateModelsFile(allModelFiles)), Promise.resolve(generateTypesFile(filesWithSchema)), Promise.resolve(generateTablesFile(filesWithSchema)), Promise.resolve(generateReadmeFile())]),
165
+ writeResults = await Promise.all([Promise.resolve(writeFileIfChanged((0, import_path.resolve)(generatedDir, "models.ts"), modelsOutput)), Promise.resolve(writeFileIfChanged((0, import_path.resolve)(generatedDir, "types.ts"), typesOutput)), Promise.resolve(writeFileIfChanged((0, import_path.resolve)(generatedDir, "tables.ts"), tablesOutput)), Promise.resolve(writeFileIfChanged((0, import_path.resolve)(generatedDir, "README.md"), readmeOutput))]),
166
+ filesChanged = writeResults.filter(Boolean).length;
167
+ if (filesChanged > 0 && console.info(` \u{1F4DD} Updated ${filesChanged} file(s)`), (0, import_fs.existsSync)(queriesDir)) {
168
+ var queryFiles = (0, import_fs.readdirSync)(queriesDir).filter(function (f) {
169
+ return f.endsWith(".ts");
170
+ }),
171
+ queryResults = await Promise.all(queryFiles.map(async function (file) {
172
+ var filePath = (0, import_path.resolve)(queriesDir, file),
173
+ fileBaseName = (0, import_path.basename)(file, ".ts"),
174
+ queries = [];
175
+ try {
176
+ var content = (0, import_fs.readFileSync)(filePath, "utf-8"),
177
+ sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, !0);
178
+ ts.forEachChild(sourceFile, function (node) {
179
+ if (ts.isVariableStatement(node)) {
180
+ var _node_modifiers,
181
+ exportModifier = (_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.find(function (m) {
182
+ return m.kind === ts.SyntaxKind.ExportKeyword;
206
183
  });
207
- } catch (err) {
208
- console.error(`\u2717 ${name}: ${err}`);
184
+ if (!exportModifier) return;
185
+ var declaration = node.declarationList.declarations[0];
186
+ if (!declaration || !ts.isVariableDeclaration(declaration)) return;
187
+ var name = declaration.name.getText(sourceFile);
188
+ if (name === "permission") return;
189
+ if (declaration.initializer && ts.isArrowFunction(declaration.initializer)) {
190
+ var params = declaration.initializer.parameters,
191
+ paramType = "void";
192
+ if (params.length > 0) {
193
+ var _param_type,
194
+ _$param = params[0];
195
+ paramType = ((_param_type = _$param.type) === null || _param_type === void 0 ? void 0 : _param_type.getText(sourceFile)) || "unknown";
196
+ }
197
+ try {
198
+ var typeString = `type QueryParams = ${paramType}`,
199
+ model = import_typescript.TypeScriptToModel.Generate(typeString),
200
+ valibotCode = import_model.ModelToValibot.Generate(model);
201
+ queries.push({
202
+ name,
203
+ params: paramType,
204
+ valibotCode,
205
+ sourceFile: fileBaseName
206
+ });
207
+ } catch (err) {
208
+ console.error(`\u2717 ${name}: ${err}`);
209
+ }
209
210
  }
210
211
  }
211
- }
212
- });
213
- } catch (err) {
214
- console.error(`Error processing ${file}:`, err);
215
- }
216
- return queries;
217
- })),
218
- allQueries = queryResults.flat(),
219
- queriesOutput = generateQueriesFile(allQueries),
220
- queriesChanged = writeFileIfChanged((0, import_path.resolve)(generatedDir, "queries.ts"), queriesOutput);
221
- queriesChanged && console.info(" \u{1F4DD} Updated queries.ts"), console.info(`\u2713 ${allModelFiles.length} models (${filesWithSchema.length} schemas), ${allQueries.length} queries`);
222
- } else console.info(`\u2713 ${allModelFiles.length} models (${filesWithSchema.length} schemas)`);
223
- if (args.after) try {
224
- var {
225
- execSync
226
- } = await import("child_process");
227
- execSync(args.after, {
228
- stdio: "inherit"
229
- });
230
- } catch (err) {
231
- console.error(`Error running after command: ${err}`);
232
- }
233
- };
234
- if (await runGenerate(), args.watch) {
235
- console.info(`
212
+ });
213
+ } catch (err) {
214
+ console.error(`Error processing ${file}:`, err);
215
+ }
216
+ return queries;
217
+ })),
218
+ allQueries = queryResults.flat(),
219
+ groupedQueriesOutput = generateGroupedQueriesFile(allQueries),
220
+ syncedQueriesOutput = generateSyncedQueriesFile(allQueries),
221
+ groupedChanged = writeFileIfChanged((0, import_path.resolve)(generatedDir, "groupedQueries.ts"), groupedQueriesOutput),
222
+ syncedChanged = writeFileIfChanged((0, import_path.resolve)(generatedDir, "syncedQueries.ts"), syncedQueriesOutput);
223
+ groupedChanged && console.info(" \u{1F4DD} Updated groupedQueries.ts"), syncedChanged && console.info(" \u{1F4DD} Updated syncedQueries.ts"), console.info(`\u2713 ${allModelFiles.length} models (${filesWithSchema.length} schemas), ${allQueries.length} queries`);
224
+ } else console.info(`\u2713 ${allModelFiles.length} models (${filesWithSchema.length} schemas)`);
225
+ if (args.after) try {
226
+ var {
227
+ execSync
228
+ } = await import("child_process");
229
+ execSync(args.after, {
230
+ stdio: "inherit"
231
+ });
232
+ } catch (err) {
233
+ console.error(`Error running after command: ${err}`);
234
+ }
235
+ };
236
+ if (await runGenerate(), args.watch) {
237
+ console.info(`
236
238
  \u{1F440} watching...
237
239
  `);
238
- var chokidar = await import("chokidar"),
239
- debounceTimer = null,
240
- debouncedRegenerate = function (path, event) {
241
- debounceTimer && clearTimeout(debounceTimer), console.info(`
240
+ var chokidar = await import("chokidar"),
241
+ debounceTimer = null,
242
+ debouncedRegenerate = function (path, event) {
243
+ debounceTimer && clearTimeout(debounceTimer), console.info(`
242
244
  ${event} ${path}`), debounceTimer = setTimeout(function () {
243
- runGenerate();
244
- }, 1e3);
245
- },
246
- watcher = chokidar.watch([modelsDir, queriesDir], {
247
- persistent: !0,
248
- ignoreInitial: !0
249
- });
250
- watcher.on("change", function (path) {
251
- return debouncedRegenerate(path, "\u{1F4DD}");
252
- }), watcher.on("add", function (path) {
253
- return debouncedRegenerate(path, "\u2795");
254
- }), watcher.on("unlink", function (path) {
255
- return debouncedRegenerate(path, "\u{1F5D1}\uFE0F ");
256
- }), await new Promise(function () {});
245
+ runGenerate();
246
+ }, 1e3);
247
+ },
248
+ watcher = chokidar.watch([modelsDir, queriesDir], {
249
+ persistent: !0,
250
+ ignoreInitial: !0
251
+ });
252
+ watcher.on("change", function (path) {
253
+ return debouncedRegenerate(path, "\u{1F4DD}");
254
+ }), watcher.on("add", function (path) {
255
+ return debouncedRegenerate(path, "\u2795");
256
+ }), watcher.on("unlink", function (path) {
257
+ return debouncedRegenerate(path, "\u{1F5D1}\uFE0F ");
258
+ }), await new Promise(function () {});
259
+ }
257
260
  }
258
- }
259
- });
261
+ });
260
262
  function generateModelsFile(modelFiles) {
261
263
  var modelNames = modelFiles.map(function (f) {
262
264
  return (0, import_path.basename)(f, ".ts");
@@ -322,16 +324,31 @@ function generateTablesFile(modelFiles) {
322
324
  ${exports}
323
325
  `;
324
326
  }
325
- function generateQueriesFile(queries) {
326
- var sortedQueries = [...queries].sort(function (a, b) {
327
- return a.name.localeCompare(b.name);
328
- }),
329
- queryByFile = /* @__PURE__ */new Map(),
327
+ function generateGroupedQueriesFile(queries) {
328
+ var sortedFiles = [...new Set(queries.map(function (q) {
329
+ return q.sourceFile;
330
+ }))].sort(),
331
+ exports = sortedFiles.map(function (file) {
332
+ return `export * as ${file} from '../queries/${file}'`;
333
+ }).join(`
334
+ `);
335
+ return `/**
336
+ * auto-generated by: over-zero generate
337
+ *
338
+ * grouped query re-exports for minification-safe query identity.
339
+ * this file re-exports all query modules - while this breaks tree-shaking,
340
+ * queries are typically small and few in number even in larger apps.
341
+ */
342
+ ${exports}
343
+ `;
344
+ }
345
+ function generateSyncedQueriesFile(queries) {
346
+ var queryByFile = /* @__PURE__ */new Map(),
330
347
  _iteratorNormalCompletion = !0,
331
348
  _didIteratorError = !1,
332
349
  _iteratorError = void 0;
333
350
  try {
334
- for (var _iterator = sortedQueries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
351
+ for (var _iterator = queries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
335
352
  var q = _step.value;
336
353
  queryByFile.has(q.sourceFile) || queryByFile.set(q.sourceFile, []), queryByFile.get(q.sourceFile).push(q);
337
354
  }
@@ -344,44 +361,49 @@ function generateQueriesFile(queries) {
344
361
  if (_didIteratorError) throw _iteratorError;
345
362
  }
346
363
  }
347
- var queryImports = Array.from(queryByFile.keys()).sort().map(function (file) {
348
- return `import * as ${file}Queries from '../queries/${file}'`;
349
- }).join(`
350
- `),
351
- imports = `import * as v from 'valibot'
364
+ var sortedFiles = Array.from(queryByFile.keys()).sort(),
365
+ imports = `// auto-generated by: over-zero generate
366
+ // server-side syncedQuery wrappers with validators
352
367
  import { syncedQuery } from '@rocicorp/zero'
353
- ${queryImports}
368
+ import * as v from 'valibot'
369
+ import * as Queries from './groupedQueries'
354
370
  `,
355
- syncedQueries = sortedQueries.map(function (q2) {
356
- var lines = q2.valibotCode.split(`
357
- `).filter(function (l) {
358
- return l.trim();
359
- }),
360
- schemaLineIndex = lines.findIndex(function (l) {
361
- return l.startsWith("export const QueryParams");
371
+ namespaceExports = sortedFiles.map(function (file) {
372
+ var fileQueries = queryByFile.get(file).sort(function (a, b) {
373
+ return a.name.localeCompare(b.name);
362
374
  }),
363
- validatorDef = "v.void()";
364
- if (schemaLineIndex !== -1) {
365
- for (var schemaLines = [], openBraces = 0, started = !1, i = schemaLineIndex; i < lines.length; i++) {
366
- var line = lines[i],
367
- cleaned = started ? line : line.replace("export const QueryParams = ", "");
368
- if (schemaLines.push(cleaned), started = !0, openBraces += (cleaned.match(/\{/g) || []).length, openBraces -= (cleaned.match(/\}/g) || []).length, openBraces += (cleaned.match(/\(/g) || []).length, openBraces -= (cleaned.match(/\)/g) || []).length, openBraces === 0 && schemaLines.length > 0) break;
369
- }
370
- validatorDef = schemaLines.join(`
375
+ queryDefs = fileQueries.map(function (q2) {
376
+ var lines = q2.valibotCode.split(`
377
+ `).filter(function (l) {
378
+ return l.trim();
379
+ }),
380
+ schemaLineIndex = lines.findIndex(function (l) {
381
+ return l.startsWith("export const QueryParams");
382
+ }),
383
+ validatorDef = "v.void()";
384
+ if (schemaLineIndex !== -1) {
385
+ for (var schemaLines = [], openBraces = 0, started = !1, i = schemaLineIndex; i < lines.length; i++) {
386
+ var line = lines[i],
387
+ cleaned = started ? line : line.replace("export const QueryParams = ", "");
388
+ if (schemaLines.push(cleaned), started = !0, openBraces += (cleaned.match(/\{/g) || []).length, openBraces -= (cleaned.match(/\}/g) || []).length, openBraces += (cleaned.match(/\(/g) || []).length, openBraces -= (cleaned.match(/\)/g) || []).length, openBraces === 0 && schemaLines.length > 0) break;
389
+ }
390
+ validatorDef = schemaLines.join(`
371
391
  `);
372
- }
373
- var wrappedValidator = validatorDef === "v.void()" ? "v.parser(v.tuple([]))" : `v.parser(v.tuple([${validatorDef}]))`,
374
- queryFn = validatorDef === "v.void()" ? `() => {
375
- return ${q2.sourceFile}Queries.${q2.name}()
376
- }` : `(arg) => {
377
- return ${q2.sourceFile}Queries.${q2.name}(arg)
392
+ }
393
+ var wrappedValidator = validatorDef === "v.void()" ? "v.parser(v.tuple([]))" : `v.parser(v.tuple([${validatorDef}]))`,
394
+ namespacedName = `${q2.sourceFile}.${q2.name}`,
395
+ queryFn = validatorDef === "v.void()" ? `() => Queries.${file}.${q2.name}()` : `(arg) => Queries.${file}.${q2.name}(arg)`;
396
+ return ` ${q2.name}: syncedQuery('${namespacedName}', ${wrappedValidator}, ${queryFn}),`;
397
+ }).join(`
398
+ `);
399
+ return `export const ${file} = {
400
+ ${queryDefs}
378
401
  }`;
379
- return `export const ${q2.name} = syncedQuery('${q2.name}', ${wrappedValidator}, ${queryFn})`;
380
402
  }).join(`
381
403
 
382
404
  `);
383
- return imports + `
384
- ` + syncedQueries + `
405
+ return `${imports}
406
+ ${namespaceExports}
385
407
  `;
386
408
  }
387
409
  function generateReadmeFile() {
@@ -394,7 +416,8 @@ this folder is auto-generated by over-zero. do not edit files here directly.
394
416
  - \`models.ts\` - exports all models from ../models
395
417
  - \`types.ts\` - typescript types derived from table schemas
396
418
  - \`tables.ts\` - exports table schemas for type inference
397
- - \`queries.ts\` - synced query definitions with validators
419
+ - \`groupedQueries.ts\` - namespaced query re-exports for client setup
420
+ - \`syncedQueries.ts\` - namespaced syncedQuery wrappers for server setup
398
421
 
399
422
  ## usage guidelines
400
423
 
@@ -402,16 +425,15 @@ this folder is auto-generated by over-zero. do not edit files here directly.
402
425
 
403
426
  ### queries
404
427
 
405
- don't import queries from this folder on the client. instead, import from \`../queries/\`:
428
+ write your queries as plain functions in \`../queries/\` and import them directly:
406
429
 
407
430
  \`\`\`ts
408
- // \u274C bad - don't import from generated
409
- import { channelMessages } from '~/data/generated/queries'
410
-
411
431
  // \u2705 good - import from queries
412
432
  import { channelMessages } from '~/data/queries/message'
413
433
  \`\`\`
414
434
 
435
+ the generated query files are only used internally by zero client/server setup.
436
+
415
437
  ### types
416
438
 
417
439
  you can import types from this folder, but prefer re-exporting from \`../types.ts\`: