on-zero 0.4.3 → 0.4.4
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/dist/cjs/cli.cjs +46 -41
- package/dist/cjs/cli.native.js +48 -43
- package/dist/cjs/cli.native.js.map +1 -1
- package/dist/cjs/constants.cjs +14 -12
- package/dist/cjs/constants.native.js +14 -12
- package/dist/cjs/constants.native.js.map +1 -1
- package/dist/cjs/createPermissions.cjs +66 -34
- package/dist/cjs/createPermissions.native.js +143 -87
- package/dist/cjs/createPermissions.native.js.map +1 -1
- package/dist/cjs/createSchemaFromDrizzle.cjs +15 -13
- package/dist/cjs/createSchemaFromDrizzle.native.js +15 -13
- package/dist/cjs/createSchemaFromDrizzle.native.js.map +1 -1
- package/dist/cjs/createUseQuery.cjs +48 -35
- package/dist/cjs/createUseQuery.native.js +52 -38
- package/dist/cjs/createUseQuery.native.js.map +1 -1
- package/dist/cjs/createZeroClient.cjs +177 -135
- package/dist/cjs/createZeroClient.native.js +246 -195
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroServer.cjs +175 -129
- package/dist/cjs/createZeroServer.native.js +170 -138
- package/dist/cjs/createZeroServer.native.js.map +1 -1
- package/dist/cjs/generate-helpers.cjs +122 -88
- package/dist/cjs/generate-helpers.native.js +209 -174
- package/dist/cjs/generate-helpers.native.js.map +1 -1
- package/dist/cjs/generate-lite.cjs +90 -58
- package/dist/cjs/generate-lite.native.js +200 -140
- package/dist/cjs/generate-lite.native.js.map +1 -1
- package/dist/cjs/generate-lite.test.cjs +229 -192
- package/dist/cjs/generate-lite.test.native.js +229 -194
- package/dist/cjs/generate-lite.test.native.js.map +1 -1
- package/dist/cjs/generate.cjs +455 -291
- package/dist/cjs/generate.native.js +747 -565
- package/dist/cjs/generate.native.js.map +1 -1
- package/dist/cjs/generate.test.cjs +170 -106
- package/dist/cjs/generate.test.native.js +171 -107
- package/dist/cjs/generate.test.native.js.map +1 -1
- package/dist/cjs/helpers/batchQuery.cjs +29 -18
- package/dist/cjs/helpers/batchQuery.native.js +36 -21
- package/dist/cjs/helpers/batchQuery.native.js.map +1 -1
- package/dist/cjs/helpers/clearZeroClientData.cjs +30 -21
- package/dist/cjs/helpers/clearZeroClientData.native.js +42 -33
- package/dist/cjs/helpers/clearZeroClientData.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.cjs +80 -42
- package/dist/cjs/helpers/createMutators.native.js +139 -87
- package/dist/cjs/helpers/createMutators.native.js.map +1 -1
- package/dist/cjs/helpers/didRunPermissionCheck.cjs +19 -13
- package/dist/cjs/helpers/didRunPermissionCheck.native.js +22 -20
- package/dist/cjs/helpers/didRunPermissionCheck.native.js.map +1 -1
- package/dist/cjs/helpers/ensureLoggedIn.cjs +16 -13
- package/dist/cjs/helpers/ensureLoggedIn.native.js +21 -18
- package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
- package/dist/cjs/helpers/getAuth.cjs +25 -15
- package/dist/cjs/helpers/getAuth.native.js +25 -15
- package/dist/cjs/helpers/getAuth.native.js.map +1 -1
- package/dist/cjs/helpers/mutatorContext.cjs +21 -14
- package/dist/cjs/helpers/mutatorContext.native.js +21 -15
- package/dist/cjs/helpers/mutatorContext.native.js.map +1 -1
- package/dist/cjs/helpers/prettyFormatZeroQuery.cjs +126 -81
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js +135 -92
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +1 -1
- package/dist/cjs/helpers/queryContext.cjs +12 -10
- package/dist/cjs/helpers/queryContext.native.js +16 -13
- package/dist/cjs/helpers/queryContext.native.js.map +1 -1
- package/dist/cjs/helpers/showZeroClientError.cjs +24 -19
- package/dist/cjs/helpers/showZeroClientError.native.js +38 -34
- package/dist/cjs/helpers/showZeroClientError.native.js.map +1 -1
- package/dist/cjs/helpers/useZeroDebug.cjs +82 -49
- package/dist/cjs/helpers/useZeroDebug.native.js +83 -55
- package/dist/cjs/helpers/useZeroDebug.native.js.map +1 -1
- package/dist/cjs/index.cjs +17 -15
- package/dist/cjs/index.native.js +17 -15
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/modelRegistry.cjs +12 -10
- package/dist/cjs/modelRegistry.native.js +12 -10
- package/dist/cjs/modelRegistry.native.js.map +1 -1
- package/dist/cjs/mutations.cjs +66 -42
- package/dist/cjs/mutations.native.js +68 -46
- package/dist/cjs/mutations.native.js.map +1 -1
- package/dist/cjs/queryRegistry.cjs +13 -10
- package/dist/cjs/queryRegistry.native.js +14 -11
- package/dist/cjs/queryRegistry.native.js.map +1 -1
- package/dist/cjs/resolveQuery.cjs +22 -18
- package/dist/cjs/resolveQuery.native.js +32 -28
- package/dist/cjs/resolveQuery.native.js.map +1 -1
- package/dist/cjs/run.cjs +35 -28
- package/dist/cjs/run.native.js +35 -29
- package/dist/cjs/run.native.js.map +1 -1
- package/dist/cjs/server.cjs +7 -5
- package/dist/cjs/serverWhere.cjs +13 -11
- package/dist/cjs/serverWhere.native.js +13 -11
- package/dist/cjs/serverWhere.native.js.map +1 -1
- package/dist/cjs/serverWhere.test.cjs +83 -55
- package/dist/cjs/serverWhere.test.native.js +72 -50
- package/dist/cjs/serverWhere.test.native.js.map +1 -1
- package/dist/cjs/state.cjs +49 -44
- package/dist/cjs/state.native.js +56 -53
- package/dist/cjs/state.native.js.map +1 -1
- package/dist/cjs/types.cjs +7 -5
- package/dist/cjs/types.native.js +7 -5
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/cjs/usePermission.test.cjs +58 -45
- package/dist/cjs/usePermission.test.native.js +59 -48
- package/dist/cjs/usePermission.test.native.js.map +1 -1
- package/dist/cjs/vite-plugin.cjs +41 -21
- package/dist/cjs/vite-plugin.native.js +61 -47
- package/dist/cjs/vite-plugin.native.js.map +1 -1
- package/dist/cjs/where.cjs +39 -24
- package/dist/cjs/where.native.js +44 -29
- package/dist/cjs/where.native.js.map +1 -1
- package/dist/cjs/zeroRunner.cjs +18 -12
- package/dist/cjs/zeroRunner.native.js +22 -16
- package/dist/cjs/zeroRunner.native.js.map +1 -1
- package/dist/cjs/zql.cjs +14 -11
- package/dist/cjs/zql.native.js +19 -17
- package/dist/cjs/zql.native.js.map +1 -1
- package/dist/esm/cli.mjs +43 -38
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/cli.native.js +44 -39
- package/dist/esm/cli.native.js.map +1 -1
- package/dist/esm/constants.mjs +2 -2
- package/dist/esm/constants.mjs.map +1 -1
- package/dist/esm/constants.native.js +2 -2
- package/dist/esm/constants.native.js.map +1 -1
- package/dist/esm/createPermissions.mjs +48 -18
- package/dist/esm/createPermissions.mjs.map +1 -1
- package/dist/esm/createPermissions.native.js +125 -71
- package/dist/esm/createPermissions.native.js.map +1 -1
- package/dist/esm/createUseQuery.mjs +32 -21
- package/dist/esm/createUseQuery.mjs.map +1 -1
- package/dist/esm/createUseQuery.native.js +36 -24
- package/dist/esm/createUseQuery.native.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +148 -108
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +217 -168
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroServer.mjs +148 -104
- package/dist/esm/createZeroServer.mjs.map +1 -1
- package/dist/esm/createZeroServer.native.js +143 -113
- package/dist/esm/createZeroServer.native.js.map +1 -1
- package/dist/esm/generate-helpers.mjs +110 -78
- package/dist/esm/generate-helpers.mjs.map +1 -1
- package/dist/esm/generate-helpers.native.js +197 -164
- package/dist/esm/generate-helpers.native.js.map +1 -1
- package/dist/esm/generate-lite.mjs +78 -48
- package/dist/esm/generate-lite.mjs.map +1 -1
- package/dist/esm/generate-lite.native.js +188 -130
- package/dist/esm/generate-lite.native.js.map +1 -1
- package/dist/esm/generate-lite.test.mjs +227 -190
- package/dist/esm/generate-lite.test.mjs.map +1 -1
- package/dist/esm/generate-lite.test.native.js +227 -192
- package/dist/esm/generate-lite.test.native.js.map +1 -1
- package/dist/esm/generate.mjs +427 -265
- package/dist/esm/generate.mjs.map +1 -1
- package/dist/esm/generate.native.js +718 -538
- package/dist/esm/generate.native.js.map +1 -1
- package/dist/esm/generate.test.mjs +165 -101
- package/dist/esm/generate.test.mjs.map +1 -1
- package/dist/esm/generate.test.native.js +165 -101
- package/dist/esm/generate.test.native.js.map +1 -1
- package/dist/esm/helpers/batchQuery.mjs +17 -8
- package/dist/esm/helpers/batchQuery.mjs.map +1 -1
- package/dist/esm/helpers/batchQuery.native.js +24 -11
- package/dist/esm/helpers/batchQuery.native.js.map +1 -1
- package/dist/esm/helpers/clearZeroClientData.mjs +18 -11
- package/dist/esm/helpers/clearZeroClientData.mjs.map +1 -1
- package/dist/esm/helpers/clearZeroClientData.native.js +30 -23
- package/dist/esm/helpers/clearZeroClientData.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.mjs +53 -17
- package/dist/esm/helpers/createMutators.mjs.map +1 -1
- package/dist/esm/helpers/createMutators.native.js +112 -62
- package/dist/esm/helpers/createMutators.native.js.map +1 -1
- package/dist/esm/helpers/didRunPermissionCheck.mjs +7 -3
- package/dist/esm/helpers/didRunPermissionCheck.mjs.map +1 -1
- package/dist/esm/helpers/didRunPermissionCheck.native.js +9 -9
- package/dist/esm/helpers/didRunPermissionCheck.native.js.map +1 -1
- package/dist/esm/helpers/ensureLoggedIn.mjs +2 -1
- package/dist/esm/helpers/ensureLoggedIn.mjs.map +1 -1
- package/dist/esm/helpers/ensureLoggedIn.native.js +2 -1
- package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -1
- package/dist/esm/helpers/getAuth.mjs +10 -2
- package/dist/esm/helpers/getAuth.mjs.map +1 -1
- package/dist/esm/helpers/getAuth.native.js +10 -2
- package/dist/esm/helpers/getAuth.native.js.map +1 -1
- package/dist/esm/helpers/mutatorContext.mjs +9 -4
- package/dist/esm/helpers/mutatorContext.mjs.map +1 -1
- package/dist/esm/helpers/mutatorContext.native.js +8 -4
- package/dist/esm/helpers/mutatorContext.native.js.map +1 -1
- package/dist/esm/helpers/prettyFormatZeroQuery.mjs +114 -71
- package/dist/esm/helpers/prettyFormatZeroQuery.mjs.map +1 -1
- package/dist/esm/helpers/prettyFormatZeroQuery.native.js +121 -80
- package/dist/esm/helpers/prettyFormatZeroQuery.native.js.map +1 -1
- package/dist/esm/helpers/queryContext.native.js +2 -1
- package/dist/esm/helpers/queryContext.native.js.map +1 -1
- package/dist/esm/helpers/showZeroClientError.mjs +12 -9
- package/dist/esm/helpers/showZeroClientError.mjs.map +1 -1
- package/dist/esm/helpers/showZeroClientError.native.js +25 -23
- package/dist/esm/helpers/showZeroClientError.native.js.map +1 -1
- package/dist/esm/helpers/useZeroDebug.mjs +67 -36
- package/dist/esm/helpers/useZeroDebug.mjs.map +1 -1
- package/dist/esm/helpers/useZeroDebug.native.js +68 -42
- package/dist/esm/helpers/useZeroDebug.native.js.map +1 -1
- package/dist/esm/mutations.mjs +51 -29
- package/dist/esm/mutations.mjs.map +1 -1
- package/dist/esm/mutations.native.js +53 -33
- package/dist/esm/mutations.native.js.map +1 -1
- package/dist/esm/queryRegistry.mjs +1 -0
- package/dist/esm/queryRegistry.mjs.map +1 -1
- package/dist/esm/queryRegistry.native.js +2 -1
- package/dist/esm/queryRegistry.native.js.map +1 -1
- package/dist/esm/resolveQuery.mjs +10 -8
- package/dist/esm/resolveQuery.mjs.map +1 -1
- package/dist/esm/resolveQuery.native.js +20 -18
- package/dist/esm/resolveQuery.native.js.map +1 -1
- package/dist/esm/run.mjs +21 -16
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/run.native.js +20 -16
- package/dist/esm/run.native.js.map +1 -1
- package/dist/esm/serverWhere.mjs +1 -1
- package/dist/esm/serverWhere.mjs.map +1 -1
- package/dist/esm/serverWhere.native.js +1 -1
- package/dist/esm/serverWhere.native.js.map +1 -1
- package/dist/esm/serverWhere.test.mjs +79 -51
- package/dist/esm/serverWhere.test.mjs.map +1 -1
- package/dist/esm/serverWhere.test.native.js +68 -46
- package/dist/esm/serverWhere.test.native.js.map +1 -1
- package/dist/esm/state.mjs +35 -32
- package/dist/esm/state.mjs.map +1 -1
- package/dist/esm/state.native.js +41 -40
- package/dist/esm/state.native.js.map +1 -1
- package/dist/esm/usePermission.test.mjs +53 -40
- package/dist/esm/usePermission.test.mjs.map +1 -1
- package/dist/esm/usePermission.test.native.js +54 -43
- package/dist/esm/usePermission.test.native.js.map +1 -1
- package/dist/esm/vite-plugin.mjs +27 -9
- package/dist/esm/vite-plugin.mjs.map +1 -1
- package/dist/esm/vite-plugin.native.js +47 -35
- package/dist/esm/vite-plugin.native.js.map +1 -1
- package/dist/esm/where.mjs +24 -11
- package/dist/esm/where.mjs.map +1 -1
- package/dist/esm/where.native.js +29 -16
- package/dist/esm/where.native.js.map +1 -1
- package/dist/esm/zeroRunner.mjs +6 -2
- package/dist/esm/zeroRunner.mjs.map +1 -1
- package/dist/esm/zeroRunner.native.js +8 -4
- package/dist/esm/zeroRunner.native.js.map +1 -1
- package/dist/esm/zql.mjs +2 -1
- package/dist/esm/zql.mjs.map +1 -1
- package/dist/esm/zql.native.js.map +1 -1
- package/package.json +3 -3
|
@@ -3,20 +3,22 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
5
|
var __export = (target, all) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
13
14
|
get: () => from[key],
|
|
14
15
|
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
16
|
});
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
18
20
|
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
19
|
-
value:
|
|
21
|
+
value: true
|
|
20
22
|
}), mod);
|
|
21
23
|
var generate_helpers_exports = {};
|
|
22
24
|
__export(generate_helpers_exports, {
|
|
@@ -47,7 +49,8 @@ function getModelImportName(name) {
|
|
|
47
49
|
return name === "user" ? "userPublic" : name;
|
|
48
50
|
}
|
|
49
51
|
function parseTypeString(type) {
|
|
50
|
-
|
|
52
|
+
type = type.trim();
|
|
53
|
+
if (type === "string") return "v.string()";
|
|
51
54
|
if (type === "number") return "v.number()";
|
|
52
55
|
if (type === "boolean") return "v.boolean()";
|
|
53
56
|
if (type === "void" || type === "undefined") return "v.void_()";
|
|
@@ -56,22 +59,23 @@ function parseTypeString(type) {
|
|
|
56
59
|
if (type.startsWith("{") && type.endsWith("}")) {
|
|
57
60
|
const inner = type.slice(1, -1).trim();
|
|
58
61
|
if (!inner) return "v.object({})";
|
|
59
|
-
const normalized = inner.replace(/\n/g, "; ").replace(/;\s*;/g, ";")
|
|
60
|
-
|
|
62
|
+
const normalized = inner.replace(/\n/g, "; ").replace(/;\s*;/g, ";");
|
|
63
|
+
const entries = [];
|
|
61
64
|
for (const part of normalized.split(";")) {
|
|
62
65
|
const trimmed = part.trim().replace(/,\s*$/, "");
|
|
63
66
|
if (!trimmed) continue;
|
|
64
67
|
const match = trimmed.match(/^(?:readonly\s+)?(\w+)(\?)?:\s*(.+)$/);
|
|
65
68
|
if (!match) continue;
|
|
66
|
-
const [, name, opt, typeStr] = match
|
|
67
|
-
|
|
69
|
+
const [, name, opt, typeStr] = match;
|
|
70
|
+
const parsed = parseTypeString(typeStr.trim());
|
|
68
71
|
if (!parsed) return null;
|
|
69
72
|
let val = parsed;
|
|
70
|
-
opt
|
|
73
|
+
if (opt) val = `v.optional(${val})`;
|
|
74
|
+
entries.push(`${formatObjectKey(name)}: ${val}`);
|
|
71
75
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
if (entries.length === 0) return "v.object({})";
|
|
77
|
+
return `v.object({
|
|
78
|
+
${entries.join(",\n ")},
|
|
75
79
|
})`;
|
|
76
80
|
}
|
|
77
81
|
if (type.endsWith("[]")) {
|
|
@@ -81,12 +85,11 @@ function parseTypeString(type) {
|
|
|
81
85
|
return null;
|
|
82
86
|
}
|
|
83
87
|
function generateModelsFile(modelNames, modelsDirName) {
|
|
84
|
-
const sorted = [...modelNames].sort()
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
${
|
|
89
|
-
`)}
|
|
88
|
+
const sorted = [...modelNames].sort();
|
|
89
|
+
const imports = sorted.map(name => `import * as ${getModelImportName(name)} from '../${modelsDirName}/${name}'`).join("\n");
|
|
90
|
+
const sortedByImportName = [...sorted].sort((a, b) => getModelImportName(a).localeCompare(getModelImportName(b)));
|
|
91
|
+
const modelsObj = `export const models = {
|
|
92
|
+
${sortedByImportName.map(name => ` ${getModelImportName(name)},`).join("\n")}
|
|
90
93
|
}`;
|
|
91
94
|
return `// auto-generated by: on-zero generate
|
|
92
95
|
${imports}
|
|
@@ -95,24 +98,25 @@ ${modelsObj}
|
|
|
95
98
|
`;
|
|
96
99
|
}
|
|
97
100
|
function generateTypesFile(modelNames) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
const pascalName = name.charAt(0).toUpperCase() + name.slice(1),
|
|
103
|
-
schemaName = getModelImportName(name);
|
|
101
|
+
const sorted = [...modelNames].sort();
|
|
102
|
+
const typeExports = sorted.map(name => {
|
|
103
|
+
const pascalName = name.charAt(0).toUpperCase() + name.slice(1);
|
|
104
|
+
const schemaName = getModelImportName(name);
|
|
104
105
|
return `export type ${pascalName} = TableInsertRow<typeof schema.${schemaName}>
|
|
105
106
|
export type ${pascalName}Update = TableUpdateRow<typeof schema.${schemaName}>`;
|
|
106
|
-
}).join(
|
|
107
|
+
}).join("\n\n");
|
|
108
|
+
return `import type { TableInsertRow, TableUpdateRow } from 'on-zero'
|
|
109
|
+
import type * as schema from './tables'
|
|
107
110
|
|
|
108
|
-
|
|
111
|
+
${typeExports}
|
|
109
112
|
`;
|
|
110
113
|
}
|
|
111
114
|
function generateTablesFile(modelNames, modelsDirName) {
|
|
115
|
+
const sorted = [...modelNames].sort();
|
|
116
|
+
const exports = sorted.map(name => `export { schema as ${getModelImportName(name)} } from '../${modelsDirName}/${name}'`).join("\n");
|
|
112
117
|
return `// auto-generated by: on-zero generate
|
|
113
118
|
|
|
114
|
-
${
|
|
115
|
-
`)}
|
|
119
|
+
${exports}
|
|
116
120
|
`;
|
|
117
121
|
}
|
|
118
122
|
function generateReadmeFile() {
|
|
@@ -176,6 +180,8 @@ see the [on-zero readme](./node_modules/on-zero/README.md) for full documentatio
|
|
|
176
180
|
`;
|
|
177
181
|
}
|
|
178
182
|
function generateGroupedQueriesFile(queries) {
|
|
183
|
+
const sortedFiles = [...new Set(queries.map(q => q.sourceFile))].sort();
|
|
184
|
+
const exports = sortedFiles.map(file => `export * as ${file} from '../queries/${file}'`).join("\n");
|
|
179
185
|
return `/**
|
|
180
186
|
* auto-generated by: on-zero generate
|
|
181
187
|
*
|
|
@@ -183,41 +189,42 @@ function generateGroupedQueriesFile(queries) {
|
|
|
183
189
|
* this file re-exports all query modules - while this breaks tree-shaking,
|
|
184
190
|
* queries are typically small and few in number even in larger apps.
|
|
185
191
|
*/
|
|
186
|
-
${
|
|
187
|
-
`)}
|
|
192
|
+
${exports}
|
|
188
193
|
`;
|
|
189
194
|
}
|
|
190
195
|
function generateSyncedQueriesFile(queries) {
|
|
191
196
|
const queryByFile = /* @__PURE__ */new Map();
|
|
192
|
-
for (const q of queries)
|
|
193
|
-
|
|
194
|
-
|
|
197
|
+
for (const q of queries) {
|
|
198
|
+
if (!queryByFile.has(q.sourceFile)) {
|
|
199
|
+
queryByFile.set(q.sourceFile, []);
|
|
200
|
+
}
|
|
201
|
+
queryByFile.get(q.sourceFile).push(q);
|
|
202
|
+
}
|
|
203
|
+
const sortedFiles = Array.from(queryByFile.keys()).sort();
|
|
204
|
+
const imports = `// auto-generated by: on-zero generate
|
|
195
205
|
// server-side query definitions with validators
|
|
196
206
|
import { defineQuery, defineQueries } from '@rocicorp/zero'
|
|
197
207
|
import * as v from 'valibot'
|
|
198
208
|
import * as Queries from './groupedQueries'
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
`
|
|
206
|
-
|
|
207
|
-
|
|
209
|
+
`;
|
|
210
|
+
const namespaceDefs = sortedFiles.map(file => {
|
|
211
|
+
const fileQueries = queryByFile.get(file).sort((a, b) => a.name.localeCompare(b.name));
|
|
212
|
+
const queryDefs = fileQueries.map(q => {
|
|
213
|
+
const validatorDef = q.valibotCode.trim();
|
|
214
|
+
if (q.params === "void" || !validatorDef) {
|
|
215
|
+
return ` ${q.name}: defineQuery(() => Queries.${file}.${q.name}()),`;
|
|
216
|
+
}
|
|
217
|
+
const indentedValidator = validatorDef.split("\n").map((line, i) => i === 0 ? line : ` ${line}`).join("\n");
|
|
218
|
+
return ` ${q.name}: defineQuery(
|
|
208
219
|
${indentedValidator},
|
|
209
220
|
({ args }) => Queries.${file}.${q.name}(args)
|
|
210
221
|
),`;
|
|
211
|
-
|
|
212
|
-
`
|
|
213
|
-
return `const ${file} = {
|
|
222
|
+
}).join("\n");
|
|
223
|
+
return `const ${file} = {
|
|
214
224
|
${queryDefs}
|
|
215
225
|
}`;
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
`),
|
|
219
|
-
queriesObject = sortedFiles.map(file => ` ${file},`).join(`
|
|
220
|
-
`);
|
|
226
|
+
}).join("\n\n");
|
|
227
|
+
const queriesObject = sortedFiles.map(file => ` ${file},`).join("\n");
|
|
221
228
|
return `${imports}
|
|
222
229
|
${namespaceDefs}
|
|
223
230
|
|
|
@@ -249,22 +256,36 @@ function columnTypeToValibot(col) {
|
|
|
249
256
|
}
|
|
250
257
|
function schemaColumnsToValibot(columns, primaryKeys, mode) {
|
|
251
258
|
const entries = [];
|
|
252
|
-
if (mode === "delete")
|
|
253
|
-
const
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
259
|
+
if (mode === "delete") {
|
|
260
|
+
for (const pk of primaryKeys) {
|
|
261
|
+
const col = columns[pk];
|
|
262
|
+
if (col) entries.push(`${formatObjectKey(pk)}: ${columnTypeToValibot({
|
|
263
|
+
...col,
|
|
264
|
+
optional: false
|
|
265
|
+
})}`);
|
|
266
|
+
}
|
|
267
|
+
} else if (mode === "update") {
|
|
268
|
+
for (const [name, col] of Object.entries(columns)) {
|
|
269
|
+
const isPK = primaryKeys.includes(name);
|
|
270
|
+
if (isPK) {
|
|
271
|
+
entries.push(`${formatObjectKey(name)}: ${columnTypeToValibot({
|
|
272
|
+
...col,
|
|
273
|
+
optional: false
|
|
274
|
+
})}`);
|
|
275
|
+
} else {
|
|
276
|
+
entries.push(`${formatObjectKey(name)}: ${columnTypeToValibot({
|
|
277
|
+
...col,
|
|
278
|
+
optional: true
|
|
279
|
+
})}`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
} else {
|
|
283
|
+
for (const [name, col] of Object.entries(columns)) {
|
|
284
|
+
entries.push(`${formatObjectKey(name)}: ${columnTypeToValibot(col)}`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
265
287
|
return `v.object({
|
|
266
|
-
${entries.join(
|
|
267
|
-
`)},
|
|
288
|
+
${entries.join(",\n ")},
|
|
268
289
|
})`;
|
|
269
290
|
}
|
|
270
291
|
function extractValibotExpression(valibotCode) {
|
|
@@ -273,25 +294,34 @@ function extractValibotExpression(valibotCode) {
|
|
|
273
294
|
function parseColumnType(initText) {
|
|
274
295
|
const optional = initText.includes(".optional()");
|
|
275
296
|
let type = "string";
|
|
276
|
-
|
|
297
|
+
if (initText.startsWith("number(")) type = "number";else if (initText.startsWith("boolean(")) type = "boolean";else if (initText.startsWith("json(") || initText.startsWith("json<")) type = "json";else if (initText.startsWith("enumeration(")) type = "enum";
|
|
298
|
+
return {
|
|
277
299
|
type,
|
|
278
300
|
optional,
|
|
279
301
|
customType: void 0
|
|
280
302
|
};
|
|
281
303
|
}
|
|
282
304
|
function generateSyncedMutationsFile(modelMutations) {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
import * as v from 'valibot'
|
|
286
|
-
|
|
287
|
-
export const mutationValidators = {
|
|
288
|
-
${[...modelMutations].sort((a, b) => a.modelName.localeCompare(b.modelName)).map(model => {
|
|
305
|
+
const sorted = [...modelMutations].sort((a, b) => a.modelName.localeCompare(b.modelName));
|
|
306
|
+
const modelDefs = sorted.map(model => {
|
|
289
307
|
const entries = [];
|
|
290
|
-
if (model.hasCRUD && Object.keys(model.columns).length > 0)
|
|
291
|
-
const
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
308
|
+
if (model.hasCRUD && Object.keys(model.columns).length > 0) {
|
|
309
|
+
for (const mode of ["insert", "update", "delete"]) {
|
|
310
|
+
const hasCustomOverride = model.custom.some(m => m.name === mode);
|
|
311
|
+
if (hasCustomOverride) {
|
|
312
|
+
const customMut = model.custom.find(m => m.name === mode);
|
|
313
|
+
if (customMut.valibotCode) {
|
|
314
|
+
entries.push(` ${mode}: ${extractValibotExpression(customMut.valibotCode)},`);
|
|
315
|
+
} else {
|
|
316
|
+
entries.push(` ${mode}: ${schemaColumnsToValibot(model.columns, model.primaryKeys, mode)},`);
|
|
317
|
+
}
|
|
318
|
+
} else {
|
|
319
|
+
entries.push(` ${mode}: ${schemaColumnsToValibot(model.columns, model.primaryKeys, mode)},`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
for (const mut of model.custom) {
|
|
324
|
+
if (model.hasCRUD && ["insert", "update", "delete", "upsert"].includes(mut.name)) continue;
|
|
295
325
|
if (mut.paramType === "void" || !mut.valibotCode) {
|
|
296
326
|
entries.push(` ${mut.name}: v.void_(),`);
|
|
297
327
|
continue;
|
|
@@ -299,11 +329,15 @@ ${[...modelMutations].sort((a, b) => a.modelName.localeCompare(b.modelName)).map
|
|
|
299
329
|
entries.push(` ${mut.name}: ${extractValibotExpression(mut.valibotCode)},`);
|
|
300
330
|
}
|
|
301
331
|
return ` ${model.modelName}: {
|
|
302
|
-
${entries.join(
|
|
303
|
-
`)}
|
|
332
|
+
${entries.join("\n")}
|
|
304
333
|
},`;
|
|
305
|
-
}).join(
|
|
306
|
-
|
|
334
|
+
}).join("\n");
|
|
335
|
+
return `// auto-generated by: on-zero generate
|
|
336
|
+
// mutation validators derived from model schemas and handler types
|
|
337
|
+
import * as v from 'valibot'
|
|
338
|
+
|
|
339
|
+
export const mutationValidators = {
|
|
340
|
+
${modelDefs}
|
|
307
341
|
}
|
|
308
342
|
`;
|
|
309
343
|
}
|