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