jazz-tools 2.0.0-alpha.21 → 2.0.0-alpha.24

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 (226) hide show
  1. package/bin/docs-index.db +0 -0
  2. package/bin/docs-index.txt +1624 -542
  3. package/bin/jazz-tools.js +47 -41
  4. package/bin/native/jazz-tools-darwin-arm64 +0 -0
  5. package/bin/native/jazz-tools-darwin-x64 +0 -0
  6. package/bin/native/jazz-tools-linux-arm64 +0 -0
  7. package/bin/native/jazz-tools-linux-x64 +0 -0
  8. package/dist/backend/create-jazz-context.d.ts +31 -6
  9. package/dist/backend/create-jazz-context.d.ts.map +1 -1
  10. package/dist/backend/create-jazz-context.js +35 -5
  11. package/dist/backend/create-jazz-context.js.map +1 -1
  12. package/dist/backend/create-jazz-context.test.js +61 -6
  13. package/dist/backend/create-jazz-context.test.js.map +1 -1
  14. package/dist/cli.d.ts +29 -2
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +648 -246
  17. package/dist/cli.js.map +1 -1
  18. package/dist/cli.test.js +640 -294
  19. package/dist/cli.test.js.map +1 -1
  20. package/dist/codegen/schema-reader.d.ts.map +1 -1
  21. package/dist/codegen/schema-reader.js +6 -1
  22. package/dist/codegen/schema-reader.js.map +1 -1
  23. package/dist/dev-tools/dev-tools.d.ts.map +1 -1
  24. package/dist/dev-tools/dev-tools.js +61 -13
  25. package/dist/dev-tools/dev-tools.js.map +1 -1
  26. package/dist/dev-tools/dev-tools.test.js +166 -0
  27. package/dist/dev-tools/dev-tools.test.js.map +1 -1
  28. package/dist/dev-tools/extension-panel.d.ts.map +1 -1
  29. package/dist/dev-tools/extension-panel.js +30 -7
  30. package/dist/dev-tools/extension-panel.js.map +1 -1
  31. package/dist/dev-tools/protocol.d.ts +49 -1
  32. package/dist/dev-tools/protocol.d.ts.map +1 -1
  33. package/dist/dev-tools/protocol.js +3 -0
  34. package/dist/dev-tools/protocol.js.map +1 -1
  35. package/dist/drivers/index.d.ts +1 -1
  36. package/dist/drivers/index.d.ts.map +1 -1
  37. package/dist/drivers/schema-wire.d.ts.map +1 -1
  38. package/dist/drivers/schema-wire.js +12 -1
  39. package/dist/drivers/schema-wire.js.map +1 -1
  40. package/dist/drivers/schema-wire.test.d.ts +2 -0
  41. package/dist/drivers/schema-wire.test.d.ts.map +1 -0
  42. package/dist/drivers/schema-wire.test.js +31 -0
  43. package/dist/drivers/schema-wire.test.js.map +1 -0
  44. package/dist/drivers/types.d.ts +2 -0
  45. package/dist/drivers/types.d.ts.map +1 -1
  46. package/dist/dsl.d.ts +139 -95
  47. package/dist/dsl.d.ts.map +1 -1
  48. package/dist/dsl.js +64 -8
  49. package/dist/dsl.js.map +1 -1
  50. package/dist/dsl.test.js +78 -8
  51. package/dist/dsl.test.js.map +1 -1
  52. package/dist/index.d.ts +32 -3
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +16 -3
  55. package/dist/index.js.map +1 -1
  56. package/dist/magic-columns.d.ts +3 -1
  57. package/dist/magic-columns.d.ts.map +1 -1
  58. package/dist/magic-columns.js +20 -4
  59. package/dist/magic-columns.js.map +1 -1
  60. package/dist/mcp/build-index.test.js +1 -1
  61. package/dist/migrations.d.ts +126 -0
  62. package/dist/migrations.d.ts.map +1 -0
  63. package/dist/migrations.js +112 -0
  64. package/dist/migrations.js.map +1 -0
  65. package/dist/permissions/index.test.js +35 -0
  66. package/dist/permissions/index.test.js.map +1 -1
  67. package/dist/react-native/create-jazz-client.test.js +62 -42
  68. package/dist/react-native/create-jazz-client.test.js.map +1 -1
  69. package/dist/react-native/jazz-rn-runtime-adapter.d.ts +18 -3
  70. package/dist/react-native/jazz-rn-runtime-adapter.d.ts.map +1 -1
  71. package/dist/react-native/jazz-rn-runtime-adapter.js +110 -6
  72. package/dist/react-native/jazz-rn-runtime-adapter.js.map +1 -1
  73. package/dist/react-native/jazz-rn-runtime-adapter.test.js +149 -4
  74. package/dist/react-native/jazz-rn-runtime-adapter.test.js.map +1 -1
  75. package/dist/reconcile-array.d.ts +29 -0
  76. package/dist/reconcile-array.d.ts.map +1 -0
  77. package/dist/reconcile-array.js +110 -0
  78. package/dist/reconcile-array.js.map +1 -0
  79. package/dist/reconcile-array.test.d.ts +2 -0
  80. package/dist/reconcile-array.test.d.ts.map +1 -0
  81. package/dist/reconcile-array.test.js +118 -0
  82. package/dist/reconcile-array.test.js.map +1 -0
  83. package/dist/runtime/client.d.ts +24 -20
  84. package/dist/runtime/client.d.ts.map +1 -1
  85. package/dist/runtime/client.for-request.test.js +8 -8
  86. package/dist/runtime/client.for-request.test.js.map +1 -1
  87. package/dist/runtime/client.js +58 -25
  88. package/dist/runtime/client.js.map +1 -1
  89. package/dist/runtime/client.mutations.test.js +72 -1
  90. package/dist/runtime/client.mutations.test.js.map +1 -1
  91. package/dist/runtime/cloud-server.integration.test.js +145 -88
  92. package/dist/runtime/cloud-server.integration.test.js.map +1 -1
  93. package/dist/runtime/db.d.ts +3 -7
  94. package/dist/runtime/db.d.ts.map +1 -1
  95. package/dist/runtime/db.js +16 -14
  96. package/dist/runtime/db.js.map +1 -1
  97. package/dist/runtime/db.schema-order.test.js +8 -8
  98. package/dist/runtime/db.schema-order.test.js.map +1 -1
  99. package/dist/runtime/index.d.ts +1 -1
  100. package/dist/runtime/index.d.ts.map +1 -1
  101. package/dist/runtime/index.js +1 -1
  102. package/dist/runtime/index.js.map +1 -1
  103. package/dist/runtime/napi.integration.test.js +113 -136
  104. package/dist/runtime/napi.integration.test.js.map +1 -1
  105. package/dist/runtime/query-adapter.d.ts.map +1 -1
  106. package/dist/runtime/query-adapter.js +22 -2
  107. package/dist/runtime/query-adapter.js.map +1 -1
  108. package/dist/runtime/query-adapter.test.js +81 -5
  109. package/dist/runtime/query-adapter.test.js.map +1 -1
  110. package/dist/runtime/row-transformer.js +2 -2
  111. package/dist/runtime/row-transformer.js.map +1 -1
  112. package/dist/runtime/row-transformer.test.js +9 -9
  113. package/dist/runtime/row-transformer.test.js.map +1 -1
  114. package/dist/runtime/schema-fetch.d.ts +103 -1
  115. package/dist/runtime/schema-fetch.d.ts.map +1 -1
  116. package/dist/runtime/schema-fetch.js +106 -0
  117. package/dist/runtime/schema-fetch.js.map +1 -1
  118. package/dist/runtime/sync-transport.d.ts +3 -1
  119. package/dist/runtime/sync-transport.d.ts.map +1 -1
  120. package/dist/runtime/sync-transport.js +34 -3
  121. package/dist/runtime/sync-transport.js.map +1 -1
  122. package/dist/runtime/sync-transport.test.js +53 -1
  123. package/dist/runtime/sync-transport.test.js.map +1 -1
  124. package/dist/runtime/value-converter.d.ts +9 -6
  125. package/dist/runtime/value-converter.d.ts.map +1 -1
  126. package/dist/runtime/value-converter.js +22 -9
  127. package/dist/runtime/value-converter.js.map +1 -1
  128. package/dist/runtime/value-converter.test.js +32 -26
  129. package/dist/runtime/value-converter.test.js.map +1 -1
  130. package/dist/schema-loader.d.ts +14 -0
  131. package/dist/schema-loader.d.ts.map +1 -0
  132. package/dist/schema-loader.js +219 -0
  133. package/dist/schema-loader.js.map +1 -0
  134. package/dist/schema-permissions.d.ts +8 -0
  135. package/dist/schema-permissions.d.ts.map +1 -0
  136. package/dist/schema-permissions.js +266 -0
  137. package/dist/schema-permissions.js.map +1 -0
  138. package/dist/schema-permissions.test.d.ts +2 -0
  139. package/dist/schema-permissions.test.d.ts.map +1 -0
  140. package/dist/schema-permissions.test.js +43 -0
  141. package/dist/schema-permissions.test.js.map +1 -0
  142. package/dist/schema.d.ts +11 -9
  143. package/dist/schema.d.ts.map +1 -1
  144. package/dist/svelte/context.svelte.test.js +50 -0
  145. package/dist/svelte/rune-patterns.svelte.test.js +301 -0
  146. package/dist/svelte/test-helpers.svelte.js +14 -0
  147. package/dist/svelte/use-all.svelte.d.ts.map +1 -1
  148. package/dist/svelte/use-all.svelte.js +7 -1
  149. package/dist/testing/fixtures/basic/schema.d.ts +11 -0
  150. package/dist/testing/fixtures/basic/schema.d.ts.map +1 -0
  151. package/dist/testing/fixtures/basic/schema.js +10 -0
  152. package/dist/testing/fixtures/basic/schema.js.map +1 -0
  153. package/dist/testing/index.d.ts +2 -1
  154. package/dist/testing/index.d.ts.map +1 -1
  155. package/dist/testing/index.js +2 -1
  156. package/dist/testing/index.js.map +1 -1
  157. package/dist/testing/index.test.js +109 -9
  158. package/dist/testing/index.test.js.map +1 -1
  159. package/dist/testing/local-jazz-server.d.ts +2 -0
  160. package/dist/testing/local-jazz-server.d.ts.map +1 -1
  161. package/dist/testing/local-jazz-server.js +21 -51
  162. package/dist/testing/local-jazz-server.js.map +1 -1
  163. package/dist/testing/policy-test-app.d.ts.map +1 -1
  164. package/dist/testing/policy-test-app.js +71 -3
  165. package/dist/testing/policy-test-app.js.map +1 -1
  166. package/dist/typed-app.d.ts +364 -0
  167. package/dist/typed-app.d.ts.map +1 -0
  168. package/dist/{testing/fixtures/basic/app.js → typed-app.js} +118 -30
  169. package/dist/typed-app.js.map +1 -0
  170. package/dist/vue/use-all.d.ts +2 -2
  171. package/dist/vue/use-all.d.ts.map +1 -1
  172. package/dist/vue/use-all.js +9 -3
  173. package/dist/vue/use-all.js.map +1 -1
  174. package/dist/vue/use-all.test.js +137 -0
  175. package/dist/vue/use-all.test.js.map +1 -1
  176. package/package.json +17 -14
  177. package/bin/native/jazz-tools-windows-x64.exe +0 -0
  178. package/dist/codegen/codegen.test.d.ts +0 -2
  179. package/dist/codegen/codegen.test.d.ts.map +0 -1
  180. package/dist/codegen/codegen.test.js +0 -1134
  181. package/dist/codegen/codegen.test.js.map +0 -1
  182. package/dist/codegen/index.d.ts +0 -18
  183. package/dist/codegen/index.d.ts.map +0 -1
  184. package/dist/codegen/index.js +0 -22
  185. package/dist/codegen/index.js.map +0 -1
  186. package/dist/codegen/query-builder-generator.d.ts +0 -26
  187. package/dist/codegen/query-builder-generator.d.ts.map +0 -1
  188. package/dist/codegen/query-builder-generator.js +0 -377
  189. package/dist/codegen/query-builder-generator.js.map +0 -1
  190. package/dist/codegen/type-generator.d.ts +0 -30
  191. package/dist/codegen/type-generator.d.ts.map +0 -1
  192. package/dist/codegen/type-generator.js +0 -368
  193. package/dist/codegen/type-generator.js.map +0 -1
  194. package/dist/runtime/napi.fjall.db.all.integration.test.d.ts +0 -2
  195. package/dist/runtime/napi.fjall.db.all.integration.test.d.ts.map +0 -1
  196. package/dist/runtime/napi.fjall.db.all.integration.test.js +0 -76
  197. package/dist/runtime/napi.fjall.db.all.integration.test.js.map +0 -1
  198. package/dist/runtime/napi.fjall.db.subscribeAll.integration.test.d.ts +0 -2
  199. package/dist/runtime/napi.fjall.db.subscribeAll.integration.test.d.ts.map +0 -1
  200. package/dist/runtime/napi.fjall.db.subscribeAll.integration.test.js +0 -47
  201. package/dist/runtime/napi.fjall.db.subscribeAll.integration.test.js.map +0 -1
  202. package/dist/runtime/napi.fjall.test-helpers.d.ts +0 -34
  203. package/dist/runtime/napi.fjall.test-helpers.d.ts.map +0 -1
  204. package/dist/runtime/napi.fjall.test-helpers.js +0 -172
  205. package/dist/runtime/napi.fjall.test-helpers.js.map +0 -1
  206. package/dist/sql-gen.d.ts +0 -5
  207. package/dist/sql-gen.d.ts.map +0 -1
  208. package/dist/sql-gen.js +0 -234
  209. package/dist/sql-gen.js.map +0 -1
  210. package/dist/sql-gen.test.d.ts +0 -2
  211. package/dist/sql-gen.test.d.ts.map +0 -1
  212. package/dist/sql-gen.test.js +0 -481
  213. package/dist/sql-gen.test.js.map +0 -1
  214. package/dist/svelte/context.test.d.ts +0 -2
  215. package/dist/svelte/context.test.d.ts.map +0 -1
  216. package/dist/svelte/context.test.js +0 -55
  217. package/dist/svelte/use-all.test.d.ts +0 -2
  218. package/dist/svelte/use-all.test.d.ts.map +0 -1
  219. package/dist/svelte/use-all.test.js +0 -147
  220. package/dist/testing/fixtures/basic/app.d.ts +0 -59
  221. package/dist/testing/fixtures/basic/app.d.ts.map +0 -1
  222. package/dist/testing/fixtures/basic/app.js.map +0 -1
  223. package/dist/testing/fixtures/basic/current.d.ts +0 -2
  224. package/dist/testing/fixtures/basic/current.d.ts.map +0 -1
  225. package/dist/testing/fixtures/basic/current.js +0 -6
  226. package/dist/testing/fixtures/basic/current.js.map +0 -1
@@ -8,6 +8,7 @@ import { fileURLToPath } from "node:url";
8
8
  import { beforeAll, describe, expect, it, vi } from "vitest";
9
9
  import { serializeRuntimeSchema } from "../drivers/schema-wire.js";
10
10
  import { translateQuery } from "./query-adapter.js";
11
+ import { loadCompiledSchema } from "../schema-loader.js";
11
12
  import { pushSchemaCatalogue, startLocalJazzServer } from "../testing/local-jazz-server.js";
12
13
  import { createNapiRuntime, loadNapiModule } from "./testing/napi-runtime-test-utils.js";
13
14
  const JWT_KID = "napi-test-kid";
@@ -29,86 +30,13 @@ const TIMESTAMP_SCHEMA = {
29
30
  ],
30
31
  },
31
32
  };
32
- const TODO_SERVER_WASM_SCHEMA = {
33
- projects: {
34
- columns: [{ name: "name", column_type: { type: "Text" }, nullable: false }],
35
- },
36
- todos: {
37
- columns: [
38
- { name: "title", column_type: { type: "Text" }, nullable: false },
39
- { name: "done", column_type: { type: "Boolean" }, nullable: false },
40
- { name: "description", column_type: { type: "Text" }, nullable: true },
41
- {
42
- name: "parent",
43
- column_type: { type: "Uuid" },
44
- nullable: true,
45
- references: "todos",
46
- },
47
- {
48
- name: "project",
49
- column_type: { type: "Uuid" },
50
- nullable: true,
51
- references: "projects",
52
- },
53
- { name: "owner_id", column_type: { type: "Text" }, nullable: false },
54
- ],
55
- policies: {
56
- select: {
57
- using: {
58
- type: "Cmp",
59
- column: "owner_id",
60
- op: "Eq",
61
- value: {
62
- type: "SessionRef",
63
- path: ["user_id"],
64
- },
65
- },
66
- },
67
- insert: {
68
- with_check: {
69
- type: "Cmp",
70
- column: "owner_id",
71
- op: "Eq",
72
- value: {
73
- type: "SessionRef",
74
- path: ["user_id"],
75
- },
76
- },
77
- },
78
- update: {
79
- using: {
80
- type: "Cmp",
81
- column: "owner_id",
82
- op: "Eq",
83
- value: {
84
- type: "SessionRef",
85
- path: ["user_id"],
86
- },
87
- },
88
- with_check: {
89
- type: "Cmp",
90
- column: "owner_id",
91
- op: "Eq",
92
- value: {
93
- type: "SessionRef",
94
- path: ["user_id"],
95
- },
96
- },
97
- },
98
- delete: {
99
- using: {
100
- type: "Cmp",
101
- column: "owner_id",
102
- op: "Eq",
103
- value: {
104
- type: "SessionRef",
105
- path: ["user_id"],
106
- },
107
- },
108
- },
109
- },
110
- },
111
- };
33
+ let todoServerWasmSchemaPromise = null;
34
+ async function loadTodoServerWasmSchema() {
35
+ if (!todoServerWasmSchemaPromise) {
36
+ todoServerWasmSchemaPromise = loadCompiledSchema(TODO_SERVER_SCHEMA_DIR).then((compiled) => compiled.wasmSchema);
37
+ }
38
+ return await todoServerWasmSchemaPromise;
39
+ }
112
40
  const simpleTodosTable = {
113
41
  _table: "todos",
114
42
  _schema: TEST_SCHEMA,
@@ -135,30 +63,34 @@ const timestampProjectsTable = {
135
63
  _rowType: undefined,
136
64
  _initType: undefined,
137
65
  };
138
- const policyTodosTable = {
139
- _table: "todos",
140
- _schema: TODO_SERVER_WASM_SCHEMA,
141
- _rowType: undefined,
142
- _initType: undefined,
143
- };
144
- const allPolicyTodosQuery = {
145
- _table: "todos",
146
- _schema: TODO_SERVER_WASM_SCHEMA,
147
- _rowType: undefined,
148
- _build() {
149
- return JSON.stringify({
150
- table: "todos",
151
- conditions: [],
152
- includes: {},
153
- orderBy: [],
154
- offset: 0,
155
- });
156
- },
157
- };
158
- function policyTodoByIdQuery(id) {
66
+ function makePolicyTodosTable(schema) {
67
+ return {
68
+ _table: "todos",
69
+ _schema: schema,
70
+ _rowType: undefined,
71
+ _initType: undefined,
72
+ };
73
+ }
74
+ function makeAllPolicyTodosQuery(schema) {
75
+ return {
76
+ _table: "todos",
77
+ _schema: schema,
78
+ _rowType: undefined,
79
+ _build() {
80
+ return JSON.stringify({
81
+ table: "todos",
82
+ conditions: [],
83
+ includes: {},
84
+ orderBy: [],
85
+ offset: 0,
86
+ });
87
+ },
88
+ };
89
+ }
90
+ function makePolicyTodoByIdQuery(schema, id) {
159
91
  return {
160
92
  _table: "todos",
161
- _schema: TODO_SERVER_WASM_SCHEMA,
93
+ _schema: schema,
162
94
  _rowType: undefined,
163
95
  _build() {
164
96
  return JSON.stringify({
@@ -172,7 +104,7 @@ function policyTodoByIdQuery(id) {
172
104
  };
173
105
  }
174
106
  const BASIC_SCHEMA_DIR = fileURLToPath(new URL("../testing/fixtures/basic", import.meta.url));
175
- const TODO_SERVER_SCHEMA_DIR = fileURLToPath(new URL("../../../../examples/todo-server-ts/schema", import.meta.url));
107
+ const TODO_SERVER_SCHEMA_DIR = fileURLToPath(new URL("../../../../examples/todo-server-ts", import.meta.url));
176
108
  beforeAll(async () => {
177
109
  await loadNapiModule();
178
110
  });
@@ -463,19 +395,19 @@ describe("NAPI integration", () => {
463
395
  const updatedOversizedTitle = "y".repeat(45_000);
464
396
  const queryJson = translateQuery(allTodosQuery._build(), TEST_SCHEMA);
465
397
  try {
466
- const insertedRow = runtime.insert("todos", [
467
- { type: "Text", value: oversizedTitle },
468
- { type: "Boolean", value: false },
469
- ]);
398
+ const insertedRow = runtime.insert("todos", {
399
+ title: { type: "Text", value: oversizedTitle },
400
+ done: { type: "Boolean", value: false },
401
+ });
470
402
  let rows = await runtime.query(queryJson);
471
403
  expect(rows).toHaveLength(1);
472
404
  expect(rows[0]).toMatchObject({ id: insertedRow.id });
473
405
  expect(rows[0]?.values[0]).toEqual({ type: "Text", value: oversizedTitle });
474
406
  expect(rows[0]?.values[1]).toEqual({ type: "Boolean", value: false });
475
- const secondRow = runtime.insert("todos", [
476
- { type: "Text", value: "kept title" },
477
- { type: "Boolean", value: false },
478
- ]);
407
+ const secondRow = runtime.insert("todos", {
408
+ title: { type: "Text", value: "kept title" },
409
+ done: { type: "Boolean", value: false },
410
+ });
479
411
  runtime.update(secondRow.id, {
480
412
  title: { type: "Text", value: updatedOversizedTitle },
481
413
  });
@@ -543,10 +475,10 @@ describe("NAPI integration", () => {
543
475
  call[1][1] === clientId &&
544
476
  hasPayloadKind(call[1][2], "QuerySettled"))).toBe(true);
545
477
  }, { timeout: 15_000 });
546
- const insertedRow = runtime.insert("todos", [
547
- { type: "Text", value: "client-synced-item" },
548
- { type: "Boolean", value: false },
549
- ]);
478
+ const insertedRow = runtime.insert("todos", {
479
+ title: { type: "Text", value: "client-synced-item" },
480
+ done: { type: "Boolean", value: false },
481
+ });
550
482
  await vi.waitFor(() => {
551
483
  expect(rawCalls.some((call) => isNestedOutboxCall(call) &&
552
484
  call[1][0] === "client" &&
@@ -564,6 +496,7 @@ describe("NAPI integration", () => {
564
496
  context = createJazzContext({
565
497
  appId: `napi-backend-sync-${randomUUID()}`,
566
498
  app: { wasmSchema: TEST_SCHEMA },
499
+ permissions: {},
567
500
  driver: { type: "memory" },
568
501
  serverUrl: captureServer.baseUrl,
569
502
  backendSecret: "napi-backend-secret",
@@ -604,6 +537,7 @@ describe("NAPI integration", () => {
604
537
  context = createJazzContext({
605
538
  appId: `napi-backend-reconnect-${randomUUID()}`,
606
539
  app: { wasmSchema: TEST_SCHEMA },
540
+ permissions: {},
607
541
  driver: { type: "memory" },
608
542
  serverUrl: captureServer.baseUrl,
609
543
  backendSecret: "napi-backend-secret",
@@ -657,9 +591,12 @@ describe("NAPI integration", () => {
657
591
  env: "test",
658
592
  userBranch: "main",
659
593
  });
594
+ const todoServerSchema = await loadTodoServerWasmSchema();
595
+ const policyTodosTable = makePolicyTodosTable(todoServerSchema);
660
596
  context = createJazzContext({
661
597
  appId,
662
- app: { wasmSchema: TODO_SERVER_WASM_SCHEMA },
598
+ app: { wasmSchema: todoServerSchema },
599
+ permissions: {},
663
600
  driver: { type: "memory" },
664
601
  serverUrl: server.url,
665
602
  backendSecret,
@@ -667,6 +604,7 @@ describe("NAPI integration", () => {
667
604
  userBranch: "main",
668
605
  tier: "worker",
669
606
  });
607
+ await settleAsyncSyncWork();
670
608
  const backendDb = context.asBackend();
671
609
  const aliceDb = context.forSession({
672
610
  user_id: "alice",
@@ -676,32 +614,38 @@ describe("NAPI integration", () => {
676
614
  title: "session-created-item",
677
615
  done: false,
678
616
  description: "created via forSession",
679
- owner_id: "alice",
617
+ ownerId: "alice",
680
618
  }, { tier: "edge" }), 10_000, "session insert timed out");
681
619
  await vi.waitFor(async () => {
682
- expect(await withTimeout(backendDb.one(policyTodoByIdQuery(createdTodo.id), { tier: "edge" }), 10_000, "backend session read timed out")).toMatchObject({
620
+ expect(await withTimeout(backendDb.one(makePolicyTodoByIdQuery(todoServerSchema, createdTodo.id), {
621
+ tier: "edge",
622
+ }), 10_000, "backend session read timed out")).toMatchObject({
683
623
  id: createdTodo.id,
684
624
  title: "session-created-item",
685
625
  done: false,
686
- owner_id: "alice",
626
+ ownerId: "alice",
687
627
  });
688
628
  }, { timeout: 20_000 });
689
629
  await expect(aliceDb.insertDurable(policyTodosTable, {
690
630
  title: "session-policy-denied",
691
631
  done: false,
692
632
  description: "",
693
- owner_id: "bob",
633
+ ownerId: "bob",
694
634
  }, { tier: "edge" })).rejects.toThrow();
695
635
  await withTimeout(aliceDb.updateDurable(policyTodosTable, createdTodo.id, { done: true }, { tier: "edge" }), 10_000, "session update timed out");
696
636
  await vi.waitFor(async () => {
697
- expect(await withTimeout(backendDb.one(policyTodoByIdQuery(createdTodo.id), { tier: "edge" }), 10_000, "backend session update read timed out")).toMatchObject({
637
+ expect(await withTimeout(backendDb.one(makePolicyTodoByIdQuery(todoServerSchema, createdTodo.id), {
638
+ tier: "edge",
639
+ }), 10_000, "backend session update read timed out")).toMatchObject({
698
640
  id: createdTodo.id,
699
641
  done: true,
700
642
  });
701
643
  }, { timeout: 20_000 });
702
644
  await withTimeout(aliceDb.deleteDurable(policyTodosTable, createdTodo.id, { tier: "edge" }), 10_000, "session delete timed out");
703
645
  await vi.waitFor(async () => {
704
- expect(await withTimeout(backendDb.one(policyTodoByIdQuery(createdTodo.id), { tier: "edge" }), 10_000, "backend session delete read timed out")).toBeNull();
646
+ expect(await withTimeout(backendDb.one(makePolicyTodoByIdQuery(todoServerSchema, createdTodo.id), {
647
+ tier: "edge",
648
+ }), 10_000, "backend session delete read timed out")).toBeNull();
705
649
  }, { timeout: 20_000 });
706
650
  }
707
651
  finally {
@@ -734,9 +678,13 @@ describe("NAPI integration", () => {
734
678
  env: "test",
735
679
  userBranch: "main",
736
680
  });
681
+ const todoServerSchema = await loadTodoServerWasmSchema();
682
+ const policyTodosTable = makePolicyTodosTable(todoServerSchema);
683
+ const allPolicyTodosQuery = makeAllPolicyTodosQuery(todoServerSchema);
737
684
  context = createJazzContext({
738
685
  appId,
739
- app: { wasmSchema: TODO_SERVER_WASM_SCHEMA },
686
+ app: { wasmSchema: todoServerSchema },
687
+ permissions: {},
740
688
  driver: { type: "memory" },
741
689
  serverUrl: server.url,
742
690
  backendSecret,
@@ -757,14 +705,14 @@ describe("NAPI integration", () => {
757
705
  title: "request-created-item",
758
706
  done: false,
759
707
  description: "created via forRequest",
760
- owner_id: "request-user",
708
+ ownerId: "request-user",
761
709
  }, { tier: "edge" }), 10_000, "request insert timed out");
762
710
  await vi.waitFor(async () => {
763
711
  expect(await withTimeout(requestDb.all(allPolicyTodosQuery, { tier: "edge" }), 10_000, "request-scoped read timed out")).toEqual([
764
712
  expect.objectContaining({
765
713
  id: createdTodo.id,
766
714
  title: "request-created-item",
767
- owner_id: "request-user",
715
+ ownerId: "request-user",
768
716
  }),
769
717
  ]);
770
718
  }, { timeout: 20_000 });
@@ -772,13 +720,15 @@ describe("NAPI integration", () => {
772
720
  title: "request-policy-denied",
773
721
  done: false,
774
722
  description: "",
775
- owner_id: "someone-else",
723
+ ownerId: "someone-else",
776
724
  }, { tier: "edge" })).rejects.toThrow();
777
725
  await vi.waitFor(async () => {
778
- expect(await withTimeout(backendDb.one(policyTodoByIdQuery(createdTodo.id), { tier: "edge" }), 10_000, "backend request read timed out")).toMatchObject({
726
+ expect(await withTimeout(backendDb.one(makePolicyTodoByIdQuery(todoServerSchema, createdTodo.id), {
727
+ tier: "edge",
728
+ }), 10_000, "backend request read timed out")).toMatchObject({
779
729
  id: createdTodo.id,
780
730
  title: "request-created-item",
781
- owner_id: "request-user",
731
+ ownerId: "request-user",
782
732
  });
783
733
  }, { timeout: 20_000 });
784
734
  }
@@ -818,9 +768,13 @@ describe("NAPI integration", () => {
818
768
  env: "test",
819
769
  userBranch: "main",
820
770
  });
771
+ const todoServerSchema = await loadTodoServerWasmSchema();
772
+ const policyTodosTable = makePolicyTodosTable(todoServerSchema);
773
+ const allPolicyTodosQuery = makeAllPolicyTodosQuery(todoServerSchema);
821
774
  bobContext = createJazzContext({
822
775
  appId,
823
- app: { wasmSchema: TODO_SERVER_WASM_SCHEMA },
776
+ app: { wasmSchema: todoServerSchema },
777
+ permissions: {},
824
778
  driver: { type: "memory" },
825
779
  serverUrl: server.url,
826
780
  jwtToken: signJwt({ sub: "bob", claims: {} }, JWT_SECRET),
@@ -830,7 +784,8 @@ describe("NAPI integration", () => {
830
784
  });
831
785
  carolContext = createJazzContext({
832
786
  appId,
833
- app: { wasmSchema: TODO_SERVER_WASM_SCHEMA },
787
+ app: { wasmSchema: todoServerSchema },
788
+ permissions: {},
834
789
  driver: { type: "memory" },
835
790
  serverUrl: server.url,
836
791
  jwtToken: signJwt({ sub: "carol", claims: {} }, JWT_SECRET),
@@ -840,7 +795,8 @@ describe("NAPI integration", () => {
840
795
  });
841
796
  aliceContext = createJazzContext({
842
797
  appId,
843
- app: { wasmSchema: TODO_SERVER_WASM_SCHEMA },
798
+ app: { wasmSchema: todoServerSchema },
799
+ permissions: {},
844
800
  driver: { type: "memory" },
845
801
  serverUrl: server.url,
846
802
  jwtToken: signJwt({ sub: "alice", claims: {} }, JWT_SECRET),
@@ -850,7 +806,8 @@ describe("NAPI integration", () => {
850
806
  });
851
807
  readerContext = createJazzContext({
852
808
  appId,
853
- app: { wasmSchema: TODO_SERVER_WASM_SCHEMA },
809
+ app: { wasmSchema: todoServerSchema },
810
+ permissions: {},
854
811
  driver: { type: "memory" },
855
812
  serverUrl: server.url,
856
813
  backendSecret,
@@ -858,6 +815,7 @@ describe("NAPI integration", () => {
858
815
  userBranch: "main",
859
816
  tier: "worker",
860
817
  });
818
+ await settleAsyncSyncWork();
861
819
  const bobWriter = bobContext.db();
862
820
  const carolWriter = carolContext.db();
863
821
  const aliceWriter = aliceContext.db();
@@ -865,19 +823,19 @@ describe("NAPI integration", () => {
865
823
  title: "bob-item",
866
824
  done: false,
867
825
  description: "",
868
- owner_id: "bob",
826
+ ownerId: "bob",
869
827
  }, { tier: "edge" }), 10_000, "bob writer create timed out");
870
828
  await withTimeout(carolWriter.insertDurable(policyTodosTable, {
871
829
  title: "carol-item",
872
830
  done: false,
873
831
  description: "",
874
- owner_id: "carol",
832
+ ownerId: "carol",
875
833
  }, { tier: "edge" }), 10_000, "carol writer create timed out");
876
834
  await withTimeout(aliceWriter.insertDurable(policyTodosTable, {
877
835
  title: "alice-item",
878
836
  done: false,
879
837
  description: "",
880
- owner_id: "alice",
838
+ ownerId: "alice",
881
839
  }, { tier: "edge" }), 10_000, "alice writer create timed out");
882
840
  const readerBackend = readerContext.asBackend();
883
841
  const aliceSessionDb = readerContext.forSession({
@@ -941,6 +899,7 @@ describe("NAPI integration", () => {
941
899
  writerContext = createJazzContext({
942
900
  appId,
943
901
  app: { wasmSchema: TEST_SCHEMA },
902
+ permissions: {},
944
903
  driver: { type: "memory" },
945
904
  serverUrl: server.url,
946
905
  backendSecret,
@@ -948,10 +907,12 @@ describe("NAPI integration", () => {
948
907
  readerContext = createJazzContext({
949
908
  appId,
950
909
  app: { wasmSchema: TEST_SCHEMA },
910
+ permissions: {},
951
911
  driver: { type: "memory" },
952
912
  serverUrl: server.url,
953
913
  backendSecret,
954
914
  });
915
+ await settleAsyncSyncWork();
955
916
  const writer = writerContext.asBackend();
956
917
  const reader = readerContext.asBackend();
957
918
  await waitForQueryRows(reader, allTodosQuery, (rows) => rows.length === 0);
@@ -975,7 +936,20 @@ describe("NAPI integration", () => {
975
936
  const updatedRow = rowsAfterUpdate.find((row) => row.id === rowId);
976
937
  expect(updatedRow?.done).toBe(true);
977
938
  await writer.deleteDurable(simpleTodosTable, rowId, { tier: "edge" });
978
- await waitForQueryRows(reader, allTodosQuery, (rows) => !rows.some((row) => row.id === rowId));
939
+ await settleAsyncSyncWork();
940
+ await waitForQueryRows(writer, allTodosQuery, (rows) => !rows.some((row) => row.id === rowId));
941
+ await readerContext.shutdown();
942
+ readerContext = createJazzContext({
943
+ appId,
944
+ app: { wasmSchema: TEST_SCHEMA },
945
+ permissions: {},
946
+ driver: { type: "memory" },
947
+ serverUrl: server.url,
948
+ backendSecret,
949
+ });
950
+ await settleAsyncSyncWork();
951
+ const refreshedReader = readerContext.asBackend();
952
+ await waitForQueryRows(refreshedReader, allTodosQuery, (rows) => !rows.some((row) => row.id === rowId));
979
953
  }
980
954
  finally {
981
955
  if (writerContext) {
@@ -999,6 +973,7 @@ describe("NAPI integration", () => {
999
973
  writerContext = createJazzContext({
1000
974
  appId,
1001
975
  app: { wasmSchema: TEST_SCHEMA },
976
+ permissions: {},
1002
977
  driver: { type: "persistent", dataPath },
1003
978
  });
1004
979
  const writer = writerContext.db();
@@ -1014,6 +989,7 @@ describe("NAPI integration", () => {
1014
989
  reopenedContext = createJazzContext({
1015
990
  appId,
1016
991
  app: { wasmSchema: TEST_SCHEMA },
992
+ permissions: {},
1017
993
  driver: { type: "persistent", dataPath },
1018
994
  });
1019
995
  const reopened = reopenedContext.db();
@@ -1045,6 +1021,7 @@ describe("NAPI integration", () => {
1045
1021
  context = createJazzContext({
1046
1022
  appId: randomUUID(),
1047
1023
  app: { wasmSchema: TIMESTAMP_SCHEMA },
1024
+ permissions: {},
1048
1025
  driver: { type: "persistent", dataPath },
1049
1026
  });
1050
1027
  await expect(context.db().insertDurable(timestampProjectsTable, {