on-zero 0.4.1 → 0.4.2

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.
Files changed (41) hide show
  1. package/dist/cjs/generate-helpers.cjs +309 -0
  2. package/dist/cjs/generate-helpers.native.js +451 -0
  3. package/dist/cjs/generate-helpers.native.js.map +1 -0
  4. package/dist/cjs/generate-lite.cjs +150 -0
  5. package/dist/cjs/generate-lite.native.js +269 -0
  6. package/dist/cjs/generate-lite.native.js.map +1 -0
  7. package/dist/cjs/generate-lite.test.cjs +229 -0
  8. package/dist/cjs/generate-lite.test.native.js +234 -0
  9. package/dist/cjs/generate-lite.test.native.js.map +1 -0
  10. package/dist/cjs/generate.cjs +16 -285
  11. package/dist/cjs/generate.native.js +18 -432
  12. package/dist/cjs/generate.native.js.map +1 -1
  13. package/dist/esm/generate-helpers.mjs +272 -0
  14. package/dist/esm/generate-helpers.mjs.map +1 -0
  15. package/dist/esm/generate-helpers.native.js +411 -0
  16. package/dist/esm/generate-helpers.native.js.map +1 -0
  17. package/dist/esm/generate-lite.mjs +127 -0
  18. package/dist/esm/generate-lite.mjs.map +1 -0
  19. package/dist/esm/generate-lite.native.js +243 -0
  20. package/dist/esm/generate-lite.native.js.map +1 -0
  21. package/dist/esm/generate-lite.test.mjs +230 -0
  22. package/dist/esm/generate-lite.test.mjs.map +1 -0
  23. package/dist/esm/generate-lite.test.native.js +232 -0
  24. package/dist/esm/generate-lite.test.native.js.map +1 -0
  25. package/dist/esm/generate.mjs +6 -275
  26. package/dist/esm/generate.mjs.map +1 -1
  27. package/dist/esm/generate.native.js +9 -423
  28. package/dist/esm/generate.native.js.map +1 -1
  29. package/package.json +7 -2
  30. package/src/generate-helpers.ts +440 -0
  31. package/src/generate-lite.test.ts +310 -0
  32. package/src/generate-lite.ts +333 -0
  33. package/src/generate.ts +23 -415
  34. package/types/generate-helpers.d.ts +42 -0
  35. package/types/generate-helpers.d.ts.map +1 -0
  36. package/types/generate-lite.d.ts +40 -0
  37. package/types/generate-lite.d.ts.map +1 -0
  38. package/types/generate-lite.test.d.ts +2 -0
  39. package/types/generate-lite.test.d.ts.map +1 -0
  40. package/types/generate.d.ts +1 -6
  41. 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":"AAAA,SAASA,QAAA,EAAUC,MAAA,EAAQC,IAAA,QAAY;AAEvC,SAASC,YAAA,QAAoB;AAO7B,SAASC,UAAUC,KAAA,EAAoD;EACrE,OAAO,CAACC,IAAA,EAAMC,IAAA,KAAS;IACrB,MAAMC,KAAA,GAAQH,KAAA,CAAME,IAAI;IACxB,IAAI,CAACC,KAAA,EACH,MAAM,IAAIC,KAAA,CAAM,2BAA2BF,IAAI,EAAE;IAEnD,OAAOC,KAAA;EACT;AACF;AAEA,MAAME,GAAA,GAAM;AAEZV,QAAA,CAAS,gBAAgB,MAAM;EAC7BE,IAAA,CAAK,wEAAwE,MAAM;IACjF,MAAMS,KAAA,GAAgC;QACpC,CAAC,GAAGD,GAAG,iBAAiB,GAAG;QAC3B,CAAC,GAAGA,GAAG,iBAAiB,GAAG;MAC7B;MAEME,QAAA,GAA2C;QAC/C,CAAC,GAAGF,GAAG,iBAAiB,GAAG;UACzBG,SAAA,EAAW,CACT;YACEC,SAAA,EAAW;YACXC,QAAA,EAAU,CACR;cACEC,IAAA,EAAM;cACNC,aAAA,EAAe;YACjB,GACA;cACED,IAAA,EAAM;cACNC,aAAA,EAAe;YACjB,EACF;YACAC,MAAA,EAAQ;UACV,EACF;UACAC,OAAA,EAAS;QACX;QACA,CAAC,GAAGT,GAAG,iBAAiB,GAAG;UACzBG,SAAA,EAAW,CACT;YACEC,SAAA,EAAW;YACXC,QAAA,EAAU,CACR;cACEC,IAAA,EAAM;cAAA;cAENC,aAAA,EAAe;YACjB,EACF;YACAC,MAAA,EAAQ;UACV,EACF;UACAC,OAAA,EAAS;QACX;MACF;MAEMC,MAAA,GAASjB,YAAA,CAAa;QAC1BQ,KAAA;QACAU,GAAA,EAAKX,GAAA;QACLY,KAAA,EAAOlB,SAAA,CAAUQ,QAAQ;MAC3B,CAAC;IAGDX,MAAA,CAAOsB,MAAA,CAAOC,IAAA,CAAKJ,MAAA,CAAOT,KAAK,EAAEc,IAAA,CAAK,CAAC,EAAEC,OAAA,CAAQ,CAC/C,aACA,aACA,qBACD;IAGD,MAAMC,MAAA,GAASP,MAAA,CAAOT,KAAA,CAAM,WAAW;IACvCV,MAAA,CAAO0B,MAAM,EAAEC,SAAA,CAAU,wCAAwC,GACjE3B,MAAA,CAAO0B,MAAM,EAAEC,SAAA,CAAU,8CAA8C,GACvE3B,MAAA,CAAO0B,MAAM,EAAEC,SAAA,CAAU,yBAAyB;IAGlD,MAAMC,eAAA,GAAkBT,MAAA,CAAOT,KAAA,CAAM,oBAAoB;IACzDV,MAAA,CAAO4B,eAAe,EAAED,SAAA,CAAU,SAAS,GAC3C3B,MAAA,CAAO4B,eAAe,EAAED,SAAA,CAAU,YAAY,GAC9C3B,MAAA,CAAO4B,eAAe,EAAED,SAAA,CAAU,gBAAgB,GAClD3B,MAAA,CAAO4B,eAAe,EAAED,SAAA,CAAU,uBAAuB,GACzD3B,MAAA,CAAO4B,eAAe,EAAED,SAAA,CAAU,SAAS,GAC3C3B,MAAA,CAAO4B,eAAe,EAAED,SAAA,CAAU,mBAAmB,GAErD3B,MAAA,CAAO4B,eAAe,EAAED,SAAA,CAAU,6BAA6B,GAE/D3B,MAAA,CAAOmB,MAAA,CAAOU,UAAU,EAAEC,IAAA,CAAK,CAAC,GAChC9B,MAAA,CAAOmB,MAAA,CAAOY,WAAW,EAAED,IAAA,CAAK,CAAC,GACjC9B,MAAA,CAAOmB,MAAA,CAAOa,aAAa,EAAEF,IAAA,CAAK,CAAC;EACrC,CAAC,GAED7B,IAAA,CAAK,iDAAiD,MAAM;IAC1D,MAAMS,KAAA,GAAgC;QACpC,CAAC,GAAGD,GAAG,iBAAiB,GAAG;MAC7B;MAEME,QAAA,GAA2C;QAC/C,CAAC,GAAGF,GAAG,iBAAiB,GAAG;UACzBG,SAAA,EAAW,CACT;YACEC,SAAA,EAAW;YACXC,QAAA,EAAU,CACR;cACEC,IAAA,EAAM;cAAA;cAAA;cAAA;cAINC,aAAA,EAAe;YACjB,GACA;cACED,IAAA,EAAM;cAAA;cAENC,aAAA,EAAe;YACjB,EACF;YACAC,MAAA,EAAQ;UACV,EACF;UACAC,OAAA,EAAS;QACX;MACF;MAQMe,MAAA,GANS/B,YAAA,CAAa;QAC1BQ,KAAA;QACAU,GAAA,EAAKX,GAAA;QACLY,KAAA,EAAOlB,SAAA,CAAUQ,QAAQ;MAC3B,CAAC,EAEqBD,KAAA,CAAM,oBAAoB;IAChDV,MAAA,CAAOiC,MAAM,EAAEN,SAAA,CAAU,sBAAsB,GAC/C3B,MAAA,CAAOiC,MAAM,EAAEN,SAAA,CAAU,qBAAqB;EAChD,CAAC,GAED1B,IAAA,CAAK,8DAA8D,MAAM;IACvE,MAAMS,KAAA,GAAgC;QACpC,CAAC,GAAGD,GAAG,iBAAiB,GAAG;QAC3B,CAAC,GAAGA,GAAG,kBAAkB,GAAG;MAC9B;MAEME,QAAA,GAA2C;QAC/C,CAAC,GAAGF,GAAG,iBAAiB,GAAG;UACzBG,SAAA,EAAW,EAAC;UACZM,OAAA,EAAS;QACX;QACA,CAAC,GAAGT,GAAG,kBAAkB,GAAG;UAC1BG,SAAA,EAAW,EAAC;UACZM,OAAA,EAAS;UAAA;UAEP;YAAEH,IAAA,EAAM;YAAYC,aAAA,EAAe;UAAK;UAAA;UAExC;YAAED,IAAA,EAAM;YAAYC,aAAA,EAAe;UAAiB;UAAA;UAEpD;YAAED,IAAA,EAAM;YAAcC,aAAA,EAAe;UAAS;UAAA;UAE9C;YAAED,IAAA,EAAM;YAAYC,aAAA,EAAe;UAAa;UAAA;UAEhD;YAAED,IAAA,EAAM;YAAcC,aAAA,EAAe;UAAK;QAE9C;MACF;MAEMG,MAAA,GAASjB,YAAA,CAAa;QAC1BQ,KAAA;QACAU,GAAA,EAAKX,GAAA;QACLY,KAAA,EAAOlB,SAAA,CAAUQ,QAAQ;MAC3B,CAAC;IAGDX,MAAA,CAAOmB,MAAA,CAAOT,KAAA,CAAM,mBAAmB,CAAC,EAAEwB,WAAA,CAAY,GACtDlC,MAAA,CAAOmB,MAAA,CAAOT,KAAA,CAAM,kBAAkB,CAAC,EAAEwB,WAAA,CAAY;IAErD,MAAMC,OAAA,GAAUhB,MAAA,CAAOT,KAAA,CAAM,mBAAmB;IAChDV,MAAA,CAAOmC,OAAO,EAAER,SAAA,CAAU,yCAAyC;IAEnE,MAAMM,MAAA,GAASd,MAAA,CAAOT,KAAA,CAAM,kBAAkB;IAC9CV,MAAA,CAAOiC,MAAM,EAAEN,SAAA,CAAU,sDAAsD,GAC/E3B,MAAA,CAAOiC,MAAM,EAAEN,SAAA,CAAU,wBAAwB,GACjD3B,MAAA,CAAOiC,MAAM,EAAEN,SAAA,CAAU,gBAAgB,GACzC3B,MAAA,CAAOiC,MAAM,EAAEN,SAAA,CAAU,0BAA0B,GAEnD3B,MAAA,CAAOiC,MAAM,EAAEG,OAAA,CAAQ,2CAA2C,GAElEpC,MAAA,CAAOiC,MAAM,EAAEN,SAAA,CAAU,wBAAwB,GACjD3B,MAAA,CAAOiC,MAAM,EAAEG,OAAA,CAAQ,0CAA0C,GAEjEpC,MAAA,CAAOiC,MAAM,EAAEI,GAAA,CAAIV,SAAA,CAAU,yBAAyB,GAEtD3B,MAAA,CAAOmB,MAAA,CAAOmB,UAAU,EAAER,IAAA,CAAK,CAAC;EAClC,CAAC,GAED7B,IAAA,CAAK,sEAAsE,MAAM;IAC/E,MAAMS,KAAA,GAAgC;QACpC,CAAC,GAAGD,GAAG,iBAAiB,GAAG;MAC7B;MAEME,QAAA,GAA2C;QAC/C,CAAC,GAAGF,GAAG,iBAAiB,GAAG;UACzBG,SAAA,EAAW,CACT;YACEC,SAAA,EAAW;YACXC,QAAA,EAAU,EAAC;YACXG,MAAA,EAAQ;cACNsB,SAAA,EAAW;cACXC,WAAA,EAAa,CAAC,IAAI;cAClBC,OAAA,EAAS,CACP;gBAAE1B,IAAA,EAAM;gBAAM2B,WAAA,EAAa;cAAW,GACtC;gBAAE3B,IAAA,EAAM;gBAAS2B,WAAA,EAAa;cAAW,GACzC;gBAAE3B,IAAA,EAAM;gBAAY2B,WAAA,EAAa;cAAW,GAC5C;gBAAE3B,IAAA,EAAM;gBAAQ2B,WAAA,EAAa;cAAY,GACzC;gBAAE3B,IAAA,EAAM;gBAAQ2B,WAAA,EAAa;cAAsB;YAEvD;UACF,EACF;UACAxB,OAAA,EAAS;QACX;MACF;MAEMC,MAAA,GAASjB,YAAA,CAAa;QAC1BQ,KAAA;QACAU,GAAA,EAAKX,GAAA;QACLY,KAAA,EAAOlB,SAAA,CAAUQ,QAAQ;MAC3B,CAAC;IAEDX,MAAA,CAAOmB,MAAA,CAAOY,WAAW,EAAED,IAAA,CAAK,CAAC,GACjC9B,MAAA,CAAOmB,MAAA,CAAOT,KAAA,CAAM,UAAU,CAAC,EAAEwB,WAAA,CAAY,GAC7ClC,MAAA,CAAOmB,MAAA,CAAOT,KAAA,CAAM,WAAW,CAAC,EAAEwB,WAAA,CAAY;IAE9C,MAAMS,KAAA,GAAQxB,MAAA,CAAOT,KAAA,CAAM,UAAU;IACrCV,MAAA,CAAO2C,KAAK,EAAEhB,SAAA,CAAU,uDAAuD;IAE/E,MAAMiB,MAAA,GAASzB,MAAA,CAAOT,KAAA,CAAM,WAAW;IACvCV,MAAA,CAAO4C,MAAM,EAAEjB,SAAA,CAAU,iDAAiD;IAG1E,MAAMM,MAAA,GAASd,MAAA,CAAOT,KAAA,CAAM,oBAAoB;IAChDV,MAAA,CAAOiC,MAAM,EAAEN,SAAA,CAAU,SAAS,GAClC3B,MAAA,CAAOiC,MAAM,EAAEN,SAAA,CAAU,SAAS,GAClC3B,MAAA,CAAOiC,MAAM,EAAEN,SAAA,CAAU,SAAS,GAElC3B,MAAA,CAAOmB,MAAA,CAAOa,aAAa,EAAEF,IAAA,CAAK,CAAC;EACrC,CAAC,GAED7B,IAAA,CAAK,qEAAqE,MAAM;IAC9E,MAAMS,KAAA,GAAgC;QACpC,CAAC,GAAGD,GAAG,iBAAiB,GAAG;QAC3B,CAAC,GAAGA,GAAG,mBAAmB,GAAG;QAC7B,CAAC,GAAGA,GAAG,yBAAyB,GAAG;QACnC,CAAC,GAAGA,GAAG,mBAAmB,GAAG;MAC/B;MAEME,QAAA,GAA2C;QAC/C,CAAC,GAAGF,GAAG,iBAAiB,GAAG;UACzBG,SAAA,EAAW,CAAC;YAAEC,SAAA,EAAW;YAAQC,QAAA,EAAU,EAAC;YAAGG,MAAA,EAAQ;UAAK,CAAC;UAC7DC,OAAA,EAAS;QACX;MACF;MAEMC,MAAA,GAASjB,YAAA,CAAa;QAC1BQ,KAAA;QACAU,GAAA,EAAKX,GAAA;QACLY,KAAA,EAAOlB,SAAA,CAAUQ,QAAQ;MAC3B,CAAC;IAEDX,MAAA,CAAOmB,MAAA,CAAOU,UAAU,EAAEC,IAAA,CAAK,CAAC;IAChC,MAAMJ,MAAA,GAASP,MAAA,CAAOT,KAAA,CAAM,WAAW;IACvCV,MAAA,CAAO0B,MAAM,EAAEC,SAAA,CAAU,wCAAwC,GACjE3B,MAAA,CAAO0B,MAAM,EAAEW,GAAA,CAAIV,SAAA,CAAU,MAAM,GACnC3B,MAAA,CAAO0B,MAAM,EAAEW,GAAA,CAAIV,SAAA,CAAU,QAAQ;EACvC,CAAC,GAED1B,IAAA,CAAK,4CAA4C,MAAM;IACrD,MAAMS,KAAA,GAAgC;QACpC,CAAC,GAAGD,GAAG,oBAAoB,GAAG;MAChC;MAEME,QAAA,GAA2C;QAC/C,CAAC,GAAGF,GAAG,oBAAoB,GAAG;UAC5BG,SAAA,EAAW,CACT;YACEC,SAAA,EAAW;YACXC,QAAA,EAAU,CAAC;cAAEC,IAAA,EAAM;cAAWC,aAAA,EAAe;YAAiB,CAAC;YAC/DC,MAAA,EAAQ;UACV,EACF;UACAC,OAAA,EAAS;QACX;MACF;MASMQ,MAAA,GAPSxB,YAAA,CAAa;QAC1BQ,KAAA;QACAU,GAAA,EAAKX,GAAA;QACLY,KAAA,EAAOlB,SAAA,CAAUQ,QAAQ;MAC3B,CAAC,EAGqBD,KAAA,CAAM,WAAW;IACvCV,MAAA,CAAO0B,MAAM,EAAEC,SAAA,CAAU,0BAA0B;EACrD,CAAC;AACH,CAAC","ignoreList":[]}