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.
- package/dist/cjs/createZeroSQLiteServer.cjs +319 -0
- package/dist/cjs/createZeroSQLiteServer.native.js +440 -0
- package/dist/cjs/createZeroSQLiteServer.native.js.map +1 -0
- package/dist/cjs/createZeroSQLiteServer.test.cjs +429 -0
- package/dist/cjs/createZeroSQLiteServer.test.native.js +466 -0
- package/dist/cjs/createZeroSQLiteServer.test.native.js.map +1 -0
- package/dist/cjs/createZeroServer.cjs +20 -234
- package/dist/cjs/createZeroServer.native.js +24 -250
- package/dist/cjs/createZeroServer.native.js.map +1 -1
- package/dist/cjs/createZeroServer.test.cjs +35 -1
- package/dist/cjs/createZeroServer.test.native.js +38 -1
- package/dist/cjs/createZeroServer.test.native.js.map +1 -1
- package/dist/cjs/createZeroServerCore.cjs +362 -0
- package/dist/cjs/createZeroServerCore.native.js +389 -0
- package/dist/cjs/createZeroServerCore.native.js.map +1 -0
- package/dist/cjs/generate-lite.cjs +1 -0
- package/dist/cjs/generate-lite.native.js +1 -0
- package/dist/cjs/generate-lite.native.js.map +1 -1
- package/dist/cjs/generate-lite.test.cjs +5 -1
- package/dist/cjs/generate-lite.test.native.js +5 -1
- package/dist/cjs/generate-lite.test.native.js.map +1 -1
- package/dist/cjs/generate.cjs +20 -11
- package/dist/cjs/generate.native.js +29 -21
- package/dist/cjs/generate.native.js.map +1 -1
- package/dist/cjs/generate.test.cjs +110 -0
- package/dist/cjs/generate.test.native.js +110 -0
- package/dist/cjs/generate.test.native.js.map +1 -1
- package/dist/cjs/httpPull/transport.test.cjs +44 -0
- package/dist/cjs/httpPull/transport.test.native.js +53 -0
- package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
- package/dist/cjs/httpPullTransport.cjs +4 -1
- package/dist/cjs/httpPullTransport.native.js +5 -2
- package/dist/cjs/httpPullTransport.native.js.map +1 -1
- package/dist/cjs/server.cjs +2 -1
- package/dist/cjs/syncHost.cjs +164 -0
- package/dist/cjs/syncHost.native.js +371 -0
- package/dist/cjs/syncHost.native.js.map +1 -0
- package/dist/cjs/syncHost.test.cjs +229 -0
- package/dist/cjs/syncHost.test.native.js +278 -0
- package/dist/cjs/syncHost.test.native.js.map +1 -0
- package/dist/esm/createZeroSQLiteServer.mjs +293 -0
- package/dist/esm/createZeroSQLiteServer.mjs.map +1 -0
- package/dist/esm/createZeroSQLiteServer.native.js +411 -0
- package/dist/esm/createZeroSQLiteServer.native.js.map +1 -0
- package/dist/esm/createZeroSQLiteServer.test.mjs +430 -0
- package/dist/esm/createZeroSQLiteServer.test.mjs.map +1 -0
- package/dist/esm/createZeroSQLiteServer.test.native.js +464 -0
- package/dist/esm/createZeroSQLiteServer.test.native.js.map +1 -0
- package/dist/esm/createZeroServer.mjs +17 -231
- package/dist/esm/createZeroServer.mjs.map +1 -1
- package/dist/esm/createZeroServer.native.js +21 -247
- package/dist/esm/createZeroServer.native.js.map +1 -1
- package/dist/esm/createZeroServer.test.mjs +35 -1
- package/dist/esm/createZeroServer.test.mjs.map +1 -1
- package/dist/esm/createZeroServer.test.native.js +38 -1
- package/dist/esm/createZeroServer.test.native.js.map +1 -1
- package/dist/esm/createZeroServerCore.mjs +336 -0
- package/dist/esm/createZeroServerCore.mjs.map +1 -0
- package/dist/esm/createZeroServerCore.native.js +360 -0
- package/dist/esm/createZeroServerCore.native.js.map +1 -0
- package/dist/esm/generate-lite.mjs +1 -0
- package/dist/esm/generate-lite.mjs.map +1 -1
- package/dist/esm/generate-lite.native.js +1 -0
- package/dist/esm/generate-lite.native.js.map +1 -1
- package/dist/esm/generate-lite.test.mjs +5 -1
- package/dist/esm/generate-lite.test.mjs.map +1 -1
- package/dist/esm/generate-lite.test.native.js +5 -1
- package/dist/esm/generate-lite.test.native.js.map +1 -1
- package/dist/esm/generate.mjs +20 -11
- package/dist/esm/generate.mjs.map +1 -1
- package/dist/esm/generate.native.js +29 -21
- package/dist/esm/generate.native.js.map +1 -1
- package/dist/esm/generate.test.mjs +87 -1
- package/dist/esm/generate.test.mjs.map +1 -1
- package/dist/esm/generate.test.native.js +87 -1
- package/dist/esm/generate.test.native.js.map +1 -1
- package/dist/esm/httpPull/transport.test.mjs +44 -0
- package/dist/esm/httpPull/transport.test.mjs.map +1 -1
- package/dist/esm/httpPull/transport.test.native.js +53 -0
- package/dist/esm/httpPull/transport.test.native.js.map +1 -1
- package/dist/esm/httpPullTransport.mjs +4 -1
- package/dist/esm/httpPullTransport.mjs.map +1 -1
- package/dist/esm/httpPullTransport.native.js +5 -2
- package/dist/esm/httpPullTransport.native.js.map +1 -1
- package/dist/esm/server.mjs +1 -0
- package/dist/esm/server.mjs.map +1 -1
- package/dist/esm/syncHost.mjs +138 -0
- package/dist/esm/syncHost.mjs.map +1 -0
- package/dist/esm/syncHost.native.js +342 -0
- package/dist/esm/syncHost.native.js.map +1 -0
- package/dist/esm/syncHost.test.mjs +206 -0
- package/dist/esm/syncHost.test.mjs.map +1 -0
- package/dist/esm/syncHost.test.native.js +252 -0
- package/dist/esm/syncHost.test.native.js.map +1 -0
- package/package.json +19 -3
- package/readme.md +26 -0
- package/src/createZeroSQLiteServer.test.ts +461 -0
- package/src/createZeroSQLiteServer.ts +523 -0
- package/src/createZeroServer.test.ts +39 -1
- package/src/createZeroServer.ts +35 -428
- package/src/createZeroServerCore.ts +557 -0
- package/src/generate-lite.test.ts +4 -0
- package/src/generate-lite.ts +1 -0
- package/src/generate.test.ts +87 -1
- package/src/generate.ts +29 -20
- package/src/httpPull/transport.test.ts +47 -0
- package/src/httpPullTransport.ts +15 -1
- package/src/server.ts +1 -0
- package/src/syncHost.test.ts +216 -0
- package/src/syncHost.ts +255 -0
- package/test-fixtures/server-return-types.ts +50 -0
- package/test-fixtures/tsconfig.json +13 -0
- package/types/createZeroSQLiteServer.d.ts +37 -0
- package/types/createZeroSQLiteServer.d.ts.map +1 -0
- package/types/createZeroSQLiteServer.test.d.ts +2 -0
- package/types/createZeroSQLiteServer.test.d.ts.map +1 -0
- package/types/createZeroServer.d.ts +11 -293
- package/types/createZeroServer.d.ts.map +1 -1
- package/types/createZeroServerCore.d.ts +310 -0
- package/types/createZeroServerCore.d.ts.map +1 -0
- package/types/generate-lite.d.ts.map +1 -1
- package/types/generate.d.ts +2 -1
- package/types/generate.d.ts.map +1 -1
- package/types/httpPullTransport.d.ts +2 -0
- package/types/httpPullTransport.d.ts.map +1 -1
- package/types/server.d.ts +1 -0
- package/types/server.d.ts.map +1 -1
- package/types/syncHost.d.ts +51 -0
- package/types/syncHost.d.ts.map +1 -0
- package/types/syncHost.test.d.ts +2 -0
- package/types/syncHost.test.d.ts.map +1 -0
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var import_node_sqlite = require("node:sqlite");
|
|
4
|
+
var import_zero = require("@rocicorp/zero");
|
|
5
|
+
var import_bindings = require("@rocicorp/zero/bindings");
|
|
6
|
+
var import_vitest = require("vitest");
|
|
7
|
+
var import_createZeroSQLiteServer = require("./createZeroSQLiteServer.native.js");
|
|
8
|
+
var import_fixtureSchema = require("./httpPull/fixtureSchema.native.js");
|
|
9
|
+
var note = (0, import_zero.table)("note").from("note_records").columns({
|
|
10
|
+
id: (0, import_zero.string)().from("note_id"),
|
|
11
|
+
done: (0, import_zero.boolean)(),
|
|
12
|
+
data: (0, import_zero.json)().optional()
|
|
13
|
+
}).primaryKey("id");
|
|
14
|
+
var sqliteTypesSchema = (0, import_zero.createSchema)({
|
|
15
|
+
tables: [note],
|
|
16
|
+
relationships: [],
|
|
17
|
+
enableLegacyQueries: true
|
|
18
|
+
});
|
|
19
|
+
var person = (0, import_zero.table)("person").columns({
|
|
20
|
+
id: (0, import_zero.string)()
|
|
21
|
+
}).primaryKey("id");
|
|
22
|
+
var membership = (0, import_zero.table)("membership").columns({
|
|
23
|
+
personId: (0, import_zero.string)(),
|
|
24
|
+
teamId: (0, import_zero.string)()
|
|
25
|
+
}).primaryKey("personId", "teamId");
|
|
26
|
+
var team = (0, import_zero.table)("team").from("team_records").columns({
|
|
27
|
+
id: (0, import_zero.string)().from("team_id"),
|
|
28
|
+
active: (0, import_zero.boolean)().from("is_active"),
|
|
29
|
+
metadata: (0, import_zero.json)().from("metadata_json")
|
|
30
|
+
}).primaryKey("id");
|
|
31
|
+
var twoHopSchema = (0, import_zero.createSchema)({
|
|
32
|
+
tables: [person, membership, team],
|
|
33
|
+
relationships: [(0, import_zero.relationships)(person, function (param) {
|
|
34
|
+
var {
|
|
35
|
+
many
|
|
36
|
+
} = param;
|
|
37
|
+
return {
|
|
38
|
+
teams: many({
|
|
39
|
+
sourceField: ["id"],
|
|
40
|
+
destSchema: membership,
|
|
41
|
+
destField: ["personId"]
|
|
42
|
+
}, {
|
|
43
|
+
sourceField: ["teamId"],
|
|
44
|
+
destSchema: team,
|
|
45
|
+
destField: ["id"]
|
|
46
|
+
})
|
|
47
|
+
};
|
|
48
|
+
})]
|
|
49
|
+
});
|
|
50
|
+
function pushRequest(id, name, args) {
|
|
51
|
+
return new Request("http://localhost/push?schema=zero_0&appID=zero", {
|
|
52
|
+
method: "POST",
|
|
53
|
+
headers: {
|
|
54
|
+
"content-type": "application/json"
|
|
55
|
+
},
|
|
56
|
+
body: JSON.stringify({
|
|
57
|
+
clientGroupID: "cg1",
|
|
58
|
+
mutations: [{
|
|
59
|
+
type: "custom",
|
|
60
|
+
id,
|
|
61
|
+
clientID: "client-a",
|
|
62
|
+
name,
|
|
63
|
+
args: [args],
|
|
64
|
+
timestamp: 1
|
|
65
|
+
}],
|
|
66
|
+
pushVersion: 1,
|
|
67
|
+
timestamp: 1,
|
|
68
|
+
requestID: "req-" + id
|
|
69
|
+
})
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
function cleanupRequest() {
|
|
73
|
+
return new Request("http://localhost/push?schema=zero_0&appID=zero", {
|
|
74
|
+
method: "POST",
|
|
75
|
+
headers: {
|
|
76
|
+
"content-type": "application/json"
|
|
77
|
+
},
|
|
78
|
+
body: JSON.stringify({
|
|
79
|
+
clientGroupID: "cg1",
|
|
80
|
+
mutations: [{
|
|
81
|
+
type: "custom",
|
|
82
|
+
id: 2,
|
|
83
|
+
clientID: "client-a",
|
|
84
|
+
name: "_zero_cleanupResults",
|
|
85
|
+
args: [{
|
|
86
|
+
clientGroupID: "cg1",
|
|
87
|
+
clientID: "client-a",
|
|
88
|
+
upToMutationID: 1
|
|
89
|
+
}],
|
|
90
|
+
timestamp: 1
|
|
91
|
+
}],
|
|
92
|
+
pushVersion: 1,
|
|
93
|
+
timestamp: 1,
|
|
94
|
+
requestID: "cleanup"
|
|
95
|
+
})
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
(0, import_vitest.describe)("createZeroSQLiteServer", function () {
|
|
99
|
+
var db;
|
|
100
|
+
var retryNextTransaction;
|
|
101
|
+
var transactionProvider;
|
|
102
|
+
(0, import_vitest.beforeEach)(function () {
|
|
103
|
+
db = new import_node_sqlite.DatabaseSync(":memory:");
|
|
104
|
+
db.exec(["CREATE TABLE project (id TEXT PRIMARY KEY, ownerId TEXT NOT NULL, name TEXT NOT NULL);", "CREATE TABLE note_records (note_id TEXT PRIMARY KEY, done INTEGER NOT NULL, data TEXT);"].join("\n"));
|
|
105
|
+
retryNextTransaction = false;
|
|
106
|
+
var executor = {
|
|
107
|
+
async exec(sql) {
|
|
108
|
+
var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
|
|
109
|
+
db.prepare(sql).run(...params);
|
|
110
|
+
},
|
|
111
|
+
async query(sql) {
|
|
112
|
+
var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
|
|
113
|
+
return db.prepare(sql).all(...params);
|
|
114
|
+
},
|
|
115
|
+
async queryAst(ast, format) {
|
|
116
|
+
var rows;
|
|
117
|
+
if (ast.table === "project") {
|
|
118
|
+
rows = db.prepare("SELECT * FROM project ORDER BY id").all();
|
|
119
|
+
} else if (ast.table === "note") {
|
|
120
|
+
rows = db.prepare("SELECT note_id, done, data FROM note_records ORDER BY note_id").all().map(function (row) {
|
|
121
|
+
return {
|
|
122
|
+
id: row.note_id,
|
|
123
|
+
done: row.done !== 0,
|
|
124
|
+
data: typeof row.data === "string" ? JSON.parse(row.data) : row.data
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
} else if (ast.table === "person") {
|
|
128
|
+
rows = [{
|
|
129
|
+
id: "p1",
|
|
130
|
+
teams: [{
|
|
131
|
+
id: "t1",
|
|
132
|
+
active: true,
|
|
133
|
+
metadata: {
|
|
134
|
+
label: "core"
|
|
135
|
+
}
|
|
136
|
+
}]
|
|
137
|
+
}];
|
|
138
|
+
} else {
|
|
139
|
+
throw new Error("unexpected table " + ast.table);
|
|
140
|
+
}
|
|
141
|
+
return format.singular ? rows[0] : rows;
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
var run = async function (callback) {
|
|
145
|
+
db.exec("BEGIN");
|
|
146
|
+
try {
|
|
147
|
+
var value = await callback(executor);
|
|
148
|
+
db.exec("COMMIT");
|
|
149
|
+
return value;
|
|
150
|
+
} catch (error) {
|
|
151
|
+
db.exec("ROLLBACK");
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
transactionProvider = async function (callback) {
|
|
156
|
+
if (retryNextTransaction) {
|
|
157
|
+
retryNextTransaction = false;
|
|
158
|
+
db.exec("BEGIN");
|
|
159
|
+
await callback(executor);
|
|
160
|
+
db.exec("ROLLBACK");
|
|
161
|
+
}
|
|
162
|
+
return run(callback);
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
(0, import_vitest.afterEach)(function () {
|
|
166
|
+
db.close();
|
|
167
|
+
});
|
|
168
|
+
(0, import_vitest.test)("commits CRUD, the mutation ledger, and one retry-safe async task", async function () {
|
|
169
|
+
var effectRuns = 0;
|
|
170
|
+
var server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
|
|
171
|
+
schema: import_fixtureSchema.zeroHttpFixtureSchema,
|
|
172
|
+
models: {
|
|
173
|
+
project: {
|
|
174
|
+
mutate: {
|
|
175
|
+
create: async function (param, value) {
|
|
176
|
+
var {
|
|
177
|
+
tx,
|
|
178
|
+
server: server2
|
|
179
|
+
} = param;
|
|
180
|
+
await tx.mutate.project.insert(value);
|
|
181
|
+
server2 === null || server2 === void 0 ? void 0 : server2.asyncTasks.push(async function () {});
|
|
182
|
+
(0, import_vitest.expect)(server2 === null || server2 === void 0 ? void 0 : server2.asyncTasks).toHaveLength(1);
|
|
183
|
+
server2 === null || server2 === void 0 ? void 0 : server2.asyncTasks.splice(0, 1, async function () {});
|
|
184
|
+
server2.asyncTasks[0] = async function () {
|
|
185
|
+
effectRuns++;
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
createServerActions: function () {
|
|
192
|
+
return {};
|
|
193
|
+
},
|
|
194
|
+
transactionProvider
|
|
195
|
+
});
|
|
196
|
+
retryNextTransaction = true;
|
|
197
|
+
var result = await server.handleMutationRequest({
|
|
198
|
+
authData: null,
|
|
199
|
+
request: pushRequest(1, "project.create", {
|
|
200
|
+
id: "p1",
|
|
201
|
+
ownerId: "u1",
|
|
202
|
+
name: "first"
|
|
203
|
+
}),
|
|
204
|
+
skipAsyncTasks: true
|
|
205
|
+
});
|
|
206
|
+
(0, import_vitest.expect)(result.response.mutations[0].result).toEqual({});
|
|
207
|
+
(0, import_vitest.expect)(db.prepare("SELECT * FROM project").all()).toEqual([{
|
|
208
|
+
id: "p1",
|
|
209
|
+
ownerId: "u1",
|
|
210
|
+
name: "first"
|
|
211
|
+
}]);
|
|
212
|
+
(0, import_vitest.expect)(db.prepare("SELECT * FROM zero_0_clients").all()).toEqual([{
|
|
213
|
+
clientGroupID: "cg1",
|
|
214
|
+
clientID: "client-a",
|
|
215
|
+
lastMutationID: 1
|
|
216
|
+
}]);
|
|
217
|
+
(0, import_vitest.expect)(result.asyncTasks).toHaveLength(1);
|
|
218
|
+
await result.asyncTasks[0]();
|
|
219
|
+
(0, import_vitest.expect)(effectRuns).toBe(1);
|
|
220
|
+
});
|
|
221
|
+
(0, import_vitest.test)("rolls back row writes and persists an application error with its LMID", async function () {
|
|
222
|
+
var server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
|
|
223
|
+
schema: import_fixtureSchema.zeroHttpFixtureSchema,
|
|
224
|
+
models: {
|
|
225
|
+
project: {
|
|
226
|
+
mutate: {
|
|
227
|
+
fail: async function (param, value) {
|
|
228
|
+
var {
|
|
229
|
+
tx
|
|
230
|
+
} = param;
|
|
231
|
+
await tx.mutate.project.insert(value);
|
|
232
|
+
throw new Error("rejected");
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
createServerActions: function () {
|
|
238
|
+
return {};
|
|
239
|
+
},
|
|
240
|
+
transactionProvider
|
|
241
|
+
});
|
|
242
|
+
var result = await server.handleMutationRequest({
|
|
243
|
+
authData: null,
|
|
244
|
+
request: pushRequest(1, "project.fail", {
|
|
245
|
+
id: "p1",
|
|
246
|
+
ownerId: "u1",
|
|
247
|
+
name: "first"
|
|
248
|
+
})
|
|
249
|
+
});
|
|
250
|
+
(0, import_vitest.expect)(result.response.mutations[0].result).toMatchObject({
|
|
251
|
+
error: "app",
|
|
252
|
+
message: "rejected"
|
|
253
|
+
});
|
|
254
|
+
(0, import_vitest.expect)(db.prepare("SELECT * FROM project").all()).toEqual([]);
|
|
255
|
+
(0, import_vitest.expect)(db.prepare("SELECT lastMutationID FROM zero_0_clients").get()).toEqual({
|
|
256
|
+
lastMutationID: 1
|
|
257
|
+
});
|
|
258
|
+
var stored = db.prepare("SELECT result FROM zero_0_mutations").get();
|
|
259
|
+
(0, import_vitest.expect)(JSON.parse(stored.result)).toMatchObject({
|
|
260
|
+
error: "app",
|
|
261
|
+
message: "rejected"
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
(0, import_vitest.test)("recovers duplicate results and deletes them through the cleanup mutation", async function () {
|
|
265
|
+
var server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
|
|
266
|
+
schema: import_fixtureSchema.zeroHttpFixtureSchema,
|
|
267
|
+
models: {
|
|
268
|
+
project: {
|
|
269
|
+
mutate: {
|
|
270
|
+
create: async function (param, value2) {
|
|
271
|
+
var {
|
|
272
|
+
tx
|
|
273
|
+
} = param;
|
|
274
|
+
await tx.mutate.project.insert(value2);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
createServerActions: function () {
|
|
280
|
+
return {};
|
|
281
|
+
},
|
|
282
|
+
transactionProvider
|
|
283
|
+
});
|
|
284
|
+
var value = {
|
|
285
|
+
id: "p1",
|
|
286
|
+
ownerId: "u1",
|
|
287
|
+
name: "first"
|
|
288
|
+
};
|
|
289
|
+
await server.handleMutationRequest({
|
|
290
|
+
authData: null,
|
|
291
|
+
request: pushRequest(1, "project.create", value)
|
|
292
|
+
});
|
|
293
|
+
var duplicate = await server.handleMutationRequest({
|
|
294
|
+
authData: null,
|
|
295
|
+
request: pushRequest(1, "project.create", value)
|
|
296
|
+
});
|
|
297
|
+
(0, import_vitest.expect)(duplicate.response.mutations[0].result).toMatchObject({
|
|
298
|
+
error: "alreadyProcessed"
|
|
299
|
+
});
|
|
300
|
+
(0, import_vitest.expect)(db.prepare("SELECT lastMutationID FROM zero_0_clients").get()).toEqual({
|
|
301
|
+
lastMutationID: 1
|
|
302
|
+
});
|
|
303
|
+
(0, import_vitest.expect)(db.prepare("SELECT COUNT(*) AS count FROM zero_0_mutations").get()).toEqual({
|
|
304
|
+
count: 1
|
|
305
|
+
});
|
|
306
|
+
await server.handleMutationRequest({
|
|
307
|
+
authData: null,
|
|
308
|
+
request: cleanupRequest()
|
|
309
|
+
});
|
|
310
|
+
(0, import_vitest.expect)(db.prepare("SELECT COUNT(*) AS count FROM zero_0_mutations").get()).toEqual({
|
|
311
|
+
count: 0
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
(0, import_vitest.test)("supports direct CRUD, server names, value codecs, and query AST execution", async function () {
|
|
315
|
+
var server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
|
|
316
|
+
schema: sqliteTypesSchema,
|
|
317
|
+
models: {
|
|
318
|
+
note: {
|
|
319
|
+
mutate: {
|
|
320
|
+
insert: async function (param, value) {
|
|
321
|
+
var {
|
|
322
|
+
tx
|
|
323
|
+
} = param;
|
|
324
|
+
await tx.mutate.note.insert(value);
|
|
325
|
+
},
|
|
326
|
+
upsert: async function (param, value) {
|
|
327
|
+
var {
|
|
328
|
+
tx
|
|
329
|
+
} = param;
|
|
330
|
+
await tx.mutate.note.upsert(value);
|
|
331
|
+
},
|
|
332
|
+
update: async function (param, value) {
|
|
333
|
+
var {
|
|
334
|
+
tx
|
|
335
|
+
} = param;
|
|
336
|
+
await tx.mutate.note.update(value);
|
|
337
|
+
},
|
|
338
|
+
delete: async function (param, value) {
|
|
339
|
+
var {
|
|
340
|
+
tx
|
|
341
|
+
} = param;
|
|
342
|
+
await tx.mutate.note.delete(value);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
createServerActions: function () {
|
|
348
|
+
return {};
|
|
349
|
+
},
|
|
350
|
+
transactionProvider
|
|
351
|
+
});
|
|
352
|
+
await server.mutate.note.insert({
|
|
353
|
+
id: "n1",
|
|
354
|
+
done: false,
|
|
355
|
+
data: {
|
|
356
|
+
label: "first"
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
await server.mutate.note.upsert({
|
|
360
|
+
id: "n1",
|
|
361
|
+
done: true,
|
|
362
|
+
data: {
|
|
363
|
+
label: "second"
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
await server.mutate.note.update({
|
|
367
|
+
id: "n1",
|
|
368
|
+
done: false
|
|
369
|
+
});
|
|
370
|
+
(0, import_vitest.expect)(db.prepare("SELECT * FROM note_records").get()).toEqual({
|
|
371
|
+
note_id: "n1",
|
|
372
|
+
done: 0,
|
|
373
|
+
data: JSON.stringify({
|
|
374
|
+
label: "second"
|
|
375
|
+
})
|
|
376
|
+
});
|
|
377
|
+
await (0, import_vitest.expect)(server.query(function (q) {
|
|
378
|
+
return q.note;
|
|
379
|
+
})).resolves.toEqual([{
|
|
380
|
+
id: "n1",
|
|
381
|
+
done: false,
|
|
382
|
+
data: {
|
|
383
|
+
label: "second"
|
|
384
|
+
}
|
|
385
|
+
}]);
|
|
386
|
+
await server.transaction(async function (tx) {
|
|
387
|
+
if (tx.location !== "server") throw new Error("expected server transaction");
|
|
388
|
+
await (0, import_vitest.expect)(tx.query.note.one().run()).resolves.toEqual({
|
|
389
|
+
id: "n1",
|
|
390
|
+
done: false,
|
|
391
|
+
data: {
|
|
392
|
+
label: "second"
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
await (0, import_vitest.expect)(tx.dbTransaction.query("SELECT * FROM note_records", [])).resolves.toEqual([{
|
|
396
|
+
note_id: "n1",
|
|
397
|
+
done: 0,
|
|
398
|
+
data: JSON.stringify({
|
|
399
|
+
label: "second"
|
|
400
|
+
})
|
|
401
|
+
}]);
|
|
402
|
+
});
|
|
403
|
+
await server.mutate.note.delete({
|
|
404
|
+
id: "n1"
|
|
405
|
+
});
|
|
406
|
+
(0, import_vitest.expect)(db.prepare("SELECT * FROM note_records").all()).toEqual([]);
|
|
407
|
+
});
|
|
408
|
+
(0, import_vitest.test)("decodes destination rows through a hidden two-hop junction", async function () {
|
|
409
|
+
var server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
|
|
410
|
+
schema: twoHopSchema,
|
|
411
|
+
models: {},
|
|
412
|
+
createServerActions: function () {
|
|
413
|
+
return {};
|
|
414
|
+
},
|
|
415
|
+
transactionProvider
|
|
416
|
+
});
|
|
417
|
+
await (0, import_vitest.expect)(server.query(function (q) {
|
|
418
|
+
return q.person.related("teams");
|
|
419
|
+
})).resolves.toEqual([{
|
|
420
|
+
id: "p1",
|
|
421
|
+
teams: [{
|
|
422
|
+
id: "t1",
|
|
423
|
+
active: true,
|
|
424
|
+
metadata: {
|
|
425
|
+
label: "core"
|
|
426
|
+
}
|
|
427
|
+
}]
|
|
428
|
+
}]);
|
|
429
|
+
});
|
|
430
|
+
(0, import_vitest.test)("accepts a hydrated singular query result from the transaction executor", async function () {
|
|
431
|
+
var hydrated = {
|
|
432
|
+
id: "n1",
|
|
433
|
+
done: false,
|
|
434
|
+
data: {
|
|
435
|
+
label: "already decoded"
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
var receivedQueryName;
|
|
439
|
+
var hydratedExecutor = {
|
|
440
|
+
async exec() {},
|
|
441
|
+
async query() {
|
|
442
|
+
return [];
|
|
443
|
+
},
|
|
444
|
+
async queryAst(_ast, _format, queryName) {
|
|
445
|
+
receivedQueryName = queryName;
|
|
446
|
+
return hydrated;
|
|
447
|
+
}
|
|
448
|
+
};
|
|
449
|
+
var hydratedProvider = async function (callback) {
|
|
450
|
+
return callback(hydratedExecutor);
|
|
451
|
+
};
|
|
452
|
+
var server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
|
|
453
|
+
schema: sqliteTypesSchema,
|
|
454
|
+
models: {},
|
|
455
|
+
createServerActions: function () {
|
|
456
|
+
return {};
|
|
457
|
+
},
|
|
458
|
+
transactionProvider: hydratedProvider
|
|
459
|
+
});
|
|
460
|
+
await (0, import_vitest.expect)(server.query(function (q) {
|
|
461
|
+
return (0, import_bindings.asQueryInternals)(q.note.one()).nameAndArgs("noteByID", ["n1"]);
|
|
462
|
+
})).resolves.toEqual(hydrated);
|
|
463
|
+
(0, import_vitest.expect)(receivedQueryName).toBe("noteByID");
|
|
464
|
+
});
|
|
465
|
+
});
|
|
466
|
+
//# sourceMappingURL=createZeroSQLiteServer.test.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["import_node_sqlite","require","import_zero","import_bindings","import_vitest","import_createZeroSQLiteServer","import_fixtureSchema","note","table","from","columns","id","string","done","boolean","data","json","optional","primaryKey","sqliteTypesSchema","createSchema","tables","relationships","enableLegacyQueries","person","membership","personId","teamId","team","active","metadata","twoHopSchema","param","many","teams","sourceField","destSchema","destField","pushRequest","name","args","Request","method","headers","body","JSON","stringify","clientGroupID","mutations","type","clientID","timestamp","pushVersion","requestID","cleanupRequest","upToMutationID","describe","db","retryNextTransaction","transactionProvider","beforeEach","DatabaseSync","exec","join","executor","sql","params","arguments","length","prepare","run","query","all","queryAst","ast","format","rows","map","row","note_id","parse","label","Error","singular","callback","value","error","afterEach","close","test","effectRuns","server","createZeroSQLiteServer","schema","zeroHttpFixtureSchema","models","project","mutate","create","tx","server2","insert","asyncTasks","push","expect","toHaveLength","splice","createServerActions","result","handleMutationRequest","authData","request","ownerId","skipAsyncTasks","response","toEqual","lastMutationID","toBe","fail","toMatchObject","message","get","stored","value2","duplicate","count","upsert","update","delete","q","resolves","transaction","location","one"],"sources":["../../src/createZeroSQLiteServer.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|