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
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: () => from[key],
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
23
|
+
value: true
|
|
24
|
+
}), mod);
|
|
25
|
+
var syncHost_exports = {};
|
|
26
|
+
__export(syncHost_exports, {
|
|
27
|
+
MutationApplicationError: () => MutationApplicationError,
|
|
28
|
+
createZeroSyncHostAdapter: () => createZeroSyncHostAdapter
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(syncHost_exports);
|
|
31
|
+
var import_bindings = require("@rocicorp/zero/bindings");
|
|
32
|
+
var import_createPermissions = require("./createPermissions.native.js");
|
|
33
|
+
var import_createZeroServerCore = require("./createZeroServerCore.native.js");
|
|
34
|
+
var import_createZeroSQLiteServer = require("./createZeroSQLiteServer.native.js");
|
|
35
|
+
var import_createMutators = require("./helpers/createMutators.native.js");
|
|
36
|
+
var import_mutatorContext = require("./helpers/mutatorContext.native.js");
|
|
37
|
+
var import_queryContext = require("./helpers/queryContext.native.js");
|
|
38
|
+
var import_state = require("./state.native.js");
|
|
39
|
+
function _assert_this_initialized(self) {
|
|
40
|
+
if (self === void 0) {
|
|
41
|
+
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
42
|
+
}
|
|
43
|
+
return self;
|
|
44
|
+
}
|
|
45
|
+
function _call_super(_this, derived, args) {
|
|
46
|
+
derived = _get_prototype_of(derived);
|
|
47
|
+
return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
|
|
48
|
+
}
|
|
49
|
+
function _class_call_check(instance, Constructor) {
|
|
50
|
+
if (!(instance instanceof Constructor)) {
|
|
51
|
+
throw new TypeError("Cannot call a class as a function");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function _construct(Parent, args, Class) {
|
|
55
|
+
if (_is_native_reflect_construct()) {
|
|
56
|
+
_construct = Reflect.construct;
|
|
57
|
+
} else {
|
|
58
|
+
_construct = function construct(Parent2, args2, Class2) {
|
|
59
|
+
var a = [null];
|
|
60
|
+
a.push.apply(a, args2);
|
|
61
|
+
var Constructor = Function.bind.apply(Parent2, a);
|
|
62
|
+
var instance = new Constructor();
|
|
63
|
+
if (Class2) _set_prototype_of(instance, Class2.prototype);
|
|
64
|
+
return instance;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return _construct.apply(null, arguments);
|
|
68
|
+
}
|
|
69
|
+
function _define_property(obj, key, value) {
|
|
70
|
+
if (key in obj) {
|
|
71
|
+
Object.defineProperty(obj, key, {
|
|
72
|
+
value,
|
|
73
|
+
enumerable: true,
|
|
74
|
+
configurable: true,
|
|
75
|
+
writable: true
|
|
76
|
+
});
|
|
77
|
+
} else {
|
|
78
|
+
obj[key] = value;
|
|
79
|
+
}
|
|
80
|
+
return obj;
|
|
81
|
+
}
|
|
82
|
+
function _get_prototype_of(o) {
|
|
83
|
+
_get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o2) {
|
|
84
|
+
return o2.__proto__ || Object.getPrototypeOf(o2);
|
|
85
|
+
};
|
|
86
|
+
return _get_prototype_of(o);
|
|
87
|
+
}
|
|
88
|
+
function _inherits(subClass, superClass) {
|
|
89
|
+
if (typeof superClass !== "function" && superClass !== null) {
|
|
90
|
+
throw new TypeError("Super expression must either be null or a function");
|
|
91
|
+
}
|
|
92
|
+
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
93
|
+
constructor: {
|
|
94
|
+
value: subClass,
|
|
95
|
+
writable: true,
|
|
96
|
+
configurable: true
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
if (superClass) _set_prototype_of(subClass, superClass);
|
|
100
|
+
}
|
|
101
|
+
function _instanceof(left, right) {
|
|
102
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
103
|
+
return !!right[Symbol.hasInstance](left);
|
|
104
|
+
} else {
|
|
105
|
+
return left instanceof right;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function _is_native_function(fn) {
|
|
109
|
+
return Function.toString.call(fn).indexOf("[native code]") !== -1;
|
|
110
|
+
}
|
|
111
|
+
function _possible_constructor_return(self, call) {
|
|
112
|
+
if (call && (_type_of(call) === "object" || typeof call === "function")) {
|
|
113
|
+
return call;
|
|
114
|
+
}
|
|
115
|
+
return _assert_this_initialized(self);
|
|
116
|
+
}
|
|
117
|
+
function _set_prototype_of(o, p) {
|
|
118
|
+
_set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o2, p2) {
|
|
119
|
+
o2.__proto__ = p2;
|
|
120
|
+
return o2;
|
|
121
|
+
};
|
|
122
|
+
return _set_prototype_of(o, p);
|
|
123
|
+
}
|
|
124
|
+
function _type_of(obj) {
|
|
125
|
+
"@swc/helpers - typeof";
|
|
126
|
+
|
|
127
|
+
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
128
|
+
}
|
|
129
|
+
function _wrap_native_super(Class) {
|
|
130
|
+
var _cache = typeof Map === "function" ? /* @__PURE__ */new Map() : void 0;
|
|
131
|
+
_wrap_native_super = function wrapNativeSuper(Class2) {
|
|
132
|
+
if (Class2 === null || !_is_native_function(Class2)) return Class2;
|
|
133
|
+
if (typeof Class2 !== "function") {
|
|
134
|
+
throw new TypeError("Super expression must either be null or a function");
|
|
135
|
+
}
|
|
136
|
+
if (typeof _cache !== "undefined") {
|
|
137
|
+
if (_cache.has(Class2)) return _cache.get(Class2);
|
|
138
|
+
_cache.set(Class2, Wrapper);
|
|
139
|
+
}
|
|
140
|
+
function Wrapper() {
|
|
141
|
+
return _construct(Class2, arguments, _get_prototype_of(this).constructor);
|
|
142
|
+
}
|
|
143
|
+
Wrapper.prototype = Object.create(Class2.prototype, {
|
|
144
|
+
constructor: {
|
|
145
|
+
value: Wrapper,
|
|
146
|
+
enumerable: false,
|
|
147
|
+
writable: true,
|
|
148
|
+
configurable: true
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
return _set_prototype_of(Wrapper, Class2);
|
|
152
|
+
};
|
|
153
|
+
return _wrap_native_super(Class);
|
|
154
|
+
}
|
|
155
|
+
function _is_native_reflect_construct() {
|
|
156
|
+
try {
|
|
157
|
+
var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
158
|
+
} catch (_) {}
|
|
159
|
+
return (_is_native_reflect_construct = function () {
|
|
160
|
+
return !!result;
|
|
161
|
+
})();
|
|
162
|
+
}
|
|
163
|
+
var MutationApplicationError = /* @__PURE__ */function (Error1) {
|
|
164
|
+
"use strict";
|
|
165
|
+
|
|
166
|
+
_inherits(MutationApplicationError2, Error1);
|
|
167
|
+
function MutationApplicationError2(details) {
|
|
168
|
+
var message = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : details;
|
|
169
|
+
_class_call_check(this, MutationApplicationError2);
|
|
170
|
+
var _this;
|
|
171
|
+
_this = _call_super(this, MutationApplicationError2, [message]), _define_property(_this, "details", void 0), _this.details = details;
|
|
172
|
+
_this.name = "MutationApplicationError";
|
|
173
|
+
return _this;
|
|
174
|
+
}
|
|
175
|
+
return MutationApplicationError2;
|
|
176
|
+
}(_wrap_native_super(Error));
|
|
177
|
+
function createZeroSyncHostAdapter(param) {
|
|
178
|
+
var {
|
|
179
|
+
encodeValue,
|
|
180
|
+
mapAuthData = defaultMapAuthData,
|
|
181
|
+
transaction,
|
|
182
|
+
...options
|
|
183
|
+
} = param;
|
|
184
|
+
(0, import_state.setSchema)(options.schema);
|
|
185
|
+
(0, import_state.setEnvironment)("server");
|
|
186
|
+
var _options_defaultAllowAdminRole;
|
|
187
|
+
var permissions = (0, import_createPermissions.createPermissions)({
|
|
188
|
+
environment: "server",
|
|
189
|
+
schema: options.schema,
|
|
190
|
+
adminRoleMode: (_options_defaultAllowAdminRole = options.defaultAllowAdminRole) !== null && _options_defaultAllowAdminRole !== void 0 ? _options_defaultAllowAdminRole : "all"
|
|
191
|
+
});
|
|
192
|
+
var transactionOptions = {
|
|
193
|
+
encodeValue,
|
|
194
|
+
schema: options.schema
|
|
195
|
+
};
|
|
196
|
+
var mutators = {};
|
|
197
|
+
var _iteratorNormalCompletion = true,
|
|
198
|
+
_didIteratorError = false,
|
|
199
|
+
_iteratorError = void 0;
|
|
200
|
+
try {
|
|
201
|
+
var _loop = function () {
|
|
202
|
+
var [modelName, model] = _step.value;
|
|
203
|
+
var _model_mutate;
|
|
204
|
+
var _iteratorNormalCompletion2 = true,
|
|
205
|
+
_didIteratorError2 = false,
|
|
206
|
+
_iteratorError2 = void 0;
|
|
207
|
+
try {
|
|
208
|
+
var _loop2 = function () {
|
|
209
|
+
var mutatorName = _step1.value;
|
|
210
|
+
mutators[`${modelName}|${mutatorName}`] = async function (executor, args, context) {
|
|
211
|
+
var _modelMutators_modelName;
|
|
212
|
+
var authData = mapAuthData(context.claims);
|
|
213
|
+
var asyncTasks = [];
|
|
214
|
+
var modelMutators = (0, import_createMutators.createMutators)({
|
|
215
|
+
asyncTasks,
|
|
216
|
+
authData,
|
|
217
|
+
can: permissions.can,
|
|
218
|
+
createServerActions: options.createServerActions,
|
|
219
|
+
environment: "server",
|
|
220
|
+
models: options.models,
|
|
221
|
+
mutationValidators: options.mutations,
|
|
222
|
+
validateMutation: options.validateMutation
|
|
223
|
+
});
|
|
224
|
+
var mutation = (_modelMutators_modelName = modelMutators[modelName]) === null || _modelMutators_modelName === void 0 ? void 0 : _modelMutators_modelName[mutatorName];
|
|
225
|
+
if (!mutation) throw new Error(`unknown on-zero mutator: ${modelName}|${mutatorName}`);
|
|
226
|
+
var mutationID = numericMutationID(context.mutationID);
|
|
227
|
+
var _context_clientID;
|
|
228
|
+
var onZeroTransaction = (0, import_createZeroSQLiteServer.createZeroSQLiteTransaction)(transactionOptions, toSQLiteExecutor(executor), {
|
|
229
|
+
clientGroupID: "orez-sync-host",
|
|
230
|
+
clientID: (_context_clientID = context.clientID) !== null && _context_clientID !== void 0 ? _context_clientID : "",
|
|
231
|
+
mutationID,
|
|
232
|
+
upstreamSchema: "orez-sync-host"
|
|
233
|
+
});
|
|
234
|
+
try {
|
|
235
|
+
await mutation(onZeroTransaction, args);
|
|
236
|
+
} catch (error) {
|
|
237
|
+
throw asMutationApplicationError(error);
|
|
238
|
+
}
|
|
239
|
+
var _iteratorNormalCompletion3 = true,
|
|
240
|
+
_didIteratorError3 = false,
|
|
241
|
+
_iteratorError3 = void 0;
|
|
242
|
+
try {
|
|
243
|
+
var _loop3 = function () {
|
|
244
|
+
var task = _step2.value;
|
|
245
|
+
context.defer(function () {
|
|
246
|
+
return (0, import_mutatorContext.runWithAuthScope)(authData, task);
|
|
247
|
+
});
|
|
248
|
+
};
|
|
249
|
+
for (var _iterator3 = asyncTasks[Symbol.iterator](), _step2; !(_iteratorNormalCompletion3 = (_step2 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) _loop3();
|
|
250
|
+
} catch (err) {
|
|
251
|
+
_didIteratorError3 = true;
|
|
252
|
+
_iteratorError3 = err;
|
|
253
|
+
} finally {
|
|
254
|
+
try {
|
|
255
|
+
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
256
|
+
_iterator3.return();
|
|
257
|
+
}
|
|
258
|
+
} finally {
|
|
259
|
+
if (_didIteratorError3) {
|
|
260
|
+
throw _iteratorError3;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
};
|
|
266
|
+
for (var _iterator2 = Object.keys((_model_mutate = model.mutate) !== null && _model_mutate !== void 0 ? _model_mutate : {})[Symbol.iterator](), _step1; !(_iteratorNormalCompletion2 = (_step1 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) _loop2();
|
|
267
|
+
} catch (err) {
|
|
268
|
+
_didIteratorError2 = true;
|
|
269
|
+
_iteratorError2 = err;
|
|
270
|
+
} finally {
|
|
271
|
+
try {
|
|
272
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
273
|
+
_iterator2.return();
|
|
274
|
+
}
|
|
275
|
+
} finally {
|
|
276
|
+
if (_didIteratorError2) {
|
|
277
|
+
throw _iteratorError2;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
for (var _iterator = Object.entries(options.models)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop();
|
|
283
|
+
} catch (err) {
|
|
284
|
+
_didIteratorError = true;
|
|
285
|
+
_iteratorError = err;
|
|
286
|
+
} finally {
|
|
287
|
+
try {
|
|
288
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
289
|
+
_iterator.return();
|
|
290
|
+
}
|
|
291
|
+
} finally {
|
|
292
|
+
if (_didIteratorError) {
|
|
293
|
+
throw _iteratorError;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
mutators._zero_cleanupResults = async function () {};
|
|
298
|
+
var direct = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
|
|
299
|
+
...options,
|
|
300
|
+
encodeValue,
|
|
301
|
+
transactionProvider: function (work) {
|
|
302
|
+
return transaction(function (executor) {
|
|
303
|
+
return work(toSQLiteExecutor(executor));
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
return {
|
|
308
|
+
mutators: Object.freeze(mutators),
|
|
309
|
+
async resolveQuery(name, args, claims) {
|
|
310
|
+
if (!options.queries) {
|
|
311
|
+
throw new Error("No queries registered with createZeroSyncHostAdapter. Pass the syncedQueries registry via the queries option.");
|
|
312
|
+
}
|
|
313
|
+
var authData = mapAuthData(claims);
|
|
314
|
+
var query = await (0, import_queryContext.runWithQueryContext)({
|
|
315
|
+
authData
|
|
316
|
+
}, function () {
|
|
317
|
+
return (0, import_createZeroServerCore.resolveServerQuery)({
|
|
318
|
+
authData,
|
|
319
|
+
args: args[0],
|
|
320
|
+
name,
|
|
321
|
+
permissions,
|
|
322
|
+
queries: options.queries,
|
|
323
|
+
validateQuery: options.validateQuery
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
return (0, import_bindings.asQueryInternals)(query).ast;
|
|
327
|
+
},
|
|
328
|
+
server: {
|
|
329
|
+
mutate: direct.mutate,
|
|
330
|
+
query: direct.query,
|
|
331
|
+
transaction: direct.transaction
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
function defaultMapAuthData(claims) {
|
|
336
|
+
return {
|
|
337
|
+
...claims,
|
|
338
|
+
id: typeof claims.id === "string" ? claims.id : claims.userID
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
function toSQLiteExecutor(executor) {
|
|
342
|
+
return {
|
|
343
|
+
exec(sql, params) {
|
|
344
|
+
return executor.exec(sql, params);
|
|
345
|
+
},
|
|
346
|
+
query(sql, params) {
|
|
347
|
+
return executor.query(sql, params);
|
|
348
|
+
},
|
|
349
|
+
queryAst(ast, format, queryName) {
|
|
350
|
+
return executor.queryAst(ast, format, queryName);
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
function numericMutationID(value) {
|
|
355
|
+
if (value === void 0) return 0;
|
|
356
|
+
var numeric = typeof value === "number" ? value : Number(value);
|
|
357
|
+
if (!Number.isSafeInteger(numeric) || numeric < 0) {
|
|
358
|
+
throw new TypeError(`invalid Zero mutation ID: ${value}`);
|
|
359
|
+
}
|
|
360
|
+
return numeric;
|
|
361
|
+
}
|
|
362
|
+
function asMutationApplicationError(error) {
|
|
363
|
+
if ((typeof error === "undefined" ? "undefined" : _type_of(error)) === "object" && error !== null && error.name === "MutationApplicationError" && typeof error.details === "string") {
|
|
364
|
+
return error;
|
|
365
|
+
}
|
|
366
|
+
var message = _instanceof(error, Error) ? error.message : String(error);
|
|
367
|
+
var applicationError = new MutationApplicationError(message);
|
|
368
|
+
if (_instanceof(error, Error) && error.stack) applicationError.stack = error.stack;
|
|
369
|
+
return applicationError;
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=syncHost.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","syncHost_exports","__export","MutationApplicationError","createZeroSyncHostAdapter","module","exports","import_bindings","require","import_createPermissions","import_createZeroServerCore","import_createZeroSQLiteServer","import_createMutators","import_mutatorContext","import_queryContext","import_state","_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","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","_","Error1","MutationApplicationError2","details","message","length","name"],"sources":["../../src/syncHost.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
10
|
+
get: () => from[key],
|
|
11
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return to;
|
|
15
|
+
};
|
|
16
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
18
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
19
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
20
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
22
|
+
value: mod,
|
|
23
|
+
enumerable: true
|
|
24
|
+
}) : target, mod));
|
|
25
|
+
var import_node_sqlite = require("node:sqlite");
|
|
26
|
+
var import_zero = require("@rocicorp/zero");
|
|
27
|
+
var v = __toESM(require("valibot"), 1);
|
|
28
|
+
var import_vitest = require("vitest");
|
|
29
|
+
var import_mutatorContext = require("./helpers/mutatorContext.cjs");
|
|
30
|
+
var import_fixtureSchema = require("./httpPull/fixtureSchema.cjs");
|
|
31
|
+
var import_syncHost = require("./syncHost.cjs");
|
|
32
|
+
var import_zql = require("./zql.cjs");
|
|
33
|
+
const queries = (0, import_zero.defineQueries)({
|
|
34
|
+
project: {
|
|
35
|
+
byOwner: (0, import_zero.defineQuery)(v.object({
|
|
36
|
+
ownerId: v.string()
|
|
37
|
+
}), ({
|
|
38
|
+
args
|
|
39
|
+
}) => import_zql.zql.project.where("ownerId", args.ownerId))
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
(0, import_vitest.describe)("createZeroSyncHostAdapter", () => {
|
|
43
|
+
let db;
|
|
44
|
+
let executor;
|
|
45
|
+
let transaction;
|
|
46
|
+
let lastQueryFormat;
|
|
47
|
+
(0, import_vitest.beforeEach)(() => {
|
|
48
|
+
db = new import_node_sqlite.DatabaseSync(":memory:");
|
|
49
|
+
db.exec("CREATE TABLE project (id TEXT PRIMARY KEY, ownerId TEXT NOT NULL, name TEXT NOT NULL)");
|
|
50
|
+
executor = {
|
|
51
|
+
exec(sql, params = []) {
|
|
52
|
+
db.prepare(sql).run(...params);
|
|
53
|
+
},
|
|
54
|
+
query(sql, params = []) {
|
|
55
|
+
return db.prepare(sql).all(...params);
|
|
56
|
+
},
|
|
57
|
+
queryAst(_ast, format) {
|
|
58
|
+
lastQueryFormat = format;
|
|
59
|
+
const rows = db.prepare("SELECT * FROM project ORDER BY id").all();
|
|
60
|
+
return format.singular ? rows[0] : rows;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
transaction = async work => {
|
|
64
|
+
const effects = [];
|
|
65
|
+
db.exec("BEGIN");
|
|
66
|
+
try {
|
|
67
|
+
const value = await work(executor, {
|
|
68
|
+
defer(effect) {
|
|
69
|
+
effects.push(effect);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
db.exec("COMMIT");
|
|
73
|
+
for (const effect of effects) await effect();
|
|
74
|
+
return value;
|
|
75
|
+
} catch (error) {
|
|
76
|
+
db.exec("ROLLBACK");
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
(0, import_vitest.afterEach)(() => {
|
|
82
|
+
db.close();
|
|
83
|
+
});
|
|
84
|
+
(0, import_vitest.test)("adapts pipe-named mutators, auth, validation, and deferred effects", async () => {
|
|
85
|
+
let effectAuthID;
|
|
86
|
+
let validatedAuthID;
|
|
87
|
+
const adapter = (0, import_syncHost.createZeroSyncHostAdapter)({
|
|
88
|
+
schema: import_fixtureSchema.zeroHttpFixtureSchema,
|
|
89
|
+
models: {
|
|
90
|
+
project: {
|
|
91
|
+
mutate: {
|
|
92
|
+
create: async ({
|
|
93
|
+
authData,
|
|
94
|
+
server,
|
|
95
|
+
tx
|
|
96
|
+
}, value) => {
|
|
97
|
+
(0, import_vitest.expect)(authData?.id).toBe("u1");
|
|
98
|
+
await tx.mutate.project.insert(value);
|
|
99
|
+
server?.asyncTasks.push(async () => {
|
|
100
|
+
effectAuthID = (0, import_mutatorContext.getScopedAuthData)()?.id;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
createServerActions: () => ({}),
|
|
107
|
+
queries,
|
|
108
|
+
transaction,
|
|
109
|
+
validateMutation({
|
|
110
|
+
authData
|
|
111
|
+
}) {
|
|
112
|
+
validatedAuthID = authData?.id;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
(0, import_vitest.expect)(Object.keys(adapter.mutators)).toEqual(["project|create", "_zero_cleanupResults"]);
|
|
116
|
+
await transaction((tx, context) => adapter.mutators["project|create"](tx, {
|
|
117
|
+
id: "p1",
|
|
118
|
+
ownerId: "u1",
|
|
119
|
+
name: "first"
|
|
120
|
+
}, mutationContext(context)));
|
|
121
|
+
(0, import_vitest.expect)(db.prepare("SELECT * FROM project").all()).toEqual([{
|
|
122
|
+
id: "p1",
|
|
123
|
+
ownerId: "u1",
|
|
124
|
+
name: "first"
|
|
125
|
+
}]);
|
|
126
|
+
(0, import_vitest.expect)(validatedAuthID).toBe("u1");
|
|
127
|
+
(0, import_vitest.expect)(effectAuthID).toBe("u1");
|
|
128
|
+
});
|
|
129
|
+
(0, import_vitest.test)("returns a structural application error and drops rolled-back effects", async () => {
|
|
130
|
+
let effectRuns = 0;
|
|
131
|
+
const adapter = (0, import_syncHost.createZeroSyncHostAdapter)({
|
|
132
|
+
schema: import_fixtureSchema.zeroHttpFixtureSchema,
|
|
133
|
+
models: {
|
|
134
|
+
project: {
|
|
135
|
+
mutate: {
|
|
136
|
+
reject: async ({
|
|
137
|
+
server,
|
|
138
|
+
tx
|
|
139
|
+
}, value) => {
|
|
140
|
+
await tx.mutate.project.insert(value);
|
|
141
|
+
server?.asyncTasks.push(async () => {
|
|
142
|
+
effectRuns++;
|
|
143
|
+
});
|
|
144
|
+
throw new Error("denied");
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
createServerActions: () => ({}),
|
|
150
|
+
transaction
|
|
151
|
+
});
|
|
152
|
+
const error = await transaction((tx, context) => adapter.mutators["project|reject"](tx, {
|
|
153
|
+
id: "p1",
|
|
154
|
+
ownerId: "u1",
|
|
155
|
+
name: "must roll back"
|
|
156
|
+
}, mutationContext(context))).catch(caught => caught);
|
|
157
|
+
(0, import_vitest.expect)(error).toMatchObject({
|
|
158
|
+
name: "MutationApplicationError",
|
|
159
|
+
message: "denied",
|
|
160
|
+
details: "denied"
|
|
161
|
+
});
|
|
162
|
+
(0, import_vitest.expect)(db.prepare("SELECT * FROM project").all()).toEqual([]);
|
|
163
|
+
(0, import_vitest.expect)(effectRuns).toBe(0);
|
|
164
|
+
});
|
|
165
|
+
(0, import_vitest.test)("uses the host queryAst compiler surface for direct server queries", async () => {
|
|
166
|
+
db.prepare("INSERT INTO project (id, ownerId, name) VALUES (?, ?, ?)").run("p1", "u1", "first");
|
|
167
|
+
const adapter = (0, import_syncHost.createZeroSyncHostAdapter)({
|
|
168
|
+
schema: import_fixtureSchema.zeroHttpFixtureSchema,
|
|
169
|
+
models: {},
|
|
170
|
+
createServerActions: () => ({}),
|
|
171
|
+
transaction
|
|
172
|
+
});
|
|
173
|
+
await (0, import_vitest.expect)(adapter.server.query(q => q.project.one())).resolves.toEqual({
|
|
174
|
+
id: "p1",
|
|
175
|
+
ownerId: "u1",
|
|
176
|
+
name: "first"
|
|
177
|
+
});
|
|
178
|
+
(0, import_vitest.expect)(lastQueryFormat).toEqual({
|
|
179
|
+
relationships: {},
|
|
180
|
+
singular: true
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
(0, import_vitest.test)("resolves auth-sensitive named queries and runs query validation", async () => {
|
|
184
|
+
let validation;
|
|
185
|
+
const adapter = (0, import_syncHost.createZeroSyncHostAdapter)({
|
|
186
|
+
schema: import_fixtureSchema.zeroHttpFixtureSchema,
|
|
187
|
+
models: {},
|
|
188
|
+
createServerActions: () => ({}),
|
|
189
|
+
queries,
|
|
190
|
+
transaction,
|
|
191
|
+
validateQuery(args) {
|
|
192
|
+
validation = args;
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
const ast = await adapter.resolveQuery("project|byOwner", [{
|
|
196
|
+
ownerId: "u1"
|
|
197
|
+
}], {
|
|
198
|
+
userID: "u1",
|
|
199
|
+
role: "member"
|
|
200
|
+
});
|
|
201
|
+
(0, import_vitest.expect)(ast).toMatchObject({
|
|
202
|
+
table: "project"
|
|
203
|
+
});
|
|
204
|
+
(0, import_vitest.expect)(JSON.stringify(ast)).toContain("ownerId");
|
|
205
|
+
(0, import_vitest.expect)(JSON.stringify(ast)).toContain("u1");
|
|
206
|
+
(0, import_vitest.expect)(validation).toEqual({
|
|
207
|
+
authData: {
|
|
208
|
+
id: "u1",
|
|
209
|
+
role: "member",
|
|
210
|
+
userID: "u1"
|
|
211
|
+
},
|
|
212
|
+
queryName: "project|byOwner",
|
|
213
|
+
params: {
|
|
214
|
+
ownerId: "u1"
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
function mutationContext(context) {
|
|
220
|
+
return {
|
|
221
|
+
...context,
|
|
222
|
+
claims: {
|
|
223
|
+
userID: "u1",
|
|
224
|
+
role: "member"
|
|
225
|
+
},
|
|
226
|
+
clientID: "client-a",
|
|
227
|
+
mutationID: "1"
|
|
228
|
+
};
|
|
229
|
+
}
|