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.
- package/cli.cjs +3 -0
- package/dist/cjs/cli.cjs +224 -205
- package/dist/cjs/cli.js +57 -40
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/cli.native.js +270 -248
- 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 +6 -3
- package/dist/cjs/createZeroClient.js +11 -4
- package/dist/cjs/createZeroClient.js.map +1 -1
- package/dist/cjs/createZeroClient.native.js +40 -5
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroServer.cjs +5 -3
- package/dist/cjs/createZeroServer.js +8 -3
- package/dist/cjs/createZeroServer.js.map +1 -1
- package/dist/cjs/createZeroServer.native.js +39 -3
- 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 +58 -41
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/cli.mjs +223 -204
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/cli.native.js +269 -247
- 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 +11 -3
- package/dist/esm/createZeroClient.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +6 -3
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +40 -5
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroServer.js +8 -3
- package/dist/esm/createZeroServer.js.map +1 -1
- package/dist/esm/createZeroServer.mjs +5 -3
- package/dist/esm/createZeroServer.mjs.map +1 -1
- package/dist/esm/createZeroServer.native.js +39 -3
- 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 +119 -122
- package/src/createPermissions.ts +8 -6
- package/src/createZeroClient.tsx +37 -15
- package/src/createZeroServer.ts +30 -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 +5 -3
- 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
|
+
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
|
-
|
|
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,31 @@ function generateTablesFile(modelFiles) {
|
|
|
298
300
|
${exports}
|
|
299
301
|
`;
|
|
300
302
|
}
|
|
301
|
-
function
|
|
302
|
-
var
|
|
303
|
-
return
|
|
304
|
-
}),
|
|
305
|
-
|
|
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 =
|
|
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
|
|
324
|
-
|
|
325
|
-
|
|
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
|
-
|
|
344
|
+
import * as v from 'valibot'
|
|
345
|
+
import * as Queries from './groupedQueries'
|
|
330
346
|
`,
|
|
331
|
-
|
|
332
|
-
var
|
|
333
|
-
|
|
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
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
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
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
}
|
|
353
|
-
|
|
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
|
-
|
|
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
|
-
- \`
|
|
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
|
-
|
|
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\`:
|