over-zero 0.0.32 → 0.0.33

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 +228 -190
  3. package/dist/cjs/cli.js +60 -27
  4. package/dist/cjs/cli.js.map +1 -1
  5. package/dist/cjs/cli.native.js +277 -228
  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 +3 -2
  15. package/dist/cjs/createZeroServer.js +2 -2
  16. package/dist/cjs/createZeroServer.js.map +1 -1
  17. package/dist/cjs/createZeroServer.native.js +4 -2
  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 +61 -28
  59. package/dist/esm/cli.js.map +1 -1
  60. package/dist/esm/cli.mjs +227 -189
  61. package/dist/esm/cli.mjs.map +1 -1
  62. package/dist/esm/cli.native.js +276 -227
  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 +2 -2
  74. package/dist/esm/createZeroServer.js.map +1 -1
  75. package/dist/esm/createZeroServer.mjs +3 -2
  76. package/dist/esm/createZeroServer.mjs.map +1 -1
  77. package/dist/esm/createZeroServer.native.js +4 -2
  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 +99 -79
  135. package/src/createPermissions.ts +8 -6
  136. package/src/createZeroClient.tsx +36 -15
  137. package/src/createZeroServer.ts +21 -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
+ clientQueriesOutput = generateClientQueriesFile(allQueries),
196
+ serverQueriesOutput = generateServerQueriesFile(allQueries),
197
+ clientChanged = writeFileIfChanged(resolve(generatedDir, "queries.client.ts"), clientQueriesOutput),
198
+ serverChanged = writeFileIfChanged(resolve(generatedDir, "queries.server.ts"), serverQueriesOutput);
199
+ clientChanged && console.info(" \u{1F4DD} Updated queries.client.ts"), serverChanged && console.info(" \u{1F4DD} Updated queries.server.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,39 @@ 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 generateClientQueriesFile(queries) {
304
+ var sortedFiles = [...new Set(queries.map(function (q) {
305
+ return q.sourceFile;
306
+ }))].sort(),
307
+ imports = sortedFiles.map(function (file) {
308
+ return `import * as ${file}Queries from '../queries/${file}'`;
309
+ }).join(`
310
+ `),
311
+ namespaces = sortedFiles.map(function (file) {
312
+ return ` ${file}: ${file}Queries,`;
313
+ }).join(`
314
+ `);
315
+ return `/**
316
+ * auto-generated by: over-zero generate
317
+ *
318
+ * client-side query references for minification-safe query identity.
319
+ * this file re-exports all query modules - while this breaks tree-shaking,
320
+ * queries are typically small and few in number even in larger apps.
321
+ */
322
+ ${imports}
323
+
324
+ export const clientQueries = {
325
+ ${namespaces}
326
+ }
327
+ `;
328
+ }
329
+ function generateServerQueriesFile(queries) {
330
+ var queryByFile = /* @__PURE__ */new Map(),
306
331
  _iteratorNormalCompletion = !0,
307
332
  _didIteratorError = !1,
308
333
  _iteratorError = void 0;
309
334
  try {
310
- for (var _iterator = sortedQueries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
335
+ for (var _iterator = queries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
311
336
  var q = _step.value;
312
337
  queryByFile.has(q.sourceFile) || queryByFile.set(q.sourceFile, []), queryByFile.get(q.sourceFile).push(q);
313
338
  }
@@ -320,15 +345,21 @@ function generateQueriesFile(queries) {
320
345
  if (_didIteratorError) throw _iteratorError;
321
346
  }
322
347
  }
323
- var queryImports = Array.from(queryByFile.keys()).sort().map(function (file) {
348
+ var sortedFiles = Array.from(queryByFile.keys()).sort(),
349
+ queryImports = sortedFiles.map(function (file) {
324
350
  return `import * as ${file}Queries from '../queries/${file}'`;
325
351
  }).join(`
326
352
  `),
327
- imports = `import * as v from 'valibot'
353
+ imports = `// auto-generated by: over-zero generate
354
+ // server-side syncedQuery wrappers with validators
328
355
  import { syncedQuery } from '@rocicorp/zero'
356
+ import * as v from 'valibot'
329
357
  ${queryImports}
330
358
  `,
331
- syncedQueries = sortedQueries.map(function (q2) {
359
+ sortedQueries = [...queries].sort(function (a, b) {
360
+ return a.name.localeCompare(b.name);
361
+ }),
362
+ syncedQueryDefs = sortedQueries.map(function (q2) {
332
363
  var lines = q2.valibotCode.split(`
333
364
  `).filter(function (l) {
334
365
  return l.trim();
@@ -347,17 +378,35 @@ ${queryImports}
347
378
  `);
348
379
  }
349
380
  var wrappedValidator = validatorDef === "v.void()" ? "v.parser(v.tuple([]))" : `v.parser(v.tuple([${validatorDef}]))`,
381
+ namespacedName = `${q2.sourceFile}.${q2.name}`,
350
382
  queryFn = validatorDef === "v.void()" ? `() => {
351
- return ${q2.sourceFile}Queries.${q2.name}()
352
- }` : `(arg) => {
353
- return ${q2.sourceFile}Queries.${q2.name}(arg)
354
- }`;
355
- return `export const ${q2.name} = syncedQuery('${q2.name}', ${wrappedValidator}, ${queryFn})`;
383
+ return ${q2.sourceFile}Queries.${q2.name}()
384
+ }` : `(arg) => {
385
+ return ${q2.sourceFile}Queries.${q2.name}(arg)
386
+ }`;
387
+ return `const ${q2.name}Synced = syncedQuery('${namespacedName}', ${wrappedValidator}, ${queryFn})`;
356
388
  }).join(`
357
389
 
390
+ `),
391
+ namespaces = sortedFiles.map(function (file) {
392
+ var fileQueries = queryByFile.get(file).sort(function (a, b) {
393
+ return a.name.localeCompare(b.name);
394
+ }),
395
+ queryEntries = fileQueries.map(function (q2) {
396
+ return ` ${q2.name}: ${q2.name}Synced,`;
397
+ }).join(`
398
+ `);
399
+ return ` ${file}: {
400
+ ${queryEntries}
401
+ },`;
402
+ }).join(`
358
403
  `);
359
- return imports + `
360
- ` + syncedQueries + `
404
+ return `${imports}
405
+ ${syncedQueryDefs}
406
+
407
+ export const serverQueries = {
408
+ ${namespaces}
409
+ }
361
410
  `;
362
411
  }
363
412
  function generateReadmeFile() {
@@ -370,7 +419,8 @@ this folder is auto-generated by over-zero. do not edit files here directly.
370
419
  - \`models.ts\` - exports all models from ../models
371
420
  - \`types.ts\` - typescript types derived from table schemas
372
421
  - \`tables.ts\` - exports table schemas for type inference
373
- - \`queries.ts\` - synced query definitions with validators
422
+ - \`queries.client.ts\` - namespaced query references for client setup
423
+ - \`queries.server.ts\` - namespaced syncedQuery wrappers for server setup
374
424
 
375
425
  ## usage guidelines
376
426
 
@@ -378,16 +428,15 @@ this folder is auto-generated by over-zero. do not edit files here directly.
378
428
 
379
429
  ### queries
380
430
 
381
- don't import queries from this folder on the client. instead, import from \`../queries/\`:
431
+ write your queries as plain functions in \`../queries/\` and import them directly:
382
432
 
383
433
  \`\`\`ts
384
- // \u274C bad - don't import from generated
385
- import { channelMessages } from '~/data/generated/queries'
386
-
387
434
  // \u2705 good - import from queries
388
435
  import { channelMessages } from '~/data/queries/message'
389
436
  \`\`\`
390
437
 
438
+ the generated query files are only used internally by zero client/server setup.
439
+
391
440
  ### types
392
441
 
393
442
  you can import types from this folder, but prefer re-exporting from \`../types.ts\`: