on-zero 0.6.12 → 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 +5 -4
- package/dist/cjs/httpPull/transport.test.native.js +6 -5
- package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
- package/dist/cjs/httpPullTransport.cjs +2 -1
- package/dist/cjs/httpPullTransport.native.js +3 -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 +5 -4
- package/dist/esm/httpPull/transport.test.mjs.map +1 -1
- package/dist/esm/httpPull/transport.test.native.js +6 -5
- package/dist/esm/httpPull/transport.test.native.js.map +1 -1
- package/dist/esm/httpPullTransport.mjs +2 -1
- package/dist/esm/httpPullTransport.mjs.map +1 -1
- package/dist/esm/httpPullTransport.native.js +3 -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 +6 -5
- package/src/httpPullTransport.ts +9 -4
- 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 +1 -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
|
@@ -41,7 +41,7 @@ class FakePgClient {
|
|
|
41
41
|
rows: [...schemaRows("user", ["id", "name"]), ...schemaRows("project", ["id", "ownerId", "name"]), ...schemaRows("member", ["id", "projectId", "userId"])]
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
-
if (sql.includes('INSERT INTO "zero_0"."mutations"')) {
|
|
44
|
+
if (sql.includes('INSERT INTO "zero_0"."mutations"') || sql.includes('INSERT INTO "zero_0".mutations')) {
|
|
45
45
|
this.mutationResultInserts.push(params);
|
|
46
46
|
return {
|
|
47
47
|
rows: []
|
|
@@ -89,6 +89,40 @@ function pushRequest(mutationIDs) {
|
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
describe("createZeroServer mutation recovery", () => {
|
|
92
|
+
test("discards async tasks from a rolled-back PostgreSQL mutation", async () => {
|
|
93
|
+
const pg = new FakePgClient();
|
|
94
|
+
let effectRuns = 0;
|
|
95
|
+
const zeroServer = createZeroServer({
|
|
96
|
+
schema: zeroHttpFixtureSchema,
|
|
97
|
+
models: {
|
|
98
|
+
project: {
|
|
99
|
+
mutate: {
|
|
100
|
+
touch: async ({
|
|
101
|
+
server
|
|
102
|
+
}) => {
|
|
103
|
+
server?.asyncTasks.push(async () => {
|
|
104
|
+
effectRuns++;
|
|
105
|
+
});
|
|
106
|
+
throw new Error("rejected");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
createServerActions: () => ({}),
|
|
112
|
+
pool: pg
|
|
113
|
+
});
|
|
114
|
+
const result = await zeroServer.handleMutationRequest({
|
|
115
|
+
authData: null,
|
|
116
|
+
request: pushRequest(1),
|
|
117
|
+
skipAsyncTasks: true
|
|
118
|
+
});
|
|
119
|
+
expect(result.response.mutations[0].result).toMatchObject({
|
|
120
|
+
error: "app",
|
|
121
|
+
message: "rejected"
|
|
122
|
+
});
|
|
123
|
+
expect(result.asyncTasks).toEqual([]);
|
|
124
|
+
expect(effectRuns).toBe(0);
|
|
125
|
+
});
|
|
92
126
|
test("persists alreadyProcessed duplicate results for zero-cache recovery rows", async () => {
|
|
93
127
|
const pg = new FakePgClient();
|
|
94
128
|
const zeroServer = createZeroServer({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["describe","expect","test","createZeroServer","zeroHttpFixtureSchema","FakePgClient","lastMutationID","pendingLastMutationID","mutationResultInserts","query","sql","params","rows","includes","nextMutationID","schemaRows","push","Error","table","columns","map","column","schema","dataType","length","precision","scale","typtype","typename","elemTyptype","elemTypname","pushRequest","mutationIDs","ids","Array","isArray","Request","method","headers","body","JSON","stringify","clientGroupID","mutations","mutationID","type","id","clientID","name","args","timestamp","pushVersion","requestID","join","pg","zeroServer","models","project","mutate","touch","createServerActions","pool","
|
|
1
|
+
{"version":3,"names":["describe","expect","test","createZeroServer","zeroHttpFixtureSchema","FakePgClient","lastMutationID","pendingLastMutationID","mutationResultInserts","query","sql","params","rows","includes","nextMutationID","schemaRows","push","Error","table","columns","map","column","schema","dataType","length","precision","scale","typtype","typename","elemTyptype","elemTypname","pushRequest","mutationIDs","ids","Array","isArray","Request","method","headers","body","JSON","stringify","clientGroupID","mutations","mutationID","type","id","clientID","name","args","timestamp","pushVersion","requestID","join","pg","effectRuns","zeroServer","models","project","mutate","touch","server","asyncTasks","createServerActions","pool","result","handleMutationRequest","authData","request","skipAsyncTasks","response","toMatchObject","error","message","toEqual","toBe","first","duplicate","duplicateResult","details","mixed","results","mutation"],"sources":["../../src/createZeroServer.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -81,7 +81,7 @@ var FakePgClient = /* @__PURE__ */function () {
|
|
|
81
81
|
rows: [...schemaRows("user", ["id", "name"]), ...schemaRows("project", ["id", "ownerId", "name"]), ...schemaRows("member", ["id", "projectId", "userId"])]
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
|
-
if (sql.includes('INSERT INTO "zero_0"."mutations"')) {
|
|
84
|
+
if (sql.includes('INSERT INTO "zero_0"."mutations"') || sql.includes('INSERT INTO "zero_0".mutations')) {
|
|
85
85
|
this.mutationResultInserts.push(params);
|
|
86
86
|
return {
|
|
87
87
|
rows: []
|
|
@@ -135,6 +135,43 @@ function pushRequest(mutationIDs) {
|
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
137
|
describe("createZeroServer mutation recovery", function () {
|
|
138
|
+
test("discards async tasks from a rolled-back PostgreSQL mutation", async function () {
|
|
139
|
+
var pg = new FakePgClient();
|
|
140
|
+
var effectRuns = 0;
|
|
141
|
+
var zeroServer = createZeroServer({
|
|
142
|
+
schema: zeroHttpFixtureSchema,
|
|
143
|
+
models: {
|
|
144
|
+
project: {
|
|
145
|
+
mutate: {
|
|
146
|
+
touch: async function (param) {
|
|
147
|
+
var {
|
|
148
|
+
server
|
|
149
|
+
} = param;
|
|
150
|
+
server === null || server === void 0 ? void 0 : server.asyncTasks.push(async function () {
|
|
151
|
+
effectRuns++;
|
|
152
|
+
});
|
|
153
|
+
throw new Error("rejected");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
createServerActions: function () {
|
|
159
|
+
return {};
|
|
160
|
+
},
|
|
161
|
+
pool: pg
|
|
162
|
+
});
|
|
163
|
+
var result = await zeroServer.handleMutationRequest({
|
|
164
|
+
authData: null,
|
|
165
|
+
request: pushRequest(1),
|
|
166
|
+
skipAsyncTasks: true
|
|
167
|
+
});
|
|
168
|
+
expect(result.response.mutations[0].result).toMatchObject({
|
|
169
|
+
error: "app",
|
|
170
|
+
message: "rejected"
|
|
171
|
+
});
|
|
172
|
+
expect(result.asyncTasks).toEqual([]);
|
|
173
|
+
expect(effectRuns).toBe(0);
|
|
174
|
+
});
|
|
138
175
|
test("persists alreadyProcessed duplicate results for zero-cache recovery rows", async function () {
|
|
139
176
|
var pg = new FakePgClient();
|
|
140
177
|
var zeroServer = createZeroServer({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["describe","expect","test","createZeroServer","zeroHttpFixtureSchema","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","value","FakePgClient","FakePgClient2","query","sql","params","arguments","pendingLastMutationID","rows","lastMutationID","includes","nextMutationID","schemaRows","mutationResultInserts","push","Error","table","columns","map","column","schema","dataType","precision","scale","typtype","typename","elemTyptype","elemTypname","pushRequest","mutationIDs","ids","Array","isArray","Request","method","headers","body","JSON","stringify","clientGroupID","mutations","mutationID","type","id","clientID","name","args","timestamp","pushVersion","requestID","join","pg","zeroServer","models","project"],"sources":["../../src/createZeroServer.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,EAAUC,MAAA,EAAQC,IAAA,QAAY;AAEvC,SAASC,gBAAA,QAAwB;AACjC,SAASC,qBAAA,QAA6B;AAEtC,SAAMC,iBAAaA,CAAAC,QAAA,EAAAC,WAAA;EACjB,MAAAD,QAAA,YAAiBC,WAAA;IACjB,UAAAC,SAAA;EACA;AAAsC;AAGpC,SAAIC,iBAAiBA,CAAAC,MAAA,EAAAC,KAAA;EACnB,SAAKC,CAAA,MAAAA,CAAA,GAAAD,KAAA,CAAAE,MAAA,EAAwBD,CAAA;IAC7B,IAAAE,UAAS,GAAMH,KAAG,CAAAC,CAAA;IACpBE,UAAA,CAAAC,UAAA,GAAAD,UAAA,CAAAC,UAAA;IAEAD,UAAI,CAAAE,YAAkB;IACpB,WAAS,IAAAF,UAAA,EAAAA,UAA0B,CAAAG,QAAW;IAC5CC,MAAA,CAAAC,cAAK,CAAAT,MAAiB,EAAAI,UAAK,CAAAM,GAAA,EAAAN,UAAA;EAAA;AAE7B;AACA,SAAAO,aAAgBA,CAAAd,WAAE,EAAAe,UAAA,EAAAC,WAAA;EAAA,IACpBD,UAAA,EAAAb,iBAAA,CAAAF,WAAA,CAAAiB,SAAA,EAAAF,UAAA;EAEA,IAAAC,WAAY,EAAAd,iBAAY,CAAAF,WAAA,EAAAgB,WAAA;EACtB,OAAAhB,WAAK;AACL;AAAkB,SACpBkB,iBAAAC,GAAA,EAAAN,GAAA,EAAAO,KAAA;EAEA,IAAAP,GAAI,IAAIM,GAAA;IACNR,MAAA,CAAAC,cAAM,CAAAO,GAAiB,EAAAN,GAAK;MAC5BO,KAAK;MACLZ,UAAS,MAAO;MAClBC,YAAA;MAEAC,QAAQ;IACN;EAAO,OACL;IAAMS,GAAA,CAAAN,GACJ,IAAGO,KAAA;EAAiC;EACc,OAAAD,GAClD;AAAqD;AACvD,IAAAE,YACF;EAAA,YACF;;EAEA,
|
|
1
|
+
{"version":3,"names":["describe","expect","test","createZeroServer","zeroHttpFixtureSchema","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","value","FakePgClient","FakePgClient2","query","sql","params","arguments","pendingLastMutationID","rows","lastMutationID","includes","nextMutationID","schemaRows","mutationResultInserts","push","Error","table","columns","map","column","schema","dataType","precision","scale","typtype","typename","elemTyptype","elemTypname","pushRequest","mutationIDs","ids","Array","isArray","Request","method","headers","body","JSON","stringify","clientGroupID","mutations","mutationID","type","id","clientID","name","args","timestamp","pushVersion","requestID","join","pg","effectRuns","zeroServer","models","project","mutate","touch","param","server","asyncTasks","createServerActions","pool","result","handleMutationRequest","authData","request","skipAsyncTasks","response","toMatchObject","error","message","toEqual","toBe"],"sources":["../../src/createZeroServer.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { mustGetQuery } from "@rocicorp/zero";
|
|
2
|
+
import { PushProcessor, handleQueryRequest as zeroHandleQueryRequest } from "@rocicorp/zero/server";
|
|
3
|
+
import { createPermissions } from "./createPermissions.mjs";
|
|
4
|
+
import { createMutators } from "./helpers/createMutators.mjs";
|
|
5
|
+
import { getScopedAuthData, isInZeroMutation, mutatorContext, runWithAuthScope } from "./helpers/mutatorContext.mjs";
|
|
6
|
+
import { runWithQueryContext } from "./helpers/queryContext.mjs";
|
|
7
|
+
import { getMutationsPermissions } from "./modelRegistry.mjs";
|
|
8
|
+
import { setCustomQueries } from "./run.mjs";
|
|
9
|
+
import { getZQL, setEnvironment, setSchema } from "./state.mjs";
|
|
10
|
+
import { setEvaluatingPermission } from "./where.mjs";
|
|
11
|
+
import { setRunner } from "./zeroRunner.mjs";
|
|
12
|
+
function resolveServerQuery({
|
|
13
|
+
authData,
|
|
14
|
+
name,
|
|
15
|
+
args,
|
|
16
|
+
queries,
|
|
17
|
+
permissions,
|
|
18
|
+
validateQuery
|
|
19
|
+
}) {
|
|
20
|
+
if (name.startsWith("permission.")) {
|
|
21
|
+
const table = name.slice("permission.".length);
|
|
22
|
+
const {
|
|
23
|
+
objOrId
|
|
24
|
+
} = args;
|
|
25
|
+
const permission = getMutationsPermissions(table);
|
|
26
|
+
if (!permission) {
|
|
27
|
+
throw new Error(`[permission] no permission defined for table: ${table}`);
|
|
28
|
+
}
|
|
29
|
+
setEvaluatingPermission(true);
|
|
30
|
+
try {
|
|
31
|
+
return getZQL()[table].where(eb => {
|
|
32
|
+
return permissions.buildPermissionQuery(authData, eb, permission, objOrId, table);
|
|
33
|
+
}).one();
|
|
34
|
+
} finally {
|
|
35
|
+
setEvaluatingPermission(false);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (validateQuery) {
|
|
39
|
+
validateQuery({
|
|
40
|
+
authData,
|
|
41
|
+
queryName: name,
|
|
42
|
+
params: args
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const query = mustGetQuery(queries, name);
|
|
46
|
+
return query.fn({
|
|
47
|
+
args,
|
|
48
|
+
ctx: authData
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function createAsyncTaskCollector() {
|
|
52
|
+
const committed = [];
|
|
53
|
+
let attempt;
|
|
54
|
+
let completedAttempt;
|
|
55
|
+
const current = () => attempt ?? committed;
|
|
56
|
+
const queue = new Proxy([], {
|
|
57
|
+
deleteProperty(_target, property) {
|
|
58
|
+
return Reflect.deleteProperty(current(), property);
|
|
59
|
+
},
|
|
60
|
+
get(_target, property) {
|
|
61
|
+
const target = current();
|
|
62
|
+
const value = Reflect.get(target, property, target);
|
|
63
|
+
return typeof value === "function" ? value.bind(target) : value;
|
|
64
|
+
},
|
|
65
|
+
getOwnPropertyDescriptor(_target, property) {
|
|
66
|
+
return Reflect.getOwnPropertyDescriptor(current(), property);
|
|
67
|
+
},
|
|
68
|
+
has(_target, property) {
|
|
69
|
+
return Reflect.has(current(), property);
|
|
70
|
+
},
|
|
71
|
+
ownKeys() {
|
|
72
|
+
return Reflect.ownKeys(current());
|
|
73
|
+
},
|
|
74
|
+
set(_target, property, value) {
|
|
75
|
+
return Reflect.set(current(), property, value);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
const lifecycle = {
|
|
79
|
+
beginAttempt() {
|
|
80
|
+
attempt = [];
|
|
81
|
+
completedAttempt = void 0;
|
|
82
|
+
},
|
|
83
|
+
completeAttempt() {
|
|
84
|
+
completedAttempt = attempt;
|
|
85
|
+
attempt = void 0;
|
|
86
|
+
},
|
|
87
|
+
rollbackAttempt() {
|
|
88
|
+
attempt = void 0;
|
|
89
|
+
completedAttempt = void 0;
|
|
90
|
+
},
|
|
91
|
+
commitTransaction() {
|
|
92
|
+
if (completedAttempt) committed.push(...completedAttempt);
|
|
93
|
+
completedAttempt = void 0;
|
|
94
|
+
},
|
|
95
|
+
rollbackTransaction() {
|
|
96
|
+
attempt = void 0;
|
|
97
|
+
completedAttempt = void 0;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
committed,
|
|
102
|
+
lifecycle,
|
|
103
|
+
queue
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function createZeroServerCore({
|
|
107
|
+
createDatabase,
|
|
108
|
+
createServerActions,
|
|
109
|
+
defaultAllowAdminRole = "all",
|
|
110
|
+
defaultMutateAuthData = {},
|
|
111
|
+
models,
|
|
112
|
+
mutations: mutationValidators,
|
|
113
|
+
persistAlreadyProcessed,
|
|
114
|
+
queries,
|
|
115
|
+
schema,
|
|
116
|
+
validateMutation,
|
|
117
|
+
validateQuery
|
|
118
|
+
}) {
|
|
119
|
+
setSchema(schema);
|
|
120
|
+
setEnvironment("server");
|
|
121
|
+
const permissions = createPermissions({
|
|
122
|
+
environment: "server",
|
|
123
|
+
schema,
|
|
124
|
+
adminRoleMode: defaultAllowAdminRole
|
|
125
|
+
});
|
|
126
|
+
const handleMutationRequest = async ({
|
|
127
|
+
authData,
|
|
128
|
+
request,
|
|
129
|
+
skipAsyncTasks
|
|
130
|
+
}) => {
|
|
131
|
+
const tasks = createAsyncTaskCollector();
|
|
132
|
+
const recoveryRequest = request.clone();
|
|
133
|
+
const mutators = createMutators({
|
|
134
|
+
asyncTasks: tasks.queue,
|
|
135
|
+
can: permissions.can,
|
|
136
|
+
createServerActions,
|
|
137
|
+
environment: "server",
|
|
138
|
+
models,
|
|
139
|
+
authData,
|
|
140
|
+
validateMutation,
|
|
141
|
+
mutationValidators
|
|
142
|
+
});
|
|
143
|
+
const processor = new PushProcessor(withTransactionLifecycle(createDatabase(), tasks.lifecycle));
|
|
144
|
+
const response = await processor.process(mutators, request);
|
|
145
|
+
if (persistAlreadyProcessed) {
|
|
146
|
+
const parsed = await parseAlreadyProcessed(recoveryRequest, response);
|
|
147
|
+
if (parsed) await persistAlreadyProcessed(parsed);
|
|
148
|
+
}
|
|
149
|
+
if (!skipAsyncTasks && tasks.committed.length) {
|
|
150
|
+
Promise.all(tasks.committed.map(task => runWithAuthScope(authData, task))).catch(err => {
|
|
151
|
+
console.error("[push] async tasks failed", err);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
response,
|
|
156
|
+
asyncTasks: tasks.committed
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
const handleQueryRequest = async ({
|
|
160
|
+
authData,
|
|
161
|
+
request
|
|
162
|
+
}) => {
|
|
163
|
+
if (!queries) {
|
|
164
|
+
throw new Error("No queries registered with createZeroServer. Pass the syncedQueries registry to createZeroServer via the queries option.");
|
|
165
|
+
}
|
|
166
|
+
const handler = (name, args) => resolveServerQuery({
|
|
167
|
+
authData,
|
|
168
|
+
name,
|
|
169
|
+
args,
|
|
170
|
+
queries,
|
|
171
|
+
permissions,
|
|
172
|
+
validateQuery
|
|
173
|
+
});
|
|
174
|
+
const userID = typeof authData?.id === "string" ? authData.id : void 0;
|
|
175
|
+
const response = await runWithQueryContext({
|
|
176
|
+
authData: authData || {}
|
|
177
|
+
}, () =>
|
|
178
|
+
// the legacy overload omits userID when auth does not identify a user.
|
|
179
|
+
userID === void 0 ? zeroHandleQueryRequest(handler, schema, request) : zeroHandleQueryRequest({
|
|
180
|
+
handler,
|
|
181
|
+
schema,
|
|
182
|
+
request,
|
|
183
|
+
userID
|
|
184
|
+
}));
|
|
185
|
+
return {
|
|
186
|
+
response
|
|
187
|
+
};
|
|
188
|
+
};
|
|
189
|
+
async function runTransaction(database, query2) {
|
|
190
|
+
try {
|
|
191
|
+
if (isInZeroMutation()) {
|
|
192
|
+
const {
|
|
193
|
+
tx
|
|
194
|
+
} = mutatorContext();
|
|
195
|
+
return await query2(tx);
|
|
196
|
+
}
|
|
197
|
+
return await database.transaction(query2, dummyTransactionInput);
|
|
198
|
+
} catch (err) {
|
|
199
|
+
if (err?.name !== "PermissionError") {
|
|
200
|
+
console.error(`Error running transaction(): ${err}`);
|
|
201
|
+
}
|
|
202
|
+
throw err;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async function transaction(query2) {
|
|
206
|
+
return runTransaction(createDatabase(), query2);
|
|
207
|
+
}
|
|
208
|
+
async function runMutate(modelName, mutatorName, mutatorArg, options) {
|
|
209
|
+
let authData = options?.authData;
|
|
210
|
+
if (!authData) {
|
|
211
|
+
const scoped = getScopedAuthData();
|
|
212
|
+
if (scoped) authData = scoped;
|
|
213
|
+
}
|
|
214
|
+
const tasks = createAsyncTaskCollector();
|
|
215
|
+
const mutators = createMutators({
|
|
216
|
+
models,
|
|
217
|
+
environment: "server",
|
|
218
|
+
asyncTasks: tasks.queue,
|
|
219
|
+
authData: {
|
|
220
|
+
...defaultMutateAuthData,
|
|
221
|
+
...authData
|
|
222
|
+
},
|
|
223
|
+
createServerActions,
|
|
224
|
+
can: permissions.can,
|
|
225
|
+
validateMutation,
|
|
226
|
+
mutationValidators
|
|
227
|
+
});
|
|
228
|
+
const modelMutators = mutators[modelName];
|
|
229
|
+
const mutator = modelMutators[mutatorName];
|
|
230
|
+
await runTransaction(withTransactionLifecycle(createDatabase(), tasks.lifecycle), async tx => {
|
|
231
|
+
await mutator(tx, mutatorArg);
|
|
232
|
+
});
|
|
233
|
+
if (tasks.committed.length) {
|
|
234
|
+
const resolvedAuth = authData ?? null;
|
|
235
|
+
const promise = Promise.all(tasks.committed.map(task => runWithAuthScope(resolvedAuth, task)));
|
|
236
|
+
if (options?.awaitEffects) {
|
|
237
|
+
await promise;
|
|
238
|
+
} else {
|
|
239
|
+
promise.catch(err => {
|
|
240
|
+
console.error("[mutate] async tasks failed", err);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const mutate = new Proxy({}, {
|
|
246
|
+
get(_, modelName) {
|
|
247
|
+
return new Proxy({}, {
|
|
248
|
+
get(_2, mutatorName) {
|
|
249
|
+
return (arg, options) => runMutate(modelName, mutatorName, arg, options);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
function query(cb, authData) {
|
|
255
|
+
const run = () => transaction(async tx => {
|
|
256
|
+
return tx.run(cb(getZQL()));
|
|
257
|
+
});
|
|
258
|
+
if (authData !== void 0) {
|
|
259
|
+
return runWithQueryContext({
|
|
260
|
+
authData
|
|
261
|
+
}, run);
|
|
262
|
+
}
|
|
263
|
+
return run();
|
|
264
|
+
}
|
|
265
|
+
if (queries) {
|
|
266
|
+
setCustomQueries(queries);
|
|
267
|
+
}
|
|
268
|
+
setRunner(queryObj => {
|
|
269
|
+
return transaction(async tx => {
|
|
270
|
+
return tx.run(queryObj);
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
return {
|
|
274
|
+
handleMutationRequest,
|
|
275
|
+
handleQueryRequest,
|
|
276
|
+
transaction,
|
|
277
|
+
mutate,
|
|
278
|
+
query
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
function withTransactionLifecycle(database, lifecycle) {
|
|
282
|
+
return {
|
|
283
|
+
async transaction(callback, input) {
|
|
284
|
+
try {
|
|
285
|
+
const value = await database.transaction(async (tx, hooks) => {
|
|
286
|
+
lifecycle.beginAttempt();
|
|
287
|
+
try {
|
|
288
|
+
const result = await callback(tx, hooks);
|
|
289
|
+
lifecycle.completeAttempt();
|
|
290
|
+
return result;
|
|
291
|
+
} catch (error) {
|
|
292
|
+
lifecycle.rollbackAttempt();
|
|
293
|
+
throw error;
|
|
294
|
+
}
|
|
295
|
+
}, input);
|
|
296
|
+
lifecycle.commitTransaction();
|
|
297
|
+
return value;
|
|
298
|
+
} catch (error) {
|
|
299
|
+
lifecycle.rollbackTransaction();
|
|
300
|
+
throw error;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
async function parseAlreadyProcessed(request, response) {
|
|
306
|
+
const mutations = alreadyProcessedMutations(response);
|
|
307
|
+
if (mutations.length === 0) return;
|
|
308
|
+
const upstreamSchema = new URL(request.url).searchParams.get("schema");
|
|
309
|
+
if (!upstreamSchema) return;
|
|
310
|
+
const body = await request.json();
|
|
311
|
+
if (typeof body.clientGroupID !== "string") return;
|
|
312
|
+
return {
|
|
313
|
+
clientGroupID: body.clientGroupID,
|
|
314
|
+
mutations,
|
|
315
|
+
upstreamSchema
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
function alreadyProcessedMutations(response) {
|
|
319
|
+
if (!response || typeof response !== "object") return [];
|
|
320
|
+
const mutations = response.mutations;
|
|
321
|
+
if (!Array.isArray(mutations)) return [];
|
|
322
|
+
return mutations.filter(mutation => {
|
|
323
|
+
if (!mutation || typeof mutation !== "object") return false;
|
|
324
|
+
const id = mutation.id;
|
|
325
|
+
const result = mutation.result;
|
|
326
|
+
return !!id && typeof id === "object" && typeof id.clientID === "string" && typeof id.id === "number" && !!result && typeof result === "object" && result.error === "alreadyProcessed";
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
const dummyTransactionInput = {
|
|
330
|
+
clientGroupID: "unused",
|
|
331
|
+
clientID: "unused",
|
|
332
|
+
mutationID: 42,
|
|
333
|
+
upstreamSchema: "unused"
|
|
334
|
+
};
|
|
335
|
+
export { createZeroServerCore, resolveServerQuery };
|
|
336
|
+
//# sourceMappingURL=createZeroServerCore.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mustGetQuery","PushProcessor","handleQueryRequest","zeroHandleQueryRequest","createPermissions","createMutators","getScopedAuthData","isInZeroMutation","mutatorContext","runWithAuthScope","runWithQueryContext","getMutationsPermissions","setCustomQueries","getZQL","setEnvironment","setSchema","setEvaluatingPermission","setRunner","resolveServerQuery","authData","name","args","queries","permissions","validateQuery","startsWith","table","slice","length","objOrId","permission","Error","where","eb","buildPermissionQuery","one","queryName","params","query","fn","ctx","createAsyncTaskCollector","committed","attempt","completedAttempt","current","queue","Proxy","deleteProperty","_target","property","Reflect","get","target","value","bind","getOwnPropertyDescriptor","has","ownKeys","set","lifecycle","beginAttempt","completeAttempt","rollbackAttempt","commitTransaction","push","rollbackTransaction","createZeroServerCore","createDatabase","createServerActions","defaultAllowAdminRole","defaultMutateAuthData","models","mutations","mutationValidators","persistAlreadyProcessed","schema","validateMutation","environment","adminRoleMode","handleMutationRequest","request","skipAsyncTasks","tasks","recoveryRequest","clone","mutators","asyncTasks","can","processor","withTransactionLifecycle","response","process","parsed","parseAlreadyProcessed","Promise","all","map","task","catch","err","console","error","handler","userID","id","runTransaction","database","query2","tx","transaction","dummyTransactionInput","runMutate","modelName","mutatorName","mutatorArg","options","scoped","modelMutators","mutator","resolvedAuth","promise","awaitEffects","mutate","_","_2","arg","cb","run","queryObj","callback","input","hooks","result","alreadyProcessedMutations","upstreamSchema","URL","url","searchParams","body","json","clientGroupID","Array","isArray","filter","mutation","clientID","mutationID"],"sources":["../../src/createZeroServerCore.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|