on-zero 0.16.16 → 0.16.17

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 (81) hide show
  1. package/dist/cjs/createZeroClient.httpAuth.test.cjs +5 -3
  2. package/dist/cjs/createZeroClient.httpAuth.test.native.js +3 -3
  3. package/dist/cjs/createZeroClient.httpAuth.test.native.js.map +1 -1
  4. package/dist/cjs/generate-helpers.cjs +21 -14
  5. package/dist/cjs/generate-helpers.native.js +50 -27
  6. package/dist/cjs/generate-helpers.native.js.map +1 -1
  7. package/dist/cjs/generate-helpers.test.cjs +146 -0
  8. package/dist/cjs/generate-helpers.test.native.js +149 -0
  9. package/dist/cjs/generate-helpers.test.native.js.map +1 -1
  10. package/dist/cjs/generate-lite.cjs +3 -3
  11. package/dist/cjs/generate-lite.native.js +5 -3
  12. package/dist/cjs/generate-lite.native.js.map +1 -1
  13. package/dist/cjs/generate-lite.test.cjs +56 -0
  14. package/dist/cjs/generate-lite.test.native.js +60 -0
  15. package/dist/cjs/generate-lite.test.native.js.map +1 -1
  16. package/dist/cjs/generate.cjs +37 -26
  17. package/dist/cjs/generate.native.js +58 -26
  18. package/dist/cjs/generate.native.js.map +1 -1
  19. package/dist/cjs/generate.test.cjs +109 -0
  20. package/dist/cjs/generate.test.native.js +115 -0
  21. package/dist/cjs/generate.test.native.js.map +1 -1
  22. package/dist/cjs/mutations.cjs +22 -11
  23. package/dist/cjs/mutations.native.js +42 -10
  24. package/dist/cjs/mutations.native.js.map +1 -1
  25. package/dist/cjs/mutations.test.cjs +228 -0
  26. package/dist/cjs/mutations.test.native.js +259 -0
  27. package/dist/cjs/mutations.test.native.js.map +1 -1
  28. package/dist/esm/createZeroClient.httpAuth.test.mjs +5 -3
  29. package/dist/esm/createZeroClient.httpAuth.test.mjs.map +1 -1
  30. package/dist/esm/createZeroClient.httpAuth.test.native.js +3 -3
  31. package/dist/esm/createZeroClient.httpAuth.test.native.js.map +1 -1
  32. package/dist/esm/generate-helpers.mjs +21 -15
  33. package/dist/esm/generate-helpers.mjs.map +1 -1
  34. package/dist/esm/generate-helpers.native.js +50 -28
  35. package/dist/esm/generate-helpers.native.js.map +1 -1
  36. package/dist/esm/generate-helpers.test.mjs +122 -0
  37. package/dist/esm/generate-helpers.test.mjs.map +1 -1
  38. package/dist/esm/generate-helpers.test.native.js +125 -0
  39. package/dist/esm/generate-helpers.test.native.js.map +1 -1
  40. package/dist/esm/generate-lite.mjs +4 -4
  41. package/dist/esm/generate-lite.mjs.map +1 -1
  42. package/dist/esm/generate-lite.native.js +6 -4
  43. package/dist/esm/generate-lite.native.js.map +1 -1
  44. package/dist/esm/generate-lite.test.mjs +56 -0
  45. package/dist/esm/generate-lite.test.mjs.map +1 -1
  46. package/dist/esm/generate-lite.test.native.js +60 -0
  47. package/dist/esm/generate-lite.test.native.js.map +1 -1
  48. package/dist/esm/generate.mjs +38 -27
  49. package/dist/esm/generate.mjs.map +1 -1
  50. package/dist/esm/generate.native.js +59 -27
  51. package/dist/esm/generate.native.js.map +1 -1
  52. package/dist/esm/generate.test.mjs +86 -1
  53. package/dist/esm/generate.test.mjs.map +1 -1
  54. package/dist/esm/generate.test.native.js +92 -1
  55. package/dist/esm/generate.test.native.js.map +1 -1
  56. package/dist/esm/index.native.js.map +1 -1
  57. package/dist/esm/mutations.mjs +22 -11
  58. package/dist/esm/mutations.mjs.map +1 -1
  59. package/dist/esm/mutations.native.js +42 -10
  60. package/dist/esm/mutations.native.js.map +1 -1
  61. package/dist/esm/mutations.test.mjs +229 -1
  62. package/dist/esm/mutations.test.mjs.map +1 -1
  63. package/dist/esm/mutations.test.native.js +260 -1
  64. package/dist/esm/mutations.test.native.js.map +1 -1
  65. package/package.json +2 -2
  66. package/src/createZeroClient.httpAuth.test.ts +4 -5
  67. package/src/generate-helpers.test.ts +124 -0
  68. package/src/generate-helpers.ts +43 -27
  69. package/src/generate-lite.test.ts +53 -0
  70. package/src/generate-lite.ts +16 -9
  71. package/src/generate.test.ts +92 -0
  72. package/src/generate.ts +60 -33
  73. package/src/mutations.test.ts +216 -1
  74. package/src/mutations.ts +39 -39
  75. package/types/generate-helpers.d.ts +3 -1
  76. package/types/generate-helpers.d.ts.map +1 -1
  77. package/types/generate-lite.d.ts +1 -0
  78. package/types/generate-lite.d.ts.map +1 -1
  79. package/types/generate.d.ts.map +1 -1
  80. package/types/mutations.d.ts +5 -2
  81. package/types/mutations.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["IS_SERVER_RUNTIME","setMutationsPermissions","mutationRegistry","global","globalThis","__onZeroMutationRegistry__","Map","proxyRegistry","__onZeroProxyRegistry__","getOrCreateMutationProxy","tableName","implementations","prior","get","set","existing","proxy","Proxy","_","key","ownKeys","current","Object","keys","getOwnPropertyDescriptor","enumerable","configurable","value","has","mutations","table","permissions","mutations2","schema","name","createCRUDMutation","action","customMutation","ctx","obj","runServerPermissionCheck","can","tx","mutate","crudMutations","insert","update","delete","upsert","finalMutations"],"sources":["../../src/mutations.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["setMutationsPermissions","getSchema","getZQL","mutationRegistry","global","globalThis","__onZeroMutationRegistry__","Map","proxyRegistry","__onZeroProxyRegistry__","getOrCreateMutationProxy","tableName","implementations","crud","prior","get","action","set","existing","proxy","Proxy","_","key","ownKeys","current","Object","keys","getOwnPropertyDescriptor","enumerable","configurable","value","has","mutations","table","permissions","mutations2","options","schema","name","createCRUDMutation","customMutation","ctx","obj","environment","tables","primaryKey","where","tx","run","one","can","mutate","crudMutations","insert","update","delete","upsert","finalMutations"],"sources":["../../src/mutations.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import { IS_SERVER_RUNTIME } from "./helpers/platform.native.js";
2
1
  import { setMutationsPermissions } from "./modelRegistry.native.js";
2
+ import { getSchema, getZQL } from "./state.native.js";
3
3
  function mutationRegistry() {
4
4
  var _global;
5
5
  var global = globalThis;
@@ -11,7 +11,14 @@ function proxyRegistry() {
11
11
  return (_global = global).__onZeroProxyRegistry__ || (_global.__onZeroProxyRegistry__ = /* @__PURE__ */new Map());
12
12
  }
13
13
  function getOrCreateMutationProxy(tableName, implementations) {
14
+ var crud = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true;
14
15
  var prior = mutationRegistry().get(tableName);
16
+ if (prior && !crud) {
17
+ for (var _i = 0, _iter = ["insert", "update", "delete", "upsert"]; _i < _iter.length; _i++) {
18
+ var action = _iter[_i];
19
+ if (!(action in implementations)) delete prior[action];
20
+ }
21
+ }
15
22
  mutationRegistry().set(tableName, prior ? {
16
23
  ...prior,
17
24
  ...implementations
@@ -47,24 +54,50 @@ function getOrCreateMutationProxy(tableName, implementations) {
47
54
  proxyRegistry().set(tableName, proxy);
48
55
  return proxy;
49
56
  }
50
- function mutations(table, permissions, mutations2) {
57
+ function mutations(table, permissions, mutations2, options) {
51
58
  if (permissions) {
52
59
  var tableName = typeof table === "string" ? table : table.schema.name;
60
+ setMutationsPermissions(tableName, permissions);
61
+ if ((options === null || options === void 0 ? void 0 : options.crud) === false) {
62
+ return getOrCreateMutationProxy(tableName, mutations2 !== null && mutations2 !== void 0 ? mutations2 : {}, false);
63
+ }
53
64
  var createCRUDMutation = function createCRUDMutation2(action) {
54
65
  var customMutation = mutations2 === null || mutations2 === void 0 ? void 0 : mutations2[action];
55
66
  if (customMutation) return customMutation;
56
67
  return async function (ctx, obj) {
57
- var runServerPermissionCheck = async function runServerPermissionCheck2() {
58
- if (IS_SERVER_RUNTIME) {
68
+ if (action === "upsert" && ctx.environment === "server") {
69
+ var existing = getZQL()[tableName];
70
+ var _iteratorNormalCompletion = true,
71
+ _didIteratorError = false,
72
+ _iteratorError = void 0;
73
+ try {
74
+ for (var _iterator = getSchema().tables[tableName].primaryKey[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
75
+ var key = _step.value;
76
+ existing = existing.where(key, obj[key]);
77
+ }
78
+ } catch (err) {
79
+ _didIteratorError = true;
80
+ _iteratorError = err;
81
+ } finally {
82
+ try {
83
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
84
+ _iterator.return();
85
+ }
86
+ } finally {
87
+ if (_didIteratorError) {
88
+ throw _iteratorError;
89
+ }
90
+ }
91
+ }
92
+ if (await ctx.tx.run(existing.one())) {
59
93
  await ctx.can(permissions, obj);
60
94
  }
61
- };
62
- if (action !== "insert" && action !== "upsert") {
63
- await runServerPermissionCheck();
95
+ } else if (action === "update" || action === "delete") {
96
+ await ctx.can(permissions, obj);
64
97
  }
65
98
  await ctx.tx.mutate[tableName][action](obj);
66
- if (action === "insert" || action === "upsert") {
67
- await runServerPermissionCheck();
99
+ if (action !== "delete") {
100
+ await ctx.can(permissions, obj);
68
101
  }
69
102
  };
70
103
  };
@@ -79,7 +112,6 @@ function mutations(table, permissions, mutations2) {
79
112
  // generated CRUD fills missing operations; custom CRUD runs as-is
80
113
  ...crudMutations
81
114
  };
82
- setMutationsPermissions(tableName, permissions);
83
115
  return getOrCreateMutationProxy(tableName, finalMutations);
84
116
  }
85
117
  return table;
@@ -1 +1 @@
1
- {"version":3,"names":["IS_SERVER_RUNTIME","setMutationsPermissions","mutationRegistry","_global","global","globalThis","__onZeroMutationRegistry__","Map","proxyRegistry","__onZeroProxyRegistry__","getOrCreateMutationProxy","tableName","implementations","prior","get","set","existing","proxy","Proxy","_","key","_mutationRegistry_get","ownKeys","current","Object","keys","getOwnPropertyDescriptor","enumerable","configurable","value","has","mutations","table","permissions","mutations2","schema","name","createCRUDMutation","createCRUDMutation2","action","customMutation","ctx","obj","runServerPermissionCheck","runServerPermissionCheck2","can","tx","mutate","crudMutations","insert","update","delete","upsert","finalMutations"],"sources":["../../src/mutations.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["setMutationsPermissions","getSchema","getZQL","mutationRegistry","_global","global","globalThis","__onZeroMutationRegistry__","Map","proxyRegistry","__onZeroProxyRegistry__","getOrCreateMutationProxy","tableName","implementations","crud","arguments","length","prior","get","_i","_iter","action","set","existing","proxy","Proxy","_","key","_mutationRegistry_get","ownKeys","current","Object","keys","getOwnPropertyDescriptor","enumerable","configurable","value","has","mutations","table","permissions","mutations2","options","schema","name","createCRUDMutation","createCRUDMutation2","customMutation","ctx","obj","environment","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","tables","primaryKey","Symbol","iterator","_step","next","done","where","err","return"],"sources":["../../src/mutations.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,63 @@
1
- import { describe, expect, test } from "vitest";
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { DatabaseSync } from "node:sqlite";
3
+ import { createSchema, string, table } from "@rocicorp/zero";
4
+ import { createSQLiteApplicationDatabase, createSyncExecutor } from "orez-lite";
5
+ import { createQueryCompiler } from "orez-lite/cloudflare/query-compiler";
6
+ import { executeTransactionQueryPlan } from "orez-lite/cloudflare/transaction-query";
7
+ import { afterAll, describe, expect, test, vi } from "vitest";
8
+ import { createZeroServerBindings, setupAsyncLocalStorage } from "./server.mjs";
9
+ import { getMutationsPermissions } from "./modelRegistry.mjs";
2
10
  import { mutations } from "./mutations.mjs";
3
11
  import { serverWhere } from "./serverWhere.mjs";
12
+ const previousEnvironment = vi.hoisted(() => {
13
+ const previous = process.env.VITE_ENVIRONMENT;
14
+ process.env.VITE_ENVIRONMENT = "client";
15
+ return previous;
16
+ });
17
+ afterAll(() => {
18
+ if (previousEnvironment === void 0) delete process.env.VITE_ENVIRONMENT;else process.env.VITE_ENVIRONMENT = previousEnvironment;
19
+ });
4
20
  describe("mutations registry", () => {
21
+ test("explicit opt-out removes generated CRUD from existing proxies and retains permissions", async () => {
22
+ const record = table("closedRecord").columns({
23
+ id: string()
24
+ }).primaryKey("id");
25
+ const permission = serverWhere("closedRecord", () => true);
26
+ const first = mutations(record, permission);
27
+ expect(Object.keys(first).sort()).toEqual(["delete", "insert", "update", "upsert"]);
28
+ const custom = vi.fn(async () => {});
29
+ const closed = mutations(record, permission, {
30
+ custom
31
+ }, {
32
+ crud: false
33
+ });
34
+ expect(closed).toBe(first);
35
+ expect(Object.keys(closed)).toEqual(["custom"]);
36
+ expect("insert" in closed).toBe(false);
37
+ expect(Reflect.get(closed, "upsert")).toBeUndefined();
38
+ expect(getMutationsPermissions("closedRecord")).toBe(permission);
39
+ await closed.custom();
40
+ expect(custom).toHaveBeenCalledOnce();
41
+ const reopened = mutations(record, permission, {}, {
42
+ crud: true
43
+ });
44
+ expect(Object.keys(reopened).sort()).toEqual(["custom", "delete", "insert", "update", "upsert"]);
45
+ });
46
+ test("opt-out preserves explicitly declared CRUD handlers", async () => {
47
+ const record = table("customRecord").columns({
48
+ id: string()
49
+ }).primaryKey("id");
50
+ const permission = serverWhere("customRecord", () => true);
51
+ const insert = vi.fn(async () => {});
52
+ const custom = mutations(record, permission, {
53
+ insert
54
+ }, {
55
+ crud: false
56
+ });
57
+ expect(Object.keys(custom)).toEqual(["insert"]);
58
+ await custom.insert();
59
+ expect(insert).toHaveBeenCalledOnce();
60
+ });
5
61
  test("re-registering a handler replaces it per key (HMR)", () => {
6
62
  const permissions = serverWhere("post", () => true);
7
63
  const v1 = async () => {};
@@ -15,4 +71,176 @@ describe("mutations registry", () => {
15
71
  expect(proxy.custom).toBe(v2);
16
72
  });
17
73
  });
74
+ describe("generated CRUD authorization", () => {
75
+ test("authorizes both sides of composite-key writes through the server executor", async () => {
76
+ setupAsyncLocalStorage(AsyncLocalStorage);
77
+ const document = table("document").columns({
78
+ workspace: string(),
79
+ id: string(),
80
+ ownerId: string(),
81
+ title: string()
82
+ }).primaryKey("workspace", "id");
83
+ const schema = createSchema({
84
+ tables: [document],
85
+ relationships: [],
86
+ enableLegacyQueries: true
87
+ });
88
+ const sqlite = new DatabaseSync(":memory:");
89
+ sqlite.exec("CREATE TABLE document (workspace TEXT, id TEXT, ownerId TEXT, title TEXT, PRIMARY KEY (workspace, id))");
90
+ const compile = createQueryCompiler(schema);
91
+ const query = async (sql, params = []) => sqlite.prepare(sql).all(...params.map(value => value));
92
+ const tx = {
93
+ query,
94
+ exec: async (sql, params = []) => ({
95
+ changes: Number(sqlite.prepare(sql).run(...params.map(value => value)).changes)
96
+ }),
97
+ queryAst: async (ast, format, queryName) => executeTransactionQueryPlan(compile(ast, format), (sql, params) => sqlite.prepare(sql).all(...params.map(value => value)), {
98
+ queryName
99
+ })
100
+ };
101
+ const database = createSQLiteApplicationDatabase({
102
+ query,
103
+ transaction: async work => {
104
+ sqlite.exec("BEGIN");
105
+ try {
106
+ const result = await work(tx);
107
+ sqlite.exec("COMMIT");
108
+ return result;
109
+ } catch (error) {
110
+ sqlite.exec("ROLLBACK");
111
+ throw error;
112
+ }
113
+ }
114
+ });
115
+ const permission = serverWhere("document", (eb, auth2) => eb.cmp("ownerId", auth2 && "id" in auth2 && typeof auth2.id === "string" ? auth2.id : ""));
116
+ const bindings = createZeroServerBindings({
117
+ schema,
118
+ models: {
119
+ document: {
120
+ mutate: mutations(document, permission)
121
+ }
122
+ },
123
+ createServerActions: () => ({})
124
+ });
125
+ const executor = createSyncExecutor({
126
+ database,
127
+ schema,
128
+ mutators: bindings.mutators,
129
+ effects: {
130
+ runBackground: promise => promise,
131
+ report: error => {
132
+ throw error;
133
+ }
134
+ }
135
+ });
136
+ const server = bindings.server(executor);
137
+ const auth = {
138
+ authData: {
139
+ id: "alice"
140
+ }
141
+ };
142
+ const own = {
143
+ workspace: "a",
144
+ id: "same",
145
+ ownerId: "alice",
146
+ title: "own"
147
+ };
148
+ const foreign = {
149
+ workspace: "b",
150
+ id: "same",
151
+ ownerId: "bob",
152
+ title: "foreign"
153
+ };
154
+ try {
155
+ await server.mutate.document.insert(own, auth);
156
+ await server.mutate.document.insert(foreign, {
157
+ authData: {
158
+ id: "bob"
159
+ }
160
+ });
161
+ await expect(server.mutate.document.insert({
162
+ ...foreign,
163
+ id: "forbidden"
164
+ }, auth)).rejects.toThrow();
165
+ await expect(server.mutate.document.upsert({
166
+ ...foreign,
167
+ ownerId: "alice"
168
+ }, auth)).rejects.toThrow();
169
+ await expect(server.mutate.document.update({
170
+ ...own,
171
+ ownerId: "bob"
172
+ }, auth)).rejects.toThrow();
173
+ await expect(server.mutate.document.upsert({
174
+ ...own,
175
+ ownerId: "bob"
176
+ }, auth)).rejects.toThrow();
177
+ await expect(server.mutate.document.upsert({
178
+ ...foreign,
179
+ id: "missing"
180
+ }, auth)).rejects.toThrow();
181
+ await server.mutate.document.upsert({
182
+ ...own,
183
+ title: "updated"
184
+ }, auth);
185
+ await server.mutate.document.upsert({
186
+ ...own,
187
+ title: "updated"
188
+ }, auth);
189
+ await server.mutate.document.upsert({
190
+ ...own,
191
+ id: "new"
192
+ }, auth);
193
+ expect(sqlite.prepare("SELECT * FROM document ORDER BY workspace, id").all()).toEqual([{
194
+ ...own,
195
+ id: "new"
196
+ }, {
197
+ ...own,
198
+ title: "updated"
199
+ }, foreign]);
200
+ const closedBindings = createZeroServerBindings({
201
+ schema,
202
+ models: {
203
+ document: {
204
+ mutate: mutations(document, permission, {
205
+ rename: async (ctx, input) => {
206
+ await ctx.can(permission, input);
207
+ await ctx.tx.mutate.document.update(input);
208
+ }
209
+ }, {
210
+ crud: false
211
+ })
212
+ }
213
+ },
214
+ createServerActions: () => ({})
215
+ });
216
+ expect(Object.keys(closedBindings.mutators)).toEqual(["document|rename"]);
217
+ const closedExecutor = createSyncExecutor({
218
+ database,
219
+ schema,
220
+ mutators: closedBindings.mutators,
221
+ effects: {
222
+ runBackground: promise => promise,
223
+ report: error => {
224
+ throw error;
225
+ }
226
+ }
227
+ });
228
+ for (const action of ["insert", "update", "delete", "upsert"]) {
229
+ await expect(closedExecutor.execute(`document|${action}`, own, {
230
+ userID: "alice"
231
+ })).rejects.toThrow(`unknown mutator: document|${action}`);
232
+ }
233
+ await closedBindings.server(closedExecutor).mutate.document.rename({
234
+ workspace: "a",
235
+ id: "same",
236
+ title: "renamed"
237
+ }, auth);
238
+ expect(sqlite.prepare("SELECT title FROM document WHERE workspace = ? AND id = ?").get("a", "same")).toEqual({
239
+ title: "renamed"
240
+ });
241
+ } finally {
242
+ sqlite.close();
243
+ }
244
+ });
245
+ });
18
246
  //# sourceMappingURL=mutations.test.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["describe","expect","test","mutations","serverWhere","permissions","v1","v2","custom","proxy","toBe"],"sources":["../../src/mutations.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,EAAUC,MAAA,EAAQC,IAAA,QAAY;AAEvC,SAASC,SAAA,QAAiB;AAC1B,SAASC,WAAA,QAAmB;AAE5BJ,QAAA,CAAS,sBAAsB,MAAM;EACnCE,IAAA,CAAK,sDAAsD,MAAM;IAC/D,MAAMG,WAAA,GAAcD,WAAA,CAAY,QAAQ,MAAM,IAAI;IAClD,MAAME,EAAA,GAAK,MAAAA,CAAA,KAAY,CAAC;IACxB,MAAMC,EAAA,GAAK,MAAAA,CAAA,KAAY,CAAC;IACxBJ,SAAA,CAAU,QAAQE,WAAA,EAAa;MAAEG,MAAA,EAAQF;IAAG,CAAC;IAC7C,MAAMG,KAAA,GAAQN,SAAA,CAAU,QAAQE,WAAA,EAAa;MAAEG,MAAA,EAAQD;IAAG,CAAC;IAG3DN,MAAA,CAAOQ,KAAA,CAAMD,MAAM,EAAEE,IAAA,CAAKH,EAAE;EAC9B,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["AsyncLocalStorage","DatabaseSync","createSchema","string","table","createSQLiteApplicationDatabase","createSyncExecutor","createQueryCompiler","executeTransactionQueryPlan","afterAll","describe","expect","test","vi","createZeroServerBindings","setupAsyncLocalStorage","getMutationsPermissions","mutations","serverWhere","previousEnvironment","hoisted","previous","process","env","VITE_ENVIRONMENT","record","columns","id","primaryKey","permission","first","Object","keys","sort","toEqual","custom","fn","closed","crud","toBe","Reflect","get","toBeUndefined","toHaveBeenCalledOnce","reopened","insert","permissions","v1","v2","proxy","document","workspace","ownerId","title","schema","tables","relationships","enableLegacyQueries","sqlite","exec","compile","query","sql","params","prepare","all","map","value","tx","changes","Number","run","queryAst","ast","format","queryName","database","transaction","work","result","error","eb","auth2","cmp","auth","bindings","models","mutate","createServerActions","executor","mutators","effects","runBackground","promise","report","server","authData","own","foreign","rejects","toThrow","upsert","update","closedBindings","rename","ctx","input","can","closedExecutor","action","execute","userID","close"],"sources":["../../src/mutations.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}