on-zero 0.12.4 → 0.12.5
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/createZeroClient.cjs +3 -1
- package/dist/cjs/createZeroClient.native.js +3 -1
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.cjs +5 -2
- package/dist/cjs/helpers/createMutators.native.js +5 -2
- package/dist/cjs/helpers/createMutators.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.test.cjs +103 -0
- package/dist/cjs/helpers/createMutators.test.native.js +113 -0
- package/dist/cjs/helpers/createMutators.test.native.js.map +1 -1
- package/dist/cjs/multi.cjs +2 -1
- package/dist/cjs/multi.native.js +2 -1
- package/dist/cjs/multi.native.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +3 -1
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +3 -1
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.mjs +5 -2
- package/dist/esm/helpers/createMutators.mjs.map +1 -1
- package/dist/esm/helpers/createMutators.native.js +5 -2
- package/dist/esm/helpers/createMutators.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.test.mjs +103 -0
- package/dist/esm/helpers/createMutators.test.mjs.map +1 -1
- package/dist/esm/helpers/createMutators.test.native.js +113 -0
- package/dist/esm/helpers/createMutators.test.native.js.map +1 -1
- package/dist/esm/multi.mjs +2 -1
- package/dist/esm/multi.mjs.map +1 -1
- package/dist/esm/multi.native.js +2 -1
- package/dist/esm/multi.native.js.map +1 -1
- package/package.json +2 -2
- package/src/createZeroClient.tsx +4 -0
- package/src/helpers/createMutators.test.ts +92 -0
- package/src/helpers/createMutators.ts +8 -1
- package/src/multi.ts +3 -0
- package/types/createZeroClient.d.ts +3 -1
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/helpers/createMutators.d.ts +3 -1
- package/types/helpers/createMutators.d.ts.map +1 -1
- package/types/multi.d.ts +2 -0
- package/types/multi.d.ts.map +1 -1
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
import { createBuilder, createSchema, number, string, table } from "@rocicorp/zero";
|
|
2
|
+
import { count, defineRollups } from "orez-lite/rollup";
|
|
1
3
|
import { afterEach, describe, expect, test, vi } from "vitest";
|
|
4
|
+
import { setSchema } from "../state.native.js";
|
|
2
5
|
import { createMutators } from "./createMutators.native.js";
|
|
6
|
+
function _type_of(obj) {
|
|
7
|
+
"@swc/helpers - typeof";
|
|
8
|
+
|
|
9
|
+
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
10
|
+
}
|
|
3
11
|
afterEach(function () {
|
|
4
12
|
vi.useRealTimers();
|
|
5
13
|
});
|
|
@@ -41,4 +49,109 @@ describe("createMutators timeout guard", function () {
|
|
|
41
49
|
expect(vi.getTimerCount()).toBe(0);
|
|
42
50
|
});
|
|
43
51
|
});
|
|
52
|
+
test("createMutators installs optimistic rollups on client transactions", async function () {
|
|
53
|
+
var comment = table("comment").columns({
|
|
54
|
+
id: string(),
|
|
55
|
+
postId: string()
|
|
56
|
+
}).primaryKey("id");
|
|
57
|
+
var post = table("post").columns({
|
|
58
|
+
id: string(),
|
|
59
|
+
commentCount: number()
|
|
60
|
+
}).primaryKey("id");
|
|
61
|
+
var schema = createSchema({
|
|
62
|
+
tables: [comment, post]
|
|
63
|
+
});
|
|
64
|
+
setSchema(schema, createBuilder(schema));
|
|
65
|
+
var rollups = defineRollups(schema, {
|
|
66
|
+
postCommentCount: {
|
|
67
|
+
source: "comment",
|
|
68
|
+
target: "post",
|
|
69
|
+
mode: "existing",
|
|
70
|
+
groupBy: {
|
|
71
|
+
postId: "id"
|
|
72
|
+
},
|
|
73
|
+
aggregates: {
|
|
74
|
+
commentCount: count()
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
var rows = {
|
|
79
|
+
comment: [],
|
|
80
|
+
post: [{
|
|
81
|
+
id: "p1",
|
|
82
|
+
commentCount: 0
|
|
83
|
+
}]
|
|
84
|
+
};
|
|
85
|
+
var mutate = {
|
|
86
|
+
comment: {
|
|
87
|
+
async insert(input) {
|
|
88
|
+
rows.comment.push({
|
|
89
|
+
...input
|
|
90
|
+
});
|
|
91
|
+
},
|
|
92
|
+
async upsert() {},
|
|
93
|
+
async update() {},
|
|
94
|
+
async delete() {}
|
|
95
|
+
},
|
|
96
|
+
post: {
|
|
97
|
+
async insert() {},
|
|
98
|
+
async upsert() {},
|
|
99
|
+
async update(input) {
|
|
100
|
+
var row = rows.post.find(function (candidate) {
|
|
101
|
+
return candidate.id === input.id;
|
|
102
|
+
});
|
|
103
|
+
if (row) Object.assign(row, input);
|
|
104
|
+
},
|
|
105
|
+
async delete() {}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
var transaction = {
|
|
109
|
+
location: "client",
|
|
110
|
+
mutate,
|
|
111
|
+
async run(query) {
|
|
112
|
+
var _rows_tableName;
|
|
113
|
+
if (!query || (typeof query === "undefined" ? "undefined" : _type_of(query)) !== "object") return void 0;
|
|
114
|
+
var ast = Reflect.get(query, "ast");
|
|
115
|
+
if (!ast || (typeof ast === "undefined" ? "undefined" : _type_of(ast)) !== "object") return void 0;
|
|
116
|
+
var tableName = Reflect.get(ast, "table");
|
|
117
|
+
var where = Reflect.get(ast, "where");
|
|
118
|
+
if (typeof tableName !== "string" || !where || (typeof where === "undefined" ? "undefined" : _type_of(where)) !== "object") {
|
|
119
|
+
return void 0;
|
|
120
|
+
}
|
|
121
|
+
var left = Reflect.get(where, "left");
|
|
122
|
+
var right = Reflect.get(where, "right");
|
|
123
|
+
if (!left || (typeof left === "undefined" ? "undefined" : _type_of(left)) !== "object" || !right || (typeof right === "undefined" ? "undefined" : _type_of(right)) !== "object") {
|
|
124
|
+
return void 0;
|
|
125
|
+
}
|
|
126
|
+
var column = Reflect.get(left, "name");
|
|
127
|
+
var value = Reflect.get(right, "value");
|
|
128
|
+
return typeof column === "string" ? (_rows_tableName = rows[tableName]) === null || _rows_tableName === void 0 ? void 0 : _rows_tableName.find(function (row) {
|
|
129
|
+
return Object.is(row[column], value);
|
|
130
|
+
}) : void 0;
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
var mutators = createMutators({
|
|
134
|
+
environment: "client",
|
|
135
|
+
authData: null,
|
|
136
|
+
can: async function can() {},
|
|
137
|
+
rollups,
|
|
138
|
+
models: {
|
|
139
|
+
comment: {
|
|
140
|
+
mutate: {
|
|
141
|
+
add: async function add(ctx, input) {
|
|
142
|
+
await ctx.tx.mutate.comment.insert(input);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
await Reflect.apply(mutators.comment.add, null, [transaction, {
|
|
149
|
+
id: "c1",
|
|
150
|
+
postId: "p1"
|
|
151
|
+
}]);
|
|
152
|
+
expect(rows.post).toEqual([{
|
|
153
|
+
id: "p1",
|
|
154
|
+
commentCount: 1
|
|
155
|
+
}]);
|
|
156
|
+
});
|
|
44
157
|
//# sourceMappingURL=createMutators.test.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["afterEach","describe","expect","test","vi","createMutators","useRealTimers","useFakeTimers","mutators","environment","authData","can","models","task","mutate","create","getTimerCount","toBe","Error","rejects","toThrow"],"sources":["../../../src/helpers/createMutators.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,EAAWC,QAAA,EAAUC,MAAA,EAAQC,IAAA,EAAMC,EAAA,QAAU;AAEtD,SAASC,cAAA,QAAsB;AAE/
|
|
1
|
+
{"version":3,"names":["createBuilder","createSchema","number","string","table","count","defineRollups","afterEach","describe","expect","test","vi","setSchema","createMutators","_type_of","obj","Symbol","constructor","useRealTimers","useFakeTimers","mutators","environment","authData","can","models","task","mutate","create","getTimerCount","toBe","Error","rejects","toThrow","comment","columns","id","postId","primaryKey","post","commentCount","schema","tables","rollups","postCommentCount","source","target","mode","groupBy","aggregates","rows","insert","input","push","upsert","update","delete","row","find","candidate","Object","assign","transaction","location","run","query","_rows_tableName","ast","Reflect","get","tableName","where","left","right"],"sources":["../../../src/helpers/createMutators.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/esm/multi.mjs
CHANGED
|
@@ -28,7 +28,8 @@ function createZeroClients(instances) {
|
|
|
28
28
|
schema: instance.schema,
|
|
29
29
|
models: instance.models,
|
|
30
30
|
groupedQueries: instance.queries,
|
|
31
|
-
instanceName: name
|
|
31
|
+
instanceName: name,
|
|
32
|
+
rollups: instance.rollups
|
|
32
33
|
};
|
|
33
34
|
clients[name] = name === innerName ? createZeroClientInternal(options) : createZeroClientWithDirectQueries(options);
|
|
34
35
|
}
|
package/dist/esm/multi.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["combineZeroClients","createUseQueryDirect","createZeroClientInternal","releaseClientInstances","createZeroClientWithDirectQueries","options","createDirectUseQuery","createZeroClients","instances","names","Object","keys","length","Error","includes","splice","indexOf","unshift","innerName","clients","name","reverse","instance","schema","models","groupedQueries","queries","instanceName","typedClients","orderedClients","map","providers","fromEntries","ProvideZero","combined"],"sources":["../../src/multi.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,kBAAA,QAA0B;AACnC,SAASC,oBAAA,QAA4B;AACrC,SACEC,wBAAA,QAGK;AACP,SAASC,sBAAA,QAA8B;
|
|
1
|
+
{"version":3,"names":["combineZeroClients","createUseQueryDirect","createZeroClientInternal","releaseClientInstances","createZeroClientWithDirectQueries","options","createDirectUseQuery","createZeroClients","instances","names","Object","keys","length","Error","includes","splice","indexOf","unshift","innerName","clients","name","reverse","instance","schema","models","groupedQueries","queries","instanceName","rollups","typedClients","orderedClients","map","providers","fromEntries","ProvideZero","combined"],"sources":["../../src/multi.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,kBAAA,QAA0B;AACnC,SAASC,oBAAA,QAA4B;AACrC,SACEC,wBAAA,QAGK;AACP,SAASC,sBAAA,QAA8B;AAMvC,cAAc;AAEP,SAASC,kCAIdC,OAAA,EAC6D;EAC7D,MAAMC,oBAAA,GAAmDL,oBAAA;EACzD,OAAOC,wBAAA,CAAyC;IAC9C,GAAGG,OAAA;IACHC;EACF,CAAC;AACH;AA6BO,SAASC,kBAEdC,SAAA,EAAsB;EACtB,MAAMC,KAAA,GAAQC,MAAA,CAAOC,IAAA,CAAKH,SAAS;EACnC,IAAIC,KAAA,CAAMG,MAAA,KAAW,GAAG;IACtB,MAAM,IAAIC,KAAA,CAAM,4DAA4D;EAC9E;EACA,IAAIJ,KAAA,CAAMK,QAAA,CAAS,SAAS,GAAG;IAC7BL,KAAA,CAAMM,MAAA,CAAON,KAAA,CAAMO,OAAA,CAAQ,SAAS,GAAG,CAAC;IACxCP,KAAA,CAAMQ,OAAA,CAAQ,SAAS;EACzB;EAEA,MAAMC,SAAA,GAAYT,KAAA,CAAMA,KAAA,CAAMG,MAAA,GAAS,CAAC;EACxC,MAAMO,OAAA,GAAuE,CAAC;EAI9EhB,sBAAA,CAAuBM,KAAK;EAC5B,WAAWW,IAAA,IAAQ,CAAC,GAAGX,KAAK,EAAEY,OAAA,CAAQ,GAAG;IACvC,MAAMC,QAAA,GAAWd,SAAA,CAAUY,IAAI;IAC/B,MAAMf,OAAA,GAAU;MACdkB,MAAA,EAAQD,QAAA,CAASC,MAAA;MACjBC,MAAA,EAAQF,QAAA,CAASE,MAAA;MACjBC,cAAA,EAAgBH,QAAA,CAASI,OAAA;MACzBC,YAAA,EAAcP,IAAA;MACdQ,OAAA,EAASN,QAAA,CAASM;IACpB;IACAT,OAAA,CAAQC,IAAI,IACVA,IAAA,KAASF,SAAA,GACLhB,wBAAA,CAAyBG,OAAO,IAChCD,iCAAA,CAAkCC,OAAO;EACjD;EAEA,MAAMwB,YAAA,GAAeV,OAAA;EAGrB,MAAMW,cAAA,GAAiBrB,KAAA,CAAMsB,GAAA,CAC1BX,IAAA,IAASS,YAAA,CAAaT,IAAuB,CAChD;EACA,MAAMY,SAAA,GAAYtB,MAAA,CAAOuB,WAAA,CACvBxB,KAAA,CAAMsB,GAAA,CAAKX,IAAA,IAAS,CAACA,IAAA,EAAMD,OAAA,CAAQC,IAAI,EAAGc,WAAW,CAAC,CACxD;EAEA,OAAO;IACLf,OAAA,EAASU,YAAA;IACTG,SAAA;IACAG,QAAA,EAAUnC,kBAAA,CAAmB,GAAG8B,cAAc;EAChD;AACF","ignoreList":[]}
|
package/dist/esm/multi.native.js
CHANGED
|
@@ -33,7 +33,8 @@ function createZeroClients(instances) {
|
|
|
33
33
|
schema: instance.schema,
|
|
34
34
|
models: instance.models,
|
|
35
35
|
groupedQueries: instance.queries,
|
|
36
|
-
instanceName: name
|
|
36
|
+
instanceName: name,
|
|
37
|
+
rollups: instance.rollups
|
|
37
38
|
};
|
|
38
39
|
clients[name] = name === innerName ? createZeroClientInternal(options) : createZeroClientWithDirectQueries(options);
|
|
39
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["combineZeroClients","createUseQueryDirect","createZeroClientInternal","releaseClientInstances","createZeroClientWithDirectQueries","options","createDirectUseQuery","createZeroClients","instances","names","Object","keys","length","Error","includes","splice","indexOf","unshift","innerName","clients","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","reverse","Symbol","iterator","_step","next","done","name","value","instance","schema","models","groupedQueries","queries","instanceName","err","return"],"sources":["../../src/multi.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,kBAAA,QAA0B;AACnC,SAASC,oBAAA,QAA4B;AACrC,SAAAC,wBAAA;AAAA,SACEC,sBAAA;AAAA,cAGK;AACP,SAASC,iCAA8BA,CAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["combineZeroClients","createUseQueryDirect","createZeroClientInternal","releaseClientInstances","createZeroClientWithDirectQueries","options","createDirectUseQuery","createZeroClients","instances","names","Object","keys","length","Error","includes","splice","indexOf","unshift","innerName","clients","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","reverse","Symbol","iterator","_step","next","done","name","value","instance","schema","models","groupedQueries","queries","instanceName","rollups","err","return"],"sources":["../../src/multi.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,kBAAA,QAA0B;AACnC,SAASC,oBAAA,QAA4B;AACrC,SAAAC,wBAAA;AAAA,SACEC,sBAAA;AAAA,cAGK;AACP,SAASC,iCAA8BA,CAAAC,OAAA;EAMvC,IAAAC,oBAAc,GAAAL,oBAAA;EAEP,OAASC,wBAAA;IAMd,GAAAG,OAAM;IACNC;EAAgD,EAC9C;AAAG;AACH,SACDC,kBAAAC,SAAA;EACH,IAAAC,KAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAH,SAAA;EA6BO,IAAAC,KAAS,CAAAG,MAAA;IAGd,MAAM,IAAAC,KAAQ,6DAAqB;EACnC;EACE,IAAAJ,KAAM,CAAAK,QAAU;IAClBL,KAAA,CAAAM,MAAA,CAAAN,KAAA,CAAAO,OAAA;IACAP,KAAI,CAAAQ,OAAM,UAAS;EACjB;EACA,IAAAC,SAAM,GAAQT,KAAA,CAAAA,KAAS,CAAAG,MAAA;EACzB,IAAAO,OAAA;EAEAhB,sBAAkB,CAAAM,KAAM;EACxB,IAAAW,yBAA8E;IAAAC,iBAAA;IAAAC,cAAA;EAI9E;IACA,SAAWC,SAAS,GAAG,CACrB,GAAAd,KAAM,CACN,CAAAe,OAAM,GAAAC,MAAU,CAAAC,QAAA,KAAAC,KAAA,IAAAP,yBAAA,IAAAO,KAAA,GAAAJ,SAAA,CAAAK,IAAA,IAAAC,IAAA,GAAAT,yBAAA;MACd,IAAAU,IAAQ,GAAAH,KAAA,CAASI,KAAA;MACjB,IAAAC,QAAQ,GAAAxB,SAAS,CAAAsB,IAAA;MACjB,IAAAzB,OAAA;QACA4B,MAAA,EAAAD,QAAc,CAAAC,MAAA;QACdC,MAAA,EAASF,QAAS,CAAAE,MAAA;QACpBC,cAAA,EAAAH,QAAA,CAAAI,OAAA;QACAC,YACE,EAAAP,IAAA;QAGJQ,OAAA,EAAAN,QAAA,CAAAM;MAEA;MAGAnB,OAAM,CAAAW,IAAA,IAAAA,IAAiB,KAAMZ,SAAA,GAAAhB,wBAAA,CAAAG,OAAA,IAAAD,iCAAA,CAAAC,OAAA;IAC3B;EACF,SAAAkC,GAAA;IACAlB,iBAAkB,OAAO;IACvBC,cAAW,GAAAiB,GAAS;EACtB;IAEA;MACE,KAAAnB,yBAAS,IAAAG,SAAA,CAAAiB,MAAA;QACTjB,SAAA,CAAAiB,MAAA;MACA;IACF;MACF,IAAAnB,iBAAA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "on-zero",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.5",
|
|
4
4
|
"description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"files": [
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"chokidar": "^4.0.3",
|
|
106
106
|
"citty": "^0.1.6",
|
|
107
107
|
"dequal": "^2.0.3",
|
|
108
|
-
"orez-lite": "0.12.
|
|
108
|
+
"orez-lite": "0.12.5",
|
|
109
109
|
"valibot": "^1.1.0"
|
|
110
110
|
},
|
|
111
111
|
"peerDependencies": {
|
package/src/createZeroClient.tsx
CHANGED
|
@@ -71,6 +71,7 @@ import type {
|
|
|
71
71
|
ZeroOptions,
|
|
72
72
|
Schema as ZeroSchema,
|
|
73
73
|
} from '@rocicorp/zero'
|
|
74
|
+
import type { RollupSet } from 'orez-lite/rollup'
|
|
74
75
|
|
|
75
76
|
type PreloadOptions = { ttl?: 'always' | 'never' | number | undefined }
|
|
76
77
|
|
|
@@ -100,6 +101,7 @@ export type CreateZeroClientOptions<
|
|
|
100
101
|
schema: Schema
|
|
101
102
|
models: Models
|
|
102
103
|
groupedQueries: GroupedQueries
|
|
104
|
+
rollups?: RollupSet<Schema>
|
|
103
105
|
permissionStrategy?: PermissionStrategy
|
|
104
106
|
// repeated server acknowledgement timeouts reconnect with the existing local
|
|
105
107
|
// state. one timeout remains a normal slow-server failure.
|
|
@@ -159,6 +161,7 @@ export function createZeroClientInternal<
|
|
|
159
161
|
schema,
|
|
160
162
|
models,
|
|
161
163
|
groupedQueries,
|
|
164
|
+
rollups,
|
|
162
165
|
permissionStrategy = 'optimistic',
|
|
163
166
|
instanceName = 'default',
|
|
164
167
|
serverAckTimeoutRecoveryThreshold = 2,
|
|
@@ -302,6 +305,7 @@ export function createZeroClientInternal<
|
|
|
302
305
|
environment: 'client',
|
|
303
306
|
authData: null,
|
|
304
307
|
can: permissionsHelpers.can,
|
|
308
|
+
rollups,
|
|
305
309
|
})
|
|
306
310
|
return clientMutators
|
|
307
311
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { createBuilder, createSchema, number, string, table } from '@rocicorp/zero'
|
|
2
|
+
import { count, defineRollups } from 'orez-lite/rollup'
|
|
1
3
|
import { afterEach, describe, expect, test, vi } from 'vitest'
|
|
2
4
|
|
|
5
|
+
import { setSchema } from '../state'
|
|
3
6
|
import { createMutators } from './createMutators'
|
|
4
7
|
|
|
5
8
|
afterEach(() => {
|
|
@@ -49,3 +52,92 @@ describe('createMutators timeout guard', () => {
|
|
|
49
52
|
expect(vi.getTimerCount()).toBe(0)
|
|
50
53
|
})
|
|
51
54
|
})
|
|
55
|
+
|
|
56
|
+
test('createMutators installs optimistic rollups on client transactions', async () => {
|
|
57
|
+
const comment = table('comment')
|
|
58
|
+
.columns({ id: string(), postId: string() })
|
|
59
|
+
.primaryKey('id')
|
|
60
|
+
const post = table('post')
|
|
61
|
+
.columns({ id: string(), commentCount: number() })
|
|
62
|
+
.primaryKey('id')
|
|
63
|
+
const schema = createSchema({ tables: [comment, post] })
|
|
64
|
+
setSchema(schema, createBuilder(schema))
|
|
65
|
+
const rollups = defineRollups(schema, {
|
|
66
|
+
postCommentCount: {
|
|
67
|
+
source: 'comment',
|
|
68
|
+
target: 'post',
|
|
69
|
+
mode: 'existing',
|
|
70
|
+
groupBy: { postId: 'id' },
|
|
71
|
+
aggregates: { commentCount: count() },
|
|
72
|
+
},
|
|
73
|
+
})
|
|
74
|
+
const rows: Record<string, Array<Record<string, unknown>>> = {
|
|
75
|
+
comment: [],
|
|
76
|
+
post: [{ id: 'p1', commentCount: 0 }],
|
|
77
|
+
}
|
|
78
|
+
const mutate = {
|
|
79
|
+
comment: {
|
|
80
|
+
async insert(input: Readonly<Record<string, unknown>>) {
|
|
81
|
+
rows.comment!.push({ ...input })
|
|
82
|
+
},
|
|
83
|
+
async upsert() {},
|
|
84
|
+
async update() {},
|
|
85
|
+
async delete() {},
|
|
86
|
+
},
|
|
87
|
+
post: {
|
|
88
|
+
async insert() {},
|
|
89
|
+
async upsert() {},
|
|
90
|
+
async update(input: Readonly<Record<string, unknown>>) {
|
|
91
|
+
const row = rows.post!.find((candidate) => candidate.id === input.id)
|
|
92
|
+
if (row) Object.assign(row, input)
|
|
93
|
+
},
|
|
94
|
+
async delete() {},
|
|
95
|
+
},
|
|
96
|
+
}
|
|
97
|
+
const transaction = {
|
|
98
|
+
location: 'client',
|
|
99
|
+
mutate,
|
|
100
|
+
async run(query: unknown) {
|
|
101
|
+
if (!query || typeof query !== 'object') return undefined
|
|
102
|
+
const ast = Reflect.get(query, 'ast')
|
|
103
|
+
if (!ast || typeof ast !== 'object') return undefined
|
|
104
|
+
const tableName = Reflect.get(ast, 'table')
|
|
105
|
+
const where = Reflect.get(ast, 'where')
|
|
106
|
+
if (typeof tableName !== 'string' || !where || typeof where !== 'object') {
|
|
107
|
+
return undefined
|
|
108
|
+
}
|
|
109
|
+
const left = Reflect.get(where, 'left')
|
|
110
|
+
const right = Reflect.get(where, 'right')
|
|
111
|
+
if (!left || typeof left !== 'object' || !right || typeof right !== 'object') {
|
|
112
|
+
return undefined
|
|
113
|
+
}
|
|
114
|
+
const column = Reflect.get(left, 'name')
|
|
115
|
+
const value = Reflect.get(right, 'value')
|
|
116
|
+
return typeof column === 'string'
|
|
117
|
+
? rows[tableName]?.find((row) => Object.is(row[column], value))
|
|
118
|
+
: undefined
|
|
119
|
+
},
|
|
120
|
+
}
|
|
121
|
+
const mutators = createMutators({
|
|
122
|
+
environment: 'client',
|
|
123
|
+
authData: null,
|
|
124
|
+
can: async () => {},
|
|
125
|
+
rollups,
|
|
126
|
+
models: {
|
|
127
|
+
comment: {
|
|
128
|
+
mutate: {
|
|
129
|
+
add: async (ctx, input: { id: string; postId: string }) => {
|
|
130
|
+
await ctx.tx.mutate.comment.insert(input)
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
await Reflect.apply(mutators.comment.add, null, [
|
|
138
|
+
transaction,
|
|
139
|
+
{ id: 'c1', postId: 'p1' },
|
|
140
|
+
])
|
|
141
|
+
|
|
142
|
+
expect(rows.post).toEqual([{ id: 'p1', commentCount: 1 }])
|
|
143
|
+
})
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { withOptimisticRollups } from 'orez-lite/rollup'
|
|
2
|
+
|
|
1
3
|
import { getAuthData } from '../state'
|
|
2
4
|
import { mapObject } from './mapObject'
|
|
3
5
|
import { runWithContext } from './mutatorContext'
|
|
@@ -11,6 +13,7 @@ import type {
|
|
|
11
13
|
MutatorContext,
|
|
12
14
|
Transaction,
|
|
13
15
|
} from '../types'
|
|
16
|
+
import type { RollupSet } from 'orez-lite/rollup'
|
|
14
17
|
|
|
15
18
|
export type ValidateMutationFn = (args: {
|
|
16
19
|
authData: AuthData | null
|
|
@@ -32,6 +35,7 @@ export function createMutators<Models extends GenericModels>({
|
|
|
32
35
|
validateMutation,
|
|
33
36
|
mutationValidators,
|
|
34
37
|
resolveAuthData,
|
|
38
|
+
rollups,
|
|
35
39
|
}: {
|
|
36
40
|
environment: 'server' | 'client'
|
|
37
41
|
authData: AuthData | null
|
|
@@ -44,6 +48,7 @@ export function createMutators<Models extends GenericModels>({
|
|
|
44
48
|
/** valibot schemas keyed by model.mutationName, auto-validates args before running */
|
|
45
49
|
mutationValidators?: Record<string, Record<string, any>>
|
|
46
50
|
resolveAuthData?: () => AuthData | null
|
|
51
|
+
rollups?: RollupSet
|
|
47
52
|
}): GetZeroMutators<Models> {
|
|
48
53
|
const serverActions = createServerActions?.()
|
|
49
54
|
|
|
@@ -54,8 +59,10 @@ export function createMutators<Models extends GenericModels>({
|
|
|
54
59
|
|
|
55
60
|
function withContext<Args extends any[]>(fn: (...args: Args) => Promise<void>) {
|
|
56
61
|
return async (tx: Transaction, ...args: Args): Promise<void> => {
|
|
62
|
+
const transaction =
|
|
63
|
+
environment === 'client' && rollups ? withOptimisticRollups(tx, rollups) : tx
|
|
57
64
|
const mutationContext: MutatorContext = {
|
|
58
|
-
tx,
|
|
65
|
+
tx: transaction,
|
|
59
66
|
// on client, read authData dynamically to avoid stale closure during auth transitions
|
|
60
67
|
// (ZeroProvider recreates Zero instance in useEffect, but mutations can run before that)
|
|
61
68
|
authData:
|
package/src/multi.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { releaseClientInstances } from './instanceRegistry'
|
|
|
9
9
|
|
|
10
10
|
import type { GenericModels } from './types'
|
|
11
11
|
import type { Schema as ZeroSchema } from '@rocicorp/zero'
|
|
12
|
+
import type { RollupSet } from 'orez-lite/rollup'
|
|
12
13
|
|
|
13
14
|
export * from './combineZeroClients'
|
|
14
15
|
|
|
@@ -32,6 +33,7 @@ export type ZeroInstanceManifestEntry<
|
|
|
32
33
|
schema: Schema
|
|
33
34
|
queries: CreateZeroClientOptions<Schema, Models>['groupedQueries']
|
|
34
35
|
models: Models
|
|
36
|
+
rollups?: RollupSet<Schema>
|
|
35
37
|
tables: readonly string[]
|
|
36
38
|
syncTables: readonly string[]
|
|
37
39
|
supportTables: readonly string[]
|
|
@@ -76,6 +78,7 @@ export function createZeroClients<
|
|
|
76
78
|
models: instance.models,
|
|
77
79
|
groupedQueries: instance.queries,
|
|
78
80
|
instanceName: name,
|
|
81
|
+
rollups: instance.rollups,
|
|
79
82
|
}
|
|
80
83
|
clients[name] =
|
|
81
84
|
name === innerName
|
|
@@ -6,6 +6,7 @@ import { type RecoveryGuardStorage, type ScheduleReloadContext, type ZeroLogPatt
|
|
|
6
6
|
import { resolveQuery, type PlainQueryFn } from './resolveQuery';
|
|
7
7
|
import type { AuthData, GenericModels, GetZeroMutators, ZeroEventsEmitter } from './types';
|
|
8
8
|
import type { AnyQueryRegistry, Query, Row, ZeroOptions, Schema as ZeroSchema } from '@rocicorp/zero';
|
|
9
|
+
import type { RollupSet } from 'orez-lite/rollup';
|
|
9
10
|
type PreloadOptions = {
|
|
10
11
|
ttl?: 'always' | 'never' | number | undefined;
|
|
11
12
|
};
|
|
@@ -24,6 +25,7 @@ export type CreateZeroClientOptions<Schema extends ZeroSchema, Models extends Ge
|
|
|
24
25
|
schema: Schema;
|
|
25
26
|
models: Models;
|
|
26
27
|
groupedQueries: GroupedQueries;
|
|
28
|
+
rollups?: RollupSet<Schema>;
|
|
27
29
|
permissionStrategy?: PermissionStrategy;
|
|
28
30
|
serverAckTimeoutRecoveryThreshold?: number;
|
|
29
31
|
instanceName?: string;
|
|
@@ -94,7 +96,7 @@ export declare function createZeroClient<Schema extends ZeroSchema, Models exten
|
|
|
94
96
|
awaitMutationClient: (mutation: import(".").MutationLike, label: string, timeoutMs?: number) => Promise<unknown>;
|
|
95
97
|
awaitMutationServer: (mutation: import(".").MutationLike, label: string, timeoutMs?: number) => Promise<unknown>;
|
|
96
98
|
};
|
|
97
|
-
export declare function createZeroClientInternal<Schema extends ZeroSchema, Models extends GenericModels>({ schema, models, groupedQueries, permissionStrategy, instanceName, serverAckTimeoutRecoveryThreshold, createDirectUseQuery, }: CreateZeroClientOptions<Schema, Models> & {
|
|
99
|
+
export declare function createZeroClientInternal<Schema extends ZeroSchema, Models extends GenericModels>({ schema, models, groupedQueries, rollups, permissionStrategy, instanceName, serverAckTimeoutRecoveryThreshold, createDirectUseQuery, }: CreateZeroClientOptions<Schema, Models> & {
|
|
98
100
|
createDirectUseQuery?: DirectQueryAdapter<Schema>;
|
|
99
101
|
}): {
|
|
100
102
|
instanceName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,IAAI,IAAI,UAAU,EACnB,MAAM,gBAAgB,CAAA;AAOvB,OAAO,EASL,KAAK,OAAO,EACZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAGd,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAK/D,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EAEpB,MAAM,6BAA6B,CAAA;AAIpC,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAOhE,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,eAAe,EAEf,iBAAiB,EAElB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EACV,gBAAgB,EAChB,KAAK,EACL,GAAG,EAEH,WAAW,EACX,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AuthData, Can, GenericModels, GetZeroMutators, MutatorContext } from '../types';
|
|
2
|
+
import type { RollupSet } from 'orez-lite/rollup';
|
|
2
3
|
export type ValidateMutationFn = (args: {
|
|
3
4
|
authData: AuthData | null;
|
|
4
5
|
mutatorName: string;
|
|
@@ -6,7 +7,7 @@ export type ValidateMutationFn = (args: {
|
|
|
6
7
|
args: unknown;
|
|
7
8
|
}) => void | Promise<void>;
|
|
8
9
|
export type { ValidateMutationFn as CreateMutatorsValidateFn };
|
|
9
|
-
export declare function createMutators<Models extends GenericModels>({ environment, authData, createServerActions, enqueueTask, enqueueAction, can, models, validateMutation, mutationValidators, resolveAuthData, }: {
|
|
10
|
+
export declare function createMutators<Models extends GenericModels>({ environment, authData, createServerActions, enqueueTask, enqueueAction, can, models, validateMutation, mutationValidators, resolveAuthData, rollups, }: {
|
|
10
11
|
environment: 'server' | 'client';
|
|
11
12
|
authData: AuthData | null;
|
|
12
13
|
can: Can;
|
|
@@ -18,5 +19,6 @@ export declare function createMutators<Models extends GenericModels>({ environme
|
|
|
18
19
|
/** valibot schemas keyed by model.mutationName, auto-validates args before running */
|
|
19
20
|
mutationValidators?: Record<string, Record<string, any>>;
|
|
20
21
|
resolveAuthData?: () => AuthData | null;
|
|
22
|
+
rollups?: RollupSet;
|
|
21
23
|
}): GetZeroMutators<Models>;
|
|
22
24
|
//# sourceMappingURL=createMutators.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMutators.d.ts","sourceRoot":"","sources":["../../src/helpers/createMutators.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createMutators.d.ts","sourceRoot":"","sources":["../../src/helpers/createMutators.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,QAAQ,EACR,GAAG,EACH,aAAa,EACb,eAAe,EACf,cAAc,EAEf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE;IACtC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;CACd,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAE1B,YAAY,EAAE,kBAAkB,IAAI,wBAAwB,EAAE,CAAA;AAE9D,wBAAgB,cAAc,CAAC,MAAM,SAAS,aAAa,EAAE,EAC3D,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAsB,EACtB,aAAwB,EACxB,GAAG,EACH,MAAM,EACN,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,OAAO,GACR,EAAE;IACD,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAChC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;IACzB,GAAG,EAAE,GAAG,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;IAClE,aAAa,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;IACtE,mBAAmB,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/C,gBAAgB,CAAC,EAAE,kBAAkB,CAAA;IACrC,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;IACxD,eAAe,CAAC,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAA;IACvC,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB,GAAG,eAAe,CAAC,MAAM,CAAC,CA4K1B"}
|
package/types/multi.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { createZeroClientInternal, type CreateZeroClientOptions } from './createZeroClient';
|
|
2
2
|
import type { GenericModels } from './types';
|
|
3
3
|
import type { Schema as ZeroSchema } from '@rocicorp/zero';
|
|
4
|
+
import type { RollupSet } from 'orez-lite/rollup';
|
|
4
5
|
export * from './combineZeroClients';
|
|
5
6
|
export declare function createZeroClientWithDirectQueries<Schema extends ZeroSchema, Models extends GenericModels>(options: CreateZeroClientOptions<Schema, Models>): ReturnType<typeof createZeroClientInternal<Schema, Models>>;
|
|
6
7
|
export type ZeroInstanceManifestEntry<Schema extends ZeroSchema = ZeroSchema, Models extends GenericModels = GenericModels> = {
|
|
7
8
|
schema: Schema;
|
|
8
9
|
queries: CreateZeroClientOptions<Schema, Models>['groupedQueries'];
|
|
9
10
|
models: Models;
|
|
11
|
+
rollups?: RollupSet<Schema>;
|
|
10
12
|
tables: readonly string[];
|
|
11
13
|
syncTables: readonly string[];
|
|
12
14
|
supportTables: readonly string[];
|
package/types/multi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi.d.ts","sourceRoot":"","sources":["../src/multi.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EAExB,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"multi.d.ts","sourceRoot":"","sources":["../src/multi.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EAExB,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,cAAc,sBAAsB,CAAA;AAEpC,wBAAgB,iCAAiC,CAC/C,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,aAAa,EAE5B,OAAO,EAAE,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/C,UAAU,CAAC,OAAO,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAM7D;AAED,MAAM,MAAM,yBAAyB,CACnC,MAAM,SAAS,UAAU,GAAG,UAAU,EACtC,MAAM,SAAS,aAAa,GAAG,aAAa,IAC1C;IACF,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAA;IAClE,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,iBAAiB,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAA;CACjF,CAAA;AAED,KAAK,SAAS,CAAC,KAAK,IAClB,KAAK,SAAS,yBAAyB,CAAC,MAAM,MAAM,EAAE,MAAM,MAAM,CAAC,GAC/D,UAAU,CAAC,OAAO,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC3D,KAAK,CAAA;AAEX,KAAK,SAAS,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,IAAI;KAC3E,IAAI,IAAI,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;CACtD,CAAA;AAED,KAAK,WAAW,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,IAC1E,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,SAAS,CAAC,CAAA;AAEvC,wBAAgB,iBAAiB,CAC/B,KAAK,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,EACjE,SAAS,EAAE,SAAS;;kBAuCZ,IAAI;;EAOb"}
|