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,18 +3,22 @@ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from
|
|
|
3
3
|
import { basename, dirname, resolve } from "path";
|
|
4
4
|
import { formatObjectKey, generateGroupedQueriesFile, generateModelsFile, generateReadmeFile, generateSyncedMutationsFile, generateSyncedQueriesFile, generateTablesFile, generateTypesFile, parseColumnType, parseTypeString, shouldSkipObjectKey } from "./generate-helpers.native.js";
|
|
5
5
|
var hash = function (s) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
return createHash("sha256").update(s).digest("hex");
|
|
7
|
+
};
|
|
8
|
+
var generateCache = {};
|
|
9
|
+
var generateCachePath = "";
|
|
10
10
|
function getCacheDir() {
|
|
11
|
-
|
|
11
|
+
var dir = process.cwd();
|
|
12
|
+
while (dir !== "/") {
|
|
12
13
|
var nm = resolve(dir, "node_modules");
|
|
13
14
|
if (existsSync(nm)) {
|
|
14
15
|
var cacheDir = resolve(nm, ".on-zero");
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
if (!existsSync(cacheDir)) {
|
|
17
|
+
mkdirSync(cacheDir, {
|
|
18
|
+
recursive: true
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return cacheDir;
|
|
18
22
|
}
|
|
19
23
|
dir = resolve(dir, "..");
|
|
20
24
|
}
|
|
@@ -22,34 +26,39 @@ function getCacheDir() {
|
|
|
22
26
|
}
|
|
23
27
|
function loadCache() {
|
|
24
28
|
var cacheDir = getCacheDir();
|
|
25
|
-
if (cacheDir)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
29
|
+
if (!cacheDir) return;
|
|
30
|
+
generateCachePath = resolve(cacheDir, "generate-cache.json");
|
|
31
|
+
try {
|
|
32
|
+
generateCache = JSON.parse(readFileSync(generateCachePath, "utf-8"));
|
|
33
|
+
} catch (e) {
|
|
34
|
+
generateCache = {};
|
|
32
35
|
}
|
|
33
36
|
}
|
|
34
37
|
function saveCache() {
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
if (generateCachePath) {
|
|
39
|
+
writeFileSync(generateCachePath, JSON.stringify(generateCache) + "\n", "utf-8");
|
|
40
|
+
}
|
|
37
41
|
}
|
|
38
42
|
function writeFileIfChanged(filePath, content) {
|
|
39
|
-
var contentHash = hash(content)
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
var contentHash = hash(content);
|
|
44
|
+
var cachedHash = generateCache[filePath];
|
|
45
|
+
if (cachedHash === contentHash && existsSync(filePath)) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
writeFileSync(filePath, content, "utf-8");
|
|
49
|
+
generateCache[filePath] = contentHash;
|
|
50
|
+
return true;
|
|
42
51
|
}
|
|
43
52
|
function createTypeResolver(ts, files, dir) {
|
|
44
|
-
var configPath = ts.findConfigFile(dir, ts.sys.fileExists, "tsconfig.json")
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
var configPath = ts.findConfigFile(dir, ts.sys.fileExists, "tsconfig.json");
|
|
54
|
+
var compilerOptions = {
|
|
55
|
+
target: ts.ScriptTarget.Latest,
|
|
56
|
+
module: ts.ModuleKind.ESNext,
|
|
57
|
+
moduleResolution: ts.ModuleResolutionKind.Bundler,
|
|
58
|
+
strict: false,
|
|
59
|
+
skipLibCheck: true,
|
|
60
|
+
noEmit: true
|
|
61
|
+
};
|
|
53
62
|
if (configPath) {
|
|
54
63
|
var configFile = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
55
64
|
if (configFile.config) {
|
|
@@ -60,39 +69,49 @@ function createTypeResolver(ts, files, dir) {
|
|
|
60
69
|
};
|
|
61
70
|
}
|
|
62
71
|
}
|
|
63
|
-
var fileMap = /* @__PURE__ */new Map()
|
|
64
|
-
|
|
65
|
-
_didIteratorError =
|
|
72
|
+
var fileMap = /* @__PURE__ */new Map();
|
|
73
|
+
var _iteratorNormalCompletion = true,
|
|
74
|
+
_didIteratorError = false,
|
|
66
75
|
_iteratorError = void 0;
|
|
67
76
|
try {
|
|
68
|
-
for (var _iterator = files[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion =
|
|
77
|
+
for (var _iterator = files[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
69
78
|
var f = _step.value;
|
|
70
79
|
fileMap.set(f.path, f.content);
|
|
71
80
|
}
|
|
72
81
|
} catch (err) {
|
|
73
|
-
_didIteratorError =
|
|
82
|
+
_didIteratorError = true;
|
|
83
|
+
_iteratorError = err;
|
|
74
84
|
} finally {
|
|
75
85
|
try {
|
|
76
|
-
!_iteratorNormalCompletion && _iterator.return != null
|
|
86
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
87
|
+
_iterator.return();
|
|
88
|
+
}
|
|
77
89
|
} finally {
|
|
78
|
-
if (_didIteratorError)
|
|
90
|
+
if (_didIteratorError) {
|
|
91
|
+
throw _iteratorError;
|
|
92
|
+
}
|
|
79
93
|
}
|
|
80
94
|
}
|
|
81
|
-
var host = ts.createCompilerHost(compilerOptions)
|
|
82
|
-
|
|
95
|
+
var host = ts.createCompilerHost(compilerOptions);
|
|
96
|
+
var originalGetSourceFile = host.getSourceFile.bind(host);
|
|
83
97
|
host.getSourceFile = function (fileName, languageVersion, onError) {
|
|
84
98
|
var content = fileMap.get(fileName);
|
|
85
|
-
|
|
86
|
-
|
|
99
|
+
if (content !== void 0) {
|
|
100
|
+
return ts.createSourceFile(fileName, content, languageVersion, true);
|
|
101
|
+
}
|
|
102
|
+
return originalGetSourceFile(fileName, languageVersion, onError);
|
|
103
|
+
};
|
|
104
|
+
host.fileExists = function (fileName) {
|
|
87
105
|
return fileMap.has(fileName) || ts.sys.fileExists(fileName);
|
|
88
|
-
}
|
|
106
|
+
};
|
|
107
|
+
host.readFile = function (fileName) {
|
|
89
108
|
var _fileMap_get;
|
|
90
109
|
return (_fileMap_get = fileMap.get(fileName)) !== null && _fileMap_get !== void 0 ? _fileMap_get : ts.sys.readFile(fileName);
|
|
91
110
|
};
|
|
92
111
|
var program = ts.createProgram(files.map(function (f2) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
112
|
+
return f2.path;
|
|
113
|
+
}), compilerOptions, host);
|
|
114
|
+
var checker = program.getTypeChecker();
|
|
96
115
|
return {
|
|
97
116
|
program,
|
|
98
117
|
checker,
|
|
@@ -100,7 +119,7 @@ function createTypeResolver(ts, files, dir) {
|
|
|
100
119
|
resolveType(node) {
|
|
101
120
|
try {
|
|
102
121
|
return checker.getTypeFromTypeNode(node);
|
|
103
|
-
} catch {
|
|
122
|
+
} catch (e) {
|
|
104
123
|
return null;
|
|
105
124
|
}
|
|
106
125
|
},
|
|
@@ -112,155 +131,193 @@ function createTypeResolver(ts, files, dir) {
|
|
|
112
131
|
}
|
|
113
132
|
function resolveParamType(ts, resolver, sourceFile, exportName, paramIndex) {
|
|
114
133
|
var result = null;
|
|
115
|
-
|
|
134
|
+
ts.forEachChild(sourceFile, function (node) {
|
|
116
135
|
var _node_modifiers;
|
|
117
|
-
if (
|
|
136
|
+
if (result) return;
|
|
137
|
+
if (!ts.isVariableStatement(node)) return;
|
|
138
|
+
if (!((_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.some(function (m) {
|
|
118
139
|
return m.kind === ts.SyntaxKind.ExportKeyword;
|
|
119
|
-
}))
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
140
|
+
}))) return;
|
|
141
|
+
var decl = node.declarationList.declarations[0];
|
|
142
|
+
if (!decl || !ts.isVariableDeclaration(decl)) return;
|
|
143
|
+
if (decl.name.getText(sourceFile) !== exportName) return;
|
|
144
|
+
if (decl.initializer && ts.isArrowFunction(decl.initializer)) {
|
|
145
|
+
var param = decl.initializer.parameters[paramIndex];
|
|
146
|
+
if (param === null || param === void 0 ? void 0 : param.type) {
|
|
147
|
+
result = resolver.resolveType(param.type);
|
|
124
148
|
}
|
|
125
149
|
}
|
|
126
|
-
})
|
|
150
|
+
});
|
|
151
|
+
return result;
|
|
127
152
|
}
|
|
128
153
|
function resolveMutationParamTypes(ts, resolver, sourceFile) {
|
|
129
154
|
var resolved = /* @__PURE__ */new Map();
|
|
130
|
-
|
|
155
|
+
ts.forEachChild(sourceFile, function (node) {
|
|
131
156
|
var _node_modifiers;
|
|
132
|
-
if (ts.isVariableStatement(node)
|
|
157
|
+
if (!ts.isVariableStatement(node)) return;
|
|
158
|
+
if (!((_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.some(function (m) {
|
|
133
159
|
return m.kind === ts.SyntaxKind.ExportKeyword;
|
|
134
|
-
}))
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
} catch (err) {
|
|
168
|
-
_didIteratorError = !0, _iteratorError = err;
|
|
169
|
-
} finally {
|
|
170
|
-
try {
|
|
171
|
-
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
|
|
172
|
-
} finally {
|
|
173
|
-
if (_didIteratorError) throw _iteratorError;
|
|
174
|
-
}
|
|
160
|
+
}))) return;
|
|
161
|
+
var decl = node.declarationList.declarations[0];
|
|
162
|
+
if (!decl || !ts.isVariableDeclaration(decl)) return;
|
|
163
|
+
if (decl.name.getText(sourceFile) !== "mutate") return;
|
|
164
|
+
if (!decl.initializer || !ts.isCallExpression(decl.initializer)) return;
|
|
165
|
+
var args = decl.initializer.arguments;
|
|
166
|
+
var handlersArg = null;
|
|
167
|
+
for (var i = args.length - 1; i >= 0; i--) {
|
|
168
|
+
if (ts.isObjectLiteralExpression(args[i])) {
|
|
169
|
+
handlersArg = args[i];
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (!handlersArg) return;
|
|
174
|
+
var _iteratorNormalCompletion = true,
|
|
175
|
+
_didIteratorError = false,
|
|
176
|
+
_iteratorError = void 0;
|
|
177
|
+
try {
|
|
178
|
+
for (var _iterator = handlersArg.properties[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
179
|
+
var prop = _step.value;
|
|
180
|
+
var _prop_name;
|
|
181
|
+
if (!ts.isPropertyAssignment(prop) && !ts.isMethodDeclaration(prop)) continue;
|
|
182
|
+
var name = (_prop_name = prop.name) === null || _prop_name === void 0 ? void 0 : _prop_name.getText(sourceFile);
|
|
183
|
+
if (!name) continue;
|
|
184
|
+
var params = null;
|
|
185
|
+
if (ts.isPropertyAssignment(prop)) {
|
|
186
|
+
var init = prop.initializer;
|
|
187
|
+
if (ts.isArrowFunction(init) || ts.isFunctionExpression(init)) {
|
|
188
|
+
params = init.parameters;
|
|
175
189
|
}
|
|
190
|
+
} else if (ts.isMethodDeclaration(prop)) {
|
|
191
|
+
params = prop.parameters;
|
|
192
|
+
}
|
|
193
|
+
if (!params || params.length < 2) continue;
|
|
194
|
+
var typeNode = params[1].type;
|
|
195
|
+
if (!typeNode) continue;
|
|
196
|
+
var expanded = resolver.resolveType(typeNode);
|
|
197
|
+
if (expanded) {
|
|
198
|
+
resolved.set(name, expanded);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
} catch (err) {
|
|
202
|
+
_didIteratorError = true;
|
|
203
|
+
_iteratorError = err;
|
|
204
|
+
} finally {
|
|
205
|
+
try {
|
|
206
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
207
|
+
_iterator.return();
|
|
208
|
+
}
|
|
209
|
+
} finally {
|
|
210
|
+
if (_didIteratorError) {
|
|
211
|
+
throw _iteratorError;
|
|
176
212
|
}
|
|
177
213
|
}
|
|
178
214
|
}
|
|
179
|
-
})
|
|
215
|
+
});
|
|
216
|
+
return resolved;
|
|
180
217
|
}
|
|
181
218
|
function extractMutationsFromModel(ts, sourceFile, content, fileName, silent, typeToValibot, resolvedTypes, resolvedTypeToValibot) {
|
|
182
219
|
var mutateNode = null;
|
|
183
|
-
|
|
220
|
+
ts.forEachChild(sourceFile, function (node) {
|
|
184
221
|
var _node_modifiers;
|
|
185
|
-
if (ts.isVariableStatement(node)
|
|
222
|
+
if (!ts.isVariableStatement(node)) return;
|
|
223
|
+
if (!((_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.some(function (m) {
|
|
186
224
|
return m.kind === ts.SyntaxKind.ExportKeyword;
|
|
187
|
-
}))
|
|
188
|
-
|
|
189
|
-
|
|
225
|
+
}))) return;
|
|
226
|
+
var decl = node.declarationList.declarations[0];
|
|
227
|
+
if (!decl || !ts.isVariableDeclaration(decl)) return;
|
|
228
|
+
if (decl.name.getText(sourceFile) !== "mutate") return;
|
|
229
|
+
if (decl.initializer && ts.isCallExpression(decl.initializer)) {
|
|
230
|
+
mutateNode = decl.initializer;
|
|
190
231
|
}
|
|
191
|
-
})
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
var
|
|
204
|
-
|
|
205
|
-
|
|
232
|
+
});
|
|
233
|
+
if (!mutateNode) {
|
|
234
|
+
return {
|
|
235
|
+
modelName: basename(fileName, ".ts"),
|
|
236
|
+
hasCRUD: false,
|
|
237
|
+
columns: {},
|
|
238
|
+
primaryKeys: [],
|
|
239
|
+
custom: []
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
var call = mutateNode;
|
|
243
|
+
var args = call.arguments;
|
|
244
|
+
var hasCRUD = args.length >= 2;
|
|
245
|
+
var handlersArg = null;
|
|
246
|
+
if (args.length === 1 && ts.isObjectLiteralExpression(args[0])) {
|
|
247
|
+
handlersArg = args[0];
|
|
248
|
+
} else if (args.length === 3 && ts.isObjectLiteralExpression(args[2])) {
|
|
249
|
+
handlersArg = args[2];
|
|
250
|
+
}
|
|
251
|
+
var columns = {};
|
|
252
|
+
var primaryKeys = [];
|
|
253
|
+
if (hasCRUD) {
|
|
254
|
+
extractSchemaColumns(ts, sourceFile, columns, primaryKeys);
|
|
255
|
+
}
|
|
206
256
|
var custom = [];
|
|
207
257
|
if (handlersArg) {
|
|
208
|
-
var _iteratorNormalCompletion =
|
|
209
|
-
_didIteratorError =
|
|
258
|
+
var _iteratorNormalCompletion = true,
|
|
259
|
+
_didIteratorError = false,
|
|
210
260
|
_iteratorError = void 0;
|
|
211
261
|
try {
|
|
212
|
-
for (var _iterator = handlersArg.properties[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion =
|
|
213
|
-
var prop = _step.value
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
} else ts.isMethodDeclaration(prop) && (params = prop.parameters);
|
|
224
|
-
if (params) {
|
|
225
|
-
if (params.length < 2) {
|
|
226
|
-
custom.push({
|
|
227
|
-
name,
|
|
228
|
-
paramType: "void",
|
|
229
|
-
valibotCode: ""
|
|
230
|
-
});
|
|
231
|
-
continue;
|
|
232
|
-
}
|
|
233
|
-
var secondParam = params[1],
|
|
234
|
-
paramType = ((_secondParam_type = secondParam.type) === null || _secondParam_type === void 0 ? void 0 : _secondParam_type.getText(sourceFile)) || "unknown";
|
|
235
|
-
if (paramType === "unknown") {
|
|
236
|
-
custom.push({
|
|
237
|
-
name,
|
|
238
|
-
paramType: "unknown",
|
|
239
|
-
valibotCode: ""
|
|
240
|
-
});
|
|
241
|
-
continue;
|
|
242
|
-
}
|
|
243
|
-
var valibotCode = typeToValibot(paramType);
|
|
244
|
-
if (!valibotCode && resolvedTypes && resolvedTypeToValibot) {
|
|
245
|
-
var resolvedType = resolvedTypes.get(name);
|
|
246
|
-
resolvedType && (valibotCode = resolvedTypeToValibot(resolvedType));
|
|
247
|
-
}
|
|
248
|
-
custom.push({
|
|
249
|
-
name,
|
|
250
|
-
paramType,
|
|
251
|
-
valibotCode: valibotCode || ""
|
|
252
|
-
});
|
|
253
|
-
}
|
|
262
|
+
for (var _iterator = handlersArg.properties[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
263
|
+
var prop = _step.value;
|
|
264
|
+
var _prop_name, _secondParam_type;
|
|
265
|
+
if (!ts.isPropertyAssignment(prop) && !ts.isMethodDeclaration(prop)) continue;
|
|
266
|
+
var name = (_prop_name = prop.name) === null || _prop_name === void 0 ? void 0 : _prop_name.getText(sourceFile);
|
|
267
|
+
if (!name) continue;
|
|
268
|
+
var params = null;
|
|
269
|
+
if (ts.isPropertyAssignment(prop)) {
|
|
270
|
+
var init = prop.initializer;
|
|
271
|
+
if (ts.isArrowFunction(init) || ts.isFunctionExpression(init)) {
|
|
272
|
+
params = init.parameters;
|
|
254
273
|
}
|
|
274
|
+
} else if (ts.isMethodDeclaration(prop)) {
|
|
275
|
+
params = prop.parameters;
|
|
255
276
|
}
|
|
277
|
+
if (!params) continue;
|
|
278
|
+
if (params.length < 2) {
|
|
279
|
+
custom.push({
|
|
280
|
+
name,
|
|
281
|
+
paramType: "void",
|
|
282
|
+
valibotCode: ""
|
|
283
|
+
});
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
var secondParam = params[1];
|
|
287
|
+
var paramType = ((_secondParam_type = secondParam.type) === null || _secondParam_type === void 0 ? void 0 : _secondParam_type.getText(sourceFile)) || "unknown";
|
|
288
|
+
if (paramType === "unknown") {
|
|
289
|
+
custom.push({
|
|
290
|
+
name,
|
|
291
|
+
paramType: "unknown",
|
|
292
|
+
valibotCode: ""
|
|
293
|
+
});
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
var valibotCode = typeToValibot(paramType);
|
|
297
|
+
if (!valibotCode && resolvedTypes && resolvedTypeToValibot) {
|
|
298
|
+
var resolvedType = resolvedTypes.get(name);
|
|
299
|
+
if (resolvedType) {
|
|
300
|
+
valibotCode = resolvedTypeToValibot(resolvedType);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
custom.push({
|
|
304
|
+
name,
|
|
305
|
+
paramType,
|
|
306
|
+
valibotCode: valibotCode || ""
|
|
307
|
+
});
|
|
256
308
|
}
|
|
257
309
|
} catch (err) {
|
|
258
|
-
_didIteratorError =
|
|
310
|
+
_didIteratorError = true;
|
|
311
|
+
_iteratorError = err;
|
|
259
312
|
} finally {
|
|
260
313
|
try {
|
|
261
|
-
!_iteratorNormalCompletion && _iterator.return != null
|
|
314
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
315
|
+
_iterator.return();
|
|
316
|
+
}
|
|
262
317
|
} finally {
|
|
263
|
-
if (_didIteratorError)
|
|
318
|
+
if (_didIteratorError) {
|
|
319
|
+
throw _iteratorError;
|
|
320
|
+
}
|
|
264
321
|
}
|
|
265
322
|
}
|
|
266
323
|
}
|
|
@@ -277,50 +334,60 @@ function extractSchemaColumns(ts, sourceFile, columns, primaryKeys) {
|
|
|
277
334
|
if (ts.isCallExpression(node)) {
|
|
278
335
|
var text = node.expression.getText(sourceFile);
|
|
279
336
|
if (text.endsWith(".primaryKey")) {
|
|
280
|
-
var _iteratorNormalCompletion =
|
|
281
|
-
_didIteratorError =
|
|
337
|
+
var _iteratorNormalCompletion = true,
|
|
338
|
+
_didIteratorError = false,
|
|
282
339
|
_iteratorError = void 0;
|
|
283
340
|
try {
|
|
284
|
-
for (var _iterator = node.arguments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion =
|
|
341
|
+
for (var _iterator = node.arguments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
285
342
|
var arg = _step.value;
|
|
286
|
-
ts.isStringLiteral(arg)
|
|
343
|
+
if (ts.isStringLiteral(arg)) {
|
|
344
|
+
primaryKeys.push(arg.text);
|
|
345
|
+
}
|
|
287
346
|
}
|
|
288
347
|
} catch (err) {
|
|
289
|
-
_didIteratorError =
|
|
348
|
+
_didIteratorError = true;
|
|
349
|
+
_iteratorError = err;
|
|
290
350
|
} finally {
|
|
291
351
|
try {
|
|
292
|
-
!_iteratorNormalCompletion && _iterator.return != null
|
|
352
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
353
|
+
_iterator.return();
|
|
354
|
+
}
|
|
293
355
|
} finally {
|
|
294
|
-
if (_didIteratorError)
|
|
356
|
+
if (_didIteratorError) {
|
|
357
|
+
throw _iteratorError;
|
|
358
|
+
}
|
|
295
359
|
}
|
|
296
360
|
}
|
|
297
361
|
}
|
|
298
362
|
if (text.endsWith(".columns") && node.arguments.length === 1) {
|
|
299
363
|
var obj = node.arguments[0];
|
|
300
364
|
if (ts.isObjectLiteralExpression(obj)) {
|
|
301
|
-
var _iteratorNormalCompletion1 =
|
|
302
|
-
_didIteratorError1 =
|
|
365
|
+
var _iteratorNormalCompletion1 = true,
|
|
366
|
+
_didIteratorError1 = false,
|
|
303
367
|
_iteratorError1 = void 0;
|
|
304
368
|
try {
|
|
305
|
-
for (var _iterator1 = obj.properties[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 =
|
|
306
|
-
var prop = _step1.value
|
|
307
|
-
|
|
308
|
-
if (ts.isPropertyAssignment(prop))
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
}
|
|
315
|
-
}
|
|
369
|
+
for (var _iterator1 = obj.properties[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
|
|
370
|
+
var prop = _step1.value;
|
|
371
|
+
var _prop_name;
|
|
372
|
+
if (!ts.isPropertyAssignment(prop)) continue;
|
|
373
|
+
var colName = (_prop_name = prop.name) === null || _prop_name === void 0 ? void 0 : _prop_name.getText(sourceFile);
|
|
374
|
+
if (!colName) continue;
|
|
375
|
+
var initText = prop.initializer.getText(sourceFile);
|
|
376
|
+
var colType = parseColumnType(initText);
|
|
377
|
+
columns[colName] = colType;
|
|
316
378
|
}
|
|
317
379
|
} catch (err) {
|
|
318
|
-
_didIteratorError1 =
|
|
380
|
+
_didIteratorError1 = true;
|
|
381
|
+
_iteratorError1 = err;
|
|
319
382
|
} finally {
|
|
320
383
|
try {
|
|
321
|
-
!_iteratorNormalCompletion1 && _iterator1.return != null
|
|
384
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
385
|
+
_iterator1.return();
|
|
386
|
+
}
|
|
322
387
|
} finally {
|
|
323
|
-
if (_didIteratorError1)
|
|
388
|
+
if (_didIteratorError1) {
|
|
389
|
+
throw _iteratorError1;
|
|
390
|
+
}
|
|
324
391
|
}
|
|
325
392
|
}
|
|
326
393
|
}
|
|
@@ -331,7 +398,7 @@ function extractSchemaColumns(ts, sourceFile, columns, primaryKeys) {
|
|
|
331
398
|
visit(sourceFile);
|
|
332
399
|
}
|
|
333
400
|
function tsTypeToValibot(ts, checker, type, seen) {
|
|
334
|
-
|
|
401
|
+
if (!seen) seen = /* @__PURE__ */new Set();
|
|
335
402
|
var flags = type.getFlags();
|
|
336
403
|
if (flags & (ts.TypeFlags.Object | ts.TypeFlags.Intersection)) {
|
|
337
404
|
if (seen.has(type)) return "v.unknown()";
|
|
@@ -347,363 +414,437 @@ function tsTypeToValibot(ts, checker, type, seen) {
|
|
|
347
414
|
if (flags & ts.TypeFlags.Null) return "v.null_()";
|
|
348
415
|
if (flags & ts.TypeFlags.Any || flags & ts.TypeFlags.Unknown) return "v.unknown()";
|
|
349
416
|
if (flags & ts.TypeFlags.Never) return "v.never()";
|
|
350
|
-
if (flags & ts.TypeFlags.StringLiteral)
|
|
351
|
-
|
|
417
|
+
if (flags & ts.TypeFlags.StringLiteral) {
|
|
418
|
+
return `v.literal(${JSON.stringify(type.value)})`;
|
|
419
|
+
}
|
|
420
|
+
if (flags & ts.TypeFlags.NumberLiteral) {
|
|
421
|
+
return `v.literal(${type.value})`;
|
|
422
|
+
}
|
|
352
423
|
if (flags & ts.TypeFlags.BooleanLiteral) {
|
|
353
424
|
var name = type.intrinsicName;
|
|
354
425
|
return `v.literal(${name === "true"})`;
|
|
355
426
|
}
|
|
356
427
|
if (type.isUnion()) {
|
|
357
|
-
var members = type.types
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
428
|
+
var members = type.types;
|
|
429
|
+
var hasNull = members.some(function (t) {
|
|
430
|
+
return t.getFlags() & ts.TypeFlags.Null;
|
|
431
|
+
});
|
|
432
|
+
var hasUndefined = members.some(function (t) {
|
|
433
|
+
return t.getFlags() & (ts.TypeFlags.Undefined | ts.TypeFlags.Void);
|
|
434
|
+
});
|
|
435
|
+
var rest = members.filter(function (t) {
|
|
436
|
+
return !(t.getFlags() & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void));
|
|
437
|
+
});
|
|
367
438
|
if (rest.length === 2 && rest.every(function (t) {
|
|
368
439
|
return t.getFlags() & ts.TypeFlags.BooleanLiteral;
|
|
369
440
|
})) {
|
|
370
441
|
var inner = "v.boolean()";
|
|
371
|
-
|
|
442
|
+
if (hasNull) inner = `v.nullable(${inner})`;
|
|
443
|
+
if (hasUndefined) inner = `v.optional(${inner})`;
|
|
444
|
+
return inner;
|
|
372
445
|
}
|
|
373
446
|
if (rest.length === 0) return "v.unknown()";
|
|
374
447
|
var inner1 = rest.length === 1 ? recurse(rest[0]) : `v.union([${rest.map(function (t) {
|
|
375
448
|
return recurse(t);
|
|
376
449
|
}).join(", ")}])`;
|
|
377
|
-
|
|
450
|
+
if (hasNull) inner1 = `v.nullable(${inner1})`;
|
|
451
|
+
if (hasUndefined) inner1 = `v.optional(${inner1})`;
|
|
452
|
+
return inner1;
|
|
378
453
|
}
|
|
379
454
|
var resolveSymbolType = function (prop2) {
|
|
380
455
|
var _prop_declarations;
|
|
381
|
-
|
|
456
|
+
if (prop2.valueDeclaration) return checker.getTypeOfSymbolAtLocation(prop2, prop2.valueDeclaration);
|
|
457
|
+
if ((_prop_declarations = prop2.declarations) === null || _prop_declarations === void 0 ? void 0 : _prop_declarations[0]) return checker.getTypeOfSymbolAtLocation(prop2, prop2.declarations[0]);
|
|
458
|
+
return checker.getDeclaredTypeOfSymbol(prop2);
|
|
382
459
|
};
|
|
383
460
|
if (type.isIntersection()) {
|
|
384
461
|
var props = type.getProperties();
|
|
385
462
|
if (props.length === 0) return "v.object({})";
|
|
386
|
-
var entries = []
|
|
387
|
-
|
|
388
|
-
_didIteratorError =
|
|
463
|
+
var entries = [];
|
|
464
|
+
var _iteratorNormalCompletion = true,
|
|
465
|
+
_didIteratorError = false,
|
|
389
466
|
_iteratorError = void 0;
|
|
390
467
|
try {
|
|
391
|
-
for (var _iterator = props[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion =
|
|
392
|
-
var prop = _step.value
|
|
393
|
-
|
|
394
|
-
if (
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
468
|
+
for (var _iterator = props[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
469
|
+
var prop = _step.value;
|
|
470
|
+
var name1 = prop.getName();
|
|
471
|
+
if (shouldSkipObjectKey(name1)) continue;
|
|
472
|
+
var propType = resolveSymbolType(prop);
|
|
473
|
+
var isOptional = !!(prop.getFlags() & ts.SymbolFlags.Optional);
|
|
474
|
+
var val = recurse(propType);
|
|
475
|
+
if (isOptional && !val.startsWith("v.optional(")) {
|
|
476
|
+
val = `v.optional(${val})`;
|
|
399
477
|
}
|
|
478
|
+
entries.push(`${formatObjectKey(name1)}: ${val}`);
|
|
400
479
|
}
|
|
401
480
|
} catch (err) {
|
|
402
|
-
_didIteratorError =
|
|
481
|
+
_didIteratorError = true;
|
|
482
|
+
_iteratorError = err;
|
|
403
483
|
} finally {
|
|
404
484
|
try {
|
|
405
|
-
!_iteratorNormalCompletion && _iterator.return != null
|
|
485
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
486
|
+
_iterator.return();
|
|
487
|
+
}
|
|
406
488
|
} finally {
|
|
407
|
-
if (_didIteratorError)
|
|
489
|
+
if (_didIteratorError) {
|
|
490
|
+
throw _iteratorError;
|
|
491
|
+
}
|
|
408
492
|
}
|
|
409
493
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
494
|
+
if (entries.length === 0) return "v.object({})";
|
|
495
|
+
return `v.object({
|
|
496
|
+
${entries.join(",\n ")},
|
|
413
497
|
})`;
|
|
414
498
|
}
|
|
415
499
|
var props1 = type.getProperties();
|
|
416
500
|
if (props1.length > 0 && (type.getFlags() & ts.TypeFlags.Object || type.objectFlags)) {
|
|
417
|
-
var _type_objectFlags
|
|
418
|
-
|
|
501
|
+
var _type_objectFlags;
|
|
502
|
+
var objectFlags = (_type_objectFlags = type.objectFlags) !== null && _type_objectFlags !== void 0 ? _type_objectFlags : 0;
|
|
419
503
|
if (objectFlags & ts.ObjectFlags.Reference) {
|
|
420
|
-
var _typeRef_typeArguments
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
if ((name2 === "Array" || name2 === "ReadonlyArray") && ((_typeRef_typeArguments = typeRef.typeArguments) === null || _typeRef_typeArguments === void 0 ? void 0 : _typeRef_typeArguments.length) === 1)
|
|
504
|
+
var _typeRef_typeArguments;
|
|
505
|
+
var typeRef = type;
|
|
506
|
+
var symbol = type.getSymbol();
|
|
507
|
+
var name2 = symbol === null || symbol === void 0 ? void 0 : symbol.getName();
|
|
508
|
+
if ((name2 === "Array" || name2 === "ReadonlyArray") && ((_typeRef_typeArguments = typeRef.typeArguments) === null || _typeRef_typeArguments === void 0 ? void 0 : _typeRef_typeArguments.length) === 1) {
|
|
509
|
+
return `v.array(${recurse(typeRef.typeArguments[0])})`;
|
|
510
|
+
}
|
|
425
511
|
}
|
|
426
512
|
if (objectFlags & ts.ObjectFlags.Tuple) {
|
|
427
|
-
var typeRef1 = type
|
|
428
|
-
|
|
513
|
+
var typeRef1 = type;
|
|
514
|
+
var typeArgs = typeRef1.typeArguments || [];
|
|
429
515
|
return `v.tuple([${typeArgs.map(function (t) {
|
|
430
516
|
return recurse(t);
|
|
431
517
|
}).join(", ")}])`;
|
|
432
518
|
}
|
|
433
|
-
var entries1 = []
|
|
434
|
-
|
|
435
|
-
_didIteratorError1 =
|
|
519
|
+
var entries1 = [];
|
|
520
|
+
var _iteratorNormalCompletion1 = true,
|
|
521
|
+
_didIteratorError1 = false,
|
|
436
522
|
_iteratorError1 = void 0;
|
|
437
523
|
try {
|
|
438
|
-
for (var _iterator1 = props1[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 =
|
|
439
|
-
var prop1 = _step1.value
|
|
440
|
-
|
|
441
|
-
if (
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
524
|
+
for (var _iterator1 = props1[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
|
|
525
|
+
var prop1 = _step1.value;
|
|
526
|
+
var name3 = prop1.getName();
|
|
527
|
+
if (shouldSkipObjectKey(name3)) continue;
|
|
528
|
+
var propType1 = resolveSymbolType(prop1);
|
|
529
|
+
var isOptional1 = !!(prop1.getFlags() & ts.SymbolFlags.Optional);
|
|
530
|
+
var val1 = recurse(propType1);
|
|
531
|
+
if (isOptional1 && !val1.startsWith("v.optional(")) {
|
|
532
|
+
val1 = `v.optional(${val1})`;
|
|
446
533
|
}
|
|
534
|
+
entries1.push(`${formatObjectKey(name3)}: ${val1}`);
|
|
447
535
|
}
|
|
448
536
|
} catch (err) {
|
|
449
|
-
_didIteratorError1 =
|
|
537
|
+
_didIteratorError1 = true;
|
|
538
|
+
_iteratorError1 = err;
|
|
450
539
|
} finally {
|
|
451
540
|
try {
|
|
452
|
-
!_iteratorNormalCompletion1 && _iterator1.return != null
|
|
541
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
542
|
+
_iterator1.return();
|
|
543
|
+
}
|
|
453
544
|
} finally {
|
|
454
|
-
if (_didIteratorError1)
|
|
545
|
+
if (_didIteratorError1) {
|
|
546
|
+
throw _iteratorError1;
|
|
547
|
+
}
|
|
455
548
|
}
|
|
456
549
|
}
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
550
|
+
if (entries1.length === 0) return "v.object({})";
|
|
551
|
+
return `v.object({
|
|
552
|
+
${entries1.join(",\n ")},
|
|
460
553
|
})`;
|
|
461
554
|
}
|
|
462
555
|
var stringIndex = type.getStringIndexType();
|
|
463
|
-
if (stringIndex)
|
|
556
|
+
if (stringIndex) {
|
|
557
|
+
return `v.record(v.string(), ${recurse(stringIndex)})`;
|
|
558
|
+
}
|
|
464
559
|
var numberIndex = type.getNumberIndexType();
|
|
465
|
-
|
|
560
|
+
if (numberIndex) {
|
|
561
|
+
return `v.record(v.number(), ${recurse(numberIndex)})`;
|
|
562
|
+
}
|
|
563
|
+
return "v.unknown()";
|
|
466
564
|
}
|
|
467
565
|
function serializeColumnBuilder(col) {
|
|
468
|
-
var zeroType = col.type === "string" ? "string" : col.type === "number" ? "number" : col.type === "boolean" ? "boolean" : "json"
|
|
469
|
-
|
|
470
|
-
|
|
566
|
+
var zeroType = col.type === "string" ? "string" : col.type === "number" ? "number" : col.type === "boolean" ? "boolean" : "json";
|
|
567
|
+
var expr = `${zeroType}()`;
|
|
568
|
+
if (col.serverName) {
|
|
569
|
+
expr += `.from('${col.serverName}')`;
|
|
570
|
+
}
|
|
571
|
+
if (col.optional) {
|
|
572
|
+
expr += ".optional()";
|
|
573
|
+
}
|
|
574
|
+
return expr;
|
|
471
575
|
}
|
|
472
576
|
function generateDrizzleSchemaFile(schema) {
|
|
473
|
-
var lines = [
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
_didIteratorError =
|
|
577
|
+
var lines = [`// auto-generated by: on-zero generate (from drizzle schema)`, `import { boolean, createSchema, json, number, relationships, string, table } from '@rocicorp/zero'`, ``];
|
|
578
|
+
var tableNames = Object.keys(schema.tables).sort();
|
|
579
|
+
var _iteratorNormalCompletion = true,
|
|
580
|
+
_didIteratorError = false,
|
|
477
581
|
_iteratorError = void 0;
|
|
478
582
|
try {
|
|
479
|
-
for (var _iterator = tableNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion =
|
|
480
|
-
var tableName = _step.value
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
lines.push(`
|
|
583
|
+
for (var _iterator = tableNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
584
|
+
var tableName = _step.value;
|
|
585
|
+
var t = schema.tables[tableName];
|
|
586
|
+
var colEntries = Object.entries(t.columns).map(function (param) {
|
|
587
|
+
var [colName, col] = param;
|
|
588
|
+
return ` ${colName}: ${serializeColumnBuilder(col)},`;
|
|
589
|
+
}).join("\n");
|
|
590
|
+
var pkArgs = t.primaryKey.map(function (k) {
|
|
591
|
+
return `'${k}'`;
|
|
592
|
+
}).join(", ");
|
|
593
|
+
lines.push(`const ${tableName}Table = table('${t.name}')`);
|
|
594
|
+
lines.push(` .columns({`);
|
|
595
|
+
lines.push(colEntries);
|
|
596
|
+
lines.push(` })`);
|
|
597
|
+
lines.push(` .primaryKey(${pkArgs})`);
|
|
598
|
+
lines.push(``);
|
|
491
599
|
}
|
|
492
600
|
} catch (err) {
|
|
493
|
-
_didIteratorError =
|
|
601
|
+
_didIteratorError = true;
|
|
602
|
+
_iteratorError = err;
|
|
494
603
|
} finally {
|
|
495
604
|
try {
|
|
496
|
-
!_iteratorNormalCompletion && _iterator.return != null
|
|
605
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
606
|
+
_iterator.return();
|
|
607
|
+
}
|
|
497
608
|
} finally {
|
|
498
|
-
if (_didIteratorError)
|
|
609
|
+
if (_didIteratorError) {
|
|
610
|
+
throw _iteratorError;
|
|
611
|
+
}
|
|
499
612
|
}
|
|
500
613
|
}
|
|
501
|
-
var relTableNames = Object.keys(schema.relationships).sort()
|
|
502
|
-
|
|
503
|
-
_didIteratorError1 =
|
|
614
|
+
var relTableNames = Object.keys(schema.relationships).sort();
|
|
615
|
+
var _iteratorNormalCompletion1 = true,
|
|
616
|
+
_didIteratorError1 = false,
|
|
504
617
|
_iteratorError1 = void 0;
|
|
505
618
|
try {
|
|
506
|
-
for (var _iterator1 = relTableNames[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 =
|
|
507
|
-
var tableName1 = _step1.value
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
if (relEntries.length
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
619
|
+
for (var _iterator1 = relTableNames[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
|
|
620
|
+
var tableName1 = _step1.value;
|
|
621
|
+
var rels = schema.relationships[tableName1];
|
|
622
|
+
var relEntries = Object.entries(rels);
|
|
623
|
+
if (relEntries.length === 0) continue;
|
|
624
|
+
var relBody = relEntries.map(function (param) {
|
|
625
|
+
var [relName, hops] = param;
|
|
626
|
+
if (hops.length === 1) {
|
|
627
|
+
var hop = hops[0];
|
|
628
|
+
var fn = hop.cardinality === "one" ? "one" : "many";
|
|
629
|
+
var sf = hop.sourceField.map(function (f) {
|
|
630
|
+
return `'${f}'`;
|
|
631
|
+
}).join(", ");
|
|
632
|
+
var df = hop.destField.map(function (f) {
|
|
633
|
+
return `'${f}'`;
|
|
634
|
+
}).join(", ");
|
|
635
|
+
return ` ${relName}: ${fn}({
|
|
523
636
|
sourceField: [${sf}],
|
|
524
637
|
destSchema: ${hop.destSchema}Table,
|
|
525
638
|
destField: [${df}],
|
|
526
639
|
})`;
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
}).join(", "),
|
|
533
|
-
df2 = hop2.destField.map(function (f) {
|
|
534
|
-
return `'${f}'`;
|
|
535
|
-
}).join(", ");
|
|
536
|
-
return `${fn2}({ sourceField: [${sf2}], destSchema: ${hop2.destSchema}Table, destField: [${df2}] })`;
|
|
640
|
+
}
|
|
641
|
+
var hopCode = hops.map(function (hop2) {
|
|
642
|
+
var fn2 = hop2.cardinality === "one" ? "one" : "many";
|
|
643
|
+
var sf2 = hop2.sourceField.map(function (f) {
|
|
644
|
+
return `'${f}'`;
|
|
537
645
|
}).join(", ");
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
646
|
+
var df2 = hop2.destField.map(function (f) {
|
|
647
|
+
return `'${f}'`;
|
|
648
|
+
}).join(", ");
|
|
649
|
+
return `${fn2}({ sourceField: [${sf2}], destSchema: ${hop2.destSchema}Table, destField: [${df2}] })`;
|
|
650
|
+
}).join(", ");
|
|
651
|
+
return ` ${relName}: [${hopCode}]`;
|
|
652
|
+
}).join(",\n");
|
|
653
|
+
lines.push(`const ${tableName1}Relationships = relationships(${tableName1}Table, ({ one, many }) => ({`);
|
|
654
|
+
lines.push(relBody);
|
|
655
|
+
lines.push(`}))`);
|
|
656
|
+
lines.push(``);
|
|
543
657
|
}
|
|
544
658
|
} catch (err) {
|
|
545
|
-
_didIteratorError1 =
|
|
659
|
+
_didIteratorError1 = true;
|
|
660
|
+
_iteratorError1 = err;
|
|
546
661
|
} finally {
|
|
547
662
|
try {
|
|
548
|
-
!_iteratorNormalCompletion1 && _iterator1.return != null
|
|
663
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
664
|
+
_iterator1.return();
|
|
665
|
+
}
|
|
549
666
|
} finally {
|
|
550
|
-
if (_didIteratorError1)
|
|
667
|
+
if (_didIteratorError1) {
|
|
668
|
+
throw _iteratorError1;
|
|
669
|
+
}
|
|
551
670
|
}
|
|
552
671
|
}
|
|
553
672
|
var tableList = tableNames.map(function (n) {
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
`);
|
|
563
|
-
|
|
564
|
-
`);
|
|
673
|
+
return ` ${n}Table,`;
|
|
674
|
+
}).join("\n");
|
|
675
|
+
var relList = relTableNames.filter(function (n) {
|
|
676
|
+
return Object.keys(schema.relationships[n]).length > 0;
|
|
677
|
+
}).map(function (n) {
|
|
678
|
+
return ` ${n}Relationships,`;
|
|
679
|
+
}).join("\n");
|
|
680
|
+
lines.push(`export const schema = createSchema({`);
|
|
681
|
+
lines.push(` tables: [`);
|
|
682
|
+
lines.push(tableList);
|
|
683
|
+
lines.push(` ],`);
|
|
684
|
+
lines.push(` relationships: [`);
|
|
685
|
+
lines.push(relList);
|
|
686
|
+
lines.push(` ],`);
|
|
687
|
+
lines.push(`})`);
|
|
688
|
+
lines.push(``);
|
|
689
|
+
return lines.join("\n");
|
|
565
690
|
}
|
|
566
691
|
async function generate(options) {
|
|
567
692
|
var {
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
existsSync(generatedDir)
|
|
580
|
-
|
|
581
|
-
|
|
693
|
+
dir,
|
|
694
|
+
after,
|
|
695
|
+
silent
|
|
696
|
+
} = options;
|
|
697
|
+
var baseDir = resolve(dir);
|
|
698
|
+
var mutationsDir = resolve(baseDir, "mutations");
|
|
699
|
+
var usesMutationsDir = existsSync(mutationsDir);
|
|
700
|
+
var modelsDir = usesMutationsDir ? mutationsDir : resolve(baseDir, "models");
|
|
701
|
+
var modelsDirName = usesMutationsDir ? "mutations" : "models";
|
|
702
|
+
var generatedDir = resolve(baseDir, "generated");
|
|
703
|
+
var queriesDir = resolve(baseDir, "queries");
|
|
704
|
+
if (!existsSync(generatedDir)) {
|
|
705
|
+
mkdirSync(generatedDir, {
|
|
706
|
+
recursive: true
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
loadCache();
|
|
582
710
|
var allModelFiles = readdirSync(modelsDir).filter(function (f) {
|
|
711
|
+
return f.endsWith(".ts");
|
|
712
|
+
}).sort();
|
|
713
|
+
var filesWithSchema = allModelFiles.filter(function (f) {
|
|
714
|
+
return readFileSync(resolve(modelsDir, f), "utf-8").includes("export const schema = table(");
|
|
715
|
+
});
|
|
716
|
+
var allModelNames = allModelFiles.map(function (f) {
|
|
717
|
+
return basename(f, ".ts");
|
|
718
|
+
});
|
|
719
|
+
var schemaModelNames = filesWithSchema.map(function (f) {
|
|
720
|
+
return basename(f, ".ts");
|
|
721
|
+
});
|
|
722
|
+
var writeResults = [writeFileIfChanged(resolve(generatedDir, "models.ts"), generateModelsFile(allModelNames, modelsDirName)),
|
|
723
|
+
// only generate types.ts and tables.ts when model files define schemas.
|
|
724
|
+
// when using drizzle-zero CLI for schema generation, these files are
|
|
725
|
+
// managed externally and should not be overwritten.
|
|
726
|
+
...(filesWithSchema.length > 0 ? [writeFileIfChanged(resolve(generatedDir, "types.ts"), generateTypesFile(schemaModelNames)), writeFileIfChanged(resolve(generatedDir, "tables.ts"), generateTablesFile(schemaModelNames, modelsDirName))] : []), writeFileIfChanged(resolve(generatedDir, "README.md"), generateReadmeFile())];
|
|
727
|
+
var filesChanged = writeResults.filter(Boolean).length;
|
|
728
|
+
var queryCount = 0;
|
|
729
|
+
var mutationCount = 0;
|
|
730
|
+
var ts = await import("typescript");
|
|
731
|
+
var typeToValibot = function (paramType) {
|
|
732
|
+
try {
|
|
733
|
+
return parseTypeString(paramType.trim());
|
|
734
|
+
} catch (e) {
|
|
735
|
+
return null;
|
|
736
|
+
}
|
|
737
|
+
};
|
|
738
|
+
if (existsSync(queriesDir)) {
|
|
739
|
+
var queryFiles = readdirSync(queriesDir).filter(function (f) {
|
|
583
740
|
return f.endsWith(".ts");
|
|
584
|
-
})
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
...(filesWithSchema.length > 0 ? [writeFileIfChanged(resolve(generatedDir, "types.ts"), generateTypesFile(schemaModelNames)), writeFileIfChanged(resolve(generatedDir, "tables.ts"), generateTablesFile(schemaModelNames, modelsDirName))] : []), writeFileIfChanged(resolve(generatedDir, "README.md"), generateReadmeFile())],
|
|
599
|
-
filesChanged = writeResults.filter(Boolean).length,
|
|
600
|
-
queryCount = 0,
|
|
601
|
-
mutationCount = 0,
|
|
602
|
-
ts = await import("typescript"),
|
|
603
|
-
typeToValibot = function (paramType) {
|
|
604
|
-
try {
|
|
605
|
-
return parseTypeString(paramType.trim());
|
|
606
|
-
} catch {
|
|
607
|
-
return null;
|
|
741
|
+
});
|
|
742
|
+
var allQueries = [];
|
|
743
|
+
var queryResolver = null;
|
|
744
|
+
var getQueryResolver = function () {
|
|
745
|
+
if (!queryResolver) {
|
|
746
|
+
var allFiles2 = readdirSync(queriesDir).filter(function (f) {
|
|
747
|
+
return f.endsWith(".ts");
|
|
748
|
+
}).map(function (f) {
|
|
749
|
+
return {
|
|
750
|
+
path: resolve(queriesDir, f),
|
|
751
|
+
content: readFileSync(resolve(queriesDir, f), "utf-8")
|
|
752
|
+
};
|
|
753
|
+
});
|
|
754
|
+
queryResolver = createTypeResolver(ts, allFiles2, queriesDir);
|
|
608
755
|
}
|
|
756
|
+
return queryResolver;
|
|
609
757
|
};
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
return f.endsWith(".ts");
|
|
613
|
-
}),
|
|
614
|
-
allQueries = [],
|
|
615
|
-
queryResolver = null,
|
|
616
|
-
getQueryResolver = function () {
|
|
617
|
-
if (!queryResolver) {
|
|
618
|
-
var allFiles2 = readdirSync(queriesDir).filter(function (f) {
|
|
619
|
-
return f.endsWith(".ts");
|
|
620
|
-
}).map(function (f) {
|
|
621
|
-
return {
|
|
622
|
-
path: resolve(queriesDir, f),
|
|
623
|
-
content: readFileSync(resolve(queriesDir, f), "utf-8")
|
|
624
|
-
};
|
|
625
|
-
});
|
|
626
|
-
queryResolver = createTypeResolver(ts, allFiles2, queriesDir);
|
|
627
|
-
}
|
|
628
|
-
return queryResolver;
|
|
629
|
-
},
|
|
630
|
-
_iteratorNormalCompletion = !0,
|
|
631
|
-
_didIteratorError = !1,
|
|
758
|
+
var _iteratorNormalCompletion = true,
|
|
759
|
+
_didIteratorError = false,
|
|
632
760
|
_iteratorError = void 0;
|
|
633
761
|
try {
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
762
|
+
var _loop = function () {
|
|
763
|
+
var file2 = _step.value;
|
|
764
|
+
var filePath2 = resolve(queriesDir, file2);
|
|
765
|
+
var fileBaseName2 = basename(file2, ".ts");
|
|
766
|
+
try {
|
|
767
|
+
var content2 = readFileSync(filePath2, "utf-8");
|
|
768
|
+
var sourceFile2 = ts.createSourceFile(filePath2, content2, ts.ScriptTarget.Latest, true);
|
|
769
|
+
ts.forEachChild(sourceFile2, function (node) {
|
|
770
|
+
if (ts.isVariableStatement(node)) {
|
|
771
|
+
var _node_modifiers;
|
|
772
|
+
var exportModifier = (_node_modifiers = node.modifiers) === null || _node_modifiers === void 0 ? void 0 : _node_modifiers.find(function (m) {
|
|
773
|
+
return m.kind === ts.SyntaxKind.ExportKeyword;
|
|
774
|
+
});
|
|
775
|
+
if (!exportModifier) return;
|
|
776
|
+
var declaration = node.declarationList.declarations[0];
|
|
777
|
+
if (!declaration || !ts.isVariableDeclaration(declaration)) return;
|
|
778
|
+
var name = declaration.name.getText(sourceFile2);
|
|
779
|
+
if (name === "permission") return;
|
|
780
|
+
if (declaration.initializer && ts.isArrowFunction(declaration.initializer)) {
|
|
781
|
+
var params = declaration.initializer.parameters;
|
|
782
|
+
var paramType = "void";
|
|
783
|
+
if (params.length > 0) {
|
|
784
|
+
var _param_type;
|
|
785
|
+
var param = params[0];
|
|
786
|
+
paramType = ((_param_type = param.type) === null || _param_type === void 0 ? void 0 : _param_type.getText(sourceFile2)) || "unknown";
|
|
787
|
+
}
|
|
788
|
+
var valibotCode = typeToValibot(paramType);
|
|
789
|
+
if (!valibotCode && params.length > 0 && params[0].type) {
|
|
790
|
+
var resolver = getQueryResolver();
|
|
791
|
+
var resolverSourceFile = resolver.program.getSourceFile(filePath2);
|
|
792
|
+
if (resolverSourceFile) {
|
|
793
|
+
var resolvedType = resolveParamType(ts, resolver, resolverSourceFile, name, 0);
|
|
794
|
+
if (resolvedType) {
|
|
795
|
+
valibotCode = resolver.typeToValibot(resolvedType);
|
|
667
796
|
}
|
|
668
797
|
}
|
|
669
|
-
|
|
798
|
+
}
|
|
799
|
+
if (valibotCode) {
|
|
800
|
+
allQueries.push({
|
|
670
801
|
name,
|
|
671
802
|
params: paramType,
|
|
672
803
|
valibotCode,
|
|
673
804
|
sourceFile: fileBaseName2
|
|
674
|
-
})
|
|
805
|
+
});
|
|
806
|
+
} else if (!silent && paramType !== "void") {
|
|
807
|
+
console.error(`\u2717 ${name}: could not resolve type "${paramType}"`);
|
|
675
808
|
}
|
|
676
809
|
}
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
|
|
680
|
-
}
|
|
681
|
-
}
|
|
810
|
+
}
|
|
811
|
+
});
|
|
812
|
+
} catch (err) {
|
|
813
|
+
if (!silent) console.error(`Error processing ${file2}:`, err);
|
|
814
|
+
}
|
|
815
|
+
};
|
|
816
|
+
for (var _iterator = queryFiles[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop();
|
|
682
817
|
} catch (err) {
|
|
683
|
-
_didIteratorError =
|
|
818
|
+
_didIteratorError = true;
|
|
819
|
+
_iteratorError = err;
|
|
684
820
|
} finally {
|
|
685
821
|
try {
|
|
686
|
-
!_iteratorNormalCompletion && _iterator.return != null
|
|
822
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
823
|
+
_iterator.return();
|
|
824
|
+
}
|
|
687
825
|
} finally {
|
|
688
|
-
if (_didIteratorError)
|
|
826
|
+
if (_didIteratorError) {
|
|
827
|
+
throw _iteratorError;
|
|
828
|
+
}
|
|
689
829
|
}
|
|
690
830
|
}
|
|
691
831
|
queryCount = allQueries.length;
|
|
692
|
-
var groupedChanged = writeFileIfChanged(resolve(generatedDir, "groupedQueries.ts"), generateGroupedQueriesFile(allQueries))
|
|
693
|
-
|
|
694
|
-
groupedChanged
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
832
|
+
var groupedChanged = writeFileIfChanged(resolve(generatedDir, "groupedQueries.ts"), generateGroupedQueriesFile(allQueries));
|
|
833
|
+
var syncedChanged = writeFileIfChanged(resolve(generatedDir, "syncedQueries.ts"), generateSyncedQueriesFile(allQueries));
|
|
834
|
+
if (groupedChanged) filesChanged++;
|
|
835
|
+
if (syncedChanged) filesChanged++;
|
|
836
|
+
}
|
|
837
|
+
var allModelMutations = [];
|
|
838
|
+
var mutationFiles = [];
|
|
839
|
+
var unresolvedModels = [];
|
|
840
|
+
var _iteratorNormalCompletion1 = true,
|
|
841
|
+
_didIteratorError1 = false,
|
|
701
842
|
_iteratorError1 = void 0;
|
|
702
843
|
try {
|
|
703
|
-
for (var _iterator1 = allModelFiles[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 =
|
|
704
|
-
var file = _step1.value
|
|
705
|
-
|
|
706
|
-
|
|
844
|
+
for (var _iterator1 = allModelFiles[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
|
|
845
|
+
var file = _step1.value;
|
|
846
|
+
var filePath = resolve(modelsDir, file);
|
|
847
|
+
var fileBaseName = basename(file, ".ts");
|
|
707
848
|
try {
|
|
708
849
|
var content = readFileSync(filePath, "utf-8");
|
|
709
850
|
mutationFiles.push({
|
|
@@ -711,119 +852,152 @@ async function generate(options) {
|
|
|
711
852
|
content,
|
|
712
853
|
baseName: fileBaseName
|
|
713
854
|
});
|
|
714
|
-
var sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest,
|
|
715
|
-
|
|
855
|
+
var sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
|
|
856
|
+
var result = extractMutationsFromModel(ts, sourceFile, content, filePath, !!silent, typeToValibot);
|
|
716
857
|
if (result) {
|
|
717
|
-
result.modelName = fileBaseName
|
|
858
|
+
result.modelName = fileBaseName;
|
|
859
|
+
allModelMutations.push(result);
|
|
718
860
|
var hasUnresolved = result.custom.some(function (m) {
|
|
719
861
|
return m.paramType !== "void" && m.paramType !== "unknown" && !m.valibotCode;
|
|
720
862
|
});
|
|
721
|
-
hasUnresolved
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
863
|
+
if (hasUnresolved) {
|
|
864
|
+
unresolvedModels.push({
|
|
865
|
+
baseName: fileBaseName,
|
|
866
|
+
filePath
|
|
867
|
+
});
|
|
868
|
+
}
|
|
725
869
|
}
|
|
726
870
|
} catch (err) {
|
|
727
|
-
silent
|
|
871
|
+
if (!silent) console.error(`Error extracting mutations from ${file}:`, err);
|
|
728
872
|
}
|
|
729
873
|
}
|
|
730
874
|
} catch (err) {
|
|
731
|
-
_didIteratorError1 =
|
|
875
|
+
_didIteratorError1 = true;
|
|
876
|
+
_iteratorError1 = err;
|
|
732
877
|
} finally {
|
|
733
878
|
try {
|
|
734
|
-
!_iteratorNormalCompletion1 && _iterator1.return != null
|
|
879
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
880
|
+
_iterator1.return();
|
|
881
|
+
}
|
|
735
882
|
} finally {
|
|
736
|
-
if (_didIteratorError1)
|
|
883
|
+
if (_didIteratorError1) {
|
|
884
|
+
throw _iteratorError1;
|
|
885
|
+
}
|
|
737
886
|
}
|
|
738
887
|
}
|
|
739
888
|
if (unresolvedModels.length > 0) {
|
|
740
889
|
var collectTsFiles = function (dir2) {
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
890
|
+
var results = [];
|
|
891
|
+
var _iteratorNormalCompletion4 = true,
|
|
892
|
+
_didIteratorError4 = false,
|
|
893
|
+
_iteratorError4 = void 0;
|
|
894
|
+
try {
|
|
895
|
+
for (var _iterator4 = readdirSync(dir2, {
|
|
896
|
+
withFileTypes: true
|
|
897
|
+
})[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
898
|
+
var entry = _step4.value;
|
|
899
|
+
var fullPath = resolve(dir2, entry.name);
|
|
900
|
+
if (entry.isDirectory() && entry.name !== "node_modules") {
|
|
901
|
+
results.push(...collectTsFiles(fullPath));
|
|
902
|
+
} else if (entry.isFile() && entry.name.endsWith(".ts") && !entry.name.endsWith(".d.ts")) {
|
|
903
|
+
results.push({
|
|
752
904
|
path: fullPath,
|
|
753
905
|
content: readFileSync(fullPath, "utf-8")
|
|
754
906
|
});
|
|
755
907
|
}
|
|
756
|
-
}
|
|
757
|
-
|
|
908
|
+
}
|
|
909
|
+
} catch (err) {
|
|
910
|
+
_didIteratorError4 = true;
|
|
911
|
+
_iteratorError4 = err;
|
|
912
|
+
} finally {
|
|
913
|
+
try {
|
|
914
|
+
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
|
|
915
|
+
_iterator4.return();
|
|
916
|
+
}
|
|
758
917
|
} finally {
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
} finally {
|
|
762
|
-
if (_didIteratorError4) throw _iteratorError4;
|
|
918
|
+
if (_didIteratorError4) {
|
|
919
|
+
throw _iteratorError4;
|
|
763
920
|
}
|
|
764
921
|
}
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
922
|
+
}
|
|
923
|
+
return results;
|
|
924
|
+
};
|
|
925
|
+
var allFiles = collectTsFiles(baseDir);
|
|
926
|
+
var modelResolver = createTypeResolver(ts, allFiles, baseDir);
|
|
927
|
+
var _iteratorNormalCompletion2 = true,
|
|
928
|
+
_didIteratorError2 = false,
|
|
771
929
|
_iteratorError2 = void 0;
|
|
772
930
|
try {
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
931
|
+
var _loop1 = function () {
|
|
932
|
+
var {
|
|
933
|
+
baseName,
|
|
934
|
+
filePath: filePath2
|
|
935
|
+
} = _step2.value;
|
|
936
|
+
var resolverSourceFile = modelResolver.program.getSourceFile(filePath2);
|
|
937
|
+
if (!resolverSourceFile) return "continue";
|
|
938
|
+
var resolvedTypes = resolveMutationParamTypes(ts, modelResolver, resolverSourceFile);
|
|
939
|
+
if (resolvedTypes.size === 0) return "continue";
|
|
940
|
+
var content2 = readFileSync(filePath2, "utf-8");
|
|
941
|
+
var sourceFile2 = ts.createSourceFile(filePath2, content2, ts.ScriptTarget.Latest, true);
|
|
942
|
+
var result2 = extractMutationsFromModel(ts, sourceFile2, content2, filePath2, !!silent, typeToValibot, resolvedTypes, modelResolver.typeToValibot);
|
|
943
|
+
if (result2) {
|
|
944
|
+
result2.modelName = baseName;
|
|
945
|
+
var idx = allModelMutations.findIndex(function (m) {
|
|
946
|
+
return m.modelName === baseName;
|
|
947
|
+
});
|
|
948
|
+
if (idx >= 0) allModelMutations[idx] = result2;
|
|
949
|
+
}
|
|
950
|
+
};
|
|
951
|
+
for (var _iterator2 = unresolvedModels[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) _loop1();
|
|
793
952
|
} catch (err) {
|
|
794
|
-
_didIteratorError2 =
|
|
953
|
+
_didIteratorError2 = true;
|
|
954
|
+
_iteratorError2 = err;
|
|
795
955
|
} finally {
|
|
796
956
|
try {
|
|
797
|
-
!_iteratorNormalCompletion2 && _iterator2.return != null
|
|
957
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
958
|
+
_iterator2.return();
|
|
959
|
+
}
|
|
798
960
|
} finally {
|
|
799
|
-
if (_didIteratorError2)
|
|
961
|
+
if (_didIteratorError2) {
|
|
962
|
+
throw _iteratorError2;
|
|
963
|
+
}
|
|
800
964
|
}
|
|
801
965
|
}
|
|
802
966
|
}
|
|
803
|
-
var _iteratorNormalCompletion3 =
|
|
804
|
-
_didIteratorError3 =
|
|
967
|
+
var _iteratorNormalCompletion3 = true,
|
|
968
|
+
_didIteratorError3 = false,
|
|
805
969
|
_iteratorError3 = void 0;
|
|
806
970
|
try {
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
}
|
|
971
|
+
var _loop2 = function () {
|
|
972
|
+
var model = _step3.value;
|
|
973
|
+
if (model.hasCRUD) mutationCount += 3;
|
|
974
|
+
mutationCount += model.custom.filter(function (m) {
|
|
975
|
+
return !model.hasCRUD || !["insert", "update", "delete", "upsert"].includes(m.name);
|
|
976
|
+
}).length;
|
|
977
|
+
};
|
|
978
|
+
for (var _iterator3 = allModelMutations[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) _loop2();
|
|
813
979
|
} catch (err) {
|
|
814
|
-
_didIteratorError3 =
|
|
980
|
+
_didIteratorError3 = true;
|
|
981
|
+
_iteratorError3 = err;
|
|
815
982
|
} finally {
|
|
816
983
|
try {
|
|
817
|
-
!_iteratorNormalCompletion3 && _iterator3.return != null
|
|
984
|
+
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
985
|
+
_iterator3.return();
|
|
986
|
+
}
|
|
818
987
|
} finally {
|
|
819
|
-
if (_didIteratorError3)
|
|
988
|
+
if (_didIteratorError3) {
|
|
989
|
+
throw _iteratorError3;
|
|
990
|
+
}
|
|
820
991
|
}
|
|
821
992
|
}
|
|
822
993
|
if (allModelMutations.length > 0) {
|
|
823
994
|
var mutationsChanged = writeFileIfChanged(resolve(generatedDir, "syncedMutations.ts"), generateSyncedMutationsFile(allModelMutations));
|
|
824
|
-
mutationsChanged
|
|
995
|
+
if (mutationsChanged) filesChanged++;
|
|
825
996
|
}
|
|
826
|
-
if (filesChanged > 0 && !silent
|
|
997
|
+
if (filesChanged > 0 && !silent) {
|
|
998
|
+
console.info(`\u2713 ${allModelFiles.length} models (${filesWithSchema.length} schemas)${queryCount ? `, ${queryCount} queries` : ""}${mutationCount ? `, ${mutationCount} mutations` : ""}`);
|
|
999
|
+
}
|
|
1000
|
+
if (filesChanged > 0 && after) {
|
|
827
1001
|
var {
|
|
828
1002
|
execSync
|
|
829
1003
|
} = await import("child_process");
|
|
@@ -836,10 +1010,11 @@ async function generate(options) {
|
|
|
836
1010
|
}
|
|
837
1011
|
});
|
|
838
1012
|
} catch (err) {
|
|
839
|
-
silent
|
|
1013
|
+
if (!silent) console.error(`Error running after command: ${err}`);
|
|
840
1014
|
}
|
|
841
1015
|
}
|
|
842
|
-
|
|
1016
|
+
saveCache();
|
|
1017
|
+
return {
|
|
843
1018
|
filesChanged,
|
|
844
1019
|
modelCount: allModelFiles.length,
|
|
845
1020
|
schemaCount: filesWithSchema.length,
|
|
@@ -849,42 +1024,47 @@ async function generate(options) {
|
|
|
849
1024
|
}
|
|
850
1025
|
async function watch(options) {
|
|
851
1026
|
var {
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
1027
|
+
dir,
|
|
1028
|
+
debounce = 1e3
|
|
1029
|
+
} = options;
|
|
1030
|
+
var baseDir = resolve(dir);
|
|
1031
|
+
var mutationsDir = resolve(baseDir, "mutations");
|
|
1032
|
+
var modelsDir = existsSync(mutationsDir) ? mutationsDir : resolve(baseDir, "models");
|
|
1033
|
+
var queriesDir = resolve(baseDir, "queries");
|
|
1034
|
+
var generatedDir = resolve(baseDir, "generated");
|
|
860
1035
|
await generate({
|
|
861
1036
|
...options,
|
|
862
|
-
silent:
|
|
863
|
-
})
|
|
864
|
-
|
|
865
|
-
var chokidar = await import("chokidar")
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
1037
|
+
silent: true
|
|
1038
|
+
});
|
|
1039
|
+
console.info("\u{1F440} watching...\n");
|
|
1040
|
+
var chokidar = await import("chokidar");
|
|
1041
|
+
var debounceTimer = null;
|
|
1042
|
+
var debouncedRegenerate = function (path, event) {
|
|
1043
|
+
if (debounceTimer) clearTimeout(debounceTimer);
|
|
1044
|
+
console.info(`
|
|
1045
|
+
${event} ${path}`);
|
|
1046
|
+
debounceTimer = setTimeout(function () {
|
|
1047
|
+
generate({
|
|
1048
|
+
...options,
|
|
1049
|
+
silent: false
|
|
1050
|
+
});
|
|
1051
|
+
}, debounce);
|
|
1052
|
+
};
|
|
1053
|
+
var watcher = chokidar.watch([modelsDir, queriesDir], {
|
|
1054
|
+
persistent: true,
|
|
1055
|
+
ignoreInitial: true,
|
|
1056
|
+
ignored: [generatedDir]
|
|
1057
|
+
});
|
|
1058
|
+
watcher.on("change", function (path) {
|
|
882
1059
|
return debouncedRegenerate(path, "\u{1F4DD}");
|
|
883
|
-
})
|
|
1060
|
+
});
|
|
1061
|
+
watcher.on("add", function (path) {
|
|
884
1062
|
return debouncedRegenerate(path, "\u2795");
|
|
885
|
-
})
|
|
1063
|
+
});
|
|
1064
|
+
watcher.on("unlink", function (path) {
|
|
886
1065
|
return debouncedRegenerate(path, "\u{1F5D1}\uFE0F ");
|
|
887
|
-
})
|
|
1066
|
+
});
|
|
1067
|
+
return watcher;
|
|
888
1068
|
}
|
|
889
1069
|
export { generate, generateDrizzleSchemaFile, watch };
|
|
890
1070
|
//# sourceMappingURL=generate.native.js.map
|