over-zero 0.0.31 → 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.
- package/cli.cjs +3 -0
- package/dist/cjs/cli.cjs +228 -190
- package/dist/cjs/cli.js +60 -27
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/cli.native.js +277 -228
- package/dist/cjs/cli.native.js.map +1 -1
- package/dist/cjs/createPermissions.js.map +1 -1
- package/dist/cjs/createPermissions.native.js.map +1 -1
- package/dist/cjs/createZeroClient.cjs +21 -14
- package/dist/cjs/createZeroClient.js +18 -10
- package/dist/cjs/createZeroClient.js.map +1 -1
- package/dist/cjs/createZeroClient.native.js +48 -9
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroServer.cjs +3 -2
- package/dist/cjs/createZeroServer.js +2 -2
- package/dist/cjs/createZeroServer.js.map +1 -1
- package/dist/cjs/createZeroServer.native.js +4 -2
- package/dist/cjs/createZeroServer.native.js.map +1 -1
- package/dist/cjs/helpers/batchQuery.js.map +1 -1
- package/dist/cjs/helpers/batchQuery.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.js.map +1 -1
- package/dist/cjs/helpers/createMutators.native.js.map +1 -1
- package/dist/cjs/helpers/didRunPermissionCheck.js.map +1 -1
- package/dist/cjs/helpers/didRunPermissionCheck.native.js.map +1 -1
- package/dist/cjs/helpers/ensureLoggedIn.js.map +1 -1
- package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
- package/dist/cjs/helpers/getQueryOrMutatorAuthData.js.map +1 -1
- package/dist/cjs/helpers/getQueryOrMutatorAuthData.native.js.map +1 -1
- package/dist/cjs/helpers/mutatorContext.js.map +1 -1
- package/dist/cjs/helpers/mutatorContext.native.js.map +1 -1
- package/dist/cjs/helpers/prettyFormatZeroQuery.js.map +1 -1
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +1 -1
- package/dist/cjs/helpers/useZeroDebug.js.map +1 -1
- package/dist/cjs/helpers/useZeroDebug.native.js.map +1 -1
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.native.js +1 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/mutations.js.map +1 -1
- package/dist/cjs/mutations.native.js.map +1 -1
- package/dist/cjs/{builder.cjs → queryRegistry.cjs} +12 -10
- package/dist/cjs/{queryBuilder.js → queryRegistry.js} +13 -11
- package/dist/cjs/queryRegistry.js.map +6 -0
- package/dist/cjs/{queryBuilder.native.js → queryRegistry.native.js} +13 -12
- package/dist/cjs/queryRegistry.native.js.map +1 -0
- package/dist/cjs/serverWhere.js.map +1 -1
- package/dist/cjs/serverWhere.native.js.map +1 -1
- package/dist/cjs/state.cjs +1 -4
- package/dist/cjs/state.js +1 -4
- package/dist/cjs/state.js.map +1 -1
- package/dist/cjs/state.native.js +1 -2
- package/dist/cjs/state.native.js.map +1 -1
- package/dist/cjs/where.js.map +1 -1
- package/dist/cjs/where.native.js.map +1 -1
- package/dist/cjs/zql.js.map +1 -1
- package/dist/cjs/zql.native.js.map +1 -1
- package/dist/esm/cli.js +61 -28
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/cli.mjs +227 -189
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/cli.native.js +276 -227
- package/dist/esm/cli.native.js.map +1 -1
- package/dist/esm/createPermissions.js.map +1 -1
- package/dist/esm/createPermissions.mjs.map +1 -1
- package/dist/esm/createPermissions.native.js.map +1 -1
- package/dist/esm/createZeroClient.js +18 -9
- package/dist/esm/createZeroClient.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +21 -14
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +48 -9
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroServer.js +2 -2
- package/dist/esm/createZeroServer.js.map +1 -1
- package/dist/esm/createZeroServer.mjs +3 -2
- package/dist/esm/createZeroServer.mjs.map +1 -1
- package/dist/esm/createZeroServer.native.js +4 -2
- package/dist/esm/createZeroServer.native.js.map +1 -1
- package/dist/esm/helpers/batchQuery.js.map +1 -1
- package/dist/esm/helpers/batchQuery.mjs.map +1 -1
- package/dist/esm/helpers/batchQuery.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.js.map +1 -1
- package/dist/esm/helpers/createMutators.mjs.map +1 -1
- package/dist/esm/helpers/createMutators.native.js.map +1 -1
- package/dist/esm/helpers/didRunPermissionCheck.js.map +1 -1
- package/dist/esm/helpers/didRunPermissionCheck.mjs.map +1 -1
- package/dist/esm/helpers/didRunPermissionCheck.native.js.map +1 -1
- package/dist/esm/helpers/ensureLoggedIn.js.map +1 -1
- package/dist/esm/helpers/ensureLoggedIn.mjs.map +1 -1
- package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -1
- package/dist/esm/helpers/getQueryOrMutatorAuthData.js.map +1 -1
- package/dist/esm/helpers/getQueryOrMutatorAuthData.mjs.map +1 -1
- package/dist/esm/helpers/getQueryOrMutatorAuthData.native.js.map +1 -1
- package/dist/esm/helpers/mutatorContext.js.map +1 -1
- package/dist/esm/helpers/mutatorContext.mjs.map +1 -1
- package/dist/esm/helpers/mutatorContext.native.js.map +1 -1
- package/dist/esm/helpers/prettyFormatZeroQuery.js.map +1 -1
- package/dist/esm/helpers/prettyFormatZeroQuery.mjs.map +1 -1
- package/dist/esm/helpers/prettyFormatZeroQuery.native.js.map +1 -1
- package/dist/esm/helpers/useZeroDebug.js.map +1 -1
- package/dist/esm/helpers/useZeroDebug.mjs.map +1 -1
- package/dist/esm/helpers/useZeroDebug.native.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +1 -0
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/mutations.js.map +1 -1
- package/dist/esm/mutations.mjs.map +1 -1
- package/dist/esm/mutations.native.js.map +1 -1
- package/dist/esm/queryRegistry.js +12 -0
- package/dist/esm/queryRegistry.js.map +6 -0
- package/dist/esm/queryRegistry.mjs +9 -0
- package/dist/esm/queryRegistry.mjs.map +1 -0
- package/dist/esm/queryRegistry.native.js +9 -0
- package/dist/esm/queryRegistry.native.js.map +1 -0
- package/dist/esm/serverWhere.js.map +1 -1
- package/dist/esm/serverWhere.mjs.map +1 -1
- package/dist/esm/serverWhere.native.js.map +1 -1
- package/dist/esm/state.js +1 -4
- package/dist/esm/state.js.map +1 -1
- package/dist/esm/state.mjs +1 -4
- package/dist/esm/state.mjs.map +1 -1
- package/dist/esm/state.native.js +1 -2
- package/dist/esm/state.native.js.map +1 -1
- package/dist/esm/where.js.map +1 -1
- package/dist/esm/where.mjs.map +1 -1
- package/dist/esm/where.native.js.map +1 -1
- package/dist/esm/zql.js.map +1 -1
- package/dist/esm/zql.mjs.map +1 -1
- package/dist/esm/zql.native.js.map +1 -1
- package/package.json +4 -4
- package/src/cli.ts +99 -79
- package/src/createPermissions.ts +8 -6
- package/src/createZeroClient.tsx +47 -17
- package/src/createZeroServer.ts +21 -15
- package/src/helpers/batchQuery.ts +2 -1
- package/src/helpers/createMutators.ts +3 -1
- package/src/helpers/didRunPermissionCheck.ts +1 -0
- package/src/helpers/ensureLoggedIn.ts +3 -1
- package/src/helpers/getQueryOrMutatorAuthData.ts +2 -1
- package/src/helpers/mutatorContext.ts +1 -0
- package/src/helpers/prettyFormatZeroQuery.ts +2 -1
- package/src/helpers/useZeroDebug.ts +3 -1
- package/src/index.ts +1 -0
- package/src/mutations.ts +2 -1
- package/src/queryRegistry.ts +12 -0
- package/src/serverWhere.ts +3 -2
- package/src/state.ts +2 -2
- package/src/types.ts +10 -9
- package/src/where.ts +3 -1
- package/src/zql.ts +1 -0
- package/types/createPermissions.d.ts +1 -1
- package/types/createPermissions.d.ts.map +1 -1
- package/types/createZeroClient.d.ts +8 -6
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/createZeroServer.d.ts +4 -3
- package/types/createZeroServer.d.ts.map +1 -1
- package/types/helpers/batchQuery.d.ts.map +1 -1
- package/types/helpers/createMutators.d.ts.map +1 -1
- package/types/helpers/didRunPermissionCheck.d.ts.map +1 -1
- package/types/helpers/ensureLoggedIn.d.ts.map +1 -1
- package/types/helpers/getQueryOrMutatorAuthData.d.ts.map +1 -1
- package/types/helpers/mutatorContext.d.ts.map +1 -1
- package/types/helpers/prettyFormatZeroQuery.d.ts.map +1 -1
- package/types/helpers/useZeroDebug.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/mutations.d.ts +1 -1
- package/types/mutations.d.ts.map +1 -1
- package/types/queryRegistry.d.ts +3 -0
- package/types/queryRegistry.d.ts.map +1 -0
- package/types/serverWhere.d.ts +1 -1
- package/types/serverWhere.d.ts.map +1 -1
- package/types/state.d.ts.map +1 -1
- package/types/types.d.ts.map +1 -1
- package/types/where.d.ts +1 -1
- package/types/where.d.ts.map +1 -1
- package/types/zql.d.ts.map +1 -1
- package/dist/cjs/builder.js +0 -26
- package/dist/cjs/builder.js.map +0 -6
- package/dist/cjs/builder.native.js +0 -35
- package/dist/cjs/builder.native.js.map +0 -1
- package/dist/cjs/helpers/context.cjs +0 -40
- package/dist/cjs/helpers/context.js +0 -36
- package/dist/cjs/helpers/context.js.map +0 -6
- package/dist/cjs/helpers/context.native.js +0 -43
- package/dist/cjs/helpers/context.native.js.map +0 -1
- package/dist/cjs/helpers/queryContext.cjs +0 -40
- package/dist/cjs/helpers/queryContext.js +0 -36
- package/dist/cjs/helpers/queryContext.js.map +0 -6
- package/dist/cjs/helpers/queryContext.native.js +0 -43
- package/dist/cjs/helpers/queryContext.native.js.map +0 -1
- package/dist/cjs/helpers/queryOrMutatorAuthData.cjs +0 -0
- package/dist/cjs/helpers/queryOrMutatorAuthData.js +0 -1
- package/dist/cjs/helpers/queryOrMutatorAuthData.js.map +0 -6
- package/dist/cjs/helpers/queryOrMutatorAuthData.native.js +0 -2
- package/dist/cjs/helpers/queryOrMutatorAuthData.native.js.map +0 -1
- package/dist/cjs/helpers/queryOrMutatorContext.cjs +0 -0
- package/dist/cjs/helpers/queryOrMutatorContext.js +0 -1
- package/dist/cjs/helpers/queryOrMutatorContext.js.map +0 -6
- package/dist/cjs/helpers/queryOrMutatorContext.native.js +0 -2
- package/dist/cjs/helpers/queryOrMutatorContext.native.js.map +0 -1
- package/dist/cjs/query.cjs +0 -34
- package/dist/cjs/query.js +0 -28
- package/dist/cjs/query.js.map +0 -6
- package/dist/cjs/query.native.js +0 -39
- package/dist/cjs/query.native.js.map +0 -1
- package/dist/cjs/queryBuilder.cjs +0 -31
- package/dist/cjs/queryBuilder.js.map +0 -6
- package/dist/cjs/queryBuilder.native.js.map +0 -1
- package/dist/esm/builder.js +0 -10
- package/dist/esm/builder.js.map +0 -6
- package/dist/esm/builder.mjs +0 -8
- package/dist/esm/builder.mjs.map +0 -1
- package/dist/esm/builder.native.js +0 -9
- package/dist/esm/builder.native.js.map +0 -1
- package/dist/esm/helpers/context.js +0 -20
- package/dist/esm/helpers/context.js.map +0 -6
- package/dist/esm/helpers/context.mjs +0 -15
- package/dist/esm/helpers/context.mjs.map +0 -1
- package/dist/esm/helpers/context.native.js +0 -15
- package/dist/esm/helpers/context.native.js.map +0 -1
- package/dist/esm/helpers/queryContext.js +0 -20
- package/dist/esm/helpers/queryContext.js.map +0 -6
- package/dist/esm/helpers/queryContext.mjs +0 -15
- package/dist/esm/helpers/queryContext.mjs.map +0 -1
- package/dist/esm/helpers/queryContext.native.js +0 -15
- package/dist/esm/helpers/queryContext.native.js.map +0 -1
- package/dist/esm/helpers/queryOrMutatorAuthData.js +0 -1
- package/dist/esm/helpers/queryOrMutatorAuthData.js.map +0 -6
- package/dist/esm/helpers/queryOrMutatorAuthData.mjs +0 -2
- package/dist/esm/helpers/queryOrMutatorAuthData.mjs.map +0 -1
- package/dist/esm/helpers/queryOrMutatorAuthData.native.js +0 -2
- package/dist/esm/helpers/queryOrMutatorAuthData.native.js.map +0 -1
- package/dist/esm/helpers/queryOrMutatorContext.js +0 -1
- package/dist/esm/helpers/queryOrMutatorContext.js.map +0 -6
- package/dist/esm/helpers/queryOrMutatorContext.mjs +0 -2
- package/dist/esm/helpers/queryOrMutatorContext.mjs.map +0 -1
- package/dist/esm/helpers/queryOrMutatorContext.native.js +0 -2
- package/dist/esm/helpers/queryOrMutatorContext.native.js.map +0 -1
- package/dist/esm/query.js +0 -13
- package/dist/esm/query.js.map +0 -6
- package/dist/esm/query.mjs +0 -11
- package/dist/esm/query.mjs.map +0 -1
- package/dist/esm/query.native.js +0 -13
- package/dist/esm/query.native.js.map +0 -1
- package/dist/esm/queryBuilder.js +0 -10
- package/dist/esm/queryBuilder.js.map +0 -6
- package/dist/esm/queryBuilder.mjs +0 -8
- package/dist/esm/queryBuilder.mjs.map +0 -1
- package/dist/esm/queryBuilder.native.js +0 -9
- package/dist/esm/queryBuilder.native.js.map +0 -1
package/dist/esm/cli.native.js
CHANGED
|
@@ -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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
77
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
if (
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
|
|
184
|
-
|
|
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
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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
|
|
302
|
-
var
|
|
303
|
-
return
|
|
304
|
-
}),
|
|
305
|
-
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
352
|
-
}` : `(arg) => {
|
|
353
|
-
|
|
354
|
-
}`;
|
|
355
|
-
return `
|
|
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
|
-
|
|
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\` -
|
|
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
|
-
|
|
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\`:
|