on-zero 0.6.18 → 0.6.19
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/asyncTasks.native.js.map +1 -1
- package/dist/cjs/createZeroClient.cjs +1 -28
- package/dist/cjs/createZeroClient.connection.test.cjs +11 -40
- package/dist/cjs/createZeroClient.connection.test.native.js +11 -40
- package/dist/cjs/createZeroClient.connection.test.native.js.map +1 -1
- package/dist/cjs/createZeroClient.native.js +1 -29
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroDirectServer.cjs +1 -1
- package/dist/cjs/createZeroDirectServer.native.js +1 -1
- package/dist/cjs/createZeroDirectServer.native.js.map +1 -1
- package/dist/cjs/createZeroServer.test.cjs +6 -0
- package/dist/cjs/createZeroServer.test.native.js +6 -0
- package/dist/cjs/createZeroServer.test.native.js.map +1 -1
- package/dist/cjs/createZeroServerCore.cjs +29 -1
- package/dist/cjs/createZeroServerCore.native.js +153 -1
- package/dist/cjs/createZeroServerCore.native.js.map +1 -1
- package/dist/cjs/httpPull/transport.test.cjs +127 -15
- package/dist/cjs/httpPull/transport.test.native.js +161 -16
- package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
- package/dist/cjs/httpPullTransport.cjs +48 -18
- package/dist/cjs/httpPullTransport.native.js +57 -20
- package/dist/cjs/httpPullTransport.native.js.map +1 -1
- package/dist/cjs/modelRegistry.cjs +7 -4
- package/dist/cjs/modelRegistry.native.js +8 -4
- package/dist/cjs/modelRegistry.native.js.map +1 -1
- package/dist/cjs/mutations.cjs +15 -11
- package/dist/cjs/mutations.native.js +17 -11
- package/dist/cjs/mutations.native.js.map +1 -1
- package/dist/cjs/state.cjs +2 -3
- package/dist/cjs/state.native.js +2 -3
- package/dist/cjs/state.native.js.map +1 -1
- package/dist/cjs/syncHost.cjs +2 -1
- package/dist/cjs/syncHost.native.js +2 -1
- package/dist/cjs/syncHost.native.js.map +1 -1
- package/dist/cjs/usePermission.test.cjs +4 -2
- package/dist/cjs/usePermission.test.native.js +4 -2
- package/dist/cjs/usePermission.test.native.js.map +1 -1
- package/dist/esm/asyncTasks.mjs.map +1 -1
- package/dist/esm/asyncTasks.native.js.map +1 -1
- package/dist/esm/createZeroClient.connection.test.mjs +11 -40
- package/dist/esm/createZeroClient.connection.test.mjs.map +1 -1
- package/dist/esm/createZeroClient.connection.test.native.js +11 -40
- package/dist/esm/createZeroClient.connection.test.native.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +2 -29
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +2 -30
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroDirectServer.mjs +2 -2
- package/dist/esm/createZeroDirectServer.mjs.map +1 -1
- package/dist/esm/createZeroDirectServer.native.js +2 -2
- package/dist/esm/createZeroDirectServer.native.js.map +1 -1
- package/dist/esm/createZeroServer.test.mjs +6 -0
- package/dist/esm/createZeroServer.test.mjs.map +1 -1
- package/dist/esm/createZeroServer.test.native.js +6 -0
- package/dist/esm/createZeroServer.test.native.js.map +1 -1
- package/dist/esm/createZeroServerCore.mjs +29 -1
- package/dist/esm/createZeroServerCore.mjs.map +1 -1
- package/dist/esm/createZeroServerCore.native.js +153 -1
- package/dist/esm/createZeroServerCore.native.js.map +1 -1
- package/dist/esm/httpPull/transport.test.mjs +127 -15
- package/dist/esm/httpPull/transport.test.mjs.map +1 -1
- package/dist/esm/httpPull/transport.test.native.js +161 -16
- package/dist/esm/httpPull/transport.test.native.js.map +1 -1
- package/dist/esm/httpPullTransport.mjs +48 -18
- package/dist/esm/httpPullTransport.mjs.map +1 -1
- package/dist/esm/httpPullTransport.native.js +57 -20
- package/dist/esm/httpPullTransport.native.js.map +1 -1
- package/dist/esm/modelRegistry.mjs +7 -4
- package/dist/esm/modelRegistry.mjs.map +1 -1
- package/dist/esm/modelRegistry.native.js +8 -4
- package/dist/esm/modelRegistry.native.js.map +1 -1
- package/dist/esm/mutations.mjs +15 -11
- package/dist/esm/mutations.mjs.map +1 -1
- package/dist/esm/mutations.native.js +17 -11
- package/dist/esm/mutations.native.js.map +1 -1
- package/dist/esm/state.mjs +2 -3
- package/dist/esm/state.mjs.map +1 -1
- package/dist/esm/state.native.js +2 -3
- package/dist/esm/state.native.js.map +1 -1
- package/dist/esm/syncHost.mjs +2 -1
- package/dist/esm/syncHost.mjs.map +1 -1
- package/dist/esm/syncHost.native.js +2 -1
- package/dist/esm/syncHost.native.js.map +1 -1
- package/dist/esm/usePermission.test.mjs +6 -4
- package/dist/esm/usePermission.test.mjs.map +1 -1
- package/dist/esm/usePermission.test.native.js +6 -4
- package/dist/esm/usePermission.test.native.js.map +1 -1
- package/package.json +2 -2
- package/src/asyncTasks.ts +4 -1
- package/src/createZeroClient.connection.test.tsx +11 -35
- package/src/createZeroClient.tsx +7 -40
- package/src/createZeroDirectServer.ts +2 -2
- package/src/createZeroServer.test.ts +10 -0
- package/src/createZeroServerCore.ts +38 -1
- package/src/httpPull/transport.test.ts +143 -16
- package/src/httpPullTransport.ts +67 -30
- package/src/modelRegistry.ts +9 -4
- package/src/mutations.ts +19 -15
- package/src/state.ts +3 -3
- package/src/syncHost.ts +2 -2
- package/src/usePermission.test.ts +9 -3
- package/test-fixtures/server-return-types.ts +13 -1
- package/types/asyncTasks.d.ts +5 -1
- package/types/asyncTasks.d.ts.map +1 -1
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/createZeroServerCore.d.ts.map +1 -1
- package/types/httpPullTransport.d.ts +13 -0
- package/types/httpPullTransport.d.ts.map +1 -1
- package/types/modelRegistry.d.ts.map +1 -1
- package/types/mutations.d.ts.map +1 -1
- package/types/state.d.ts +2 -2
- package/types/state.d.ts.map +1 -1
- package/types/syncHost.d.ts +1 -1
- package/types/syncHost.d.ts.map +1 -1
package/dist/esm/state.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["globalValue","getState","schema","zql","authData","environment","errMessage","getZQL","Error","getSchema","setSchema","_","state","getAuthData","setAuthData","getEnvironment","setEnvironment","env"],"sources":["../../src/state.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,WAAA,QAAmB;AAW5B,MAAMC,QAAA,GAAWA,CAAA,KACfD,WAAA,CAAmB,iBAAiB,OAAO;EACzCE,MAAA,EAAQ;EACRC,GAAA,EAAK;EACLC,QAAA,EAAU;EACVC,WAAA,EAAa;AACf,EAAE;AAEJ,MAAMC,UAAA,GAAa;AAEZ,MAAMC,MAAA,GAASA,CAAA,KAAM;EAC1B,MAAM;IAAEJ;EAAI,IAAIF,QAAA,CAAS;EACzB,IAAI,CAACE,GAAA,EAAK,MAAM,IAAIK,KAAA,CAAMF,UAAU;EACpC,OAAOH,GAAA;AACT;AAEO,MAAMM,SAAA,GAAYA,CAAA,KAAM;EAC7B,MAAM;IAAEP;EAAO,IAAID,QAAA,CAAS;EAC5B,IAAI,CAACC,MAAA,EAAQ,MAAM,IAAIM,KAAA,CAAMF,UAAU;EACvC,OAAOJ,MAAA;AACT;AAEO,MAAMQ,SAAA,GAAYA,CAAmBC,CAAA,EAAMR,GAAA,KAAwB;EACxE,MAAMS,KAAA,GAAQX,QAAA,CAAS;EACvBW,KAAA,CAAMV,MAAA,GAASS,CAAA;EACfC,KAAA,CAAMT,GAAA,GAAMA,GAAA;AACd;AAEO,MAAMU,WAAA,GAAcA,CAAA,KAAM;EAC/B,OAAOZ,QAAA,CAAS,EAAEG,QAAA,IAAY;AAChC;AAEO,MAAMU,WAAA,GAAeH,CAAA,IAAgB;EAC1CV,QAAA,CAAS,EAAEG,QAAA,GAAWO,CAAA;AACxB;AAEO,MAAMI,cAAA,GAAiBA,CAAA,KAAMd,QAAA,CAAS,EAAEI,WAAA;AAExC,MAAMW,cAAA,GAAkBC,GAAA,IAA6B;EAC1DhB,QAAA,CAAS,EAAEI,WAAA,GAAcY,GAAA;AAC3B","ignoreList":[]}
|
package/dist/esm/state.native.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { createBuilder } from "@rocicorp/zero";
|
|
2
1
|
import { globalValue } from "@take-out/helpers";
|
|
3
2
|
var getState = function () {
|
|
4
3
|
return globalValue("on-zero:state", function () {
|
|
@@ -25,10 +24,10 @@ var getSchema = function () {
|
|
|
25
24
|
if (!schema) throw new Error(errMessage);
|
|
26
25
|
return schema;
|
|
27
26
|
};
|
|
28
|
-
var setSchema = function (_) {
|
|
27
|
+
var setSchema = function (_, zql) {
|
|
29
28
|
var state = getState();
|
|
30
29
|
state.schema = _;
|
|
31
|
-
state.zql =
|
|
30
|
+
state.zql = zql;
|
|
32
31
|
};
|
|
33
32
|
var getAuthData = function () {
|
|
34
33
|
return getState().authData || null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["globalValue","getState","schema","zql","authData","environment","errMessage","getZQL","Error","getSchema","setSchema","_","state","getAuthData","setAuthData"],"sources":["../../src/state.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,WAAA,QAAmB;AAW5B,IAAAC,QAAM,YAAAA,CAAA,EACJ;EACE,OAAAD,WAAQ;IACR,OAAK;MACLE,MAAU;MACVC,GAAA,MAAa;MACbC,QAAA;MAEEC,WAAA,EAAa;IAEZ;EACL;AACA;AACA,IAAAC,UAAO;AACT,IAAAC,MAAA,YAAAA,CAAA;EAEO,IAAM;IAAAJ;EAAA,IAAAF,QAAkB;EAC7B,KAAAE,GAAQ,QAAO,IAAIK,KAAA,CAAAF,UAAS;EAC5B,OAAKH,GAAA;AACL;AACF,IAAAM,SAAA,YAAAA,CAAA;EAEO,IAAM;IAAAP;EAAA,IAA+BD,QAAM;EAChD,KAAAC,MAAM,QAAQ,IAASM,KAAA,CAAAF,UAAA;EACvB,OAAMJ,MAAA;AACN;AACF,IAAAQ,SAAA,YAAAA,CAAAC,CAAA,EAAAR,GAAA;EAEO,IAAMS,KAAA,GAAAX,QAAc;EACzBW,KAAA,CAAAV,MAAO,GAAAS,CAAS;EAClBC,KAAA,CAAAT,GAAA,GAAAA,GAAA;AAEO;AACL,IAAAU,WAAW,YAAAA,CAAA,EAAW;EACxB,OAAAZ,QAAA,GAAAG,QAAA;AAEO;AAEA,IAAAU,WAAM,YAAAA,CAAkBH,CAAA;EAC7BV,QAAA,CAAS,EAAEG,QAAA,GAAAO,CAAA;AACb","ignoreList":[]}
|
package/dist/esm/syncHost.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { asQueryInternals } from "@rocicorp/zero/bindings";
|
|
2
|
+
import { createBuilder } from "@rocicorp/zero";
|
|
2
3
|
import { createPermissions } from "./createPermissions.mjs";
|
|
3
4
|
import { createZeroDirectServer, resolveServerQuery } from "./createZeroDirectServer.mjs";
|
|
4
5
|
import { createSQLiteDatabase, createZeroSQLiteTransaction, defaultLedgerTables, encodeSQLiteValue } from "./sqliteRuntime.mjs";
|
|
@@ -19,7 +20,7 @@ function createZeroSyncHostAdapter({
|
|
|
19
20
|
transaction,
|
|
20
21
|
...options
|
|
21
22
|
}) {
|
|
22
|
-
setSchema(options.schema);
|
|
23
|
+
setSchema(options.schema, createBuilder(options.schema));
|
|
23
24
|
setEnvironment("server");
|
|
24
25
|
const permissions = createPermissions({
|
|
25
26
|
environment: "server",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["asQueryInternals","createPermissions","createZeroDirectServer","resolveServerQuery","createSQLiteDatabase","createZeroSQLiteTransaction","defaultLedgerTables","encodeSQLiteValue","createMutators","runWithAuthScope","runWithQueryContext","setEnvironment","setSchema","MutationApplicationError","Error","constructor","details","message","name","createZeroSyncHostAdapter","encodeValue","mapAuthData","defaultMapAuthData","transaction","options","schema","permissions","environment","adminRoleMode","defaultAllowAdminRole","transactionOptions","mutators","modelName","model","Object","entries","models","mutatorName","keys","mutate","executor","args","context","authData","claims","asyncTaskEntries","modelMutators","enqueueTask","task","opts","push","barrier","can","createServerActions","mutationValidators","mutations","validateMutation","mutation","mutationID","numericMutationID","onZeroTransaction","toSQLiteExecutor","clientGroupID","clientID","upstreamSchema","error","asMutationApplicationError","defer","_zero_cleanupResults","transactionProvider","work","directDatabaseOptions","initializedLedgers","Set","ledgerTables","direct","createDatabase","freeze","resolveQuery","queries","query","validateQuery","ast","server","id","userID","exec","sql","params","metadata","queryAst","format","queryName","value","numeric","Number","isSafeInteger","TypeError","String","applicationError","stack"],"sources":["../../src/syncHost.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,gBAAA,QAAwB;
|
|
1
|
+
{"version":3,"names":["asQueryInternals","createBuilder","createPermissions","createZeroDirectServer","resolveServerQuery","createSQLiteDatabase","createZeroSQLiteTransaction","defaultLedgerTables","encodeSQLiteValue","createMutators","runWithAuthScope","runWithQueryContext","setEnvironment","setSchema","MutationApplicationError","Error","constructor","details","message","name","createZeroSyncHostAdapter","encodeValue","mapAuthData","defaultMapAuthData","transaction","options","schema","permissions","environment","adminRoleMode","defaultAllowAdminRole","transactionOptions","mutators","modelName","model","Object","entries","models","mutatorName","keys","mutate","executor","args","context","authData","claims","asyncTaskEntries","modelMutators","enqueueTask","task","opts","push","barrier","can","createServerActions","mutationValidators","mutations","validateMutation","mutation","mutationID","numericMutationID","onZeroTransaction","toSQLiteExecutor","clientGroupID","clientID","upstreamSchema","error","asMutationApplicationError","defer","_zero_cleanupResults","transactionProvider","work","directDatabaseOptions","initializedLedgers","Set","ledgerTables","direct","createDatabase","freeze","resolveQuery","queries","query","validateQuery","ast","server","id","userID","exec","sql","params","metadata","queryAst","format","queryName","value","numeric","Number","isSafeInteger","TypeError","String","applicationError","stack"],"sources":["../../src/syncHost.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { asQueryInternals } from "@rocicorp/zero/bindings";
|
|
2
|
+
import { createBuilder } from "@rocicorp/zero";
|
|
2
3
|
import { createPermissions } from "./createPermissions.native.js";
|
|
3
4
|
import { createZeroDirectServer, resolveServerQuery } from "./createZeroDirectServer.native.js";
|
|
4
5
|
import { createSQLiteDatabase, createZeroSQLiteTransaction, defaultLedgerTables, encodeSQLiteValue } from "./sqliteRuntime.native.js";
|
|
@@ -151,7 +152,7 @@ function createZeroSyncHostAdapter(param) {
|
|
|
151
152
|
transaction,
|
|
152
153
|
...options
|
|
153
154
|
} = param;
|
|
154
|
-
setSchema(options.schema);
|
|
155
|
+
setSchema(options.schema, createBuilder(options.schema));
|
|
155
156
|
setEnvironment("server");
|
|
156
157
|
var _options_defaultAllowAdminRole;
|
|
157
158
|
var permissions = createPermissions({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["asQueryInternals","createPermissions","createZeroDirectServer","resolveServerQuery","createSQLiteDatabase","createZeroSQLiteTransaction","defaultLedgerTables","encodeSQLiteValue","createMutators","runWithAuthScope","runWithQueryContext","setEnvironment","setSchema","_assert_this_initialized","self","ReferenceError","_call_super","_this","derived","args","_get_prototype_of","_possible_constructor_return","_is_native_reflect_construct","Reflect","construct","constructor","apply","_class_call_check","instance","Constructor","TypeError","_construct","Parent","Class","Parent2","args2","Class2","a","push","Function","bind","_set_prototype_of","prototype","arguments","_define_property","obj","key","value","Object","defineProperty","enumerable","configurable","writable","o","setPrototypeOf","getPrototypeOf","o2","__proto__","_inherits","subClass","superClass","create","_instanceof","left","right","Symbol","hasInstance","_is_native_function","fn","toString","call","indexOf","_type_of","p","p2","_wrap_native_super","_cache","Map","wrapNativeSuper","has","get","set","Wrapper","result","Boolean","valueOf","_","MutationApplicationError","Error1","MutationApplicationError2","details","message","length","name","Error","createZeroSyncHostAdapter","param","encodeValue","mapAuthData","defaultMapAuthData","transaction","options","schema","_options_defaultAllowAdminRole","permissions","environment","adminRoleMode","defaultAllowAdminRole","transactionOptions","mutators","_iteratorNormalCompletion","_didIteratorError","_iteratorError"],"sources":["../../src/syncHost.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,gBAAA,QAAwB;
|
|
1
|
+
{"version":3,"names":["asQueryInternals","createBuilder","createPermissions","createZeroDirectServer","resolveServerQuery","createSQLiteDatabase","createZeroSQLiteTransaction","defaultLedgerTables","encodeSQLiteValue","createMutators","runWithAuthScope","runWithQueryContext","setEnvironment","setSchema","_assert_this_initialized","self","ReferenceError","_call_super","_this","derived","args","_get_prototype_of","_possible_constructor_return","_is_native_reflect_construct","Reflect","construct","constructor","apply","_class_call_check","instance","Constructor","TypeError","_construct","Parent","Class","Parent2","args2","Class2","a","push","Function","bind","_set_prototype_of","prototype","arguments","_define_property","obj","key","value","Object","defineProperty","enumerable","configurable","writable","o","setPrototypeOf","getPrototypeOf","o2","__proto__","_inherits","subClass","superClass","create","_instanceof","left","right","Symbol","hasInstance","_is_native_function","fn","toString","call","indexOf","_type_of","p","p2","_wrap_native_super","_cache","Map","wrapNativeSuper","has","get","set","Wrapper","result","Boolean","valueOf","_","MutationApplicationError","Error1","MutationApplicationError2","details","message","length","name","Error","createZeroSyncHostAdapter","param","encodeValue","mapAuthData","defaultMapAuthData","transaction","options","schema","_options_defaultAllowAdminRole","permissions","environment","adminRoleMode","defaultAllowAdminRole","transactionOptions","mutators","_iteratorNormalCompletion","_didIteratorError","_iteratorError"],"sources":["../../src/syncHost.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { boolean, string, table } from "@rocicorp/zero";
|
|
1
|
+
import { boolean, createBuilder, string, table } from "@rocicorp/zero";
|
|
2
2
|
import { describe, expect, test } from "vitest";
|
|
3
|
-
import { getMutationsPermissions, setMutationsPermissions } from "./modelRegistry.mjs";
|
|
3
|
+
import { getAllMutationsPermissions, getMutationsPermissions, setMutationsPermissions } from "./modelRegistry.mjs";
|
|
4
4
|
import { registerQuery, getQueryName } from "./queryRegistry.mjs";
|
|
5
5
|
import { setEnvironment, setSchema } from "./state.mjs";
|
|
6
6
|
describe("usePermission _uid query identity", () => {
|
|
@@ -10,12 +10,13 @@ describe("usePermission _uid query identity", () => {
|
|
|
10
10
|
ownerId: string(),
|
|
11
11
|
active: boolean()
|
|
12
12
|
}).primaryKey("id");
|
|
13
|
-
|
|
13
|
+
const schema = {
|
|
14
14
|
tables: {
|
|
15
15
|
testEntity: testTable
|
|
16
16
|
},
|
|
17
17
|
version: 1
|
|
18
|
-
}
|
|
18
|
+
};
|
|
19
|
+
setSchema(schema, createBuilder(schema));
|
|
19
20
|
setEnvironment("client");
|
|
20
21
|
const fn = args => {
|
|
21
22
|
return {
|
|
@@ -71,6 +72,7 @@ describe("usePermission _uid query identity", () => {
|
|
|
71
72
|
const perm = getMutationsPermissions("testEntity");
|
|
72
73
|
expect(perm).toBeDefined();
|
|
73
74
|
expect(perm).toBe(mockWhere);
|
|
75
|
+
expect(getAllMutationsPermissions().get("testEntity")).toBe(mockWhere);
|
|
74
76
|
});
|
|
75
77
|
test("query name registration preserves permission namespace", () => {
|
|
76
78
|
const fn = () => {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["boolean","string","table","describe","expect","test","getMutationsPermissions","setMutationsPermissions","registerQuery","getQueryName","setEnvironment","setSchema","testTable","columns","id","ownerId","active","primaryKey","tables","testEntity","version","fn","args","objOrId","result1","_uid","result2","result3","toBe","args1","JSON","stringify","args2","args3","not","mockWhere","eb","auth","cmp","perm","toBeDefined","original","activeProjects","hotReloaded","first","byId","second","toBeUndefined"],"sources":["../../src/usePermission.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,OAAA,EAASC,MAAA,EAAQC,KAAA,QAAa;
|
|
1
|
+
{"version":3,"names":["boolean","createBuilder","string","table","describe","expect","test","getAllMutationsPermissions","getMutationsPermissions","setMutationsPermissions","registerQuery","getQueryName","setEnvironment","setSchema","testTable","columns","id","ownerId","active","primaryKey","schema","tables","testEntity","version","fn","args","objOrId","result1","_uid","result2","result3","toBe","args1","JSON","stringify","args2","args3","not","mockWhere","eb","auth","cmp","perm","toBeDefined","get","original","activeProjects","hotReloaded","first","byId","second","toBeUndefined"],"sources":["../../src/usePermission.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { boolean, string, table } from "@rocicorp/zero";
|
|
1
|
+
import { boolean, createBuilder, string, table } from "@rocicorp/zero";
|
|
2
2
|
import { describe, expect, test } from "vitest";
|
|
3
|
-
import { getMutationsPermissions, setMutationsPermissions } from "./modelRegistry.native.js";
|
|
3
|
+
import { getAllMutationsPermissions, getMutationsPermissions, setMutationsPermissions } from "./modelRegistry.native.js";
|
|
4
4
|
import { registerQuery, getQueryName } from "./queryRegistry.native.js";
|
|
5
5
|
import { setEnvironment, setSchema } from "./state.native.js";
|
|
6
6
|
describe("usePermission _uid query identity", function () {
|
|
@@ -10,12 +10,13 @@ describe("usePermission _uid query identity", function () {
|
|
|
10
10
|
ownerId: string(),
|
|
11
11
|
active: boolean()
|
|
12
12
|
}).primaryKey("id");
|
|
13
|
-
|
|
13
|
+
var schema = {
|
|
14
14
|
tables: {
|
|
15
15
|
testEntity: testTable
|
|
16
16
|
},
|
|
17
17
|
version: 1
|
|
18
|
-
}
|
|
18
|
+
};
|
|
19
|
+
setSchema(schema, createBuilder(schema));
|
|
19
20
|
setEnvironment("client");
|
|
20
21
|
var fn = function (args) {
|
|
21
22
|
return {
|
|
@@ -73,6 +74,7 @@ describe("usePermission _uid query identity", function () {
|
|
|
73
74
|
var perm = getMutationsPermissions("testEntity");
|
|
74
75
|
expect(perm).toBeDefined();
|
|
75
76
|
expect(perm).toBe(mockWhere);
|
|
77
|
+
expect(getAllMutationsPermissions().get("testEntity")).toBe(mockWhere);
|
|
76
78
|
});
|
|
77
79
|
test("query name registration preserves permission namespace", function () {
|
|
78
80
|
var fn = function () {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["boolean","string","table","describe","expect","test","getMutationsPermissions","setMutationsPermissions","registerQuery","getQueryName","setEnvironment","setSchema","testTable","columns","id","ownerId","active","primaryKey","tables","testEntity","version","fn","args","objOrId","result1","_uid","result2","result3","toBe","args1","JSON","stringify","args2","args3","not","mockWhere","eb","auth","cmp"],"sources":["../../src/usePermission.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,OAAA,EAASC,MAAA,EAAQC,KAAA,QAAa;
|
|
1
|
+
{"version":3,"names":["boolean","createBuilder","string","table","describe","expect","test","getAllMutationsPermissions","getMutationsPermissions","setMutationsPermissions","registerQuery","getQueryName","setEnvironment","setSchema","testTable","columns","id","ownerId","active","primaryKey","schema","tables","testEntity","version","fn","args","objOrId","result1","_uid","result2","result3","toBe","args1","JSON","stringify","args2","args3","not","mockWhere","eb","auth","cmp","perm","toBeDefined"],"sources":["../../src/usePermission.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,OAAA,EAASC,aAAA,EAAeC,MAAA,EAAQC,KAAA,QAAa;AACtD,SAASC,QAAA,EAAUC,MAAA,EAAQC,IAAA,QAAY;AAEvC,SAAAC,0BAAA,EAAAC,uBAAA,EAAAC,uBAAA;AAAA,SACEC,aAAA,EAAAC,YAAA;AAAA,SACAC,cAAA,EAAAC,SAAA;AAAAT,QACA;EAAAE,IAAA,CACK;IACP,IAAAQ,SAAS,GAAAX,KAAe,eAAAY,OAAoB;MAC5CC,EAAA,EAASd,MAAA;MAETe,OAAS,EAAAf,MAAA;MAUPgB,MAAK,EAAAlB,OAAA;IAEH,GAAAmB,UAAM,KAAY;IACP,IACPC,MAAI,GAAO;MACXC,MAAA;QACAC,UAAQ,EAAAR;MACT,CACA;MAEHS,OAAM;IACN;IACAV,SAAA,CAAAO,MAAe,EAAAnB,aAAQ,CAAAmB,MAAA;IAIvBR,cAAY,SAAmE;IAE7E,IAAAY,EAAA,GAAO,SAAAA,CAAEC,IAAS;MACpB;QAEAC,OAAM,EAAAD,IAAU,CAAAC;MAChB;IACA;IAGA,IAAAC,OAAO,GAAAH,EAAQ;MACfE,OAAO,WAAQ;MACfE,IAAA,EAAO;IACR;IAED,IAAKC,OAAA,GAAAL,EAAA;MAGHE,OAAM,WAAa;MACnBE,IAAM;IACN;IAEA,IAAAE,OAAO,GAAON,EAAA;MACdE,OAAO;IACP;IACDrB,MAAA,CAAAsB,OAAA,CAAAD,OAAA,EAAAK,IAAA;IAED1B,MAAK,CAAAwB,OAAA,CAAAH,OAAA,EAAAK,IAAA;IAEH1B,MAAM,CAAAyB,OAAQ,CAAAJ,OAAK,EAAAK,IAAA,CAAU,SAAE;EAC/B;EAEAzB,IAAA,0DAAwB;IACzB,IAAA0B,KAAA,GAAAC,IAAA,CAAAC,SAAA;MAEDR,OAAK;MAEHE,IAAM;IACN;IAEA,IAAAO,KAAM,GAAAF,IAAO,CAAAC,SAAA;MACbR,OAAO,EAAI,UAAE;MACbE,IAAA,EAAO;IACP;IACD,IAAAQ,KAAA,GAAAH,IAAA,CAAAC,SAAA;MAEDR,OAAK;MACHE,IAAM;IAAY;IAClBvB,MAAA,CAAA2B,KAAA,EAAcK,GAAA,CAAIN,IAAA,CAAAI,KAAA;IAElB9B,MAAA,CAAO2B,KAAA,EAAAK,GAAA,CAAAN,IAAe,CAACK,KAAE;IAC1B/B,MAAA,CAAA8B,KAAA,EAAAE,GAAA,CAAAN,IAAA,CAAAK,KAAA;EAED;EACE9B,IAAA,2CAA2C;IAAC,IAAA0B,KAAA,GAAAC,IAAA,CAAAC,SAAA;MAC5CR,OAAM,YAAc;MAA2BE,IAAA;IAE/C;IAEA,IAAAO,KAAO,GAAAF,IAAA,CAAAC,SAAa;MACrBR,OAAA;MAEDE,IAAK;IACH;IAA+BvB,MAAA,CAAA2B,KAAA,EAAAD,IAAA,CAAAI,KAAA;EAC/B;EAA+B7B,IAAC;IAChC,IAAAgC,SAAM,YAAAA,CAAcC,EAAA,EAASC,IAAA;MAAQ,OAAAD,EAAA,CAAAE,GAAA,aAAAD,IAAA,aAAAA,IAAA,uBAAAA,IAAA,CAAAxB,EAAA;IAErC;IACAP,uBAAsB,aAAW,EAAA6B,SAAA;IAEjC,IAAAI,IAAO,GAAAlC,uBAA2B,cAAc;IACjDH,MAAA,CAAAqC,IAAA,EAAAC,WAAA;IACFtC,MAAA,CAAAqC,IAAA,EAAAX,IAAA,CAAAO,SAAA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "on-zero",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.19",
|
|
4
4
|
"description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
}
|
|
100
100
|
},
|
|
101
101
|
"dependencies": {
|
|
102
|
-
"@take-out/helpers": "0.6.
|
|
102
|
+
"@take-out/helpers": "0.6.19",
|
|
103
103
|
"chokidar": "^4.0.3",
|
|
104
104
|
"citty": "^0.1.6",
|
|
105
105
|
"valibot": "^1.1.0"
|
package/src/asyncTasks.ts
CHANGED
|
@@ -161,10 +161,14 @@ test('connectionDataset mirrors connection state onto the body dataset', async (
|
|
|
161
161
|
expect(document.body.dataset.zeroReason).toBe('boom')
|
|
162
162
|
})
|
|
163
163
|
|
|
164
|
-
test('fatal error state
|
|
164
|
+
test('fatal error state stays terminal and reports the reason', async () => {
|
|
165
165
|
vi.useFakeTimers()
|
|
166
166
|
try {
|
|
167
167
|
const instance = await mount({}, 'conn-fatal')
|
|
168
|
+
const events: Array<{ type: string; message?: string }> = []
|
|
169
|
+
const off = client.zeroEvents.listen((event) => {
|
|
170
|
+
if (event) events.push(event)
|
|
171
|
+
})
|
|
168
172
|
|
|
169
173
|
await act(async () => {
|
|
170
174
|
instance.connection.state.set({
|
|
@@ -174,44 +178,16 @@ test('fatal error state resumes with backoff and resets attempts on connected',
|
|
|
174
178
|
await Promise.resolve()
|
|
175
179
|
})
|
|
176
180
|
|
|
177
|
-
// fatal (non-stale-poke) error: no immediate reconnect, one scheduled at 5s.
|
|
178
|
-
expect(instance.connection.connect).not.toHaveBeenCalled()
|
|
179
181
|
await act(async () => {
|
|
180
|
-
vi.advanceTimersByTime(
|
|
182
|
+
vi.advanceTimersByTime(60_000)
|
|
181
183
|
await Promise.resolve()
|
|
182
184
|
})
|
|
183
|
-
expect(instance.connection.connect).
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
instance.connection.state.set({ name: 'connecting' })
|
|
188
|
-
await Promise.resolve()
|
|
189
|
-
instance.connection.state.set({ name: 'error', reason: 'still broken' })
|
|
190
|
-
await Promise.resolve()
|
|
191
|
-
})
|
|
192
|
-
await act(async () => {
|
|
193
|
-
vi.advanceTimersByTime(5_000)
|
|
194
|
-
await Promise.resolve()
|
|
195
|
-
})
|
|
196
|
-
expect(instance.connection.connect).toHaveBeenCalledTimes(1)
|
|
197
|
-
await act(async () => {
|
|
198
|
-
vi.advanceTimersByTime(5_000)
|
|
199
|
-
await Promise.resolve()
|
|
200
|
-
})
|
|
201
|
-
expect(instance.connection.connect).toHaveBeenCalledTimes(2)
|
|
202
|
-
|
|
203
|
-
// a successful resume resets the backoff for the next incident.
|
|
204
|
-
await act(async () => {
|
|
205
|
-
instance.connection.state.set({ name: 'connected' })
|
|
206
|
-
await Promise.resolve()
|
|
207
|
-
instance.connection.state.set({ name: 'error', reason: 'new incident' })
|
|
208
|
-
await Promise.resolve()
|
|
209
|
-
})
|
|
210
|
-
await act(async () => {
|
|
211
|
-
vi.advanceTimersByTime(5_000)
|
|
212
|
-
await Promise.resolve()
|
|
185
|
+
expect(instance.connection.connect).not.toHaveBeenCalled()
|
|
186
|
+
expect(events).toContainEqual({
|
|
187
|
+
type: 'error',
|
|
188
|
+
message: 'Got open event but connect start time is undefined',
|
|
213
189
|
})
|
|
214
|
-
|
|
190
|
+
off()
|
|
215
191
|
} finally {
|
|
216
192
|
vi.useRealTimers()
|
|
217
193
|
}
|
package/src/createZeroClient.tsx
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createBuilder,
|
|
3
|
+
defineQueries,
|
|
4
|
+
defineQuery,
|
|
5
|
+
Zero as ZeroClient,
|
|
6
|
+
} from '@rocicorp/zero'
|
|
2
7
|
import {
|
|
3
8
|
useConnectionState,
|
|
4
9
|
useZero,
|
|
@@ -136,7 +141,7 @@ export function createZeroClientInternal<
|
|
|
136
141
|
type ZeroInstance = Zero<Schema, ZeroMutators>
|
|
137
142
|
type TableName = keyof Schema['tables'] & string
|
|
138
143
|
|
|
139
|
-
setSchema(schema)
|
|
144
|
+
setSchema(schema, createBuilder(schema))
|
|
140
145
|
|
|
141
146
|
// only set environment to 'client' if server hasn't already claimed it
|
|
142
147
|
// (during SSR, createZeroServer runs first and sets 'server')
|
|
@@ -844,22 +849,6 @@ export function createZeroClientInternal<
|
|
|
844
849
|
// transition, so a stuck error state doesn't retry-storm.
|
|
845
850
|
const staleReconnectRef = useRef<string | null>(null)
|
|
846
851
|
const needsAuthRef = useRef(false)
|
|
847
|
-
// fatal 'error' states pause zero permanently: upstream documents that the
|
|
848
|
-
// host application must call connect() to resume. a transient internal
|
|
849
|
-
// client error (e.g. zero 1.7's late-socket-open race after a /pull 500)
|
|
850
|
-
// otherwise kills every subsequent mutation until page reload. resume with
|
|
851
|
-
// bounded exponential backoff; attempts reset on the next 'connected'.
|
|
852
|
-
const fatalResumeRef = useRef<{
|
|
853
|
-
attempts: number
|
|
854
|
-
timer: ReturnType<typeof setTimeout> | null
|
|
855
|
-
}>({ attempts: 0, timer: null })
|
|
856
|
-
|
|
857
|
-
useEffect(() => {
|
|
858
|
-
const resume = fatalResumeRef.current
|
|
859
|
-
return () => {
|
|
860
|
-
if (resume.timer) clearTimeout(resume.timer)
|
|
861
|
-
}
|
|
862
|
-
}, [])
|
|
863
852
|
|
|
864
853
|
useEffect(() => {
|
|
865
854
|
const name = state.name
|
|
@@ -888,28 +877,6 @@ export function createZeroClientInternal<
|
|
|
888
877
|
}
|
|
889
878
|
if (name !== 'error') staleReconnectRef.current = null
|
|
890
879
|
|
|
891
|
-
// fatal error: schedule one resume per error entry, backing off per
|
|
892
|
-
// consecutive failure (5s, 10s, 20s, 40s, capped 60s) so a persistent
|
|
893
|
-
// server failure cannot retry-storm, while a one-off client race
|
|
894
|
-
// recovers without a reload. 'closed' stays terminal.
|
|
895
|
-
const fatalResume = fatalResumeRef.current
|
|
896
|
-
if (name === 'error') {
|
|
897
|
-
if (!fatalResume.timer) {
|
|
898
|
-
const delay = Math.min(5_000 * 2 ** fatalResume.attempts, 60_000)
|
|
899
|
-
fatalResume.timer = setTimeout(() => {
|
|
900
|
-
fatalResume.timer = null
|
|
901
|
-
fatalResume.attempts += 1
|
|
902
|
-
void Promise.resolve(zeroInstance.connection?.connect?.()).catch(() => {})
|
|
903
|
-
}, delay)
|
|
904
|
-
}
|
|
905
|
-
} else {
|
|
906
|
-
if (fatalResume.timer) {
|
|
907
|
-
clearTimeout(fatalResume.timer)
|
|
908
|
-
fatalResume.timer = null
|
|
909
|
-
}
|
|
910
|
-
if (name === 'connected') fatalResume.attempts = 0
|
|
911
|
-
}
|
|
912
|
-
|
|
913
880
|
// needs-auth: the token expired and zero won't auto-resume unless the
|
|
914
881
|
// auth string changes. refresh it and reconnect in place, once.
|
|
915
882
|
if (name === 'needs-auth') {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mustGetQuery } from '@rocicorp/zero'
|
|
1
|
+
import { createBuilder, mustGetQuery } from '@rocicorp/zero'
|
|
2
2
|
|
|
3
3
|
import { runAsyncTaskEntries } from './asyncTasks'
|
|
4
4
|
import { createPermissions } from './createPermissions'
|
|
@@ -229,7 +229,7 @@ export function createZeroDirectServerRuntime<
|
|
|
229
229
|
permissions: ReturnType<typeof createPermissions<Schema>>
|
|
230
230
|
server: ZeroDirectServer<Schema, Models>
|
|
231
231
|
} {
|
|
232
|
-
setSchema(schema)
|
|
232
|
+
setSchema(schema, createBuilder(schema))
|
|
233
233
|
setEnvironment('server')
|
|
234
234
|
|
|
235
235
|
const permissions = createPermissions<Schema>({
|
|
@@ -97,6 +97,7 @@ describe('createZeroServer mutation recovery', () => {
|
|
|
97
97
|
test('discards async tasks from a rolled-back PostgreSQL mutation', async () => {
|
|
98
98
|
const pg = new FakePgClient()
|
|
99
99
|
let effectRuns = 0
|
|
100
|
+
const consoleWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
100
101
|
const zeroServer = createZeroServer({
|
|
101
102
|
schema: zeroHttpFixtureSchema,
|
|
102
103
|
models: {
|
|
@@ -127,6 +128,12 @@ describe('createZeroServer mutation recovery', () => {
|
|
|
127
128
|
})
|
|
128
129
|
expect(result.asyncTasks).toEqual([])
|
|
129
130
|
expect(effectRuns).toBe(0)
|
|
131
|
+
expect(consoleWarn).toHaveBeenCalledWith(
|
|
132
|
+
'PushProcessor',
|
|
133
|
+
expect.stringContaining('Error processing mutation'),
|
|
134
|
+
expect.stringContaining('rejected'),
|
|
135
|
+
)
|
|
136
|
+
consoleWarn.mockRestore()
|
|
130
137
|
})
|
|
131
138
|
|
|
132
139
|
test('awaits barrier tasks before resolving the push response', async () => {
|
|
@@ -321,6 +328,7 @@ describe('createZeroServer mutation recovery', () => {
|
|
|
321
328
|
|
|
322
329
|
test('persists alreadyProcessed duplicate results for zero-cache recovery rows', async () => {
|
|
323
330
|
const pg = new FakePgClient()
|
|
331
|
+
const consoleWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
324
332
|
const zeroServer = createZeroServer({
|
|
325
333
|
schema: zeroHttpFixtureSchema,
|
|
326
334
|
models: {
|
|
@@ -362,6 +370,8 @@ describe('createZeroServer mutation recovery', () => {
|
|
|
362
370
|
}),
|
|
363
371
|
],
|
|
364
372
|
])
|
|
373
|
+
expect(consoleWarn).not.toHaveBeenCalled()
|
|
374
|
+
consoleWarn.mockRestore()
|
|
365
375
|
})
|
|
366
376
|
|
|
367
377
|
test('persists only alreadyProcessed results in a mixed recovery push', async () => {
|
|
@@ -190,7 +190,20 @@ function withTransactionLifecycle(
|
|
|
190
190
|
const value = await database.transaction(async (tx, hooks) => {
|
|
191
191
|
lifecycle.beginAttempt()
|
|
192
192
|
try {
|
|
193
|
-
const result = await callback(tx,
|
|
193
|
+
const result = await callback(tx, {
|
|
194
|
+
...hooks,
|
|
195
|
+
async updateClientMutationID() {
|
|
196
|
+
const result = await hooks.updateClientMutationID()
|
|
197
|
+
if (input && input.mutationID < result.lastMutationID) {
|
|
198
|
+
throw new ExpectedDuplicateMutation(
|
|
199
|
+
input.clientID,
|
|
200
|
+
input.mutationID,
|
|
201
|
+
result.lastMutationID,
|
|
202
|
+
)
|
|
203
|
+
}
|
|
204
|
+
return result
|
|
205
|
+
},
|
|
206
|
+
})
|
|
194
207
|
lifecycle.completeAttempt()
|
|
195
208
|
return result
|
|
196
209
|
} catch (error) {
|
|
@@ -202,12 +215,36 @@ function withTransactionLifecycle(
|
|
|
202
215
|
return value
|
|
203
216
|
} catch (error) {
|
|
204
217
|
lifecycle.rollbackTransaction()
|
|
218
|
+
if (error instanceof ExpectedDuplicateMutation) {
|
|
219
|
+
return {
|
|
220
|
+
id: {
|
|
221
|
+
clientID: error.clientID,
|
|
222
|
+
id: error.mutationID,
|
|
223
|
+
},
|
|
224
|
+
result: {
|
|
225
|
+
error: 'alreadyProcessed',
|
|
226
|
+
details: error.message,
|
|
227
|
+
},
|
|
228
|
+
} as never
|
|
229
|
+
}
|
|
205
230
|
throw error
|
|
206
231
|
}
|
|
207
232
|
},
|
|
208
233
|
}
|
|
209
234
|
}
|
|
210
235
|
|
|
236
|
+
class ExpectedDuplicateMutation extends Error {
|
|
237
|
+
constructor(
|
|
238
|
+
readonly clientID: string,
|
|
239
|
+
readonly mutationID: number,
|
|
240
|
+
expectedMutationID: number | bigint,
|
|
241
|
+
) {
|
|
242
|
+
super(
|
|
243
|
+
`Ignoring mutation from ${clientID} with ID ${mutationID} as it was already processed. Expected: ${expectedMutationID}`,
|
|
244
|
+
)
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
211
248
|
async function parseAlreadyProcessed(
|
|
212
249
|
request: Request,
|
|
213
250
|
response: unknown,
|