on-zero 0.4.1 → 0.4.3
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/generate-helpers.cjs +309 -0
- package/dist/cjs/generate-helpers.native.js +451 -0
- package/dist/cjs/generate-helpers.native.js.map +1 -0
- package/dist/cjs/generate-lite.cjs +150 -0
- package/dist/cjs/generate-lite.native.js +269 -0
- package/dist/cjs/generate-lite.native.js.map +1 -0
- package/dist/cjs/generate-lite.test.cjs +229 -0
- package/dist/cjs/generate-lite.test.native.js +234 -0
- package/dist/cjs/generate-lite.test.native.js.map +1 -0
- package/dist/cjs/generate.cjs +16 -285
- package/dist/cjs/generate.native.js +18 -432
- package/dist/cjs/generate.native.js.map +1 -1
- package/dist/esm/generate-helpers.mjs +272 -0
- package/dist/esm/generate-helpers.mjs.map +1 -0
- package/dist/esm/generate-helpers.native.js +411 -0
- package/dist/esm/generate-helpers.native.js.map +1 -0
- package/dist/esm/generate-lite.mjs +127 -0
- package/dist/esm/generate-lite.mjs.map +1 -0
- package/dist/esm/generate-lite.native.js +243 -0
- package/dist/esm/generate-lite.native.js.map +1 -0
- package/dist/esm/generate-lite.test.mjs +230 -0
- package/dist/esm/generate-lite.test.mjs.map +1 -0
- package/dist/esm/generate-lite.test.native.js +232 -0
- package/dist/esm/generate-lite.test.native.js.map +1 -0
- package/dist/esm/generate.mjs +6 -275
- package/dist/esm/generate.mjs.map +1 -1
- package/dist/esm/generate.native.js +9 -423
- package/dist/esm/generate.native.js.map +1 -1
- package/package.json +7 -2
- package/src/generate-helpers.ts +440 -0
- package/src/generate-lite.test.ts +310 -0
- package/src/generate-lite.ts +333 -0
- package/src/generate.ts +23 -415
- package/types/generate-helpers.d.ts +42 -0
- package/types/generate-helpers.d.ts.map +1 -0
- package/types/generate-lite.d.ts +40 -0
- package/types/generate-lite.d.ts.map +1 -0
- package/types/generate-lite.test.d.ts +2 -0
- package/types/generate-lite.test.d.ts.map +1 -0
- package/types/generate.d.ts +1 -6
- package/types/generate.d.ts.map +1 -1
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { generateGroupedQueriesFile, generateModelsFile, generateReadmeFile, generateSyncedMutationsFile, generateSyncedQueriesFile, generateTablesFile, generateTypesFile, parseColumnType, parseTypeString } from "./generate-helpers.native.js";
|
|
2
|
+
function stripTrailingSlash(s) {
|
|
3
|
+
return s.endsWith("/") ? s.slice(0, -1) : s;
|
|
4
|
+
}
|
|
5
|
+
function baseName(path, ext) {
|
|
6
|
+
var idx = path.lastIndexOf("/"),
|
|
7
|
+
base = idx >= 0 ? path.slice(idx + 1) : path;
|
|
8
|
+
return ext && base.endsWith(ext) && (base = base.slice(0, -ext.length)), base;
|
|
9
|
+
}
|
|
10
|
+
function listDirectTsFiles(files, dirPrefix) {
|
|
11
|
+
var prefix = stripTrailingSlash(dirPrefix) + "/",
|
|
12
|
+
out = [],
|
|
13
|
+
_iteratorNormalCompletion = !0,
|
|
14
|
+
_didIteratorError = !1,
|
|
15
|
+
_iteratorError = void 0;
|
|
16
|
+
try {
|
|
17
|
+
for (var _iterator = Object.keys(files)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
|
|
18
|
+
var path = _step.value;
|
|
19
|
+
if (path.startsWith(prefix)) {
|
|
20
|
+
var rest = path.slice(prefix.length);
|
|
21
|
+
rest.includes("/") || rest.endsWith(".ts") && (rest.endsWith(".d.ts") || out.push(path));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
} catch (err) {
|
|
25
|
+
_didIteratorError = !0, _iteratorError = err;
|
|
26
|
+
} finally {
|
|
27
|
+
try {
|
|
28
|
+
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
|
|
29
|
+
} finally {
|
|
30
|
+
if (_didIteratorError) throw _iteratorError;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return out.sort();
|
|
34
|
+
}
|
|
35
|
+
function generateLite(opts) {
|
|
36
|
+
var {
|
|
37
|
+
files,
|
|
38
|
+
parse
|
|
39
|
+
} = opts,
|
|
40
|
+
baseDir = stripTrailingSlash(opts.dir),
|
|
41
|
+
modelsDirName;
|
|
42
|
+
if (opts.modelsDir) modelsDirName = opts.modelsDir;else {
|
|
43
|
+
var mutationsPrefix = `${baseDir}/mutations/`,
|
|
44
|
+
hasMutationsDir = Object.keys(files).some(function (p) {
|
|
45
|
+
return p.startsWith(mutationsPrefix);
|
|
46
|
+
});
|
|
47
|
+
modelsDirName = hasMutationsDir ? "mutations" : "models";
|
|
48
|
+
}
|
|
49
|
+
var modelsDirPath = `${baseDir}/${modelsDirName}`,
|
|
50
|
+
queriesDirPath = `${baseDir}/queries`,
|
|
51
|
+
modelFilePaths = listDirectTsFiles(files, modelsDirPath),
|
|
52
|
+
queryFilePaths = listDirectTsFiles(files, queriesDirPath),
|
|
53
|
+
allModelMutations = [],
|
|
54
|
+
modelNamesWithSchema = [],
|
|
55
|
+
_iteratorNormalCompletion = !0,
|
|
56
|
+
_didIteratorError = !1,
|
|
57
|
+
_iteratorError = void 0;
|
|
58
|
+
try {
|
|
59
|
+
for (var _iterator = modelFilePaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
|
|
60
|
+
var filePath = _step.value,
|
|
61
|
+
modelName = baseName(filePath, ".ts"),
|
|
62
|
+
content = files[filePath],
|
|
63
|
+
parsed = parse(content, filePath),
|
|
64
|
+
_parsed_mutations_,
|
|
65
|
+
mutationExport = (_parsed_mutations_ = parsed.mutations[0]) !== null && _parsed_mutations_ !== void 0 ? _parsed_mutations_ : null,
|
|
66
|
+
columns = {},
|
|
67
|
+
primaryKeys = [],
|
|
68
|
+
hasSchema = !1;
|
|
69
|
+
if (mutationExport?.schema) {
|
|
70
|
+
hasSchema = !0, modelNamesWithSchema.push(modelName);
|
|
71
|
+
var _iteratorNormalCompletion1 = !0,
|
|
72
|
+
_didIteratorError1 = !1,
|
|
73
|
+
_iteratorError1 = void 0;
|
|
74
|
+
try {
|
|
75
|
+
for (var _iterator1 = mutationExport.schema.primaryKeys[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = !0) {
|
|
76
|
+
var pk = _step1.value;
|
|
77
|
+
primaryKeys.push(pk);
|
|
78
|
+
}
|
|
79
|
+
} catch (err) {
|
|
80
|
+
_didIteratorError1 = !0, _iteratorError1 = err;
|
|
81
|
+
} finally {
|
|
82
|
+
try {
|
|
83
|
+
!_iteratorNormalCompletion1 && _iterator1.return != null && _iterator1.return();
|
|
84
|
+
} finally {
|
|
85
|
+
if (_didIteratorError1) throw _iteratorError1;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
var _iteratorNormalCompletion2 = !0,
|
|
89
|
+
_didIteratorError2 = !1,
|
|
90
|
+
_iteratorError2 = void 0;
|
|
91
|
+
try {
|
|
92
|
+
for (var _iterator2 = mutationExport.schema.columns[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = !0) {
|
|
93
|
+
var col = _step2.value;
|
|
94
|
+
columns[col.name] = parseColumnType(col.builderText);
|
|
95
|
+
}
|
|
96
|
+
} catch (err) {
|
|
97
|
+
_didIteratorError2 = !0, _iteratorError2 = err;
|
|
98
|
+
} finally {
|
|
99
|
+
try {
|
|
100
|
+
!_iteratorNormalCompletion2 && _iterator2.return != null && _iterator2.return();
|
|
101
|
+
} finally {
|
|
102
|
+
if (_didIteratorError2) throw _iteratorError2;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
var hasCRUD = hasSchema && mutationExport !== null,
|
|
107
|
+
_mutationExport_handlers,
|
|
108
|
+
custom = ((_mutationExport_handlers = mutationExport?.handlers) !== null && _mutationExport_handlers !== void 0 ? _mutationExport_handlers : []).map(function (h) {
|
|
109
|
+
if (h.paramTypeText == null) return {
|
|
110
|
+
name: h.name,
|
|
111
|
+
paramType: "void",
|
|
112
|
+
valibotCode: ""
|
|
113
|
+
};
|
|
114
|
+
var paramType2 = h.paramTypeText.trim();
|
|
115
|
+
if (paramType2 === "unknown") return {
|
|
116
|
+
name: h.name,
|
|
117
|
+
paramType: "unknown",
|
|
118
|
+
valibotCode: ""
|
|
119
|
+
};
|
|
120
|
+
var valibotCode2 = null;
|
|
121
|
+
try {
|
|
122
|
+
valibotCode2 = parseTypeString(paramType2);
|
|
123
|
+
} catch {
|
|
124
|
+
valibotCode2 = null;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
name: h.name,
|
|
128
|
+
paramType: paramType2,
|
|
129
|
+
valibotCode: valibotCode2 ?? "v.unknown()"
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
allModelMutations.push({
|
|
133
|
+
modelName,
|
|
134
|
+
hasCRUD,
|
|
135
|
+
columns,
|
|
136
|
+
primaryKeys,
|
|
137
|
+
custom
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
} catch (err) {
|
|
141
|
+
_didIteratorError = !0, _iteratorError = err;
|
|
142
|
+
} finally {
|
|
143
|
+
try {
|
|
144
|
+
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
|
|
145
|
+
} finally {
|
|
146
|
+
if (_didIteratorError) throw _iteratorError;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
var allQueries = [],
|
|
150
|
+
_iteratorNormalCompletion3 = !0,
|
|
151
|
+
_didIteratorError3 = !1,
|
|
152
|
+
_iteratorError3 = void 0;
|
|
153
|
+
try {
|
|
154
|
+
for (var _iterator3 = queryFilePaths[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = !0) {
|
|
155
|
+
var filePath1 = _step3.value,
|
|
156
|
+
fileBaseName = baseName(filePath1, ".ts"),
|
|
157
|
+
content1 = files[filePath1],
|
|
158
|
+
parsed1 = parse(content1, filePath1),
|
|
159
|
+
_iteratorNormalCompletion4 = !0,
|
|
160
|
+
_didIteratorError4 = !1,
|
|
161
|
+
_iteratorError4 = void 0;
|
|
162
|
+
try {
|
|
163
|
+
for (var _iterator4 = parsed1.queries[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = !0) {
|
|
164
|
+
var q = _step4.value;
|
|
165
|
+
if (q.name !== "permission") {
|
|
166
|
+
if (q.paramTypeText == null) {
|
|
167
|
+
allQueries.push({
|
|
168
|
+
name: q.name,
|
|
169
|
+
params: "void",
|
|
170
|
+
valibotCode: "",
|
|
171
|
+
sourceFile: fileBaseName
|
|
172
|
+
});
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
var paramType = q.paramTypeText.trim(),
|
|
176
|
+
valibotCode = null;
|
|
177
|
+
try {
|
|
178
|
+
valibotCode = parseTypeString(paramType);
|
|
179
|
+
} catch {
|
|
180
|
+
valibotCode = null;
|
|
181
|
+
}
|
|
182
|
+
allQueries.push({
|
|
183
|
+
name: q.name,
|
|
184
|
+
params: paramType,
|
|
185
|
+
valibotCode: valibotCode ?? "v.unknown()",
|
|
186
|
+
sourceFile: fileBaseName
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
} catch (err) {
|
|
191
|
+
_didIteratorError4 = !0, _iteratorError4 = err;
|
|
192
|
+
} finally {
|
|
193
|
+
try {
|
|
194
|
+
!_iteratorNormalCompletion4 && _iterator4.return != null && _iterator4.return();
|
|
195
|
+
} finally {
|
|
196
|
+
if (_didIteratorError4) throw _iteratorError4;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
} catch (err) {
|
|
201
|
+
_didIteratorError3 = !0, _iteratorError3 = err;
|
|
202
|
+
} finally {
|
|
203
|
+
try {
|
|
204
|
+
!_iteratorNormalCompletion3 && _iterator3.return != null && _iterator3.return();
|
|
205
|
+
} finally {
|
|
206
|
+
if (_didIteratorError3) throw _iteratorError3;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
var modelNames = modelFilePaths.map(function (p) {
|
|
210
|
+
return baseName(p, ".ts");
|
|
211
|
+
}),
|
|
212
|
+
out = {};
|
|
213
|
+
out["models.ts"] = generateModelsFile(modelNames, modelsDirName), modelNamesWithSchema.length > 0 && (out["types.ts"] = generateTypesFile(modelNamesWithSchema), out["tables.ts"] = generateTablesFile(modelNamesWithSchema, modelsDirName)), out["README.md"] = generateReadmeFile(), queryFilePaths.length > 0 && (out["groupedQueries.ts"] = generateGroupedQueriesFile(allQueries), out["syncedQueries.ts"] = generateSyncedQueriesFile(allQueries)), allModelMutations.length > 0 && (out["syncedMutations.ts"] = generateSyncedMutationsFile(allModelMutations));
|
|
214
|
+
var mutationCount = 0,
|
|
215
|
+
_iteratorNormalCompletion5 = !0,
|
|
216
|
+
_didIteratorError5 = !1,
|
|
217
|
+
_iteratorError5 = void 0;
|
|
218
|
+
try {
|
|
219
|
+
for (var _loop = function () {
|
|
220
|
+
var m = _step5.value;
|
|
221
|
+
m.hasCRUD && (mutationCount += 3), mutationCount += m.custom.filter(function (mut) {
|
|
222
|
+
return !m.hasCRUD || !["insert", "update", "delete", "upsert"].includes(mut.name);
|
|
223
|
+
}).length;
|
|
224
|
+
}, _iterator5 = allModelMutations[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = !0) _loop();
|
|
225
|
+
} catch (err) {
|
|
226
|
+
_didIteratorError5 = !0, _iteratorError5 = err;
|
|
227
|
+
} finally {
|
|
228
|
+
try {
|
|
229
|
+
!_iteratorNormalCompletion5 && _iterator5.return != null && _iterator5.return();
|
|
230
|
+
} finally {
|
|
231
|
+
if (_didIteratorError5) throw _iteratorError5;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
files: out,
|
|
236
|
+
modelCount: modelNames.length,
|
|
237
|
+
queryCount: allQueries.length,
|
|
238
|
+
mutationCount,
|
|
239
|
+
schemaCount: modelNamesWithSchema.length
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
export { generateLite };
|
|
243
|
+
//# sourceMappingURL=generate-lite.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["generateGroupedQueriesFile","generateModelsFile","generateReadmeFile","generateSyncedMutationsFile","generateSyncedQueriesFile","generateTablesFile","generateTypesFile","parseColumnType","parseTypeString","stripTrailingSlash","s","endsWith","slice","baseName","path","ext","idx","lastIndexOf","base","length","listDirectTsFiles","files","dirPrefix","prefix","out","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Object","keys","Symbol","iterator","_step","next","done","value","startsWith","rest","includes","push","err","return","sort","generateLite","opts","parse","baseDir","dir","modelsDirName","modelsDir","mutationsPrefix","hasMutationsDir","some","p","modelsDirPath","queriesDirPath","modelFilePaths","queryFilePaths","allModelMutations","modelNamesWithSchema","filePath","modelName","content","parsed","_parsed_mutations_","mutationExport","mutations","columns","primaryKeys","hasSchema","schema","_iteratorNormalCompletion1","_didIteratorError1","_iteratorError1","_iterator1","_step1","pk","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","col","name","builderText","hasCRUD","_mutationExport_handlers","custom","handlers","map","h","paramTypeText","paramType","valibotCode","paramType2","trim","valibotCode2"],"sources":["../../src/generate-lite.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import { generateLite } from "./generate-lite.mjs";
|
|
3
|
+
function makeParse(table) {
|
|
4
|
+
return (_src, path) => {
|
|
5
|
+
const entry = table[path];
|
|
6
|
+
if (!entry) throw new Error(`no lite ast fixture for ${path}`);
|
|
7
|
+
return entry;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
const DIR = "/proj/src/data";
|
|
11
|
+
describe("generateLite", () => {
|
|
12
|
+
test("emits models.ts, syncedMutations.ts, and README.md from inline types", () => {
|
|
13
|
+
const files = {
|
|
14
|
+
[`${DIR}/models/todo.ts`]: "// fake source, parser returns fixture",
|
|
15
|
+
[`${DIR}/models/user.ts`]: "// fake source, parser returns fixture"
|
|
16
|
+
},
|
|
17
|
+
fixtures = {
|
|
18
|
+
[`${DIR}/models/todo.ts`]: {
|
|
19
|
+
mutations: [{
|
|
20
|
+
modelName: "todo",
|
|
21
|
+
handlers: [{
|
|
22
|
+
name: "toggle",
|
|
23
|
+
paramTypeText: "{ id: string; isActive: boolean }"
|
|
24
|
+
}, {
|
|
25
|
+
name: "rename",
|
|
26
|
+
paramTypeText: "{ id: string; title: string }"
|
|
27
|
+
}],
|
|
28
|
+
schema: null
|
|
29
|
+
}],
|
|
30
|
+
queries: []
|
|
31
|
+
},
|
|
32
|
+
[`${DIR}/models/user.ts`]: {
|
|
33
|
+
mutations: [{
|
|
34
|
+
modelName: "user",
|
|
35
|
+
handlers: [{
|
|
36
|
+
name: "finishOnboarding",
|
|
37
|
+
// null = no second param / void
|
|
38
|
+
paramTypeText: null
|
|
39
|
+
}],
|
|
40
|
+
schema: null
|
|
41
|
+
}],
|
|
42
|
+
queries: []
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
result = generateLite({
|
|
46
|
+
files,
|
|
47
|
+
dir: DIR,
|
|
48
|
+
parse: makeParse(fixtures)
|
|
49
|
+
});
|
|
50
|
+
expect(Object.keys(result.files).sort()).toEqual(["README.md", "models.ts", "syncedMutations.ts"]);
|
|
51
|
+
const models = result.files["models.ts"];
|
|
52
|
+
expect(models).toContain("import * as todo from '../models/todo'"), expect(models).toContain("import * as userPublic from '../models/user'"), expect(models).toContain("export const models = {");
|
|
53
|
+
const syncedMutations = result.files["syncedMutations.ts"];
|
|
54
|
+
expect(syncedMutations).toContain("toggle:"), expect(syncedMutations).toContain("v.object({"), expect(syncedMutations).toContain("id: v.string()"), expect(syncedMutations).toContain("isActive: v.boolean()"), expect(syncedMutations).toContain("rename:"), expect(syncedMutations).toContain("title: v.string()"), expect(syncedMutations).toContain("finishOnboarding: v.void_()"), expect(result.modelCount).toBe(2), expect(result.schemaCount).toBe(0), expect(result.mutationCount).toBe(3);
|
|
55
|
+
}), test("falls back to v.unknown() for type references", () => {
|
|
56
|
+
const files = {
|
|
57
|
+
[`${DIR}/models/post.ts`]: "// fake"
|
|
58
|
+
},
|
|
59
|
+
fixtures = {
|
|
60
|
+
[`${DIR}/models/post.ts`]: {
|
|
61
|
+
mutations: [{
|
|
62
|
+
modelName: "post",
|
|
63
|
+
handlers: [{
|
|
64
|
+
name: "archive",
|
|
65
|
+
// bare type reference — parseTypeString returns null, so
|
|
66
|
+
// generate-lite should fall back to v.unknown() rather than
|
|
67
|
+
// attempting cross-file type resolution.
|
|
68
|
+
paramTypeText: "ArchiveParams"
|
|
69
|
+
}, {
|
|
70
|
+
name: "publish",
|
|
71
|
+
// primitive, should resolve
|
|
72
|
+
paramTypeText: "string"
|
|
73
|
+
}],
|
|
74
|
+
schema: null
|
|
75
|
+
}],
|
|
76
|
+
queries: []
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
synced = generateLite({
|
|
80
|
+
files,
|
|
81
|
+
dir: DIR,
|
|
82
|
+
parse: makeParse(fixtures)
|
|
83
|
+
}).files["syncedMutations.ts"];
|
|
84
|
+
expect(synced).toContain("archive: v.unknown()"), expect(synced).toContain("publish: v.string()");
|
|
85
|
+
}), test("emits query files with v.unknown() fallback for references", () => {
|
|
86
|
+
const files = {
|
|
87
|
+
[`${DIR}/models/post.ts`]: "// fake",
|
|
88
|
+
[`${DIR}/queries/post.ts`]: "// fake"
|
|
89
|
+
},
|
|
90
|
+
fixtures = {
|
|
91
|
+
[`${DIR}/models/post.ts`]: {
|
|
92
|
+
mutations: [],
|
|
93
|
+
queries: []
|
|
94
|
+
},
|
|
95
|
+
[`${DIR}/queries/post.ts`]: {
|
|
96
|
+
mutations: [],
|
|
97
|
+
queries: [
|
|
98
|
+
// no-arg query → void
|
|
99
|
+
{
|
|
100
|
+
name: "allPosts",
|
|
101
|
+
paramTypeText: null
|
|
102
|
+
},
|
|
103
|
+
// inline object → real validator
|
|
104
|
+
{
|
|
105
|
+
name: "postById",
|
|
106
|
+
paramTypeText: "{ id: string }"
|
|
107
|
+
},
|
|
108
|
+
// primitive
|
|
109
|
+
{
|
|
110
|
+
name: "byAuthorId",
|
|
111
|
+
paramTypeText: "string"
|
|
112
|
+
},
|
|
113
|
+
// type reference → fallback
|
|
114
|
+
{
|
|
115
|
+
name: "filtered",
|
|
116
|
+
paramTypeText: "PostFilter"
|
|
117
|
+
},
|
|
118
|
+
// permission should be skipped
|
|
119
|
+
{
|
|
120
|
+
name: "permission",
|
|
121
|
+
paramTypeText: null
|
|
122
|
+
}]
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
result = generateLite({
|
|
126
|
+
files,
|
|
127
|
+
dir: DIR,
|
|
128
|
+
parse: makeParse(fixtures)
|
|
129
|
+
});
|
|
130
|
+
expect(result.files["groupedQueries.ts"]).toBeDefined(), expect(result.files["syncedQueries.ts"]).toBeDefined();
|
|
131
|
+
const grouped = result.files["groupedQueries.ts"];
|
|
132
|
+
expect(grouped).toContain("export * as post from '../queries/post'");
|
|
133
|
+
const synced = result.files["syncedQueries.ts"];
|
|
134
|
+
expect(synced).toContain("allPosts: defineQuery(() => Queries.post.allPosts())"), expect(synced).toContain("postById: defineQuery("), expect(synced).toContain("id: v.string()"), expect(synced).toContain("byAuthorId: defineQuery("), expect(synced).toMatch(/byAuthorId: defineQuery\(\s*v\.string\(\)/), expect(synced).toContain("filtered: defineQuery("), expect(synced).toMatch(/filtered: defineQuery\(\s*v\.unknown\(\)/), expect(synced).not.toContain("permission: defineQuery"), expect(result.queryCount).toBe(4);
|
|
135
|
+
}), test("emits types.ts and tables.ts when a model declares a schema inline", () => {
|
|
136
|
+
const files = {
|
|
137
|
+
[`${DIR}/models/task.ts`]: "// fake"
|
|
138
|
+
},
|
|
139
|
+
fixtures = {
|
|
140
|
+
[`${DIR}/models/task.ts`]: {
|
|
141
|
+
mutations: [{
|
|
142
|
+
modelName: "task",
|
|
143
|
+
handlers: [],
|
|
144
|
+
schema: {
|
|
145
|
+
tableName: "task",
|
|
146
|
+
primaryKeys: ["id"],
|
|
147
|
+
columns: [{
|
|
148
|
+
name: "id",
|
|
149
|
+
builderText: "string()"
|
|
150
|
+
}, {
|
|
151
|
+
name: "title",
|
|
152
|
+
builderText: "string()"
|
|
153
|
+
}, {
|
|
154
|
+
name: "priority",
|
|
155
|
+
builderText: "number()"
|
|
156
|
+
}, {
|
|
157
|
+
name: "done",
|
|
158
|
+
builderText: "boolean()"
|
|
159
|
+
}, {
|
|
160
|
+
name: "note",
|
|
161
|
+
builderText: "string().optional()"
|
|
162
|
+
}]
|
|
163
|
+
}
|
|
164
|
+
}],
|
|
165
|
+
queries: []
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
result = generateLite({
|
|
169
|
+
files,
|
|
170
|
+
dir: DIR,
|
|
171
|
+
parse: makeParse(fixtures)
|
|
172
|
+
});
|
|
173
|
+
expect(result.schemaCount).toBe(1), expect(result.files["types.ts"]).toBeDefined(), expect(result.files["tables.ts"]).toBeDefined();
|
|
174
|
+
const types = result.files["types.ts"];
|
|
175
|
+
expect(types).toContain("export type Task = TableInsertRow<typeof schema.task>");
|
|
176
|
+
const tables = result.files["tables.ts"];
|
|
177
|
+
expect(tables).toContain("export { schema as task } from '../models/task'");
|
|
178
|
+
const synced = result.files["syncedMutations.ts"];
|
|
179
|
+
expect(synced).toContain("insert:"), expect(synced).toContain("update:"), expect(synced).toContain("delete:"), expect(result.mutationCount).toBe(3);
|
|
180
|
+
}), test("ignores nested files and non-ts files inside the models directory", () => {
|
|
181
|
+
const files = {
|
|
182
|
+
[`${DIR}/models/post.ts`]: "// fake",
|
|
183
|
+
[`${DIR}/models/README.md`]: "not a model",
|
|
184
|
+
[`${DIR}/models/helpers/util.ts`]: "nested should be ignored",
|
|
185
|
+
[`${DIR}/models/post.d.ts`]: "declaration file, ignored"
|
|
186
|
+
},
|
|
187
|
+
fixtures = {
|
|
188
|
+
[`${DIR}/models/post.ts`]: {
|
|
189
|
+
mutations: [{
|
|
190
|
+
modelName: "post",
|
|
191
|
+
handlers: [],
|
|
192
|
+
schema: null
|
|
193
|
+
}],
|
|
194
|
+
queries: []
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
result = generateLite({
|
|
198
|
+
files,
|
|
199
|
+
dir: DIR,
|
|
200
|
+
parse: makeParse(fixtures)
|
|
201
|
+
});
|
|
202
|
+
expect(result.modelCount).toBe(1);
|
|
203
|
+
const models = result.files["models.ts"];
|
|
204
|
+
expect(models).toContain("import * as post from '../models/post'"), expect(models).not.toContain("util"), expect(models).not.toContain("README");
|
|
205
|
+
}), test("infers mutations/ directory when present", () => {
|
|
206
|
+
const files = {
|
|
207
|
+
[`${DIR}/mutations/post.ts`]: "// fake"
|
|
208
|
+
},
|
|
209
|
+
fixtures = {
|
|
210
|
+
[`${DIR}/mutations/post.ts`]: {
|
|
211
|
+
mutations: [{
|
|
212
|
+
modelName: "post",
|
|
213
|
+
handlers: [{
|
|
214
|
+
name: "publish",
|
|
215
|
+
paramTypeText: "{ id: string }"
|
|
216
|
+
}],
|
|
217
|
+
schema: null
|
|
218
|
+
}],
|
|
219
|
+
queries: []
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
models = generateLite({
|
|
223
|
+
files,
|
|
224
|
+
dir: DIR,
|
|
225
|
+
parse: makeParse(fixtures)
|
|
226
|
+
}).files["models.ts"];
|
|
227
|
+
expect(models).toContain("from '../mutations/post'");
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
//# sourceMappingURL=generate-lite.test.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","test","generateLite","makeParse","table","_src","path","entry","Error","DIR","files","fixtures","mutations","modelName","handlers","name","paramTypeText","schema","queries","result","dir","parse","Object","keys","sort","toEqual","models","toContain","syncedMutations","modelCount","toBe","schemaCount","mutationCount","synced","toBeDefined","grouped","toMatch","not","queryCount","tableName","primaryKeys","columns","builderText","types","tables"],"sources":["../../src/generate-lite.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|