on-zero 0.6.13 → 0.6.15

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 (93) hide show
  1. package/dist/cjs/createSchemaFromDrizzle.cjs +4 -4
  2. package/dist/cjs/createSchemaFromDrizzle.native.js +4 -4
  3. package/dist/cjs/createSchemaFromDrizzle.native.js.map +1 -1
  4. package/dist/cjs/createZeroDirectServer.cjs +279 -0
  5. package/dist/cjs/createZeroDirectServer.native.js +292 -0
  6. package/dist/cjs/createZeroDirectServer.native.js.map +1 -0
  7. package/dist/cjs/createZeroSQLiteServer.cjs +8 -277
  8. package/dist/cjs/createZeroSQLiteServer.native.js +8 -390
  9. package/dist/cjs/createZeroSQLiteServer.native.js.map +1 -1
  10. package/dist/cjs/createZeroSQLiteServer.test.cjs +30 -3
  11. package/dist/cjs/createZeroSQLiteServer.test.native.js +31 -3
  12. package/dist/cjs/createZeroSQLiteServer.test.native.js.map +1 -1
  13. package/dist/cjs/createZeroServerCore.cjs +20 -205
  14. package/dist/cjs/createZeroServerCore.native.js +19 -213
  15. package/dist/cjs/createZeroServerCore.native.js.map +1 -1
  16. package/dist/cjs/generate.cjs +10 -3
  17. package/dist/cjs/generate.native.js +10 -3
  18. package/dist/cjs/generate.native.js.map +1 -1
  19. package/dist/cjs/generate.test.cjs +39 -0
  20. package/dist/cjs/generate.test.native.js +39 -0
  21. package/dist/cjs/generate.test.native.js.map +1 -1
  22. package/dist/cjs/sqliteRuntime.cjs +318 -0
  23. package/dist/cjs/sqliteRuntime.native.js +438 -0
  24. package/dist/cjs/sqliteRuntime.native.js.map +1 -0
  25. package/dist/cjs/syncHost.cjs +16 -9
  26. package/dist/cjs/syncHost.native.js +21 -12
  27. package/dist/cjs/syncHost.native.js.map +1 -1
  28. package/dist/cjs/syncHost.test.cjs +13 -2
  29. package/dist/cjs/syncHost.test.native.js +14 -2
  30. package/dist/cjs/syncHost.test.native.js.map +1 -1
  31. package/dist/esm/createSchemaFromDrizzle.mjs +2 -2
  32. package/dist/esm/createSchemaFromDrizzle.native.js +2 -2
  33. package/dist/esm/createZeroDirectServer.mjs +251 -0
  34. package/dist/esm/createZeroDirectServer.mjs.map +1 -0
  35. package/dist/esm/createZeroDirectServer.native.js +261 -0
  36. package/dist/esm/createZeroDirectServer.native.js.map +1 -0
  37. package/dist/esm/createZeroSQLiteServer.mjs +3 -272
  38. package/dist/esm/createZeroSQLiteServer.mjs.map +1 -1
  39. package/dist/esm/createZeroSQLiteServer.native.js +3 -385
  40. package/dist/esm/createZeroSQLiteServer.native.js.map +1 -1
  41. package/dist/esm/createZeroSQLiteServer.test.mjs +30 -3
  42. package/dist/esm/createZeroSQLiteServer.test.mjs.map +1 -1
  43. package/dist/esm/createZeroSQLiteServer.test.native.js +31 -3
  44. package/dist/esm/createZeroSQLiteServer.test.native.js.map +1 -1
  45. package/dist/esm/createZeroServerCore.mjs +18 -202
  46. package/dist/esm/createZeroServerCore.mjs.map +1 -1
  47. package/dist/esm/createZeroServerCore.native.js +18 -211
  48. package/dist/esm/createZeroServerCore.native.js.map +1 -1
  49. package/dist/esm/generate.mjs +10 -3
  50. package/dist/esm/generate.mjs.map +1 -1
  51. package/dist/esm/generate.native.js +10 -3
  52. package/dist/esm/generate.native.js.map +1 -1
  53. package/dist/esm/generate.test.mjs +39 -1
  54. package/dist/esm/generate.test.mjs.map +1 -1
  55. package/dist/esm/generate.test.native.js +39 -1
  56. package/dist/esm/generate.test.native.js.map +1 -1
  57. package/dist/esm/sqliteRuntime.mjs +289 -0
  58. package/dist/esm/sqliteRuntime.mjs.map +1 -0
  59. package/dist/esm/sqliteRuntime.native.js +406 -0
  60. package/dist/esm/sqliteRuntime.native.js.map +1 -0
  61. package/dist/esm/syncHost.mjs +14 -7
  62. package/dist/esm/syncHost.mjs.map +1 -1
  63. package/dist/esm/syncHost.native.js +19 -10
  64. package/dist/esm/syncHost.native.js.map +1 -1
  65. package/dist/esm/syncHost.test.mjs +13 -2
  66. package/dist/esm/syncHost.test.mjs.map +1 -1
  67. package/dist/esm/syncHost.test.native.js +14 -2
  68. package/dist/esm/syncHost.test.native.js.map +1 -1
  69. package/package.json +5 -6
  70. package/src/createSchemaFromDrizzle.ts +2 -2
  71. package/src/createZeroDirectServer.ts +427 -0
  72. package/src/createZeroSQLiteServer.test.ts +20 -5
  73. package/src/createZeroSQLiteServer.ts +14 -481
  74. package/src/createZeroServerCore.ts +32 -337
  75. package/src/generate.test.ts +57 -1
  76. package/src/generate.ts +23 -3
  77. package/src/sqliteRuntime.ts +512 -0
  78. package/src/syncHost.test.ts +10 -3
  79. package/src/syncHost.ts +49 -12
  80. package/test-fixtures/server-return-types.ts +8 -1
  81. package/types/createSchemaFromDrizzle.d.ts +2 -2
  82. package/types/createSchemaFromDrizzle.d.ts.map +1 -1
  83. package/types/createZeroDirectServer.d.ts +80 -0
  84. package/types/createZeroDirectServer.d.ts.map +1 -0
  85. package/types/createZeroSQLiteServer.d.ts +5 -30
  86. package/types/createZeroSQLiteServer.d.ts.map +1 -1
  87. package/types/createZeroServerCore.d.ts +30 -87
  88. package/types/createZeroServerCore.d.ts.map +1 -1
  89. package/types/generate.d.ts.map +1 -1
  90. package/types/sqliteRuntime.d.ts +71 -0
  91. package/types/sqliteRuntime.d.ts.map +1 -0
  92. package/types/syncHost.d.ts +10 -19
  93. package/types/syncHost.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["DatabaseSync","defineQueries","defineQuery","v","afterEach","beforeEach","describe","expect","test","getScopedAuthData","zeroHttpFixtureSchema","createZeroSyncHostAdapter","zql","queries","project","byOwner","object","ownerId","string","args","where","db","executor","transaction","lastQueryFormat","exec","sql","params","prepare","run","query","all","queryAst","_ast","format","rows","singular","work","effects","value","defer","effect","push","error","close","effectAuthID","validatedAuthID","adapter","schema","models","mutate","create","authData","server","tx","id","toBe","insert","asyncTasks","createServerActions","validateMutation","Object","keys","mutators","toEqual","context","name","mutationContext","effectRuns","reject","Error","catch","caught","toMatchObject","message","details","q","one","resolves","relationships","validation","validateQuery","ast","resolveQuery","userID","role","table","JSON","stringify","toContain","queryName","claims","clientID","mutationID"],"sources":["../../src/syncHost.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DatabaseSync","defineQueries","defineQuery","v","afterEach","beforeEach","describe","expect","test","getScopedAuthData","zeroHttpFixtureSchema","createZeroSyncHostAdapter","zql","queries","project","byOwner","object","ownerId","string","args","where","db","executor","transaction","lastQueryFormat","statements","exec","sql","params","metadata","push","result","prepare","run","changes","Number","query","all","queryAst","_ast","format","rows","singular","work","effects","value","defer","effect","error","close","effectAuthID","validatedAuthID","adapter","schema","models","mutate","create","authData","server","tx","id","toBe","insert","asyncTasks","createServerActions","validateMutation","Object","keys","mutators","toEqual","context","name","mutationContext","table","publicTable","kind","effectRuns","reject","Error","catch","caught","toMatchObject","message","details","q","one","resolves","relationships","validation","validateQuery","ast","resolveQuery","userID","role","JSON","stringify","toContain","queryName","claims","clientID","mutationID"],"sources":["../../src/syncHost.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -23,13 +23,20 @@ describe("createZeroSyncHostAdapter", function () {
23
23
  var executor;
24
24
  var transaction;
25
25
  var lastQueryFormat;
26
+ var statements;
26
27
  beforeEach(function () {
27
28
  db = new DatabaseSync(":memory:");
28
29
  db.exec("CREATE TABLE project (id TEXT PRIMARY KEY, ownerId TEXT NOT NULL, name TEXT NOT NULL)");
30
+ statements = [];
29
31
  executor = {
30
32
  exec(sql) {
31
- var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
32
- db.prepare(sql).run(...params);
33
+ var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [],
34
+ metadata = arguments.length > 2 ? arguments[2] : void 0;
35
+ if (metadata) statements.push(metadata);
36
+ var result = db.prepare(sql).run(...params);
37
+ return {
38
+ changes: Number(result.changes)
39
+ };
33
40
  },
34
41
  query(sql) {
35
42
  var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
@@ -134,6 +141,11 @@ describe("createZeroSyncHostAdapter", function () {
134
141
  }]);
135
142
  expect(validatedAuthID).toBe("u1");
136
143
  expect(effectAuthID).toBe("u1");
144
+ expect(statements).toEqual([{
145
+ table: "project",
146
+ publicTable: "project",
147
+ kind: "insert"
148
+ }]);
137
149
  });
138
150
  test("returns a structural application error and drops rolled-back effects", async function () {
139
151
  var effectRuns = 0;
@@ -1 +1 @@
1
- {"version":3,"names":["DatabaseSync","defineQueries","defineQuery","v","afterEach","beforeEach","describe","expect","test","getScopedAuthData","zeroHttpFixtureSchema","createZeroSyncHostAdapter","zql","queries","project","byOwner","object","ownerId","string","param","args","where","db","executor","transaction","lastQueryFormat","exec","sql","params","arguments","length","prepare","run","query","all","queryAst","_ast","format","rows","singular","work","effects","value","defer","effect2","push","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","effect","err","return","error","close","effectAuthID","validatedAuthID","adapter","schema","models","mutate","create","authData","server","tx","id","toBe","insert","asyncTasks","_getScopedAuthData","createServerActions","validateMutation","Object","keys","mutators","toEqual","context","name","mutationContext","effectRuns","reject","Error","catch","caught","toMatchObject","message","details","q","one","resolves"],"sources":["../../src/syncHost.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DatabaseSync","defineQueries","defineQuery","v","afterEach","beforeEach","describe","expect","test","getScopedAuthData","zeroHttpFixtureSchema","createZeroSyncHostAdapter","zql","queries","project","byOwner","object","ownerId","string","param","args","where","db","executor","transaction","lastQueryFormat","statements","exec","sql","params","arguments","length","metadata","push","result","prepare","run","changes","Number","query","all","queryAst","_ast","format","rows","singular","work","effects","value","defer","effect2","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","effect","err","return","error","close","effectAuthID","validatedAuthID","adapter","schema","models","mutate","create","authData","server","tx","id","toBe","insert","asyncTasks","_getScopedAuthData","createServerActions","validateMutation","Object","keys","mutators","toEqual","context","name","mutationContext","table","publicTable","kind","effectRuns","reject","Error","catch","caught","toMatchObject","message","details","q","one"],"sources":["../../src/syncHost.test.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.6.13",
3
+ "version": "0.6.15",
4
4
  "description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
5
5
  "sideEffects": false,
6
6
  "source": "src/index.ts",
@@ -99,16 +99,16 @@
99
99
  }
100
100
  },
101
101
  "dependencies": {
102
- "@take-out/helpers": "0.6.13",
102
+ "@take-out/helpers": "0.6.15",
103
103
  "chokidar": "^4.0.3",
104
104
  "citty": "^0.1.6",
105
105
  "valibot": "^1.1.0"
106
106
  },
107
107
  "peerDependencies": {
108
- "pg": ">=8.0.0",
109
108
  "@rocicorp/zero": ">=1.5.0",
110
109
  "drizzle-orm": ">=1.0.0-beta.0 <2",
111
- "drizzle-zero": ">=1.0.0-beta.0",
110
+ "drizzle-zero-sqlite": "^0.5.20",
111
+ "pg": ">=8.0.0",
112
112
  "react": "*",
113
113
  "react-native": "*"
114
114
  },
@@ -122,7 +122,7 @@
122
122
  "drizzle-orm": {
123
123
  "optional": true
124
124
  },
125
- "drizzle-zero": {
125
+ "drizzle-zero-sqlite": {
126
126
  "optional": true
127
127
  }
128
128
  },
@@ -131,7 +131,6 @@
131
131
  "@types/node": "25.2.0",
132
132
  "@types/pg": "^8.11.10",
133
133
  "@types/react": "^19.0.0",
134
- "drizzle-zero": "1.0.0-beta.0",
135
134
  "jsdom": "29.1.1",
136
135
  "oxfmt": "^0.16.0",
137
136
  "oxlint": "^1.31.0",
@@ -1,3 +1,3 @@
1
- export { drizzleZeroConfig as createSchemaFromDrizzle } from 'drizzle-zero'
2
- export { createZeroTableBuilder } from 'drizzle-zero'
1
+ export { drizzleZeroConfig as createSchemaFromDrizzle } from 'drizzle-zero-sqlite'
2
+ export { createZeroTableBuilder } from 'drizzle-zero-sqlite'
3
3
  export { generateDrizzleSchemaFile } from './generate'
@@ -0,0 +1,427 @@
1
+ import { mustGetQuery } from '@rocicorp/zero'
2
+
3
+ import { createPermissions } from './createPermissions'
4
+ import { createMutators } from './helpers/createMutators'
5
+ import {
6
+ getScopedAuthData,
7
+ isInZeroMutation,
8
+ mutatorContext,
9
+ runWithAuthScope,
10
+ } from './helpers/mutatorContext'
11
+ import { runWithQueryContext } from './helpers/queryContext'
12
+ import { getMutationsPermissions } from './modelRegistry'
13
+ import { setCustomQueries } from './run'
14
+ import { getZQL, setEnvironment, setSchema } from './state'
15
+ import { setEvaluatingPermission } from './where'
16
+ import { setRunner } from './zeroRunner'
17
+
18
+ import type {
19
+ AdminRoleMode,
20
+ AsyncAction,
21
+ AuthData,
22
+ GenericModels,
23
+ MutatorContext,
24
+ QueryBuilder,
25
+ Transaction,
26
+ } from './types'
27
+ import type {
28
+ AnyQueryRegistry,
29
+ HumanReadable,
30
+ Query,
31
+ Schema as ZeroSchema,
32
+ } from '@rocicorp/zero'
33
+ import type { Database, TransactionProviderInput } from '@rocicorp/zero/server'
34
+
35
+ type MutateAuthData = Pick<AuthData, 'email' | 'id'> & Partial<AuthData>
36
+
37
+ export type MutateOptions = {
38
+ authData?: MutateAuthData
39
+ awaitEffects?: boolean
40
+ }
41
+
42
+ export type ServerMutate<Models extends GenericModels> = {
43
+ [Key in keyof Models]: {
44
+ [K in keyof Models[Key]['mutate']]: Models[Key]['mutate'][K] extends (
45
+ ctx: MutatorContext,
46
+ arg: infer Arg,
47
+ ) => any
48
+ ? (arg: Arg, options?: MutateOptions) => Promise<void>
49
+ : (options?: MutateOptions) => Promise<void>
50
+ }
51
+ }
52
+
53
+ export type ValidateQueryArgs = {
54
+ authData: AuthData | null
55
+ queryName: string
56
+ params: unknown
57
+ }
58
+
59
+ export type ValidateMutationArgs = {
60
+ authData: AuthData | null
61
+ mutatorName: string
62
+ tableName: string
63
+ args: unknown
64
+ }
65
+
66
+ export type ValidateQueryFn = (args: ValidateQueryArgs) => void
67
+ export type ValidateMutationFn = (args: ValidateMutationArgs) => void | Promise<void>
68
+
69
+ export type ServerQueryResolverOptions = {
70
+ authData: AuthData | null
71
+ name: string
72
+ args: unknown
73
+ queries: AnyQueryRegistry
74
+ permissions: ReturnType<typeof createPermissions>
75
+ validateQuery?: ValidateQueryFn
76
+ }
77
+
78
+ export function resolveServerQuery({
79
+ authData,
80
+ name,
81
+ args,
82
+ queries,
83
+ permissions,
84
+ validateQuery,
85
+ }: ServerQueryResolverOptions) {
86
+ if (name.startsWith('permission.')) {
87
+ const table = name.slice('permission.'.length)
88
+ const { objOrId } = args as {
89
+ objOrId: string | Record<string, any>
90
+ }
91
+ const permission = getMutationsPermissions(table)
92
+ if (!permission) {
93
+ throw new Error(`[permission] no permission defined for table: ${table}`)
94
+ }
95
+ setEvaluatingPermission(true)
96
+ try {
97
+ return (getZQL() as any)[table]
98
+ .where((eb: any) => {
99
+ return permissions.buildPermissionQuery(
100
+ authData,
101
+ eb,
102
+ permission,
103
+ objOrId,
104
+ table,
105
+ )
106
+ })
107
+ .one()
108
+ } finally {
109
+ setEvaluatingPermission(false)
110
+ }
111
+ }
112
+
113
+ if (validateQuery) {
114
+ validateQuery({ authData, queryName: name, params: args })
115
+ }
116
+
117
+ const query = (mustGetQuery as any)(queries, name)
118
+ return query.fn({ args, ctx: authData })
119
+ }
120
+
121
+ export type TransactionAttemptLifecycle = {
122
+ beginAttempt(): void
123
+ completeAttempt(): void
124
+ rollbackAttempt(): void
125
+ commitTransaction(): void
126
+ rollbackTransaction(): void
127
+ }
128
+
129
+ export type ZeroServerDatabase = Database<Transaction>
130
+
131
+ export type ZeroServerCommonOptions<
132
+ Schema extends ZeroSchema,
133
+ Models extends GenericModels,
134
+ ServerActions extends Record<string, unknown>,
135
+ > = {
136
+ schema: Schema
137
+ models: Models
138
+ createServerActions: () => ServerActions
139
+ queries?: AnyQueryRegistry
140
+ /** generated validators keyed by model and mutation name */
141
+ mutations?: Record<string, Record<string, any>>
142
+ /** synchronous query authorization hook; throw to reject */
143
+ validateQuery?: ValidateQueryFn
144
+ /** mutation authorization hook; throw to reject */
145
+ validateMutation?: ValidateMutationFn
146
+ /** controls which operations the admin role bypasses */
147
+ defaultAllowAdminRole?: AdminRoleMode
148
+ /** auth data used by direct server mutations when no scope provides it */
149
+ defaultMutateAuthData?: MutateAuthData
150
+ }
151
+
152
+ export type ZeroDirectServerOptions<
153
+ Schema extends ZeroSchema,
154
+ Models extends GenericModels,
155
+ ServerActions extends Record<string, unknown>,
156
+ > = ZeroServerCommonOptions<Schema, Models, ServerActions> & {
157
+ createDatabase: () => ZeroServerDatabase
158
+ }
159
+
160
+ export type ZeroDirectServer<Schema extends ZeroSchema, Models extends GenericModels> = {
161
+ transaction: <
162
+ CB extends (tx: Transaction) => Promise<any>,
163
+ Returns extends CB extends (tx: Transaction) => Promise<infer X> ? X : never,
164
+ >(
165
+ query: CB,
166
+ ) => Promise<Returns>
167
+ mutate: ServerMutate<Models>
168
+ query: <R>(
169
+ cb: (q: QueryBuilder) => Query<any, Schema, R>,
170
+ authData?: AuthData | null,
171
+ ) => Promise<HumanReadable<R>>
172
+ }
173
+
174
+ export function createAsyncTaskCollector() {
175
+ const committed: AsyncAction[] = []
176
+ let attempt: AsyncAction[] | undefined
177
+ let completedAttempt: AsyncAction[] | undefined
178
+ const current = () => attempt ?? committed
179
+ const queue = new Proxy([] as AsyncAction[], {
180
+ deleteProperty(_target, property) {
181
+ return Reflect.deleteProperty(current(), property)
182
+ },
183
+ get(_target, property) {
184
+ const target = current()
185
+ const value = Reflect.get(target, property, target)
186
+ return typeof value === 'function' ? value.bind(target) : value
187
+ },
188
+ getOwnPropertyDescriptor(_target, property) {
189
+ return Reflect.getOwnPropertyDescriptor(current(), property)
190
+ },
191
+ has(_target, property) {
192
+ return Reflect.has(current(), property)
193
+ },
194
+ ownKeys() {
195
+ return Reflect.ownKeys(current())
196
+ },
197
+ set(_target, property, value) {
198
+ return Reflect.set(current(), property, value)
199
+ },
200
+ })
201
+
202
+ const lifecycle: TransactionAttemptLifecycle = {
203
+ beginAttempt() {
204
+ attempt = []
205
+ completedAttempt = undefined
206
+ },
207
+ completeAttempt() {
208
+ completedAttempt = attempt
209
+ attempt = undefined
210
+ },
211
+ rollbackAttempt() {
212
+ attempt = undefined
213
+ completedAttempt = undefined
214
+ },
215
+ commitTransaction() {
216
+ if (completedAttempt) committed.push(...completedAttempt)
217
+ completedAttempt = undefined
218
+ },
219
+ rollbackTransaction() {
220
+ attempt = undefined
221
+ completedAttempt = undefined
222
+ },
223
+ }
224
+
225
+ return { committed, lifecycle, queue }
226
+ }
227
+
228
+ export function createZeroDirectServerRuntime<
229
+ Schema extends ZeroSchema,
230
+ Models extends GenericModels,
231
+ ServerActions extends Record<string, unknown>,
232
+ >({
233
+ createDatabase,
234
+ createServerActions,
235
+ defaultAllowAdminRole = 'all',
236
+ defaultMutateAuthData = {} as MutateAuthData,
237
+ models,
238
+ mutations: mutationValidators,
239
+ queries,
240
+ schema,
241
+ validateMutation,
242
+ validateQuery,
243
+ }: ZeroDirectServerOptions<Schema, Models, ServerActions>): {
244
+ permissions: ReturnType<typeof createPermissions<Schema>>
245
+ server: ZeroDirectServer<Schema, Models>
246
+ } {
247
+ setSchema(schema)
248
+ setEnvironment('server')
249
+
250
+ const permissions = createPermissions<Schema>({
251
+ environment: 'server',
252
+ schema,
253
+ adminRoleMode: defaultAllowAdminRole,
254
+ })
255
+
256
+ async function runTransaction<
257
+ CB extends (tx: Transaction) => Promise<any>,
258
+ Returns extends CB extends (tx: Transaction) => Promise<infer X> ? X : never,
259
+ >(database: ZeroServerDatabase, query: CB): Promise<Returns> {
260
+ try {
261
+ if (isInZeroMutation()) {
262
+ const { tx } = mutatorContext()
263
+ return await query(tx)
264
+ }
265
+ return (await database.transaction(query, dummyTransactionInput)) as Returns
266
+ } catch (err) {
267
+ if ((err as any)?.name !== 'PermissionError') {
268
+ console.error(`Error running transaction(): ${err}`)
269
+ }
270
+ throw err
271
+ }
272
+ }
273
+
274
+ async function transaction<
275
+ CB extends (tx: Transaction) => Promise<any>,
276
+ Returns extends CB extends (tx: Transaction) => Promise<infer X> ? X : never,
277
+ >(query: CB): Promise<Returns> {
278
+ return runTransaction(createDatabase(), query)
279
+ }
280
+
281
+ async function runMutate(
282
+ modelName: string,
283
+ mutatorName: string,
284
+ mutatorArg: unknown,
285
+ options?: MutateOptions,
286
+ ) {
287
+ let authData = options?.authData
288
+ if (!authData) {
289
+ const scoped = getScopedAuthData()
290
+ if (scoped) authData = scoped as MutateAuthData
291
+ }
292
+
293
+ const tasks = createAsyncTaskCollector()
294
+ const mutators = createMutators({
295
+ models,
296
+ environment: 'server',
297
+ asyncTasks: tasks.queue,
298
+ authData: {
299
+ ...defaultMutateAuthData,
300
+ ...authData,
301
+ },
302
+ createServerActions,
303
+ can: permissions.can,
304
+ validateMutation,
305
+ mutationValidators,
306
+ })
307
+ const modelMutators = mutators[modelName as keyof typeof mutators] as Record<
308
+ string,
309
+ (tx: Transaction, arg?: unknown) => Promise<void>
310
+ >
311
+ const mutator = modelMutators[mutatorName]
312
+
313
+ await runTransaction(
314
+ createDatabaseWithLifecycle(createDatabase(), tasks.lifecycle),
315
+ async (tx) => {
316
+ await mutator(tx, mutatorArg)
317
+ },
318
+ )
319
+
320
+ if (tasks.committed.length) {
321
+ const resolvedAuth = authData ?? null
322
+ const promise = Promise.all(
323
+ tasks.committed.map((task) => runWithAuthScope(resolvedAuth, task)),
324
+ )
325
+ if (options?.awaitEffects) {
326
+ await promise
327
+ } else {
328
+ promise.catch((err: unknown) => {
329
+ console.error('[mutate] async tasks failed', err)
330
+ })
331
+ }
332
+ }
333
+ }
334
+
335
+ const mutate = new Proxy({} as ServerMutate<Models>, {
336
+ get(_, modelName: string) {
337
+ return new Proxy(
338
+ {},
339
+ {
340
+ get(_, mutatorName: string) {
341
+ return (arg: unknown, options?: MutateOptions) =>
342
+ runMutate(modelName, mutatorName, arg, options)
343
+ },
344
+ },
345
+ )
346
+ },
347
+ })
348
+
349
+ function query<R>(
350
+ cb: (q: QueryBuilder) => Query<any, Schema, R>,
351
+ authData?: AuthData | null,
352
+ ): Promise<HumanReadable<R>> {
353
+ const run = () =>
354
+ transaction(async (tx) => {
355
+ return tx.run(cb(getZQL()))
356
+ }) as any
357
+
358
+ if (authData !== undefined) {
359
+ return runWithQueryContext({ authData }, run)
360
+ }
361
+ return run()
362
+ }
363
+
364
+ if (queries) {
365
+ setCustomQueries(queries)
366
+ }
367
+
368
+ setRunner((queryObj) => {
369
+ return transaction(async (tx) => {
370
+ return tx.run(queryObj)
371
+ })
372
+ })
373
+
374
+ return {
375
+ permissions,
376
+ server: {
377
+ transaction,
378
+ mutate,
379
+ query,
380
+ },
381
+ }
382
+ }
383
+
384
+ export function createZeroDirectServer<
385
+ Schema extends ZeroSchema,
386
+ Models extends GenericModels,
387
+ ServerActions extends Record<string, unknown>,
388
+ >(
389
+ options: ZeroDirectServerOptions<Schema, Models, ServerActions>,
390
+ ): ZeroDirectServer<Schema, Models> {
391
+ return createZeroDirectServerRuntime(options).server
392
+ }
393
+
394
+ function createDatabaseWithLifecycle(
395
+ database: ZeroServerDatabase,
396
+ lifecycle: TransactionAttemptLifecycle,
397
+ ): ZeroServerDatabase {
398
+ return {
399
+ async transaction(callback, input) {
400
+ try {
401
+ const value = await database.transaction(async (tx, hooks) => {
402
+ lifecycle.beginAttempt()
403
+ try {
404
+ const result = await callback(tx, hooks)
405
+ lifecycle.completeAttempt()
406
+ return result
407
+ } catch (error) {
408
+ lifecycle.rollbackAttempt()
409
+ throw error
410
+ }
411
+ }, input)
412
+ lifecycle.commitTransaction()
413
+ return value
414
+ } catch (error) {
415
+ lifecycle.rollbackTransaction()
416
+ throw error
417
+ }
418
+ },
419
+ }
420
+ }
421
+
422
+ const dummyTransactionInput: TransactionProviderInput = {
423
+ clientGroupID: 'unused',
424
+ clientID: 'unused',
425
+ mutationID: 42,
426
+ upstreamSchema: 'unused',
427
+ }
@@ -8,6 +8,7 @@ import { createZeroSQLiteServer } from './createZeroSQLiteServer'
8
8
  import { zeroHttpFixtureSchema } from './httpPull/fixtureSchema'
9
9
 
10
10
  import type {
11
+ SqlStatementMetadata,
11
12
  SQLiteTransactionExecutor,
12
13
  SQLiteTransactionProvider,
13
14
  } from './createZeroSQLiteServer'
@@ -115,6 +116,7 @@ describe('createZeroSQLiteServer', () => {
115
116
  let db: DatabaseSync
116
117
  let retryNextTransaction: boolean
117
118
  let transactionProvider: SQLiteTransactionProvider
119
+ let statements: SqlStatementMetadata[]
118
120
 
119
121
  beforeEach(() => {
120
122
  db = new DatabaseSync(':memory:')
@@ -126,9 +128,12 @@ describe('createZeroSQLiteServer', () => {
126
128
  )
127
129
 
128
130
  retryNextTransaction = false
131
+ statements = []
129
132
  const executor: SQLiteTransactionExecutor = {
130
- async exec(sql, params = []) {
131
- db.prepare(sql).run(...(params as SQLInputValue[]))
133
+ async exec(sql, params = [], metadata) {
134
+ if (metadata) statements.push(metadata)
135
+ const result = db.prepare(sql).run(...(params as SQLInputValue[]))
136
+ return { changes: Number(result.changes) }
132
137
  },
133
138
  async query<Row extends Record<string, unknown>>(sql, params = []) {
134
139
  return db.prepare(sql).all(...(params as SQLInputValue[])) as Row[]
@@ -165,7 +170,9 @@ describe('createZeroSQLiteServer', () => {
165
170
  return (format.singular ? rows[0] : rows) as Result
166
171
  },
167
172
  }
168
- const run = async <R>(callback: (tx: SQLiteTransactionExecutor) => Promise<R>) => {
173
+ const run = async <R>(
174
+ callback: (tx: SQLiteTransactionExecutor) => R | Promise<R>,
175
+ ) => {
169
176
  db.exec('BEGIN')
170
177
  try {
171
178
  const value = await callback(executor)
@@ -177,7 +184,7 @@ describe('createZeroSQLiteServer', () => {
177
184
  }
178
185
  }
179
186
  transactionProvider = async <R>(
180
- callback: (tx: SQLiteTransactionExecutor) => Promise<R>,
187
+ callback: (tx: SQLiteTransactionExecutor) => R | Promise<R>,
181
188
  ) => {
182
189
  if (retryNextTransaction) {
183
190
  retryNextTransaction = false
@@ -403,6 +410,12 @@ describe('createZeroSQLiteServer', () => {
403
410
 
404
411
  await server.mutate.note.delete({ id: 'n1' })
405
412
  expect(db.prepare('SELECT * FROM note_records').all()).toEqual([])
413
+ expect(statements).toEqual([
414
+ { table: 'note_records', publicTable: 'note', kind: 'insert' },
415
+ { table: 'note_records', publicTable: 'note', kind: 'upsert' },
416
+ { table: 'note_records', publicTable: 'note', kind: 'update' },
417
+ { table: 'note_records', publicTable: 'note', kind: 'delete' },
418
+ ])
406
419
  })
407
420
 
408
421
  test('decodes destination rows through a hidden two-hop junction', async () => {
@@ -435,7 +448,9 @@ describe('createZeroSQLiteServer', () => {
435
448
  }
436
449
  let receivedQueryName: string | undefined
437
450
  const hydratedExecutor = {
438
- async exec() {},
451
+ async exec() {
452
+ return { changes: 0 }
453
+ },
439
454
  async query() {
440
455
  return []
441
456
  },