on-zero 0.6.11 → 0.6.13

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 (131) hide show
  1. package/dist/cjs/createZeroSQLiteServer.cjs +319 -0
  2. package/dist/cjs/createZeroSQLiteServer.native.js +440 -0
  3. package/dist/cjs/createZeroSQLiteServer.native.js.map +1 -0
  4. package/dist/cjs/createZeroSQLiteServer.test.cjs +429 -0
  5. package/dist/cjs/createZeroSQLiteServer.test.native.js +466 -0
  6. package/dist/cjs/createZeroSQLiteServer.test.native.js.map +1 -0
  7. package/dist/cjs/createZeroServer.cjs +20 -234
  8. package/dist/cjs/createZeroServer.native.js +24 -250
  9. package/dist/cjs/createZeroServer.native.js.map +1 -1
  10. package/dist/cjs/createZeroServer.test.cjs +35 -1
  11. package/dist/cjs/createZeroServer.test.native.js +38 -1
  12. package/dist/cjs/createZeroServer.test.native.js.map +1 -1
  13. package/dist/cjs/createZeroServerCore.cjs +362 -0
  14. package/dist/cjs/createZeroServerCore.native.js +389 -0
  15. package/dist/cjs/createZeroServerCore.native.js.map +1 -0
  16. package/dist/cjs/generate-lite.cjs +1 -0
  17. package/dist/cjs/generate-lite.native.js +1 -0
  18. package/dist/cjs/generate-lite.native.js.map +1 -1
  19. package/dist/cjs/generate-lite.test.cjs +5 -1
  20. package/dist/cjs/generate-lite.test.native.js +5 -1
  21. package/dist/cjs/generate-lite.test.native.js.map +1 -1
  22. package/dist/cjs/generate.cjs +20 -11
  23. package/dist/cjs/generate.native.js +29 -21
  24. package/dist/cjs/generate.native.js.map +1 -1
  25. package/dist/cjs/generate.test.cjs +110 -0
  26. package/dist/cjs/generate.test.native.js +110 -0
  27. package/dist/cjs/generate.test.native.js.map +1 -1
  28. package/dist/cjs/httpPull/transport.test.cjs +44 -0
  29. package/dist/cjs/httpPull/transport.test.native.js +53 -0
  30. package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
  31. package/dist/cjs/httpPullTransport.cjs +4 -1
  32. package/dist/cjs/httpPullTransport.native.js +5 -2
  33. package/dist/cjs/httpPullTransport.native.js.map +1 -1
  34. package/dist/cjs/server.cjs +2 -1
  35. package/dist/cjs/syncHost.cjs +164 -0
  36. package/dist/cjs/syncHost.native.js +371 -0
  37. package/dist/cjs/syncHost.native.js.map +1 -0
  38. package/dist/cjs/syncHost.test.cjs +229 -0
  39. package/dist/cjs/syncHost.test.native.js +278 -0
  40. package/dist/cjs/syncHost.test.native.js.map +1 -0
  41. package/dist/esm/createZeroSQLiteServer.mjs +293 -0
  42. package/dist/esm/createZeroSQLiteServer.mjs.map +1 -0
  43. package/dist/esm/createZeroSQLiteServer.native.js +411 -0
  44. package/dist/esm/createZeroSQLiteServer.native.js.map +1 -0
  45. package/dist/esm/createZeroSQLiteServer.test.mjs +430 -0
  46. package/dist/esm/createZeroSQLiteServer.test.mjs.map +1 -0
  47. package/dist/esm/createZeroSQLiteServer.test.native.js +464 -0
  48. package/dist/esm/createZeroSQLiteServer.test.native.js.map +1 -0
  49. package/dist/esm/createZeroServer.mjs +17 -231
  50. package/dist/esm/createZeroServer.mjs.map +1 -1
  51. package/dist/esm/createZeroServer.native.js +21 -247
  52. package/dist/esm/createZeroServer.native.js.map +1 -1
  53. package/dist/esm/createZeroServer.test.mjs +35 -1
  54. package/dist/esm/createZeroServer.test.mjs.map +1 -1
  55. package/dist/esm/createZeroServer.test.native.js +38 -1
  56. package/dist/esm/createZeroServer.test.native.js.map +1 -1
  57. package/dist/esm/createZeroServerCore.mjs +336 -0
  58. package/dist/esm/createZeroServerCore.mjs.map +1 -0
  59. package/dist/esm/createZeroServerCore.native.js +360 -0
  60. package/dist/esm/createZeroServerCore.native.js.map +1 -0
  61. package/dist/esm/generate-lite.mjs +1 -0
  62. package/dist/esm/generate-lite.mjs.map +1 -1
  63. package/dist/esm/generate-lite.native.js +1 -0
  64. package/dist/esm/generate-lite.native.js.map +1 -1
  65. package/dist/esm/generate-lite.test.mjs +5 -1
  66. package/dist/esm/generate-lite.test.mjs.map +1 -1
  67. package/dist/esm/generate-lite.test.native.js +5 -1
  68. package/dist/esm/generate-lite.test.native.js.map +1 -1
  69. package/dist/esm/generate.mjs +20 -11
  70. package/dist/esm/generate.mjs.map +1 -1
  71. package/dist/esm/generate.native.js +29 -21
  72. package/dist/esm/generate.native.js.map +1 -1
  73. package/dist/esm/generate.test.mjs +87 -1
  74. package/dist/esm/generate.test.mjs.map +1 -1
  75. package/dist/esm/generate.test.native.js +87 -1
  76. package/dist/esm/generate.test.native.js.map +1 -1
  77. package/dist/esm/httpPull/transport.test.mjs +44 -0
  78. package/dist/esm/httpPull/transport.test.mjs.map +1 -1
  79. package/dist/esm/httpPull/transport.test.native.js +53 -0
  80. package/dist/esm/httpPull/transport.test.native.js.map +1 -1
  81. package/dist/esm/httpPullTransport.mjs +4 -1
  82. package/dist/esm/httpPullTransport.mjs.map +1 -1
  83. package/dist/esm/httpPullTransport.native.js +5 -2
  84. package/dist/esm/httpPullTransport.native.js.map +1 -1
  85. package/dist/esm/server.mjs +1 -0
  86. package/dist/esm/server.mjs.map +1 -1
  87. package/dist/esm/syncHost.mjs +138 -0
  88. package/dist/esm/syncHost.mjs.map +1 -0
  89. package/dist/esm/syncHost.native.js +342 -0
  90. package/dist/esm/syncHost.native.js.map +1 -0
  91. package/dist/esm/syncHost.test.mjs +206 -0
  92. package/dist/esm/syncHost.test.mjs.map +1 -0
  93. package/dist/esm/syncHost.test.native.js +252 -0
  94. package/dist/esm/syncHost.test.native.js.map +1 -0
  95. package/package.json +19 -3
  96. package/readme.md +26 -0
  97. package/src/createZeroSQLiteServer.test.ts +461 -0
  98. package/src/createZeroSQLiteServer.ts +523 -0
  99. package/src/createZeroServer.test.ts +39 -1
  100. package/src/createZeroServer.ts +35 -428
  101. package/src/createZeroServerCore.ts +557 -0
  102. package/src/generate-lite.test.ts +4 -0
  103. package/src/generate-lite.ts +1 -0
  104. package/src/generate.test.ts +87 -1
  105. package/src/generate.ts +29 -20
  106. package/src/httpPull/transport.test.ts +47 -0
  107. package/src/httpPullTransport.ts +15 -1
  108. package/src/server.ts +1 -0
  109. package/src/syncHost.test.ts +216 -0
  110. package/src/syncHost.ts +255 -0
  111. package/test-fixtures/server-return-types.ts +50 -0
  112. package/test-fixtures/tsconfig.json +13 -0
  113. package/types/createZeroSQLiteServer.d.ts +37 -0
  114. package/types/createZeroSQLiteServer.d.ts.map +1 -0
  115. package/types/createZeroSQLiteServer.test.d.ts +2 -0
  116. package/types/createZeroSQLiteServer.test.d.ts.map +1 -0
  117. package/types/createZeroServer.d.ts +11 -293
  118. package/types/createZeroServer.d.ts.map +1 -1
  119. package/types/createZeroServerCore.d.ts +310 -0
  120. package/types/createZeroServerCore.d.ts.map +1 -0
  121. package/types/generate-lite.d.ts.map +1 -1
  122. package/types/generate.d.ts +2 -1
  123. package/types/generate.d.ts.map +1 -1
  124. package/types/httpPullTransport.d.ts +2 -0
  125. package/types/httpPullTransport.d.ts.map +1 -1
  126. package/types/server.d.ts +1 -0
  127. package/types/server.d.ts.map +1 -1
  128. package/types/syncHost.d.ts +51 -0
  129. package/types/syncHost.d.ts.map +1 -0
  130. package/types/syncHost.test.d.ts +2 -0
  131. package/types/syncHost.test.d.ts.map +1 -0
@@ -0,0 +1,252 @@
1
+ import { DatabaseSync } from "node:sqlite";
2
+ import { defineQueries, defineQuery } from "@rocicorp/zero";
3
+ import * as v from "valibot";
4
+ import { afterEach, beforeEach, describe, expect, test } from "vitest";
5
+ import { getScopedAuthData } from "./helpers/mutatorContext.native.js";
6
+ import { zeroHttpFixtureSchema } from "./httpPull/fixtureSchema.native.js";
7
+ import { createZeroSyncHostAdapter } from "./syncHost.native.js";
8
+ import { zql } from "./zql.native.js";
9
+ var queries = defineQueries({
10
+ project: {
11
+ byOwner: defineQuery(v.object({
12
+ ownerId: v.string()
13
+ }), function (param) {
14
+ var {
15
+ args
16
+ } = param;
17
+ return zql.project.where("ownerId", args.ownerId);
18
+ })
19
+ }
20
+ });
21
+ describe("createZeroSyncHostAdapter", function () {
22
+ var db;
23
+ var executor;
24
+ var transaction;
25
+ var lastQueryFormat;
26
+ beforeEach(function () {
27
+ db = new DatabaseSync(":memory:");
28
+ db.exec("CREATE TABLE project (id TEXT PRIMARY KEY, ownerId TEXT NOT NULL, name TEXT NOT NULL)");
29
+ executor = {
30
+ exec(sql) {
31
+ var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
32
+ db.prepare(sql).run(...params);
33
+ },
34
+ query(sql) {
35
+ var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
36
+ return db.prepare(sql).all(...params);
37
+ },
38
+ queryAst(_ast, format) {
39
+ lastQueryFormat = format;
40
+ var rows = db.prepare("SELECT * FROM project ORDER BY id").all();
41
+ return format.singular ? rows[0] : rows;
42
+ }
43
+ };
44
+ transaction = async function (work) {
45
+ var effects = [];
46
+ db.exec("BEGIN");
47
+ try {
48
+ var value = await work(executor, {
49
+ defer(effect2) {
50
+ effects.push(effect2);
51
+ }
52
+ });
53
+ db.exec("COMMIT");
54
+ var _iteratorNormalCompletion = true,
55
+ _didIteratorError = false,
56
+ _iteratorError = void 0;
57
+ try {
58
+ for (var _iterator = effects[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
59
+ var effect = _step.value;
60
+ await effect();
61
+ }
62
+ } catch (err) {
63
+ _didIteratorError = true;
64
+ _iteratorError = err;
65
+ } finally {
66
+ try {
67
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
68
+ _iterator.return();
69
+ }
70
+ } finally {
71
+ if (_didIteratorError) {
72
+ throw _iteratorError;
73
+ }
74
+ }
75
+ }
76
+ return value;
77
+ } catch (error) {
78
+ db.exec("ROLLBACK");
79
+ throw error;
80
+ }
81
+ };
82
+ });
83
+ afterEach(function () {
84
+ db.close();
85
+ });
86
+ test("adapts pipe-named mutators, auth, validation, and deferred effects", async function () {
87
+ var effectAuthID;
88
+ var validatedAuthID;
89
+ var adapter = createZeroSyncHostAdapter({
90
+ schema: zeroHttpFixtureSchema,
91
+ models: {
92
+ project: {
93
+ mutate: {
94
+ create: async function (param, value) {
95
+ var {
96
+ authData,
97
+ server,
98
+ tx
99
+ } = param;
100
+ expect(authData === null || authData === void 0 ? void 0 : authData.id).toBe("u1");
101
+ await tx.mutate.project.insert(value);
102
+ server === null || server === void 0 ? void 0 : server.asyncTasks.push(async function () {
103
+ var _getScopedAuthData;
104
+ effectAuthID = (_getScopedAuthData = getScopedAuthData()) === null || _getScopedAuthData === void 0 ? void 0 : _getScopedAuthData.id;
105
+ });
106
+ }
107
+ }
108
+ }
109
+ },
110
+ createServerActions: function () {
111
+ return {};
112
+ },
113
+ queries,
114
+ transaction,
115
+ validateMutation(param) {
116
+ var {
117
+ authData
118
+ } = param;
119
+ validatedAuthID = authData === null || authData === void 0 ? void 0 : authData.id;
120
+ }
121
+ });
122
+ expect(Object.keys(adapter.mutators)).toEqual(["project|create", "_zero_cleanupResults"]);
123
+ await transaction(function (tx, context) {
124
+ return adapter.mutators["project|create"](tx, {
125
+ id: "p1",
126
+ ownerId: "u1",
127
+ name: "first"
128
+ }, mutationContext(context));
129
+ });
130
+ expect(db.prepare("SELECT * FROM project").all()).toEqual([{
131
+ id: "p1",
132
+ ownerId: "u1",
133
+ name: "first"
134
+ }]);
135
+ expect(validatedAuthID).toBe("u1");
136
+ expect(effectAuthID).toBe("u1");
137
+ });
138
+ test("returns a structural application error and drops rolled-back effects", async function () {
139
+ var effectRuns = 0;
140
+ var adapter = createZeroSyncHostAdapter({
141
+ schema: zeroHttpFixtureSchema,
142
+ models: {
143
+ project: {
144
+ mutate: {
145
+ reject: async function (param, value) {
146
+ var {
147
+ server,
148
+ tx
149
+ } = param;
150
+ await tx.mutate.project.insert(value);
151
+ server === null || server === void 0 ? void 0 : server.asyncTasks.push(async function () {
152
+ effectRuns++;
153
+ });
154
+ throw new Error("denied");
155
+ }
156
+ }
157
+ }
158
+ },
159
+ createServerActions: function () {
160
+ return {};
161
+ },
162
+ transaction
163
+ });
164
+ var error = await transaction(function (tx, context) {
165
+ return adapter.mutators["project|reject"](tx, {
166
+ id: "p1",
167
+ ownerId: "u1",
168
+ name: "must roll back"
169
+ }, mutationContext(context));
170
+ }).catch(function (caught) {
171
+ return caught;
172
+ });
173
+ expect(error).toMatchObject({
174
+ name: "MutationApplicationError",
175
+ message: "denied",
176
+ details: "denied"
177
+ });
178
+ expect(db.prepare("SELECT * FROM project").all()).toEqual([]);
179
+ expect(effectRuns).toBe(0);
180
+ });
181
+ test("uses the host queryAst compiler surface for direct server queries", async function () {
182
+ db.prepare("INSERT INTO project (id, ownerId, name) VALUES (?, ?, ?)").run("p1", "u1", "first");
183
+ var adapter = createZeroSyncHostAdapter({
184
+ schema: zeroHttpFixtureSchema,
185
+ models: {},
186
+ createServerActions: function () {
187
+ return {};
188
+ },
189
+ transaction
190
+ });
191
+ await expect(adapter.server.query(function (q) {
192
+ return q.project.one();
193
+ })).resolves.toEqual({
194
+ id: "p1",
195
+ ownerId: "u1",
196
+ name: "first"
197
+ });
198
+ expect(lastQueryFormat).toEqual({
199
+ relationships: {},
200
+ singular: true
201
+ });
202
+ });
203
+ test("resolves auth-sensitive named queries and runs query validation", async function () {
204
+ var validation;
205
+ var adapter = createZeroSyncHostAdapter({
206
+ schema: zeroHttpFixtureSchema,
207
+ models: {},
208
+ createServerActions: function () {
209
+ return {};
210
+ },
211
+ queries,
212
+ transaction,
213
+ validateQuery(args) {
214
+ validation = args;
215
+ }
216
+ });
217
+ var ast = await adapter.resolveQuery("project|byOwner", [{
218
+ ownerId: "u1"
219
+ }], {
220
+ userID: "u1",
221
+ role: "member"
222
+ });
223
+ expect(ast).toMatchObject({
224
+ table: "project"
225
+ });
226
+ expect(JSON.stringify(ast)).toContain("ownerId");
227
+ expect(JSON.stringify(ast)).toContain("u1");
228
+ expect(validation).toEqual({
229
+ authData: {
230
+ id: "u1",
231
+ role: "member",
232
+ userID: "u1"
233
+ },
234
+ queryName: "project|byOwner",
235
+ params: {
236
+ ownerId: "u1"
237
+ }
238
+ });
239
+ });
240
+ });
241
+ function mutationContext(context) {
242
+ return {
243
+ ...context,
244
+ claims: {
245
+ userID: "u1",
246
+ role: "member"
247
+ },
248
+ clientID: "client-a",
249
+ mutationID: "1"
250
+ };
251
+ }
252
+ //# sourceMappingURL=syncHost.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DatabaseSync","defineQueries","defineQuery","v","afterEach","beforeEach","describe","expect","test","getScopedAuthData","zeroHttpFixtureSchema","createZeroSyncHostAdapter","zql","queries","project","byOwner","object","ownerId","string","param","args","where","db","executor","transaction","lastQueryFormat","exec","sql","params","arguments","length","prepare","run","query","all","queryAst","_ast","format","rows","singular","work","effects","value","defer","effect2","push","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","effect","err","return","error","close","effectAuthID","validatedAuthID","adapter","schema","models","mutate","create","authData","server","tx","id","toBe","insert","asyncTasks","_getScopedAuthData","createServerActions","validateMutation","Object","keys","mutators","toEqual","context","name","mutationContext","effectRuns","reject","Error","catch","caught","toMatchObject","message","details","q","one","resolves"],"sources":["../../src/syncHost.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "on-zero",
3
- "version": "0.6.11",
3
+ "version": "0.6.13",
4
4
  "description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
5
5
  "sideEffects": false,
6
6
  "source": "src/index.ts",
@@ -37,7 +37,8 @@
37
37
  "watch": "tamagui-build --watch",
38
38
  "clean": "tamagui-build clean",
39
39
  "clean:build": "tamagui-build clean:build",
40
- "test": "vitest run",
40
+ "test": "vitest run && bun run test:consumer-types",
41
+ "test:consumer-types": "bun run build && tsc -p test-fixtures/tsconfig.json",
41
42
  "test:watch": "vitest",
42
43
  "typecheck": "tsc --noEmit",
43
44
  "format": "oxfmt",
@@ -60,6 +61,21 @@
60
61
  "import": "./dist/esm/server.mjs",
61
62
  "require": "./dist/cjs/server.cjs"
62
63
  },
64
+ "./sqlite": {
65
+ "types": "./types/createZeroSQLiteServer.d.ts",
66
+ "import": "./dist/esm/createZeroSQLiteServer.mjs",
67
+ "require": "./dist/cjs/createZeroSQLiteServer.cjs"
68
+ },
69
+ "./sync-host": {
70
+ "types": "./types/syncHost.d.ts",
71
+ "import": "./dist/esm/syncHost.mjs",
72
+ "require": "./dist/cjs/syncHost.cjs"
73
+ },
74
+ "./http-pull": {
75
+ "types": "./types/httpPullTransport.d.ts",
76
+ "import": "./dist/esm/httpPullTransport.mjs",
77
+ "require": "./dist/cjs/httpPullTransport.cjs"
78
+ },
63
79
  "./vite": {
64
80
  "types": "./types/vite-plugin.d.ts",
65
81
  "import": "./dist/esm/vite-plugin.mjs",
@@ -83,7 +99,7 @@
83
99
  }
84
100
  },
85
101
  "dependencies": {
86
- "@take-out/helpers": "0.6.11",
102
+ "@take-out/helpers": "0.6.13",
87
103
  "chokidar": "^4.0.3",
88
104
  "citty": "^0.1.6",
89
105
  "valibot": "^1.1.0"
package/readme.md CHANGED
@@ -517,6 +517,32 @@ app.post('/api/zero/pull', async (req) => {
517
517
  })
518
518
  ```
519
519
 
520
+ SQLite uses the same handler surface through a separate entrypoint that does
521
+ not import the PostgreSQL adapter:
522
+
523
+ ```ts
524
+ import { createZeroSQLiteServer } from 'on-zero/sqlite'
525
+
526
+ export const zeroServer = createZeroSQLiteServer({
527
+ schema,
528
+ models,
529
+ queries: syncedQueries,
530
+ mutations: mutationValidators,
531
+ createServerActions: () => ({ ... }),
532
+ transactionProvider: (callback) =>
533
+ storage.transaction(() => callback(sqliteExecutor)),
534
+ })
535
+ ```
536
+
537
+ `sqliteExecutor` implements `exec`, `query`, and `queryAst`. `queryAst` receives
538
+ the query format and returns the fully materialized logical result, including
539
+ nested relationships and singular shaping. The provider must run the callback
540
+ inside the authoritative SQLite transaction. If the storage engine retries the
541
+ callback, on-zero discards tasks from the abandoned attempt and returns only
542
+ tasks from the committed attempt. The first push creates the `<schema>_clients`
543
+ and `<schema>_mutations` ledger tables in that transaction; for example,
544
+ `schema=zero_0` creates `zero_0_clients` and `zero_0_mutations`.
545
+
520
546
  ### multiple client instances
521
547
 
522
548
  one page can run several zero clients (e.g. a global control-plane instance