on-zero 0.6.14 → 0.6.16

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 (163) hide show
  1. package/dist/cjs/asyncTasks.cjs +51 -0
  2. package/dist/cjs/asyncTasks.native.js +84 -0
  3. package/dist/cjs/asyncTasks.native.js.map +1 -0
  4. package/dist/cjs/cli.cjs +8 -1
  5. package/dist/cjs/cli.native.js +8 -1
  6. package/dist/cjs/cli.native.js.map +1 -1
  7. package/dist/cjs/createSchemaFromDrizzle.cjs +4 -4
  8. package/dist/cjs/createSchemaFromDrizzle.native.js +4 -4
  9. package/dist/cjs/createSchemaFromDrizzle.native.js.map +1 -1
  10. package/dist/cjs/createZeroDirectServer.cjs +269 -0
  11. package/dist/cjs/createZeroDirectServer.native.js +287 -0
  12. package/dist/cjs/createZeroDirectServer.native.js.map +1 -0
  13. package/dist/cjs/createZeroSQLiteServer.cjs +8 -277
  14. package/dist/cjs/createZeroSQLiteServer.native.js +8 -390
  15. package/dist/cjs/createZeroSQLiteServer.native.js.map +1 -1
  16. package/dist/cjs/createZeroSQLiteServer.test.cjs +36 -9
  17. package/dist/cjs/createZeroSQLiteServer.test.native.js +37 -9
  18. package/dist/cjs/createZeroSQLiteServer.test.native.js.map +1 -1
  19. package/dist/cjs/createZeroServer.test.cjs +79 -1
  20. package/dist/cjs/createZeroServer.test.native.js +85 -1
  21. package/dist/cjs/createZeroServer.test.native.js.map +1 -1
  22. package/dist/cjs/createZeroServerCore.cjs +28 -208
  23. package/dist/cjs/createZeroServerCore.native.js +33 -218
  24. package/dist/cjs/createZeroServerCore.native.js.map +1 -1
  25. package/dist/cjs/generate.cjs +15 -5
  26. package/dist/cjs/generate.native.js +15 -5
  27. package/dist/cjs/generate.native.js.map +1 -1
  28. package/dist/cjs/generate.test.cjs +55 -0
  29. package/dist/cjs/generate.test.native.js +55 -0
  30. package/dist/cjs/generate.test.native.js.map +1 -1
  31. package/dist/cjs/helpers/createMutators.cjs +2 -2
  32. package/dist/cjs/helpers/createMutators.native.js +2 -2
  33. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  34. package/dist/cjs/index.cjs +1 -0
  35. package/dist/cjs/index.native.js +1 -0
  36. package/dist/cjs/index.native.js.map +1 -1
  37. package/dist/cjs/server.cjs +2 -1
  38. package/dist/cjs/sqliteRuntime.cjs +318 -0
  39. package/dist/cjs/sqliteRuntime.native.js +438 -0
  40. package/dist/cjs/sqliteRuntime.native.js.map +1 -0
  41. package/dist/cjs/syncHost.cjs +26 -12
  42. package/dist/cjs/syncHost.native.js +32 -16
  43. package/dist/cjs/syncHost.native.js.map +1 -1
  44. package/dist/cjs/syncHost.test.cjs +15 -4
  45. package/dist/cjs/syncHost.test.native.js +16 -4
  46. package/dist/cjs/syncHost.test.native.js.map +1 -1
  47. package/dist/cjs/vite-plugin.cjs +2 -1
  48. package/dist/cjs/vite-plugin.native.js +2 -1
  49. package/dist/cjs/vite-plugin.native.js.map +1 -1
  50. package/dist/esm/asyncTasks.mjs +26 -0
  51. package/dist/esm/asyncTasks.mjs.map +1 -0
  52. package/dist/esm/asyncTasks.native.js +56 -0
  53. package/dist/esm/asyncTasks.native.js.map +1 -0
  54. package/dist/esm/cli.mjs +8 -1
  55. package/dist/esm/cli.mjs.map +1 -1
  56. package/dist/esm/cli.native.js +8 -1
  57. package/dist/esm/cli.native.js.map +1 -1
  58. package/dist/esm/createSchemaFromDrizzle.mjs +2 -2
  59. package/dist/esm/createSchemaFromDrizzle.native.js +2 -2
  60. package/dist/esm/createZeroDirectServer.mjs +241 -0
  61. package/dist/esm/createZeroDirectServer.mjs.map +1 -0
  62. package/dist/esm/createZeroDirectServer.native.js +256 -0
  63. package/dist/esm/createZeroDirectServer.native.js.map +1 -0
  64. package/dist/esm/createZeroSQLiteServer.mjs +3 -272
  65. package/dist/esm/createZeroSQLiteServer.mjs.map +1 -1
  66. package/dist/esm/createZeroSQLiteServer.native.js +3 -385
  67. package/dist/esm/createZeroSQLiteServer.native.js.map +1 -1
  68. package/dist/esm/createZeroSQLiteServer.test.mjs +36 -9
  69. package/dist/esm/createZeroSQLiteServer.test.mjs.map +1 -1
  70. package/dist/esm/createZeroSQLiteServer.test.native.js +37 -9
  71. package/dist/esm/createZeroSQLiteServer.test.native.js.map +1 -1
  72. package/dist/esm/createZeroServer.test.mjs +80 -2
  73. package/dist/esm/createZeroServer.test.mjs.map +1 -1
  74. package/dist/esm/createZeroServer.test.native.js +86 -2
  75. package/dist/esm/createZeroServer.test.native.js.map +1 -1
  76. package/dist/esm/createZeroServerCore.mjs +26 -205
  77. package/dist/esm/createZeroServerCore.mjs.map +1 -1
  78. package/dist/esm/createZeroServerCore.native.js +32 -216
  79. package/dist/esm/createZeroServerCore.native.js.map +1 -1
  80. package/dist/esm/generate.mjs +15 -5
  81. package/dist/esm/generate.mjs.map +1 -1
  82. package/dist/esm/generate.native.js +15 -5
  83. package/dist/esm/generate.native.js.map +1 -1
  84. package/dist/esm/generate.test.mjs +55 -1
  85. package/dist/esm/generate.test.mjs.map +1 -1
  86. package/dist/esm/generate.test.native.js +55 -1
  87. package/dist/esm/generate.test.native.js.map +1 -1
  88. package/dist/esm/helpers/createMutators.mjs +2 -2
  89. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  90. package/dist/esm/helpers/createMutators.native.js +2 -2
  91. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  92. package/dist/esm/index.js +1 -0
  93. package/dist/esm/index.js.map +1 -1
  94. package/dist/esm/index.mjs +1 -0
  95. package/dist/esm/index.mjs.map +1 -1
  96. package/dist/esm/index.native.js +1 -0
  97. package/dist/esm/index.native.js.map +1 -1
  98. package/dist/esm/server.mjs +1 -0
  99. package/dist/esm/server.mjs.map +1 -1
  100. package/dist/esm/sqliteRuntime.mjs +289 -0
  101. package/dist/esm/sqliteRuntime.mjs.map +1 -0
  102. package/dist/esm/sqliteRuntime.native.js +406 -0
  103. package/dist/esm/sqliteRuntime.native.js.map +1 -0
  104. package/dist/esm/syncHost.mjs +24 -10
  105. package/dist/esm/syncHost.mjs.map +1 -1
  106. package/dist/esm/syncHost.native.js +30 -14
  107. package/dist/esm/syncHost.native.js.map +1 -1
  108. package/dist/esm/syncHost.test.mjs +15 -4
  109. package/dist/esm/syncHost.test.mjs.map +1 -1
  110. package/dist/esm/syncHost.test.native.js +16 -4
  111. package/dist/esm/syncHost.test.native.js.map +1 -1
  112. package/dist/esm/vite-plugin.mjs +2 -1
  113. package/dist/esm/vite-plugin.mjs.map +1 -1
  114. package/dist/esm/vite-plugin.native.js +2 -1
  115. package/dist/esm/vite-plugin.native.js.map +1 -1
  116. package/lint/ssr-guards.js +8 -7
  117. package/package.json +5 -6
  118. package/readme.md +13 -4
  119. package/src/asyncTasks.ts +33 -0
  120. package/src/cli.ts +7 -1
  121. package/src/createSchemaFromDrizzle.ts +2 -2
  122. package/src/createZeroDirectServer.ts +411 -0
  123. package/src/createZeroSQLiteServer.test.ts +28 -12
  124. package/src/createZeroSQLiteServer.ts +14 -481
  125. package/src/createZeroServer.test.ts +86 -2
  126. package/src/createZeroServerCore.ts +39 -343
  127. package/src/generate.test.ts +75 -1
  128. package/src/generate.ts +30 -4
  129. package/src/helpers/createMutators.ts +3 -3
  130. package/src/helpers/mutatorContext.ts +1 -1
  131. package/src/index.ts +1 -0
  132. package/src/server.ts +2 -0
  133. package/src/sqliteRuntime.ts +512 -0
  134. package/src/syncHost.test.ts +12 -5
  135. package/src/syncHost.ts +55 -16
  136. package/src/types.ts +21 -3
  137. package/src/vite-plugin.ts +1 -0
  138. package/test-fixtures/server-return-types.ts +20 -2
  139. package/types/asyncTasks.d.ts +7 -0
  140. package/types/asyncTasks.d.ts.map +1 -0
  141. package/types/createSchemaFromDrizzle.d.ts +2 -2
  142. package/types/createSchemaFromDrizzle.d.ts.map +1 -1
  143. package/types/createZeroDirectServer.d.ts +80 -0
  144. package/types/createZeroDirectServer.d.ts.map +1 -0
  145. package/types/createZeroSQLiteServer.d.ts +5 -30
  146. package/types/createZeroSQLiteServer.d.ts.map +1 -1
  147. package/types/createZeroServerCore.d.ts +30 -87
  148. package/types/createZeroServerCore.d.ts.map +1 -1
  149. package/types/generate.d.ts +2 -0
  150. package/types/generate.d.ts.map +1 -1
  151. package/types/helpers/createMutators.d.ts +3 -3
  152. package/types/helpers/createMutators.d.ts.map +1 -1
  153. package/types/index.d.ts +1 -0
  154. package/types/index.d.ts.map +1 -1
  155. package/types/server.d.ts +2 -0
  156. package/types/server.d.ts.map +1 -1
  157. package/types/sqliteRuntime.d.ts +71 -0
  158. package/types/sqliteRuntime.d.ts.map +1 -0
  159. package/types/syncHost.d.ts +10 -19
  160. package/types/syncHost.d.ts.map +1 -1
  161. package/types/types.d.ts +18 -2
  162. package/types/types.d.ts.map +1 -1
  163. package/types/vite-plugin.d.ts.map +1 -1
@@ -0,0 +1,241 @@
1
+ import { mustGetQuery } from "@rocicorp/zero";
2
+ import { runAsyncTaskEntries } from "./asyncTasks.mjs";
3
+ import { createPermissions } from "./createPermissions.mjs";
4
+ import { createMutators } from "./helpers/createMutators.mjs";
5
+ import { getScopedAuthData, isInZeroMutation, mutatorContext, runWithAuthScope } from "./helpers/mutatorContext.mjs";
6
+ import { runWithQueryContext } from "./helpers/queryContext.mjs";
7
+ import { getMutationsPermissions } from "./modelRegistry.mjs";
8
+ import { setCustomQueries } from "./run.mjs";
9
+ import { getZQL, setEnvironment, setSchema } from "./state.mjs";
10
+ import { setEvaluatingPermission } from "./where.mjs";
11
+ import { setRunner } from "./zeroRunner.mjs";
12
+ function resolveServerQuery({
13
+ authData,
14
+ name,
15
+ args,
16
+ queries,
17
+ permissions,
18
+ validateQuery
19
+ }) {
20
+ if (name.startsWith("permission.")) {
21
+ const table = name.slice("permission.".length);
22
+ const {
23
+ objOrId
24
+ } = args;
25
+ const permission = getMutationsPermissions(table);
26
+ if (!permission) {
27
+ throw new Error(`[permission] no permission defined for table: ${table}`);
28
+ }
29
+ setEvaluatingPermission(true);
30
+ try {
31
+ return getZQL()[table].where(eb => {
32
+ return permissions.buildPermissionQuery(authData, eb, permission, objOrId, table);
33
+ }).one();
34
+ } finally {
35
+ setEvaluatingPermission(false);
36
+ }
37
+ }
38
+ if (validateQuery) {
39
+ validateQuery({
40
+ authData,
41
+ queryName: name,
42
+ params: args
43
+ });
44
+ }
45
+ const query = mustGetQuery(queries, name);
46
+ return query.fn({
47
+ args,
48
+ ctx: authData
49
+ });
50
+ }
51
+ function createAsyncTaskCollector() {
52
+ const committed = [];
53
+ let attempt;
54
+ let completedAttempt;
55
+ const enqueueTask = (task, opts) => {
56
+ const entries = attempt ?? committed;
57
+ entries.push({
58
+ task,
59
+ barrier: opts?.barrier === true
60
+ });
61
+ };
62
+ const lifecycle = {
63
+ beginAttempt() {
64
+ attempt = [];
65
+ completedAttempt = void 0;
66
+ },
67
+ completeAttempt() {
68
+ completedAttempt = attempt;
69
+ attempt = void 0;
70
+ },
71
+ rollbackAttempt() {
72
+ attempt = void 0;
73
+ completedAttempt = void 0;
74
+ },
75
+ commitTransaction() {
76
+ if (completedAttempt) committed.push(...completedAttempt);
77
+ completedAttempt = void 0;
78
+ },
79
+ rollbackTransaction() {
80
+ attempt = void 0;
81
+ completedAttempt = void 0;
82
+ }
83
+ };
84
+ return {
85
+ committed,
86
+ enqueueTask,
87
+ lifecycle
88
+ };
89
+ }
90
+ function createZeroDirectServerRuntime({
91
+ createDatabase,
92
+ createServerActions,
93
+ defaultAllowAdminRole = "all",
94
+ defaultMutateAuthData = {},
95
+ models,
96
+ mutations: mutationValidators,
97
+ queries,
98
+ schema,
99
+ validateMutation,
100
+ validateQuery
101
+ }) {
102
+ setSchema(schema);
103
+ setEnvironment("server");
104
+ const permissions = createPermissions({
105
+ environment: "server",
106
+ schema,
107
+ adminRoleMode: defaultAllowAdminRole
108
+ });
109
+ async function runTransaction(database, query2) {
110
+ try {
111
+ if (isInZeroMutation()) {
112
+ const {
113
+ tx
114
+ } = mutatorContext();
115
+ return await query2(tx);
116
+ }
117
+ return await database.transaction(query2, dummyTransactionInput);
118
+ } catch (err) {
119
+ if (err?.name !== "PermissionError") {
120
+ console.error(`Error running transaction(): ${err}`);
121
+ }
122
+ throw err;
123
+ }
124
+ }
125
+ async function transaction(query2) {
126
+ return runTransaction(createDatabase(), query2);
127
+ }
128
+ async function runMutate(modelName, mutatorName, mutatorArg, options) {
129
+ let authData = options?.authData;
130
+ if (!authData) {
131
+ const scoped = getScopedAuthData();
132
+ if (scoped) authData = scoped;
133
+ }
134
+ const tasks = createAsyncTaskCollector();
135
+ const mutators = createMutators({
136
+ models,
137
+ environment: "server",
138
+ enqueueTask: tasks.enqueueTask,
139
+ authData: {
140
+ ...defaultMutateAuthData,
141
+ ...authData
142
+ },
143
+ createServerActions,
144
+ can: permissions.can,
145
+ validateMutation,
146
+ mutationValidators
147
+ });
148
+ const modelMutators = mutators[modelName];
149
+ const mutator = modelMutators[mutatorName];
150
+ await runTransaction(createDatabaseWithLifecycle(createDatabase(), tasks.lifecycle), async tx => {
151
+ await mutator(tx, mutatorArg);
152
+ });
153
+ if (tasks.committed.length) {
154
+ const resolvedAuth = authData ?? null;
155
+ const entries = tasks.committed.map(entry => ({
156
+ ...entry,
157
+ task: () => runWithAuthScope(resolvedAuth, entry.task)
158
+ }));
159
+ if (options?.awaitEffects) {
160
+ await Promise.all(entries.map(({
161
+ task
162
+ }) => task()));
163
+ } else {
164
+ await runAsyncTaskEntries(entries, {
165
+ background: () => void 0
166
+ });
167
+ }
168
+ }
169
+ }
170
+ const mutate = new Proxy({}, {
171
+ get(_, modelName) {
172
+ return new Proxy({}, {
173
+ get(_2, mutatorName) {
174
+ return (arg, options) => runMutate(modelName, mutatorName, arg, options);
175
+ }
176
+ });
177
+ }
178
+ });
179
+ function query(cb, authData) {
180
+ const run = () => transaction(async tx => {
181
+ return tx.run(cb(getZQL()));
182
+ });
183
+ if (authData !== void 0) {
184
+ return runWithQueryContext({
185
+ authData
186
+ }, run);
187
+ }
188
+ return run();
189
+ }
190
+ if (queries) {
191
+ setCustomQueries(queries);
192
+ }
193
+ setRunner(queryObj => {
194
+ return transaction(async tx => {
195
+ return tx.run(queryObj);
196
+ });
197
+ });
198
+ return {
199
+ permissions,
200
+ server: {
201
+ transaction,
202
+ mutate,
203
+ query
204
+ }
205
+ };
206
+ }
207
+ function createZeroDirectServer(options) {
208
+ return createZeroDirectServerRuntime(options).server;
209
+ }
210
+ function createDatabaseWithLifecycle(database, lifecycle) {
211
+ return {
212
+ async transaction(callback, input) {
213
+ try {
214
+ const value = await database.transaction(async (tx, hooks) => {
215
+ lifecycle.beginAttempt();
216
+ try {
217
+ const result = await callback(tx, hooks);
218
+ lifecycle.completeAttempt();
219
+ return result;
220
+ } catch (error) {
221
+ lifecycle.rollbackAttempt();
222
+ throw error;
223
+ }
224
+ }, input);
225
+ lifecycle.commitTransaction();
226
+ return value;
227
+ } catch (error) {
228
+ lifecycle.rollbackTransaction();
229
+ throw error;
230
+ }
231
+ }
232
+ };
233
+ }
234
+ const dummyTransactionInput = {
235
+ clientGroupID: "unused",
236
+ clientID: "unused",
237
+ mutationID: 42,
238
+ upstreamSchema: "unused"
239
+ };
240
+ export { createAsyncTaskCollector, createZeroDirectServer, createZeroDirectServerRuntime, resolveServerQuery };
241
+ //# sourceMappingURL=createZeroDirectServer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mustGetQuery","runAsyncTaskEntries","createPermissions","createMutators","getScopedAuthData","isInZeroMutation","mutatorContext","runWithAuthScope","runWithQueryContext","getMutationsPermissions","setCustomQueries","getZQL","setEnvironment","setSchema","setEvaluatingPermission","setRunner","resolveServerQuery","authData","name","args","queries","permissions","validateQuery","startsWith","table","slice","length","objOrId","permission","Error","where","eb","buildPermissionQuery","one","queryName","params","query","fn","ctx","createAsyncTaskCollector","committed","attempt","completedAttempt","enqueueTask","task","opts","entries","push","barrier","lifecycle","beginAttempt","completeAttempt","rollbackAttempt","commitTransaction","rollbackTransaction","createZeroDirectServerRuntime","createDatabase","createServerActions","defaultAllowAdminRole","defaultMutateAuthData","models","mutations","mutationValidators","schema","validateMutation","environment","adminRoleMode","runTransaction","database","query2","tx","transaction","dummyTransactionInput","err","console","error","runMutate","modelName","mutatorName","mutatorArg","options","scoped","tasks","mutators","can","modelMutators","mutator","createDatabaseWithLifecycle","resolvedAuth","map","entry","awaitEffects","Promise","all","background","mutate","Proxy","get","_","_2","arg","cb","run","queryObj","server","createZeroDirectServer","callback","input","value","hooks","result","clientGroupID","clientID","mutationID","upstreamSchema"],"sources":["../../src/createZeroDirectServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,256 @@
1
+ import { mustGetQuery } from "@rocicorp/zero";
2
+ import { runAsyncTaskEntries } from "./asyncTasks.native.js";
3
+ import { createPermissions } from "./createPermissions.native.js";
4
+ import { createMutators } from "./helpers/createMutators.native.js";
5
+ import { getScopedAuthData, isInZeroMutation, mutatorContext, runWithAuthScope } from "./helpers/mutatorContext.native.js";
6
+ import { runWithQueryContext } from "./helpers/queryContext.native.js";
7
+ import { getMutationsPermissions } from "./modelRegistry.native.js";
8
+ import { setCustomQueries } from "./run.native.js";
9
+ import { getZQL, setEnvironment, setSchema } from "./state.native.js";
10
+ import { setEvaluatingPermission } from "./where.native.js";
11
+ import { setRunner } from "./zeroRunner.native.js";
12
+ function resolveServerQuery(param) {
13
+ var {
14
+ authData,
15
+ name,
16
+ args,
17
+ queries,
18
+ permissions,
19
+ validateQuery
20
+ } = param;
21
+ if (name.startsWith("permission.")) {
22
+ var table = name.slice("permission.".length);
23
+ var {
24
+ objOrId
25
+ } = args;
26
+ var permission = getMutationsPermissions(table);
27
+ if (!permission) {
28
+ throw new Error(`[permission] no permission defined for table: ${table}`);
29
+ }
30
+ setEvaluatingPermission(true);
31
+ try {
32
+ return getZQL()[table].where(function (eb) {
33
+ return permissions.buildPermissionQuery(authData, eb, permission, objOrId, table);
34
+ }).one();
35
+ } finally {
36
+ setEvaluatingPermission(false);
37
+ }
38
+ }
39
+ if (validateQuery) {
40
+ validateQuery({
41
+ authData,
42
+ queryName: name,
43
+ params: args
44
+ });
45
+ }
46
+ var query = mustGetQuery(queries, name);
47
+ return query.fn({
48
+ args,
49
+ ctx: authData
50
+ });
51
+ }
52
+ function createAsyncTaskCollector() {
53
+ var committed = [];
54
+ var attempt;
55
+ var completedAttempt;
56
+ var enqueueTask = function (task, opts) {
57
+ var entries = attempt !== null && attempt !== void 0 ? attempt : committed;
58
+ entries.push({
59
+ task,
60
+ barrier: (opts === null || opts === void 0 ? void 0 : opts.barrier) === true
61
+ });
62
+ };
63
+ var lifecycle = {
64
+ beginAttempt() {
65
+ attempt = [];
66
+ completedAttempt = void 0;
67
+ },
68
+ completeAttempt() {
69
+ completedAttempt = attempt;
70
+ attempt = void 0;
71
+ },
72
+ rollbackAttempt() {
73
+ attempt = void 0;
74
+ completedAttempt = void 0;
75
+ },
76
+ commitTransaction() {
77
+ if (completedAttempt) committed.push(...completedAttempt);
78
+ completedAttempt = void 0;
79
+ },
80
+ rollbackTransaction() {
81
+ attempt = void 0;
82
+ completedAttempt = void 0;
83
+ }
84
+ };
85
+ return {
86
+ committed,
87
+ enqueueTask,
88
+ lifecycle
89
+ };
90
+ }
91
+ function createZeroDirectServerRuntime(param) {
92
+ var {
93
+ createDatabase,
94
+ createServerActions,
95
+ defaultAllowAdminRole = "all",
96
+ defaultMutateAuthData = {},
97
+ models,
98
+ mutations: mutationValidators,
99
+ queries,
100
+ schema,
101
+ validateMutation,
102
+ validateQuery
103
+ } = param;
104
+ setSchema(schema);
105
+ setEnvironment("server");
106
+ var permissions = createPermissions({
107
+ environment: "server",
108
+ schema,
109
+ adminRoleMode: defaultAllowAdminRole
110
+ });
111
+ async function runTransaction(database, query2) {
112
+ try {
113
+ if (isInZeroMutation()) {
114
+ var {
115
+ tx
116
+ } = mutatorContext();
117
+ return await query2(tx);
118
+ }
119
+ return await database.transaction(query2, dummyTransactionInput);
120
+ } catch (err) {
121
+ if ((err === null || err === void 0 ? void 0 : err.name) !== "PermissionError") {
122
+ console.error(`Error running transaction(): ${err}`);
123
+ }
124
+ throw err;
125
+ }
126
+ }
127
+ async function transaction(query2) {
128
+ return runTransaction(createDatabase(), query2);
129
+ }
130
+ async function runMutate(modelName, mutatorName, mutatorArg, options) {
131
+ var authData = options === null || options === void 0 ? void 0 : options.authData;
132
+ if (!authData) {
133
+ var scoped = getScopedAuthData();
134
+ if (scoped) authData = scoped;
135
+ }
136
+ var tasks = createAsyncTaskCollector();
137
+ var mutators = createMutators({
138
+ models,
139
+ environment: "server",
140
+ enqueueTask: tasks.enqueueTask,
141
+ authData: {
142
+ ...defaultMutateAuthData,
143
+ ...authData
144
+ },
145
+ createServerActions,
146
+ can: permissions.can,
147
+ validateMutation,
148
+ mutationValidators
149
+ });
150
+ var modelMutators = mutators[modelName];
151
+ var mutator = modelMutators[mutatorName];
152
+ await runTransaction(createDatabaseWithLifecycle(createDatabase(), tasks.lifecycle), async function (tx) {
153
+ await mutator(tx, mutatorArg);
154
+ });
155
+ if (tasks.committed.length) {
156
+ var resolvedAuth = authData !== null && authData !== void 0 ? authData : null;
157
+ var entries = tasks.committed.map(function (entry) {
158
+ return {
159
+ ...entry,
160
+ task: function () {
161
+ return runWithAuthScope(resolvedAuth, entry.task);
162
+ }
163
+ };
164
+ });
165
+ if (options === null || options === void 0 ? void 0 : options.awaitEffects) {
166
+ await Promise.all(entries.map(function (param2) {
167
+ var {
168
+ task
169
+ } = param2;
170
+ return task();
171
+ }));
172
+ } else {
173
+ await runAsyncTaskEntries(entries, {
174
+ background: function () {
175
+ return void 0;
176
+ }
177
+ });
178
+ }
179
+ }
180
+ }
181
+ var mutate = new Proxy({}, {
182
+ get(_, modelName) {
183
+ return new Proxy({}, {
184
+ get(_2, mutatorName) {
185
+ return function (arg, options) {
186
+ return runMutate(modelName, mutatorName, arg, options);
187
+ };
188
+ }
189
+ });
190
+ }
191
+ });
192
+ function query(cb, authData) {
193
+ var run = function () {
194
+ return transaction(async function (tx) {
195
+ return tx.run(cb(getZQL()));
196
+ });
197
+ };
198
+ if (authData !== void 0) {
199
+ return runWithQueryContext({
200
+ authData
201
+ }, run);
202
+ }
203
+ return run();
204
+ }
205
+ if (queries) {
206
+ setCustomQueries(queries);
207
+ }
208
+ setRunner(function (queryObj) {
209
+ return transaction(async function (tx) {
210
+ return tx.run(queryObj);
211
+ });
212
+ });
213
+ return {
214
+ permissions,
215
+ server: {
216
+ transaction,
217
+ mutate,
218
+ query
219
+ }
220
+ };
221
+ }
222
+ function createZeroDirectServer(options) {
223
+ return createZeroDirectServerRuntime(options).server;
224
+ }
225
+ function createDatabaseWithLifecycle(database, lifecycle) {
226
+ return {
227
+ async transaction(callback, input) {
228
+ try {
229
+ var value = await database.transaction(async function (tx, hooks) {
230
+ lifecycle.beginAttempt();
231
+ try {
232
+ var result = await callback(tx, hooks);
233
+ lifecycle.completeAttempt();
234
+ return result;
235
+ } catch (error) {
236
+ lifecycle.rollbackAttempt();
237
+ throw error;
238
+ }
239
+ }, input);
240
+ lifecycle.commitTransaction();
241
+ return value;
242
+ } catch (error) {
243
+ lifecycle.rollbackTransaction();
244
+ throw error;
245
+ }
246
+ }
247
+ };
248
+ }
249
+ var dummyTransactionInput = {
250
+ clientGroupID: "unused",
251
+ clientID: "unused",
252
+ mutationID: 42,
253
+ upstreamSchema: "unused"
254
+ };
255
+ export { createAsyncTaskCollector, createZeroDirectServer, createZeroDirectServerRuntime, resolveServerQuery };
256
+ //# sourceMappingURL=createZeroDirectServer.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mustGetQuery","runAsyncTaskEntries","createPermissions","createMutators","getScopedAuthData","isInZeroMutation","mutatorContext","runWithAuthScope","runWithQueryContext","getMutationsPermissions","setCustomQueries","getZQL","setEnvironment","setSchema","setEvaluatingPermission","setRunner","resolveServerQuery","param","authData","name","args","queries","permissions","validateQuery","startsWith","table","slice","length","objOrId","permission","Error","where","eb","buildPermissionQuery","one","queryName","params","query","fn","ctx","createAsyncTaskCollector","committed","attempt","completedAttempt","enqueueTask","task","opts","entries","push","barrier","lifecycle","beginAttempt","completeAttempt","rollbackAttempt","commitTransaction","rollbackTransaction","createZeroDirectServerRuntime","createDatabase","createServerActions","defaultAllowAdminRole","defaultMutateAuthData","models","mutations","mutationValidators","schema","validateMutation","environment","adminRoleMode","runTransaction","database","query2","tx","transaction","dummyTransactionInput","err","console","error","runMutate","modelName","mutatorName","mutatorArg","options","scoped","tasks","mutators","can","modelMutators","mutator","createDatabaseWithLifecycle","resolvedAuth","map","entry","awaitEffects","Promise","all","param2","background","mutate","Proxy","get","_","_2","arg","cb","run","queryObj","server","createZeroDirectServer","callback","input","value","hooks","result","clientGroupID","clientID","mutationID","upstreamSchema"],"sources":["../../src/createZeroDirectServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}