on-zero 0.16.17 → 0.16.18

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 (76) hide show
  1. package/dist/cjs/generate-helpers.cjs +28 -0
  2. package/dist/cjs/generate-helpers.native.js +36 -0
  3. package/dist/cjs/generate-helpers.native.js.map +1 -1
  4. package/dist/cjs/generate-layout.cjs +62 -53
  5. package/dist/cjs/generate-layout.native.js +62 -54
  6. package/dist/cjs/generate-layout.native.js.map +1 -1
  7. package/dist/cjs/generate-lite.cjs +28 -0
  8. package/dist/cjs/generate-lite.native.js +89 -33
  9. package/dist/cjs/generate-lite.native.js.map +1 -1
  10. package/dist/cjs/generate-lite.test.cjs +46 -0
  11. package/dist/cjs/generate-lite.test.native.js +46 -0
  12. package/dist/cjs/generate-lite.test.native.js.map +1 -1
  13. package/dist/cjs/generate.cjs +237 -243
  14. package/dist/cjs/generate.native.js +352 -353
  15. package/dist/cjs/generate.native.js.map +1 -1
  16. package/dist/cjs/generate.test.cjs +35 -0
  17. package/dist/cjs/generate.test.native.js +35 -0
  18. package/dist/cjs/generate.test.native.js.map +1 -1
  19. package/dist/cjs/helpers/createMutators.cjs +2 -1
  20. package/dist/cjs/helpers/createMutators.native.js +3 -1
  21. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  22. package/dist/cjs/native-typescript.cjs +190 -0
  23. package/dist/cjs/native-typescript.native.js +255 -0
  24. package/dist/cjs/native-typescript.native.js.map +1 -0
  25. package/dist/esm/generate-helpers.mjs +27 -1
  26. package/dist/esm/generate-helpers.mjs.map +1 -1
  27. package/dist/esm/generate-helpers.native.js +35 -1
  28. package/dist/esm/generate-helpers.native.js.map +1 -1
  29. package/dist/esm/generate-layout.mjs +52 -54
  30. package/dist/esm/generate-layout.mjs.map +1 -1
  31. package/dist/esm/generate-layout.native.js +52 -55
  32. package/dist/esm/generate-layout.native.js.map +1 -1
  33. package/dist/esm/generate-lite.mjs +29 -1
  34. package/dist/esm/generate-lite.mjs.map +1 -1
  35. package/dist/esm/generate-lite.native.js +90 -34
  36. package/dist/esm/generate-lite.native.js.map +1 -1
  37. package/dist/esm/generate-lite.test.mjs +46 -0
  38. package/dist/esm/generate-lite.test.mjs.map +1 -1
  39. package/dist/esm/generate-lite.test.native.js +46 -0
  40. package/dist/esm/generate-lite.test.native.js.map +1 -1
  41. package/dist/esm/generate.mjs +238 -244
  42. package/dist/esm/generate.mjs.map +1 -1
  43. package/dist/esm/generate.native.js +353 -354
  44. package/dist/esm/generate.native.js.map +1 -1
  45. package/dist/esm/generate.test.mjs +35 -0
  46. package/dist/esm/generate.test.mjs.map +1 -1
  47. package/dist/esm/generate.test.native.js +35 -0
  48. package/dist/esm/generate.test.native.js.map +1 -1
  49. package/dist/esm/helpers/createMutators.mjs +2 -1
  50. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  51. package/dist/esm/helpers/createMutators.native.js +3 -1
  52. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  53. package/dist/esm/index.native.js.map +1 -1
  54. package/dist/esm/native-typescript.mjs +164 -0
  55. package/dist/esm/native-typescript.mjs.map +1 -0
  56. package/dist/esm/native-typescript.native.js +226 -0
  57. package/dist/esm/native-typescript.native.js.map +1 -0
  58. package/package.json +4 -3
  59. package/src/generate-helpers.ts +79 -0
  60. package/src/generate-layout.ts +64 -108
  61. package/src/generate-lite.test.ts +49 -0
  62. package/src/generate-lite.ts +44 -0
  63. package/src/generate.test.ts +52 -0
  64. package/src/generate.ts +313 -366
  65. package/src/helpers/createMutators.ts +14 -3
  66. package/src/native-typescript.ts +176 -0
  67. package/types/generate-helpers.d.ts +13 -0
  68. package/types/generate-helpers.d.ts.map +1 -1
  69. package/types/generate-layout.d.ts +2 -1
  70. package/types/generate-layout.d.ts.map +1 -1
  71. package/types/generate-lite.d.ts +1 -0
  72. package/types/generate-lite.d.ts.map +1 -1
  73. package/types/generate.d.ts.map +1 -1
  74. package/types/helpers/createMutators.d.ts.map +1 -1
  75. package/types/native-typescript.d.ts +11 -0
  76. package/types/native-typescript.d.ts.map +1 -0
@@ -0,0 +1,164 @@
1
+ import { existsSync, readFileSync, readdirSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import { parse } from "@babel/parser";
4
+ import { API } from "typescript/unstable/async";
5
+ process.env.GOMAXPROCS ??= "2";
6
+ let compiler = null;
7
+ let compilerClose = null;
8
+ let compilerCloseTimer = null;
9
+ let compilerTurn = Promise.resolve();
10
+ async function closeCompiler(session) {
11
+ try {
12
+ if (session.paths.size > 0) {
13
+ const snapshot = await session.api.updateSnapshot({
14
+ closeFiles: [...session.paths]
15
+ });
16
+ await snapshot.dispose();
17
+ }
18
+ } finally {
19
+ await session.api.close();
20
+ }
21
+ }
22
+ async function acquireCompiler(root, sourcePaths) {
23
+ const previousTurn = compilerTurn;
24
+ let releaseTurn = () => {};
25
+ compilerTurn = new Promise(resolveTurn => {
26
+ releaseTurn = resolveTurn;
27
+ });
28
+ await previousTurn;
29
+ if (compilerCloseTimer) {
30
+ clearTimeout(compilerCloseTimer);
31
+ compilerCloseTimer = null;
32
+ }
33
+ if (compilerClose) await compilerClose;
34
+ if (compiler && compiler.root !== root) {
35
+ const previous = compiler;
36
+ compiler = null;
37
+ await closeCompiler(previous);
38
+ }
39
+ compiler ??= {
40
+ api: new API({
41
+ cwd: root
42
+ }),
43
+ paths: /* @__PURE__ */new Set(),
44
+ root
45
+ };
46
+ compiler.api.clearSourceFileCache();
47
+ const previousPaths = compiler.paths;
48
+ const nextPaths = new Set(sourcePaths);
49
+ compiler.paths = nextPaths;
50
+ if (previousPaths.size > 0) {
51
+ const closedSnapshot = await compiler.api.updateSnapshot({
52
+ closeFiles: [...previousPaths],
53
+ fileChanges: {
54
+ invalidateAll: true
55
+ }
56
+ });
57
+ await closedSnapshot.dispose();
58
+ compiler.api.clearSourceFileCache();
59
+ }
60
+ const snapshot = await compiler.api.updateSnapshot({
61
+ openFiles: sourcePaths,
62
+ fileChanges: {
63
+ invalidateAll: true
64
+ }
65
+ });
66
+ compiler.api.clearSourceFileCache();
67
+ return {
68
+ session: compiler,
69
+ snapshot,
70
+ releaseTurn
71
+ };
72
+ }
73
+ function releaseCompiler(session, releaseTurn) {
74
+ releaseTurn();
75
+ compilerCloseTimer = setTimeout(() => {
76
+ compilerCloseTimer = null;
77
+ if (compiler !== session) return;
78
+ compiler = null;
79
+ compilerClose = closeCompiler(session).finally(() => {
80
+ compilerClose = null;
81
+ });
82
+ }, 25);
83
+ compilerCloseTimer.unref?.();
84
+ }
85
+ function collectTypeScriptSourcePaths(roots) {
86
+ const paths = /* @__PURE__ */new Set();
87
+ const visited = /* @__PURE__ */new Set();
88
+ const walk = dir => {
89
+ if (visited.has(dir) || !existsSync(dir)) return;
90
+ visited.add(dir);
91
+ for (const entry of readdirSync(dir, {
92
+ withFileTypes: true
93
+ })) {
94
+ if (entry.name === "node_modules") continue;
95
+ const path = resolve(dir, entry.name);
96
+ if (entry.isDirectory()) {
97
+ walk(path);
98
+ } else if (entry.isFile() && (entry.name.endsWith(".ts") || entry.name.endsWith(".tsx"))) {
99
+ paths.add(path);
100
+ }
101
+ }
102
+ };
103
+ for (const root of roots) walk(resolve(root));
104
+ return [...paths].sort();
105
+ }
106
+ async function createNativeTypeScriptProject(root, sourcePaths) {
107
+ if (sourcePaths.length === 0) {
108
+ throw new Error(`[on-zero] no TypeScript source files found under ${root}`);
109
+ }
110
+ const {
111
+ session,
112
+ snapshot,
113
+ releaseTurn
114
+ } = await acquireCompiler(root, sourcePaths);
115
+ const sources = /* @__PURE__ */new Map();
116
+ const projectsByFile = /* @__PURE__ */new Map();
117
+ const parseErrors = /* @__PURE__ */new Set();
118
+ try {
119
+ for (const path of sourcePaths) {
120
+ const project = await snapshot.getDefaultProjectForFile(path);
121
+ if (!project) throw new Error(`[on-zero] TypeScript did not open ${path}`);
122
+ const source = await project.program.getSourceFile(path);
123
+ if (!source) throw new Error(`[on-zero] TypeScript did not parse ${path}`);
124
+ sources.set(path, source);
125
+ projectsByFile.set(path, project);
126
+ try {
127
+ parse(readFileSync(path, "utf8"), {
128
+ plugins: ["jsx", "typescript"],
129
+ sourceType: "module"
130
+ });
131
+ } catch {
132
+ parseErrors.add(path);
133
+ }
134
+ }
135
+ } catch (error) {
136
+ await snapshot.dispose();
137
+ releaseCompiler(session, releaseTurn);
138
+ throw error;
139
+ }
140
+ let closed = false;
141
+ return {
142
+ projectForFile(path) {
143
+ const project = projectsByFile.get(resolve(path));
144
+ if (!project) throw new Error(`[on-zero] TypeScript project does not contain ${path}`);
145
+ return project;
146
+ },
147
+ sourceFile(path) {
148
+ const source = sources.get(resolve(path));
149
+ if (!source) throw new Error(`[on-zero] TypeScript project does not contain ${path}`);
150
+ return source;
151
+ },
152
+ hasParseErrors(path) {
153
+ return parseErrors.has(resolve(path));
154
+ },
155
+ async close() {
156
+ if (closed) return;
157
+ closed = true;
158
+ await snapshot.dispose();
159
+ releaseCompiler(session, releaseTurn);
160
+ }
161
+ };
162
+ }
163
+ export { collectTypeScriptSourcePaths, createNativeTypeScriptProject };
164
+ //# sourceMappingURL=native-typescript.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["existsSync","readFileSync","readdirSync","resolve","parse","API","process","env","GOMAXPROCS","compiler","compilerClose","compilerCloseTimer","compilerTurn","Promise","closeCompiler","session","paths","size","snapshot","api","updateSnapshot","closeFiles","dispose","close","acquireCompiler","root","sourcePaths","previousTurn","releaseTurn","resolveTurn","clearTimeout","previous","cwd","Set","clearSourceFileCache","previousPaths","nextPaths","closedSnapshot","fileChanges","invalidateAll","openFiles","releaseCompiler","setTimeout","finally","unref","collectTypeScriptSourcePaths","roots","visited","walk","dir","has","add","entry","withFileTypes","name","path","isDirectory","isFile","endsWith","sort","createNativeTypeScriptProject","length","Error","sources","Map","projectsByFile","parseErrors","project","getDefaultProjectForFile","source","program","getSourceFile","set","plugins","sourceType","error","closed","projectForFile","get","sourceFile","hasParseErrors"],"sources":["../../src/native-typescript.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,226 @@
1
+ import { existsSync, readFileSync, readdirSync } from "fs";
2
+ import { resolve } from "path";
3
+ import { parse } from "@babel/parser";
4
+ import { API } from "typescript/unstable/async";
5
+ var _process_env;
6
+ var _GOMAXPROCS;
7
+ (_GOMAXPROCS = (_process_env = process.env).GOMAXPROCS) !== null && _GOMAXPROCS !== void 0 ? _GOMAXPROCS : _process_env.GOMAXPROCS = "2";
8
+ var compiler = null;
9
+ var compilerClose = null;
10
+ var compilerCloseTimer = null;
11
+ var compilerTurn = Promise.resolve();
12
+ async function closeCompiler(session) {
13
+ try {
14
+ if (session.paths.size > 0) {
15
+ var snapshot = await session.api.updateSnapshot({
16
+ closeFiles: [...session.paths]
17
+ });
18
+ await snapshot.dispose();
19
+ }
20
+ } finally {
21
+ await session.api.close();
22
+ }
23
+ }
24
+ async function acquireCompiler(root, sourcePaths) {
25
+ var previousTurn = compilerTurn;
26
+ var releaseTurn = function releaseTurn2() {};
27
+ compilerTurn = new Promise(function (resolveTurn) {
28
+ releaseTurn = resolveTurn;
29
+ });
30
+ await previousTurn;
31
+ if (compilerCloseTimer) {
32
+ clearTimeout(compilerCloseTimer);
33
+ compilerCloseTimer = null;
34
+ }
35
+ if (compilerClose) await compilerClose;
36
+ if (compiler && compiler.root !== root) {
37
+ var previous = compiler;
38
+ compiler = null;
39
+ await closeCompiler(previous);
40
+ }
41
+ compiler !== null && compiler !== void 0 ? compiler : compiler = {
42
+ api: new API({
43
+ cwd: root
44
+ }),
45
+ paths: /* @__PURE__ */new Set(),
46
+ root
47
+ };
48
+ compiler.api.clearSourceFileCache();
49
+ var previousPaths = compiler.paths;
50
+ var nextPaths = new Set(sourcePaths);
51
+ compiler.paths = nextPaths;
52
+ if (previousPaths.size > 0) {
53
+ var closedSnapshot = await compiler.api.updateSnapshot({
54
+ closeFiles: [...previousPaths],
55
+ fileChanges: {
56
+ invalidateAll: true
57
+ }
58
+ });
59
+ await closedSnapshot.dispose();
60
+ compiler.api.clearSourceFileCache();
61
+ }
62
+ var snapshot = await compiler.api.updateSnapshot({
63
+ openFiles: sourcePaths,
64
+ fileChanges: {
65
+ invalidateAll: true
66
+ }
67
+ });
68
+ compiler.api.clearSourceFileCache();
69
+ return {
70
+ session: compiler,
71
+ snapshot,
72
+ releaseTurn
73
+ };
74
+ }
75
+ function releaseCompiler(session, releaseTurn) {
76
+ var _compilerCloseTimer_unref;
77
+ releaseTurn();
78
+ compilerCloseTimer = setTimeout(function () {
79
+ compilerCloseTimer = null;
80
+ if (compiler !== session) return;
81
+ compiler = null;
82
+ compilerClose = closeCompiler(session).finally(function () {
83
+ compilerClose = null;
84
+ });
85
+ }, 25);
86
+ (_compilerCloseTimer_unref = compilerCloseTimer.unref) === null || _compilerCloseTimer_unref === void 0 ? void 0 : _compilerCloseTimer_unref.call(compilerCloseTimer);
87
+ }
88
+ function collectTypeScriptSourcePaths(roots) {
89
+ var paths = /* @__PURE__ */new Set();
90
+ var visited = /* @__PURE__ */new Set();
91
+ var walk = function walk1(dir) {
92
+ if (visited.has(dir) || !existsSync(dir)) return;
93
+ visited.add(dir);
94
+ var _iteratorNormalCompletion2 = true,
95
+ _didIteratorError2 = false,
96
+ _iteratorError2 = void 0;
97
+ try {
98
+ for (var _iterator2 = readdirSync(dir, {
99
+ withFileTypes: true
100
+ })[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
101
+ var entry = _step2.value;
102
+ if (entry.name === "node_modules") continue;
103
+ var path = resolve(dir, entry.name);
104
+ if (entry.isDirectory()) {
105
+ walk(path);
106
+ } else if (entry.isFile() && (entry.name.endsWith(".ts") || entry.name.endsWith(".tsx"))) {
107
+ paths.add(path);
108
+ }
109
+ }
110
+ } catch (err) {
111
+ _didIteratorError2 = true;
112
+ _iteratorError2 = err;
113
+ } finally {
114
+ try {
115
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
116
+ _iterator2.return();
117
+ }
118
+ } finally {
119
+ if (_didIteratorError2) {
120
+ throw _iteratorError2;
121
+ }
122
+ }
123
+ }
124
+ };
125
+ var _iteratorNormalCompletion = true,
126
+ _didIteratorError = false,
127
+ _iteratorError = void 0;
128
+ try {
129
+ for (var _iterator = roots[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
130
+ var root = _step.value;
131
+ walk(resolve(root));
132
+ }
133
+ } catch (err) {
134
+ _didIteratorError = true;
135
+ _iteratorError = err;
136
+ } finally {
137
+ try {
138
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
139
+ _iterator.return();
140
+ }
141
+ } finally {
142
+ if (_didIteratorError) {
143
+ throw _iteratorError;
144
+ }
145
+ }
146
+ }
147
+ return [...paths].sort();
148
+ }
149
+ async function createNativeTypeScriptProject(root, sourcePaths) {
150
+ if (sourcePaths.length === 0) {
151
+ throw new Error(`[on-zero] no TypeScript source files found under ${root}`);
152
+ }
153
+ var {
154
+ session,
155
+ snapshot,
156
+ releaseTurn
157
+ } = await acquireCompiler(root, sourcePaths);
158
+ var sources = /* @__PURE__ */new Map();
159
+ var projectsByFile = /* @__PURE__ */new Map();
160
+ var parseErrors = /* @__PURE__ */new Set();
161
+ try {
162
+ var _iteratorNormalCompletion = true,
163
+ _didIteratorError = false,
164
+ _iteratorError = void 0;
165
+ try {
166
+ for (var _iterator = sourcePaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
167
+ var path = _step.value;
168
+ var project = await snapshot.getDefaultProjectForFile(path);
169
+ if (!project) throw new Error(`[on-zero] TypeScript did not open ${path}`);
170
+ var source = await project.program.getSourceFile(path);
171
+ if (!source) throw new Error(`[on-zero] TypeScript did not parse ${path}`);
172
+ sources.set(path, source);
173
+ projectsByFile.set(path, project);
174
+ try {
175
+ parse(readFileSync(path, "utf8"), {
176
+ plugins: ["jsx", "typescript"],
177
+ sourceType: "module"
178
+ });
179
+ } catch (unused) {
180
+ parseErrors.add(path);
181
+ }
182
+ }
183
+ } catch (err) {
184
+ _didIteratorError = true;
185
+ _iteratorError = err;
186
+ } finally {
187
+ try {
188
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
189
+ _iterator.return();
190
+ }
191
+ } finally {
192
+ if (_didIteratorError) {
193
+ throw _iteratorError;
194
+ }
195
+ }
196
+ }
197
+ } catch (error) {
198
+ await snapshot.dispose();
199
+ releaseCompiler(session, releaseTurn);
200
+ throw error;
201
+ }
202
+ var closed = false;
203
+ return {
204
+ projectForFile(path2) {
205
+ var project2 = projectsByFile.get(resolve(path2));
206
+ if (!project2) throw new Error(`[on-zero] TypeScript project does not contain ${path2}`);
207
+ return project2;
208
+ },
209
+ sourceFile(path2) {
210
+ var source2 = sources.get(resolve(path2));
211
+ if (!source2) throw new Error(`[on-zero] TypeScript project does not contain ${path2}`);
212
+ return source2;
213
+ },
214
+ hasParseErrors(path2) {
215
+ return parseErrors.has(resolve(path2));
216
+ },
217
+ async close() {
218
+ if (closed) return;
219
+ closed = true;
220
+ await snapshot.dispose();
221
+ releaseCompiler(session, releaseTurn);
222
+ }
223
+ };
224
+ }
225
+ export { collectTypeScriptSourcePaths, createNativeTypeScriptProject };
226
+ //# sourceMappingURL=native-typescript.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["existsSync","readFileSync","readdirSync","resolve","parse","API","_process_env","_GOMAXPROCS","process","env","GOMAXPROCS","compiler","compilerClose","compilerCloseTimer","compilerTurn","Promise","closeCompiler","session","paths","size","snapshot","api","updateSnapshot","closeFiles","dispose","close","acquireCompiler","root","sourcePaths","previousTurn","releaseTurn","releaseTurn2","resolveTurn","clearTimeout","previous","cwd","Set","clearSourceFileCache","previousPaths","nextPaths","closedSnapshot","fileChanges","invalidateAll","openFiles","releaseCompiler","_compilerCloseTimer_unref","setTimeout","finally","unref","call","collectTypeScriptSourcePaths","roots","visited","walk","walk1","dir","has","add","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","withFileTypes","Symbol","iterator","_step2","next","done","entry","value","name","path","isDirectory","isFile","endsWith","err","return","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step"],"sources":["../../src/native-typescript.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "on-zero",
3
- "version": "0.16.17",
3
+ "version": "0.16.18",
4
4
  "description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
5
5
  "sideEffects": false,
6
6
  "files": [
@@ -101,11 +101,13 @@
101
101
  }
102
102
  },
103
103
  "dependencies": {
104
+ "@babel/parser": "7.29.7",
104
105
  "@rocicorp/logger": "6.2.0",
105
106
  "chokidar": "^4.0.3",
106
107
  "citty": "^0.1.6",
107
108
  "dequal": "^2.0.3",
108
- "orez-lite": "0.16.17",
109
+ "orez-lite": "0.16.18",
110
+ "typescript": "7.0.2",
109
111
  "valibot": "^1.1.0"
110
112
  },
111
113
  "peerDependencies": {
@@ -136,7 +138,6 @@
136
138
  "react": "^19.0.0",
137
139
  "react-dom": "^19.0.0",
138
140
  "react-native": "*",
139
- "typescript": "^5.9.3",
140
141
  "vitest": "^3.1.1"
141
142
  }
142
143
  }
@@ -820,3 +820,82 @@ ${modelDefs}
820
820
  }
821
821
  `
822
822
  }
823
+
824
+ export type DrizzleSchemaRelationTable = {
825
+ key: string
826
+ properties: readonly string[]
827
+ }
828
+
829
+ // membership-filtered drizzle input consumed by generated/schema.ts.
830
+ // schemaImportPath is relative to data/generated/.
831
+ export function renderDrizzleSchemaInputModule(options: {
832
+ schemaImportPath: string
833
+ tableNames: readonly string[]
834
+ relationTables: readonly DrizzleSchemaRelationTable[]
835
+ }): string {
836
+ const tableNames = [...new Set(options.tableNames)].sort()
837
+ const relationEntries = options.relationTables
838
+ .filter((table) => table.properties.length > 0)
839
+ .map((table) => {
840
+ const body = table.properties.map((property) => ` ${property},`).join('\n')
841
+ return ` ${table.key}: {\n${body}\n },`
842
+ })
843
+ return [
844
+ '// auto-generated from the on-zero data layout',
845
+ `import { defineRelations } from 'drizzle-orm'`,
846
+ `import * as schema from ${JSON.stringify(options.schemaImportPath)}`,
847
+ '',
848
+ `export { ${tableNames.join(', ')} } from ${JSON.stringify(options.schemaImportPath)}`,
849
+ `export const relations = defineRelations(schema, (r) => ({`,
850
+ ...relationEntries,
851
+ `}))`,
852
+ '',
853
+ ].join('\n')
854
+ }
855
+
856
+ // keep the emitted module identical to drizzle-zero-sqlite's
857
+ // generateDrizzleZeroSqliteSchemaFile. that package is the runtime owner;
858
+ // this copy exists so generate-lite can emit the file without importing it.
859
+ export function renderDrizzleZeroSqliteSchemaModule(options: {
860
+ importPath: string
861
+ tableNames: readonly string[]
862
+ }): string {
863
+ const tableNames = [...new Set(options.tableNames)].sort()
864
+ const typeNames = new Set<string>()
865
+ const rowAliases = tableNames.map((tableName) => {
866
+ const typeName = tableName
867
+ .replace(/(?:^|[^A-Za-z0-9]+)([A-Za-z0-9])/g, (_, character: string) =>
868
+ character.toUpperCase()
869
+ )
870
+ .replace(/^([a-z])/, (character) => character.toUpperCase())
871
+ if (!/^[$A-Z_a-z][$\w]*$/.test(typeName)) {
872
+ throw new TypeError(`table name cannot produce a TypeScript alias: ${tableName}`)
873
+ }
874
+ if (typeNames.has(typeName)) {
875
+ throw new TypeError(`table names produce duplicate TypeScript alias: ${typeName}`)
876
+ }
877
+ typeNames.add(typeName)
878
+ return `export type ${typeName} = Row<(typeof schema)['tables'][${JSON.stringify(tableName)}]>`
879
+ })
880
+ return [
881
+ '// auto-generated by drizzle-zero-sqlite',
882
+ `import { createBuilder, type Row } from '@rocicorp/zero'`,
883
+ `import { drizzleZeroConfig } from 'drizzle-zero-sqlite'`,
884
+ `import * as drizzleSchema from ${JSON.stringify(options.importPath)}`,
885
+ '',
886
+ `export const schema = drizzleZeroConfig(drizzleSchema, { suppressDefaultsWarning: true })`,
887
+ '',
888
+ `export type Schema = typeof schema`,
889
+ ...rowAliases,
890
+ '',
891
+ `export const zql = createBuilder(schema)`,
892
+ 'export const builder = zql',
893
+ '',
894
+ `declare module '@rocicorp/zero' {`,
895
+ ' interface DefaultTypes {',
896
+ ' schema: Schema',
897
+ ' }',
898
+ '}',
899
+ '',
900
+ ].join('\n')
901
+ }