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