on-zero 0.7.2-1784530701923 → 0.7.2

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 (260) 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/createZeroDirectServer.cjs +269 -0
  5. package/dist/cjs/createZeroDirectServer.native.js +287 -0
  6. package/dist/cjs/createZeroDirectServer.native.js.map +1 -0
  7. package/dist/cjs/createZeroSQLiteServer.cjs +50 -0
  8. package/dist/cjs/createZeroSQLiteServer.native.js +58 -0
  9. package/dist/cjs/createZeroSQLiteServer.native.js.map +1 -0
  10. package/dist/cjs/createZeroSQLiteServer.test.cjs +595 -0
  11. package/dist/cjs/createZeroSQLiteServer.test.native.js +647 -0
  12. package/dist/cjs/createZeroSQLiteServer.test.native.js.map +1 -0
  13. package/dist/cjs/createZeroServer.cjs +82 -0
  14. package/dist/cjs/createZeroServer.native.js +93 -0
  15. package/dist/cjs/createZeroServer.native.js.map +1 -0
  16. package/dist/cjs/createZeroServer.test.cjs +378 -0
  17. package/dist/cjs/createZeroServer.test.native.js +448 -0
  18. package/dist/cjs/createZeroServer.test.native.js.map +1 -0
  19. package/dist/cjs/createZeroServerCore.cjs +211 -0
  20. package/dist/cjs/createZeroServerCore.native.js +355 -0
  21. package/dist/cjs/createZeroServerCore.native.js.map +1 -0
  22. package/dist/cjs/helpers/createMutators.cjs +3 -4
  23. package/dist/cjs/helpers/createMutators.native.js +3 -6
  24. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  25. package/dist/cjs/httpPull/auth.test.cjs +197 -0
  26. package/dist/cjs/httpPull/auth.test.native.js +279 -0
  27. package/dist/cjs/httpPull/auth.test.native.js.map +1 -0
  28. package/dist/cjs/httpPull/churn.test.cjs +132 -0
  29. package/dist/cjs/httpPull/churn.test.native.js +155 -0
  30. package/dist/cjs/httpPull/churn.test.native.js.map +1 -0
  31. package/dist/cjs/httpPull/completeAck.test.cjs +69 -0
  32. package/dist/cjs/httpPull/completeAck.test.native.js +76 -0
  33. package/dist/cjs/httpPull/completeAck.test.native.js.map +1 -0
  34. package/dist/cjs/httpPull/fixtureServer.cjs +340 -0
  35. package/dist/cjs/httpPull/fixtureServer.native.js +534 -0
  36. package/dist/cjs/httpPull/fixtureServer.native.js.map +1 -0
  37. package/dist/cjs/httpPull/integration.test.cjs +53 -0
  38. package/dist/cjs/httpPull/integration.test.native.js +60 -0
  39. package/dist/cjs/httpPull/integration.test.native.js.map +1 -0
  40. package/dist/cjs/httpPull/rebase.test.cjs +360 -0
  41. package/dist/cjs/httpPull/rebase.test.native.js +420 -0
  42. package/dist/cjs/httpPull/rebase.test.native.js.map +1 -0
  43. package/dist/cjs/httpPull/relations.test.cjs +107 -0
  44. package/dist/cjs/httpPull/relations.test.native.js +119 -0
  45. package/dist/cjs/httpPull/relations.test.native.js.map +1 -0
  46. package/dist/cjs/httpPull/testHarness.cjs +100 -0
  47. package/dist/cjs/httpPull/testHarness.native.js +112 -0
  48. package/dist/cjs/httpPull/testHarness.native.js.map +1 -0
  49. package/dist/cjs/index.cjs +1 -0
  50. package/dist/cjs/index.native.js +1 -0
  51. package/dist/cjs/index.native.js.map +1 -1
  52. package/dist/cjs/run.cjs +1 -1
  53. package/dist/cjs/run.native.js +1 -1
  54. package/dist/cjs/server.cjs +22 -0
  55. package/dist/cjs/server.native.js +4 -0
  56. package/dist/cjs/server.native.js.map +1 -0
  57. package/dist/cjs/sqliteRuntime.cjs +318 -0
  58. package/dist/cjs/sqliteRuntime.native.js +438 -0
  59. package/dist/cjs/sqliteRuntime.native.js.map +1 -0
  60. package/dist/cjs/state.cjs +1 -1
  61. package/dist/cjs/state.native.js +1 -1
  62. package/dist/cjs/syncHost.cjs +179 -0
  63. package/dist/cjs/syncHost.native.js +388 -0
  64. package/dist/cjs/syncHost.native.js.map +1 -0
  65. package/dist/cjs/syncHost.test.cjs +240 -0
  66. package/dist/cjs/syncHost.test.native.js +290 -0
  67. package/dist/cjs/syncHost.test.native.js.map +1 -0
  68. package/dist/cjs/zeroRunner.cjs +1 -1
  69. package/dist/cjs/zeroRunner.native.js +1 -1
  70. package/dist/esm/asyncTasks.mjs +26 -0
  71. package/dist/esm/asyncTasks.mjs.map +1 -0
  72. package/dist/esm/asyncTasks.native.js +56 -0
  73. package/dist/esm/asyncTasks.native.js.map +1 -0
  74. package/dist/esm/createZeroDirectServer.mjs +241 -0
  75. package/dist/esm/createZeroDirectServer.mjs.map +1 -0
  76. package/dist/esm/createZeroDirectServer.native.js +256 -0
  77. package/dist/esm/createZeroDirectServer.native.js.map +1 -0
  78. package/dist/esm/createZeroSQLiteServer.mjs +24 -0
  79. package/dist/esm/createZeroSQLiteServer.mjs.map +1 -0
  80. package/dist/esm/createZeroSQLiteServer.native.js +29 -0
  81. package/dist/esm/createZeroSQLiteServer.native.js.map +1 -0
  82. package/dist/esm/createZeroSQLiteServer.test.mjs +596 -0
  83. package/dist/esm/createZeroSQLiteServer.test.mjs.map +1 -0
  84. package/dist/esm/createZeroSQLiteServer.test.native.js +645 -0
  85. package/dist/esm/createZeroSQLiteServer.test.native.js.map +1 -0
  86. package/dist/esm/createZeroServer.mjs +57 -0
  87. package/dist/esm/createZeroServer.mjs.map +1 -0
  88. package/dist/esm/createZeroServer.native.js +65 -0
  89. package/dist/esm/createZeroServer.native.js.map +1 -0
  90. package/dist/esm/createZeroServer.test.mjs +379 -0
  91. package/dist/esm/createZeroServer.test.mjs.map +1 -0
  92. package/dist/esm/createZeroServer.test.native.js +446 -0
  93. package/dist/esm/createZeroServer.test.native.js.map +1 -0
  94. package/dist/esm/createZeroServerCore.mjs +186 -0
  95. package/dist/esm/createZeroServerCore.mjs.map +1 -0
  96. package/dist/esm/createZeroServerCore.native.js +327 -0
  97. package/dist/esm/createZeroServerCore.native.js.map +1 -0
  98. package/dist/esm/helpers/createMutators.mjs +3 -4
  99. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  100. package/dist/esm/helpers/createMutators.native.js +3 -6
  101. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  102. package/dist/esm/httpPull/auth.test.mjs +198 -0
  103. package/dist/esm/httpPull/auth.test.mjs.map +1 -0
  104. package/dist/esm/httpPull/auth.test.native.js +277 -0
  105. package/dist/esm/httpPull/auth.test.native.js.map +1 -0
  106. package/dist/esm/httpPull/churn.test.mjs +133 -0
  107. package/dist/esm/httpPull/churn.test.mjs.map +1 -0
  108. package/dist/esm/httpPull/churn.test.native.js +153 -0
  109. package/dist/esm/httpPull/churn.test.native.js.map +1 -0
  110. package/dist/esm/httpPull/completeAck.test.mjs +70 -0
  111. package/dist/esm/httpPull/completeAck.test.mjs.map +1 -0
  112. package/dist/esm/httpPull/completeAck.test.native.js +74 -0
  113. package/dist/esm/httpPull/completeAck.test.native.js.map +1 -0
  114. package/dist/esm/httpPull/fixtureServer.mjs +315 -0
  115. package/dist/esm/httpPull/fixtureServer.mjs.map +1 -0
  116. package/dist/esm/httpPull/fixtureServer.native.js +506 -0
  117. package/dist/esm/httpPull/fixtureServer.native.js.map +1 -0
  118. package/dist/esm/httpPull/integration.test.mjs +54 -0
  119. package/dist/esm/httpPull/integration.test.mjs.map +1 -0
  120. package/dist/esm/httpPull/integration.test.native.js +58 -0
  121. package/dist/esm/httpPull/integration.test.native.js.map +1 -0
  122. package/dist/esm/httpPull/rebase.test.mjs +361 -0
  123. package/dist/esm/httpPull/rebase.test.mjs.map +1 -0
  124. package/dist/esm/httpPull/rebase.test.native.js +418 -0
  125. package/dist/esm/httpPull/rebase.test.native.js.map +1 -0
  126. package/dist/esm/httpPull/relations.test.mjs +108 -0
  127. package/dist/esm/httpPull/relations.test.mjs.map +1 -0
  128. package/dist/esm/httpPull/relations.test.native.js +117 -0
  129. package/dist/esm/httpPull/relations.test.native.js.map +1 -0
  130. package/dist/esm/httpPull/testHarness.mjs +72 -0
  131. package/dist/esm/httpPull/testHarness.mjs.map +1 -0
  132. package/dist/esm/httpPull/testHarness.native.js +81 -0
  133. package/dist/esm/httpPull/testHarness.native.js.map +1 -0
  134. package/dist/esm/index.js +1 -0
  135. package/dist/esm/index.js.map +1 -1
  136. package/dist/esm/index.mjs +1 -0
  137. package/dist/esm/index.mjs.map +1 -1
  138. package/dist/esm/index.native.js +1 -0
  139. package/dist/esm/index.native.js.map +1 -1
  140. package/dist/esm/run.mjs +1 -1
  141. package/dist/esm/run.mjs.map +1 -1
  142. package/dist/esm/run.native.js +1 -1
  143. package/dist/esm/server.mjs +4 -0
  144. package/dist/esm/server.mjs.map +1 -0
  145. package/dist/esm/server.native.js +2 -0
  146. package/dist/esm/server.native.js.map +1 -0
  147. package/dist/esm/sqliteRuntime.mjs +289 -0
  148. package/dist/esm/sqliteRuntime.mjs.map +1 -0
  149. package/dist/esm/sqliteRuntime.native.js +406 -0
  150. package/dist/esm/sqliteRuntime.native.js.map +1 -0
  151. package/dist/esm/state.mjs +1 -1
  152. package/dist/esm/state.native.js +1 -1
  153. package/dist/esm/syncHost.mjs +153 -0
  154. package/dist/esm/syncHost.mjs.map +1 -0
  155. package/dist/esm/syncHost.native.js +359 -0
  156. package/dist/esm/syncHost.native.js.map +1 -0
  157. package/dist/esm/syncHost.test.mjs +217 -0
  158. package/dist/esm/syncHost.test.mjs.map +1 -0
  159. package/dist/esm/syncHost.test.native.js +264 -0
  160. package/dist/esm/syncHost.test.native.js.map +1 -0
  161. package/dist/esm/zeroRunner.mjs +1 -1
  162. package/dist/esm/zeroRunner.mjs.map +1 -1
  163. package/dist/esm/zeroRunner.native.js +1 -1
  164. package/package.json +23 -8
  165. package/readme.md +65 -40
  166. package/src/asyncTasks.ts +36 -0
  167. package/src/createZeroClient.tsx +1 -1
  168. package/src/createZeroDirectServer.ts +411 -0
  169. package/src/createZeroSQLiteServer.test.ts +614 -0
  170. package/src/createZeroSQLiteServer.ts +56 -0
  171. package/src/createZeroServer.test.ts +421 -0
  172. package/src/createZeroServer.ts +105 -0
  173. package/src/createZeroServerCore.ts +296 -0
  174. package/src/helpers/createMutators.ts +2 -6
  175. package/src/httpPull/auth.test.ts +208 -0
  176. package/src/httpPull/churn.test.ts +147 -0
  177. package/src/httpPull/completeAck.test.ts +80 -0
  178. package/src/httpPull/fixtureServer.ts +391 -0
  179. package/src/httpPull/integration.test.ts +57 -0
  180. package/src/httpPull/rebase.test.ts +368 -0
  181. package/src/httpPull/relations.test.ts +135 -0
  182. package/src/httpPull/testHarness.ts +95 -0
  183. package/src/index.ts +1 -0
  184. package/src/run.ts +1 -1
  185. package/src/server.native.ts +3 -0
  186. package/src/server.ts +4 -0
  187. package/src/sqliteRuntime.ts +512 -0
  188. package/src/state.ts +1 -1
  189. package/src/syncHost.test.ts +223 -0
  190. package/src/syncHost.ts +294 -0
  191. package/src/types.ts +5 -0
  192. package/src/zeroRunner.ts +1 -1
  193. package/test-fixtures/server-return-types.ts +58 -21
  194. package/types/asyncTasks.d.ts +11 -0
  195. package/types/asyncTasks.d.ts.map +1 -0
  196. package/types/createZeroDirectServer.d.ts +80 -0
  197. package/types/createZeroDirectServer.d.ts.map +1 -0
  198. package/types/createZeroSQLiteServer.d.ts +12 -0
  199. package/types/createZeroSQLiteServer.d.ts.map +1 -0
  200. package/types/createZeroSQLiteServer.test.d.ts +2 -0
  201. package/types/createZeroSQLiteServer.test.d.ts.map +1 -0
  202. package/types/createZeroServer.d.ts +18 -0
  203. package/types/createZeroServer.d.ts.map +1 -0
  204. package/types/createZeroServer.test.d.ts +2 -0
  205. package/types/createZeroServer.test.d.ts.map +1 -0
  206. package/types/createZeroServerCore.d.ts +256 -0
  207. package/types/createZeroServerCore.d.ts.map +1 -0
  208. package/types/helpers/createMutators.d.ts +1 -2
  209. package/types/helpers/createMutators.d.ts.map +1 -1
  210. package/types/httpPull/auth.test.d.ts +2 -0
  211. package/types/httpPull/auth.test.d.ts.map +1 -0
  212. package/types/httpPull/churn.test.d.ts +2 -0
  213. package/types/httpPull/churn.test.d.ts.map +1 -0
  214. package/types/httpPull/completeAck.test.d.ts +2 -0
  215. package/types/httpPull/completeAck.test.d.ts.map +1 -0
  216. package/types/httpPull/fixtureSchema.d.ts +1 -1
  217. package/types/httpPull/fixtureServer.d.ts +14 -0
  218. package/types/httpPull/fixtureServer.d.ts.map +1 -0
  219. package/types/httpPull/integration.test.d.ts +2 -0
  220. package/types/httpPull/integration.test.d.ts.map +1 -0
  221. package/types/httpPull/rebase.test.d.ts +2 -0
  222. package/types/httpPull/rebase.test.d.ts.map +1 -0
  223. package/types/httpPull/relations.test.d.ts +2 -0
  224. package/types/httpPull/relations.test.d.ts.map +1 -0
  225. package/types/httpPull/testHarness.d.ts +32 -0
  226. package/types/httpPull/testHarness.d.ts.map +1 -0
  227. package/types/index.d.ts +1 -0
  228. package/types/index.d.ts.map +1 -1
  229. package/types/server.d.ts +5 -0
  230. package/types/server.d.ts.map +1 -0
  231. package/types/server.native.d.ts +1 -0
  232. package/types/server.native.d.ts.map +1 -0
  233. package/types/sqliteRuntime.d.ts +71 -0
  234. package/types/sqliteRuntime.d.ts.map +1 -0
  235. package/types/syncHost.d.ts +42 -0
  236. package/types/syncHost.d.ts.map +1 -0
  237. package/types/syncHost.test.d.ts +2 -0
  238. package/types/syncHost.test.d.ts.map +1 -0
  239. package/types/types.d.ts +4 -0
  240. package/types/types.d.ts.map +1 -1
  241. package/dist/cjs/orez.cjs +0 -227
  242. package/dist/cjs/orez.native.js +0 -314
  243. package/dist/cjs/orez.native.js.map +0 -1
  244. package/dist/cjs/orez.test.cjs +0 -211
  245. package/dist/cjs/orez.test.native.js +0 -226
  246. package/dist/cjs/orez.test.native.js.map +0 -1
  247. package/dist/esm/orez.mjs +0 -202
  248. package/dist/esm/orez.mjs.map +0 -1
  249. package/dist/esm/orez.native.js +0 -286
  250. package/dist/esm/orez.native.js.map +0 -1
  251. package/dist/esm/orez.test.mjs +0 -188
  252. package/dist/esm/orez.test.mjs.map +0 -1
  253. package/dist/esm/orez.test.native.js +0 -200
  254. package/dist/esm/orez.test.native.js.map +0 -1
  255. package/src/orez.test.ts +0 -195
  256. package/src/orez.ts +0 -331
  257. package/types/orez.d.ts +0 -53
  258. package/types/orez.d.ts.map +0 -1
  259. package/types/orez.test.d.ts +0 -2
  260. package/types/orez.test.d.ts.map +0 -1
@@ -1,200 +0,0 @@
1
- import { DatabaseSync } from "node:sqlite";
2
- import { createSchema, defineQueries, defineQuery, string, table } from "@rocicorp/zero";
3
- import { createSyncExecutor } from "orez/sync-executor";
4
- import * as v from "valibot";
5
- import { afterEach, describe, expect, test } from "vitest";
6
- import { createOrezBindings } from "./orez.native.js";
7
- import { getScopedAuthData } from "./helpers/mutatorContext.native.js";
8
- import { zql } from "./zql.native.js";
9
- var project = table("project").columns({
10
- id: string(),
11
- ownerId: string(),
12
- name: string()
13
- }).primaryKey("id");
14
- var schema = createSchema({
15
- tables: [project],
16
- relationships: [],
17
- enableLegacyQueries: true
18
- });
19
- var queries = defineQueries({
20
- project: {
21
- byOwner: defineQuery(v.object({
22
- ownerId: v.string()
23
- }), function (param) {
24
- var {
25
- args
26
- } = param;
27
- return zql.project.where("ownerId", args.ownerId);
28
- })
29
- }
30
- });
31
- describe("createOrezBindings", function () {
32
- var databases = [];
33
- afterEach(function () {
34
- while (databases.length) databases.pop().close();
35
- });
36
- test("binds auth, queries, pipe keys, effects, and replay to one Orez executor", async function () {
37
- var sqlite = new DatabaseSync(":memory:");
38
- databases.push(sqlite);
39
- sqlite.exec("CREATE TABLE project (id TEXT PRIMARY KEY, ownerId TEXT NOT NULL, name TEXT NOT NULL)");
40
- var mutationRuns = 0;
41
- var validatedMutationAuth;
42
- var validatedQueryAuth;
43
- var barrierRuns = 0;
44
- var backgroundRuns = 0;
45
- var backgroundAuth;
46
- var scheduledBackground = [];
47
- var bindings = createOrezBindings({
48
- schema,
49
- models: {
50
- project: {
51
- mutate: {
52
- create: async function (param, value) {
53
- var {
54
- authData,
55
- server,
56
- tx
57
- } = param;
58
- mutationRuns++;
59
- expect(authData === null || authData === void 0 ? void 0 : authData.id).toBe("user-1");
60
- await tx.mutate.project.insert(value);
61
- server === null || server === void 0 ? void 0 : server.enqueueTask(async function () {
62
- barrierRuns++;
63
- }, {
64
- barrier: true
65
- });
66
- server === null || server === void 0 ? void 0 : server.enqueueTask(async function () {
67
- var _getScopedAuthData;
68
- backgroundRuns++;
69
- backgroundAuth = (_getScopedAuthData = getScopedAuthData()) === null || _getScopedAuthData === void 0 ? void 0 : _getScopedAuthData.id;
70
- });
71
- }
72
- }
73
- }
74
- },
75
- createServerActions: function () {
76
- return {};
77
- },
78
- queries,
79
- validateMutation(param) {
80
- var {
81
- authData
82
- } = param;
83
- validatedMutationAuth = authData === null || authData === void 0 ? void 0 : authData.id;
84
- },
85
- validateQuery(param) {
86
- var {
87
- authData
88
- } = param;
89
- validatedQueryAuth = authData === null || authData === void 0 ? void 0 : authData.id;
90
- }
91
- });
92
- expect(Object.keys(bindings.mutators)).toEqual(["project|create"]);
93
- var executor = createSyncExecutor({
94
- database: sqliteApplicationDatabase(sqlite),
95
- schema,
96
- mutators: bindings.mutators,
97
- effects: {
98
- runBackground(promise) {
99
- scheduledBackground.push(promise);
100
- },
101
- report(error) {
102
- throw error;
103
- }
104
- }
105
- });
106
- var claims = {
107
- userID: "user-1",
108
- role: "member"
109
- };
110
- var body = {
111
- clientGroupID: "group-1",
112
- mutations: [{
113
- type: "custom",
114
- id: 1,
115
- clientID: "client-1",
116
- name: "project|create",
117
- args: [{
118
- id: "project-1",
119
- ownerId: "user-1",
120
- name: "first"
121
- }],
122
- timestamp: 1
123
- }],
124
- pushVersion: 1,
125
- requestID: "request-1"
126
- };
127
- var first = await executor.push(body, claims);
128
- expect(first.pushResponse).toMatchObject({
129
- mutations: [{
130
- result: {}
131
- }]
132
- });
133
- expect(sqlite.prepare("SELECT * FROM project").all()).toEqual([{
134
- id: "project-1",
135
- ownerId: "user-1",
136
- name: "first"
137
- }]);
138
- expect(mutationRuns).toBe(1);
139
- expect(validatedMutationAuth).toBe("user-1");
140
- expect(barrierRuns).toBe(1);
141
- await Promise.all(scheduledBackground);
142
- expect(backgroundRuns).toBe(1);
143
- expect(backgroundAuth).toBe("user-1");
144
- var replay = await executor.push(body, claims);
145
- expect(replay.pushResponse).toMatchObject({
146
- mutations: [{
147
- result: {
148
- error: "alreadyProcessed"
149
- }
150
- }]
151
- });
152
- expect(scheduledBackground).toHaveLength(1);
153
- expect(mutationRuns).toBe(1);
154
- expect(barrierRuns).toBe(1);
155
- expect(backgroundRuns).toBe(1);
156
- var ast = await bindings.resolveQuery("project|byOwner", [{
157
- ownerId: "user-1"
158
- }], claims);
159
- expect(JSON.stringify(ast)).toContain("ownerId");
160
- expect(JSON.stringify(ast)).toContain("user-1");
161
- expect(validatedQueryAuth).toBe("user-1");
162
- });
163
- });
164
- function sqliteApplicationDatabase(sqlite) {
165
- var applicationTransaction = {
166
- async exec(sql) {
167
- var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
168
- var result = sqlite.prepare(sql).run(...params);
169
- return {
170
- changes: Number(result.changes)
171
- };
172
- },
173
- async query(sql) {
174
- var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
175
- return sqlite.prepare(sql).all(...params);
176
- },
177
- async queryAst() {
178
- return [];
179
- }
180
- };
181
- return {
182
- dialect: "sqlite",
183
- async transaction(work) {
184
- sqlite.exec("BEGIN");
185
- try {
186
- var value = await work(applicationTransaction);
187
- sqlite.exec("COMMIT");
188
- return value;
189
- } catch (error) {
190
- sqlite.exec("ROLLBACK");
191
- throw error;
192
- }
193
- },
194
- async query(sql) {
195
- var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
196
- return sqlite.prepare(sql).all(...params);
197
- }
198
- };
199
- }
200
- //# sourceMappingURL=orez.test.native.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["DatabaseSync","createSchema","defineQueries","defineQuery","string","table","createSyncExecutor","v","afterEach","describe","expect","test","createOrezBindings","getScopedAuthData","zql","project","columns","id","ownerId","name","primaryKey","schema","tables","relationships","enableLegacyQueries","queries","byOwner","object","param","args","where","databases","length","pop","close","sqlite","push","exec","mutationRuns","validatedMutationAuth","validatedQueryAuth","barrierRuns","backgroundRuns","backgroundAuth","scheduledBackground","bindings","models","mutate","create","value","authData","server","tx","toBe","insert","enqueueTask","barrier","_getScopedAuthData","createServerActions","validateMutation","validateQuery","Object","keys","mutators","toEqual","executor","database","sqliteApplicationDatabase","effects","runBackground","promise","report","error","claims","userID","role","body","clientGroupID","mutations","type","clientID","timestamp","pushVersion","requestID","first","pushResponse","toMatchObject","result","prepare","all","Promise","replay","toHaveLength","ast","resolveQuery","JSON","stringify","toContain"],"sources":["../../src/orez.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/src/orez.test.ts DELETED
@@ -1,195 +0,0 @@
1
- import { DatabaseSync, type SQLInputValue } from 'node:sqlite'
2
-
3
- import { createSchema, defineQueries, defineQuery, string, table } from '@rocicorp/zero'
4
- import {
5
- createSyncExecutor,
6
- type ApplicationDatabase,
7
- type ApplicationTransaction,
8
- } from 'orez/sync-executor'
9
- import * as v from 'valibot'
10
- import { afterEach, describe, expect, test } from 'vitest'
11
-
12
- import { createOrezBindings } from './orez'
13
- import { getScopedAuthData } from './helpers/mutatorContext'
14
- import { zql } from './zql'
15
-
16
- import type { MutatorContext } from './types'
17
-
18
- const project = table('project')
19
- .columns({
20
- id: string(),
21
- ownerId: string(),
22
- name: string(),
23
- })
24
- .primaryKey('id')
25
-
26
- const schema = createSchema({
27
- tables: [project],
28
- relationships: [],
29
- enableLegacyQueries: true,
30
- })
31
-
32
- const queries = defineQueries({
33
- project: {
34
- byOwner: defineQuery(v.object({ ownerId: v.string() }), ({ args }) =>
35
- zql.project.where('ownerId', args.ownerId),
36
- ),
37
- },
38
- })
39
-
40
- describe('createOrezBindings', () => {
41
- const databases: DatabaseSync[] = []
42
-
43
- afterEach(() => {
44
- while (databases.length) databases.pop()!.close()
45
- })
46
-
47
- test('binds auth, queries, pipe keys, effects, and replay to one Orez executor', async () => {
48
- const sqlite = new DatabaseSync(':memory:')
49
- databases.push(sqlite)
50
- sqlite.exec(
51
- 'CREATE TABLE project (id TEXT PRIMARY KEY, ownerId TEXT NOT NULL, name TEXT NOT NULL)',
52
- )
53
-
54
- let mutationRuns = 0
55
- let validatedMutationAuth: string | undefined
56
- let validatedQueryAuth: string | undefined
57
- let barrierRuns = 0
58
- let backgroundRuns = 0
59
- let backgroundAuth: string | undefined
60
- const scheduledBackground: Promise<void>[] = []
61
-
62
- const bindings = createOrezBindings({
63
- schema,
64
- models: {
65
- project: {
66
- mutate: {
67
- create: async (
68
- { authData, server, tx }: MutatorContext,
69
- value: { id: string; ownerId: string; name: string },
70
- ) => {
71
- mutationRuns++
72
- expect(authData?.id).toBe('user-1')
73
- await tx.mutate.project.insert(value)
74
- server?.enqueueTask(
75
- async () => {
76
- barrierRuns++
77
- },
78
- { barrier: true },
79
- )
80
- server?.enqueueTask(async () => {
81
- backgroundRuns++
82
- backgroundAuth = getScopedAuthData()?.id as string | undefined
83
- })
84
- },
85
- },
86
- },
87
- },
88
- createServerActions: () => ({}),
89
- queries,
90
- validateMutation({ authData }) {
91
- validatedMutationAuth = authData?.id as string | undefined
92
- },
93
- validateQuery({ authData }) {
94
- validatedQueryAuth = authData?.id as string | undefined
95
- },
96
- })
97
-
98
- expect(Object.keys(bindings.mutators)).toEqual(['project|create'])
99
-
100
- const executor = createSyncExecutor({
101
- database: sqliteApplicationDatabase(sqlite),
102
- schema,
103
- mutators: bindings.mutators,
104
- effects: {
105
- runBackground(promise) {
106
- scheduledBackground.push(promise)
107
- },
108
- report(error) {
109
- throw error
110
- },
111
- },
112
- })
113
- const claims = { userID: 'user-1', role: 'member' } as const
114
- const body = {
115
- clientGroupID: 'group-1',
116
- mutations: [
117
- {
118
- type: 'custom',
119
- id: 1,
120
- clientID: 'client-1',
121
- name: 'project|create',
122
- args: [{ id: 'project-1', ownerId: 'user-1', name: 'first' }],
123
- timestamp: 1,
124
- },
125
- ],
126
- pushVersion: 1,
127
- requestID: 'request-1',
128
- }
129
-
130
- const first = await executor.push(body, claims)
131
- expect(first.pushResponse).toMatchObject({
132
- mutations: [{ result: {} }],
133
- })
134
- expect(sqlite.prepare('SELECT * FROM project').all()).toEqual([
135
- { id: 'project-1', ownerId: 'user-1', name: 'first' },
136
- ])
137
- expect(mutationRuns).toBe(1)
138
- expect(validatedMutationAuth).toBe('user-1')
139
- expect(barrierRuns).toBe(1)
140
- await Promise.all(scheduledBackground)
141
- expect(backgroundRuns).toBe(1)
142
- expect(backgroundAuth).toBe('user-1')
143
-
144
- const replay = await executor.push(body, claims)
145
- expect(replay.pushResponse).toMatchObject({
146
- mutations: [{ result: { error: 'alreadyProcessed' } }],
147
- })
148
- expect(scheduledBackground).toHaveLength(1)
149
- expect(mutationRuns).toBe(1)
150
- expect(barrierRuns).toBe(1)
151
- expect(backgroundRuns).toBe(1)
152
-
153
- const ast = await bindings.resolveQuery(
154
- 'project|byOwner',
155
- [{ ownerId: 'user-1' }],
156
- claims,
157
- )
158
- expect(JSON.stringify(ast)).toContain('ownerId')
159
- expect(JSON.stringify(ast)).toContain('user-1')
160
- expect(validatedQueryAuth).toBe('user-1')
161
- })
162
- })
163
-
164
- function sqliteApplicationDatabase(sqlite: DatabaseSync): ApplicationDatabase {
165
- const applicationTransaction: ApplicationTransaction = {
166
- async exec(sql, params = []) {
167
- const result = sqlite.prepare(sql).run(...(params as SQLInputValue[]))
168
- return { changes: Number(result.changes) }
169
- },
170
- async query<Row extends Record<string, unknown>>(sql: string, params = []) {
171
- return sqlite.prepare(sql).all(...(params as SQLInputValue[])) as Row[]
172
- },
173
- async queryAst<Result>() {
174
- return [] as Result
175
- },
176
- }
177
-
178
- return {
179
- dialect: 'sqlite',
180
- async transaction(work) {
181
- sqlite.exec('BEGIN')
182
- try {
183
- const value = await work(applicationTransaction)
184
- sqlite.exec('COMMIT')
185
- return value
186
- } catch (error) {
187
- sqlite.exec('ROLLBACK')
188
- throw error
189
- }
190
- },
191
- async query<Row extends Record<string, unknown>>(sql: string, params = []) {
192
- return sqlite.prepare(sql).all(...(params as SQLInputValue[])) as Row[]
193
- },
194
- }
195
- }