on-zero 0.4.36 → 0.4.38

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.
Files changed (83) hide show
  1. package/dist/cjs/combineZeroClients.native.js.map +1 -1
  2. package/dist/cjs/createUseQuery.cjs +7 -97
  3. package/dist/cjs/createUseQuery.native.js +7 -133
  4. package/dist/cjs/createUseQuery.native.js.map +1 -1
  5. package/dist/cjs/createUseQueryDirect.cjs +229 -0
  6. package/dist/cjs/createUseQueryDirect.native.js +335 -0
  7. package/dist/cjs/createUseQueryDirect.native.js.map +1 -0
  8. package/dist/cjs/createZeroClient.cjs +61 -17
  9. package/dist/cjs/createZeroClient.native.js +65 -17
  10. package/dist/cjs/createZeroClient.native.js.map +1 -1
  11. package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
  12. package/dist/cjs/index.cjs +2 -2
  13. package/dist/cjs/index.native.js +2 -2
  14. package/dist/cjs/index.native.js.map +1 -1
  15. package/dist/cjs/multi.cjs +38 -0
  16. package/dist/cjs/multi.native.js +41 -0
  17. package/dist/cjs/multi.native.js.map +1 -0
  18. package/dist/cjs/multiInstanceNested.test.cjs +92 -12
  19. package/dist/cjs/multiInstanceNested.test.native.js +108 -12
  20. package/dist/cjs/multiInstanceNested.test.native.js.map +1 -1
  21. package/dist/cjs/testSetup.cjs +26 -0
  22. package/dist/cjs/testSetup.native.js +32 -0
  23. package/dist/cjs/testSetup.native.js.map +1 -0
  24. package/dist/esm/combineZeroClients.mjs.map +1 -1
  25. package/dist/esm/combineZeroClients.native.js.map +1 -1
  26. package/dist/esm/createUseQuery.mjs +8 -98
  27. package/dist/esm/createUseQuery.mjs.map +1 -1
  28. package/dist/esm/createUseQuery.native.js +8 -134
  29. package/dist/esm/createUseQuery.native.js.map +1 -1
  30. package/dist/esm/createUseQueryDirect.mjs +204 -0
  31. package/dist/esm/createUseQueryDirect.mjs.map +1 -0
  32. package/dist/esm/createUseQueryDirect.native.js +307 -0
  33. package/dist/esm/createUseQueryDirect.native.js.map +1 -0
  34. package/dist/esm/createZeroClient.mjs +62 -19
  35. package/dist/esm/createZeroClient.mjs.map +1 -1
  36. package/dist/esm/createZeroClient.native.js +66 -19
  37. package/dist/esm/createZeroClient.native.js.map +1 -1
  38. package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
  39. package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
  40. package/dist/esm/index.js +2 -3
  41. package/dist/esm/index.js.map +1 -1
  42. package/dist/esm/index.mjs +2 -3
  43. package/dist/esm/index.mjs.map +1 -1
  44. package/dist/esm/index.native.js +2 -3
  45. package/dist/esm/index.native.js.map +1 -1
  46. package/dist/esm/multi.mjs +12 -0
  47. package/dist/esm/multi.mjs.map +1 -0
  48. package/dist/esm/multi.native.js +12 -0
  49. package/dist/esm/multi.native.js.map +1 -0
  50. package/dist/esm/multiInstanceNested.test.mjs +85 -5
  51. package/dist/esm/multiInstanceNested.test.mjs.map +1 -1
  52. package/dist/esm/multiInstanceNested.test.native.js +101 -5
  53. package/dist/esm/multiInstanceNested.test.native.js.map +1 -1
  54. package/dist/esm/testSetup.mjs +27 -0
  55. package/dist/esm/testSetup.mjs.map +1 -0
  56. package/dist/esm/testSetup.native.js +30 -0
  57. package/dist/esm/testSetup.native.js.map +1 -0
  58. package/package.json +9 -3
  59. package/readme.md +10 -8
  60. package/src/combineZeroClients.tsx +4 -6
  61. package/src/createUseQuery.tsx +20 -190
  62. package/src/createUseQueryDirect.tsx +309 -0
  63. package/src/createZeroClient.tsx +158 -54
  64. package/src/helpers/recoverZeroClient.test.ts +8 -2
  65. package/src/index.ts +6 -2
  66. package/src/multi.ts +24 -0
  67. package/src/multiInstanceNested.test.tsx +79 -4
  68. package/src/testSetup.ts +26 -0
  69. package/types/combineZeroClients.d.ts.map +1 -1
  70. package/types/createUseQuery.d.ts +4 -15
  71. package/types/createUseQuery.d.ts.map +1 -1
  72. package/types/createUseQueryDirect.d.ts +29 -0
  73. package/types/createUseQueryDirect.d.ts.map +1 -0
  74. package/types/createZeroClient.d.ts +53 -7
  75. package/types/createZeroClient.d.ts.map +1 -1
  76. package/types/index.d.ts +1 -2
  77. package/types/index.d.ts.map +1 -1
  78. package/types/multi.d.ts +6 -0
  79. package/types/multi.d.ts.map +1 -0
  80. package/types/multiInstanceNested.test.d.ts.map +1 -1
  81. package/types/testSetup.d.ts +1 -0
  82. package/types/testSetup.d.ts.map +1 -0
  83. package/vitest.config.ts +1 -0
@@ -0,0 +1,335 @@
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 createUseQueryDirect_exports = {};
26
+ __export(createUseQueryDirect_exports, {
27
+ createUseQueryDirect: () => createUseQueryDirect
28
+ });
29
+ module.exports = __toCommonJS(createUseQueryDirect_exports);
30
+ var import_bindings = require("@rocicorp/zero/bindings");
31
+ var import_helpers = require("@take-out/helpers");
32
+ var import_react = require("react");
33
+ var import_createUseQuery = require("./createUseQuery.native.js");
34
+ var import_resolveQuery = require("./resolveQuery.native.js");
35
+ function _class_call_check(instance, Constructor) {
36
+ if (!(instance instanceof Constructor)) {
37
+ throw new TypeError("Cannot call a class as a function");
38
+ }
39
+ }
40
+ function _defineProperties(target, props) {
41
+ for (var i = 0; i < props.length; i++) {
42
+ var descriptor = props[i];
43
+ descriptor.enumerable = descriptor.enumerable || false;
44
+ descriptor.configurable = true;
45
+ if ("value" in descriptor) descriptor.writable = true;
46
+ Object.defineProperty(target, descriptor.key, descriptor);
47
+ }
48
+ }
49
+ function _create_class(Constructor, protoProps, staticProps) {
50
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
51
+ if (staticProps) _defineProperties(Constructor, staticProps);
52
+ return Constructor;
53
+ }
54
+ function _define_property(obj, key, value) {
55
+ if (key in obj) {
56
+ Object.defineProperty(obj, key, {
57
+ value,
58
+ enumerable: true,
59
+ configurable: true,
60
+ writable: true
61
+ });
62
+ } else {
63
+ obj[key] = value;
64
+ }
65
+ return obj;
66
+ }
67
+ var EMPTY_RESPONSE = [null, {
68
+ type: "unknown"
69
+ }];
70
+ var DISABLED_SUBSCRIBE = function () {
71
+ return function () {};
72
+ };
73
+ var DISABLED_SNAPSHOT = [void 0, {
74
+ type: "unknown"
75
+ }];
76
+ var getDisabledSnapshot = function () {
77
+ return DISABLED_SNAPSHOT;
78
+ };
79
+ var emptyArray = [];
80
+ var resultTypeUnknown = {
81
+ type: "unknown"
82
+ };
83
+ var resultTypeComplete = {
84
+ type: "complete"
85
+ };
86
+ var resultTypeError = {
87
+ type: "error"
88
+ };
89
+ var emptySnapshotSingularUnknown = [void 0, resultTypeUnknown];
90
+ var emptySnapshotSingularComplete = [void 0, resultTypeComplete];
91
+ var emptySnapshotSingularError = [void 0, resultTypeError];
92
+ var emptySnapshotPluralUnknown = [emptyArray, resultTypeUnknown];
93
+ var emptySnapshotPluralComplete = [emptyArray, resultTypeComplete];
94
+ var emptySnapshotPluralError = [emptyArray, resultTypeError];
95
+ function getDefaultSnapshot(singular) {
96
+ return singular ? emptySnapshotSingularUnknown : emptySnapshotPluralUnknown;
97
+ }
98
+ function makeError(retry, error) {
99
+ var _error_message;
100
+ var message = (_error_message = error === null || error === void 0 ? void 0 : error.message) !== null && _error_message !== void 0 ? _error_message : "An unknown error occurred";
101
+ var _error_error;
102
+ return {
103
+ type: "error",
104
+ retry,
105
+ refetch: retry,
106
+ error: {
107
+ type: (_error_error = error === null || error === void 0 ? void 0 : error.error) !== null && _error_error !== void 0 ? _error_error : "app",
108
+ message,
109
+ ...((error === null || error === void 0 ? void 0 : error.details) ? {
110
+ details: error.details
111
+ } : {})
112
+ }
113
+ };
114
+ }
115
+ function getSnapshot(singular, data, resultType, retry, error) {
116
+ if (singular && data === void 0) {
117
+ if (resultType === "complete") return emptySnapshotSingularComplete;
118
+ if (resultType === "error") return error ? [void 0, makeError(retry, error)] : emptySnapshotSingularError;
119
+ return emptySnapshotSingularUnknown;
120
+ }
121
+ if (!singular && Array.isArray(data) && data.length === 0) {
122
+ if (resultType === "complete") return emptySnapshotPluralComplete;
123
+ if (resultType === "error") return error ? [emptyArray, makeError(retry, error)] : emptySnapshotPluralError;
124
+ return emptySnapshotPluralUnknown;
125
+ }
126
+ if (resultType === "complete") return [data, resultTypeComplete];
127
+ if (resultType === "error") return [data, makeError(retry, error)];
128
+ return [data, resultTypeUnknown];
129
+ }
130
+ var DirectViewWrapper = /* @__PURE__ */function () {
131
+ "use strict";
132
+
133
+ function DirectViewWrapper2(query, zero, ttl, singular, onDematerialized) {
134
+ var _this = this;
135
+ _class_call_check(this, DirectViewWrapper2);
136
+ _define_property(this, "query", void 0);
137
+ _define_property(this, "zero", void 0);
138
+ _define_property(this, "ttl", void 0);
139
+ _define_property(this, "singular", void 0);
140
+ _define_property(this, "onDematerialized", void 0);
141
+ _define_property(this, "view", void 0);
142
+ _define_property(this, "snapshot", void 0);
143
+ _define_property(this, "listeners", void 0);
144
+ _define_property(this, "destroyTimer", void 0);
145
+ _define_property(this, "onData", void 0);
146
+ _define_property(this, "retry", void 0);
147
+ _define_property(this, "subscribe", void 0);
148
+ _define_property(this, "getSnapshot", void 0);
149
+ this.query = query;
150
+ this.zero = zero;
151
+ this.ttl = ttl;
152
+ this.singular = singular;
153
+ this.onDematerialized = onDematerialized;
154
+ this.listeners = /* @__PURE__ */new Set();
155
+ this.onData = function (data, resultType, error) {
156
+ var cloned = data === void 0 ? void 0 : (0, import_bindings.deepClone)(data);
157
+ _this.snapshot = getSnapshot(_this.singular, cloned, resultType, _this.retry, error);
158
+ var _iteratorNormalCompletion = true,
159
+ _didIteratorError = false,
160
+ _iteratorError = void 0;
161
+ try {
162
+ for (var _iterator = _this.listeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
163
+ var listener = _step.value;
164
+ listener();
165
+ }
166
+ } catch (err) {
167
+ _didIteratorError = true;
168
+ _iteratorError = err;
169
+ } finally {
170
+ try {
171
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
172
+ _iterator.return();
173
+ }
174
+ } finally {
175
+ if (_didIteratorError) {
176
+ throw _iteratorError;
177
+ }
178
+ }
179
+ }
180
+ };
181
+ this.retry = function () {
182
+ _this.destroyView();
183
+ _this.materializeIfNeeded();
184
+ };
185
+ this.subscribe = function (notify) {
186
+ _this.listeners.add(notify);
187
+ if (_this.destroyTimer !== void 0) {
188
+ clearTimeout(_this.destroyTimer);
189
+ _this.destroyTimer = void 0;
190
+ }
191
+ _this.materializeIfNeeded();
192
+ return function () {
193
+ _this.listeners.delete(notify);
194
+ if (_this.listeners.size === 0) {
195
+ _this.destroyTimer = setTimeout(function () {
196
+ _this.destroyTimer = void 0;
197
+ if (_this.listeners.size > 0) return;
198
+ _this.destroyView();
199
+ _this.onDematerialized(_this);
200
+ }, 10);
201
+ }
202
+ };
203
+ };
204
+ this.getSnapshot = function () {
205
+ return _this.snapshot;
206
+ };
207
+ this.snapshot = getDefaultSnapshot(singular);
208
+ this.materializeIfNeeded();
209
+ }
210
+ _create_class(DirectViewWrapper2, [{
211
+ key: "materializeIfNeeded",
212
+ value: function materializeIfNeeded() {
213
+ if (this.view) return;
214
+ this.view = this.zero.materialize(this.query, {
215
+ ttl: this.ttl
216
+ });
217
+ this.view.addListener(this.onData);
218
+ }
219
+ }, {
220
+ key: "destroyView",
221
+ value: function destroyView() {
222
+ var current = this.view;
223
+ this.view = void 0;
224
+ if (!current) return;
225
+ try {
226
+ current.destroy();
227
+ } catch (e) {}
228
+ }
229
+ }, {
230
+ // the owning zero can close before react unsubscribes during rotation
231
+ key: "updateTTL",
232
+ value: function updateTTL(ttl) {
233
+ var _this_view;
234
+ this.ttl = ttl;
235
+ (_this_view = this.view) === null || _this_view === void 0 ? void 0 : _this_view.updateTTL(ttl);
236
+ }
237
+ }]);
238
+ return DirectViewWrapper2;
239
+ }();
240
+ var DirectViewStore = /* @__PURE__ */function () {
241
+ "use strict";
242
+
243
+ function DirectViewStore2() {
244
+ _class_call_check(this, DirectViewStore2);
245
+ _define_property(this, "views", /* @__PURE__ */new Map());
246
+ }
247
+ _create_class(DirectViewStore2, [{
248
+ key: "getView",
249
+ value: function getView(zero, queryRequest, enabled, ttl) {
250
+ var _this = this;
251
+ var query = (0, import_bindings.addContextToQuery)(queryRequest, zero.context);
252
+ var queryInternals = (0, import_bindings.asQueryInternals)(query);
253
+ if (!enabled) {
254
+ var snapshot = getDefaultSnapshot(queryInternals.format.singular);
255
+ return {
256
+ subscribe: DISABLED_SUBSCRIBE,
257
+ getSnapshot: function () {
258
+ return snapshot;
259
+ }
260
+ };
261
+ }
262
+ var hash = `${zero.clientID}:${queryInternals.hash()}`;
263
+ var view = this.views.get(hash);
264
+ if (!view) {
265
+ view = new DirectViewWrapper(query, zero, ttl, queryInternals.format.singular, function (dematerialized) {
266
+ if (_this.views.get(hash) === dematerialized) {
267
+ _this.views.delete(hash);
268
+ }
269
+ });
270
+ this.views.set(hash, view);
271
+ } else {
272
+ view.updateTTL(ttl);
273
+ }
274
+ return view;
275
+ }
276
+ }]);
277
+ return DirectViewStore2;
278
+ }();
279
+ function createUseQueryDirect(param) {
280
+ var {
281
+ DisabledContext,
282
+ customQueries,
283
+ getZero,
284
+ zeroVersion
285
+ } = param;
286
+ var directViewStore = new DirectViewStore();
287
+ function useQueryDirect() {
288
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
289
+ args[_key] = arguments[_key];
290
+ }
291
+ if (typeof window === "undefined") return EMPTY_RESPONSE;
292
+ var disableMode = (0, import_react.useContext)(DisabledContext);
293
+ var lastRef = (0, import_react.useRef)(EMPTY_RESPONSE);
294
+ var [fn, paramsOrOptions, optionsArg] = args;
295
+ var version = (0, import_helpers.useEmitterValue)(zeroVersion);
296
+ var {
297
+ params,
298
+ options
299
+ } = (0, import_createUseQuery.parseUseQueryArgs)(paramsOrOptions, optionsArg);
300
+ var enabled = true;
301
+ var ttl = import_bindings.DEFAULT_TTL_MS;
302
+ if (typeof options === "boolean") {
303
+ enabled = options;
304
+ } else if (options) {
305
+ enabled = options.enabled !== false;
306
+ var _options_ttl;
307
+ ttl = (_options_ttl = options.ttl) !== null && _options_ttl !== void 0 ? _options_ttl : import_bindings.DEFAULT_TTL_MS;
308
+ }
309
+ var paramsKey = params === void 0 ? "" : JSON.stringify(params);
310
+ var view = (0, import_react.useMemo)(function () {
311
+ var zero = getZero();
312
+ if (!zero) return null;
313
+ var queryRequest = (0, import_resolveQuery.resolveQuery)({
314
+ customQueries,
315
+ fn,
316
+ params
317
+ });
318
+ return directViewStore.getView(zero, queryRequest, enabled, ttl);
319
+ },
320
+ // params is keyed by paramsKey; version re-materializes on a new zero
321
+ // eslint-disable-next-line react-hooks/exhaustive-deps
322
+ [fn, paramsKey, enabled, ttl, version]);
323
+ var out = (0, import_react.useSyncExternalStore)(view ? view.subscribe : DISABLED_SUBSCRIBE, view ? view.getSnapshot : getDisabledSnapshot, view ? view.getSnapshot : getDisabledSnapshot);
324
+ if (!disableMode) {
325
+ lastRef.current = out;
326
+ return out;
327
+ }
328
+ if (disableMode === "last-value") {
329
+ return lastRef.current;
330
+ }
331
+ return EMPTY_RESPONSE;
332
+ }
333
+ return useQueryDirect;
334
+ }
335
+ //# sourceMappingURL=createUseQueryDirect.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","createUseQueryDirect_exports","__export","createUseQueryDirect","module","exports","import_bindings","require","import_helpers","import_react","import_createUseQuery","import_resolveQuery","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","EMPTY_RESPONSE","type","DISABLED_SUBSCRIBE","DISABLED_SNAPSHOT","getDisabledSnapshot","emptyArray","resultTypeUnknown","resultTypeComplete","resultTypeError","emptySnapshotSingularUnknown","emptySnapshotSingularComplete","emptySnapshotSingularError","emptySnapshotPluralUnknown","emptySnapshotPluralComplete","emptySnapshotPluralError","getDefaultSnapshot","singular","makeError","retry","error","_error_message","message","_error_error","refetch","details","getSnapshot","data","resultType","Array","isArray","DirectViewWrapper","DirectViewWrapper2","query","zero","ttl","onDematerialized","_this","listeners","Set","onData","cloned","deepClone","snapshot","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","listener","err","return","destroyView","materializeIfNeeded","subscribe","notify","add","destroyTimer","clearTimeout","delete","size","setTimeout"],"sources":["../../src/createUseQueryDirect.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -22,7 +22,8 @@ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
22
22
  }), mod);
23
23
  var createZeroClient_exports = {};
24
24
  __export(createZeroClient_exports, {
25
- createZeroClient: () => createZeroClient
25
+ createZeroClient: () => createZeroClient,
26
+ createZeroClientInternal: () => createZeroClientInternal
26
27
  });
27
28
  module.exports = __toCommonJS(createZeroClient_exports);
28
29
  var import_zero = require("@rocicorp/zero");
@@ -60,12 +61,22 @@ function getZeroProxyValue(instance, key) {
60
61
  }
61
62
  return bound;
62
63
  }
63
- function createZeroClient({
64
+ function createUnavailableDirectUseQuery() {
65
+ function useQueryDirect() {
66
+ throw new Error(`[on-zero] direct queries are optional. Import createZeroClientWithDirectQueries from 'on-zero/multi' for clients used outside the innermost ZeroProvider.`);
67
+ }
68
+ return useQueryDirect;
69
+ }
70
+ function createZeroClient(options) {
71
+ return createZeroClientInternal(options);
72
+ }
73
+ function createZeroClientInternal({
64
74
  schema,
65
75
  models,
66
76
  groupedQueries,
67
77
  permissionStrategy = "optimistic",
68
- instanceName = "default"
78
+ instanceName = "default",
79
+ createDirectUseQuery
69
80
  }) {
70
81
  (0, import_state.setSchema)(schema);
71
82
  if ((0, import_state.getEnvironment)() === null) {
@@ -144,19 +155,20 @@ function createZeroClient({
144
155
  });
145
156
  const emitterScope = instanceName === "default" ? "" : `:${instanceName}`;
146
157
  const zeroEvents = (0, import_helpers.createEmitter)(`zero${emitterScope}`, null);
147
- const zeroInstanceVersion = (0, import_helpers.createEmitter)(`zero-instance-version${emitterScope}`, 0);
158
+ const zeroInstanceVersion = createDirectUseQuery ? (0, import_helpers.createEmitter)(`zero-instance-version${emitterScope}`, 0) : null;
148
159
  const AuthDataContext = (0, import_react2.createContext)({});
149
160
  const useQuery = (0, import_createUseQuery.createUseQuery)({
150
161
  DisabledContext,
151
162
  customQueries
152
163
  });
153
- const useQueryDirect = (0, import_createUseQuery.createUseQueryDirect)({
164
+ const useQueryDirect = createDirectUseQuery ? createDirectUseQuery({
154
165
  DisabledContext,
155
166
  customQueries,
156
167
  getZero: () => latestZeroInstance,
157
168
  zeroVersion: zeroInstanceVersion
158
- });
169
+ }) : createUnavailableDirectUseQuery();
159
170
  const createUsePermission = useQueryImpl => function usePermission2(table, objOrId, enabled = typeof objOrId !== "undefined", debug = false) {
171
+ if (typeof window === "undefined") return null;
160
172
  const disableMode = (0, import_react2.useContext)(DisabledContext);
161
173
  const lastRef = (0, import_react2.useRef)(null);
162
174
  const tableStr = table;
@@ -191,10 +203,42 @@ function createZeroClient({
191
203
  const usePermission = createUsePermission(useQuery);
192
204
  const usePermissionDirect = createUsePermission(useQueryDirect);
193
205
  let cachedZero = null;
206
+ const DISABLED_ZERO_STUB_CONNECTION_STATE = {
207
+ current: {
208
+ name: "closed"
209
+ },
210
+ subscribe: () => () => {}
211
+ };
212
+ const DISABLED_ZERO_STUB = {
213
+ context: {},
214
+ connection: {
215
+ state: DISABLED_ZERO_STUB_CONNECTION_STATE
216
+ }
217
+ };
194
218
  const ProvideZero = ({
219
+ children,
220
+ ...props
221
+ }) => {
222
+ if (typeof window === "undefined" || props.disable) {
223
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(AuthDataContext.Provider, {
224
+ value: props.authData ?? {},
225
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(DisabledContext.Provider, {
226
+ value: "empty",
227
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.ZeroContext.Provider, {
228
+ value: DISABLED_ZERO_STUB,
229
+ children
230
+ })
231
+ })
232
+ });
233
+ }
234
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(ProvideZeroActive, {
235
+ ...props,
236
+ children
237
+ });
238
+ };
239
+ const ProvideZeroActive = ({
195
240
  children,
196
241
  authData: authDataIn,
197
- disable,
198
242
  transport,
199
243
  pullIntervalMs = 3e4,
200
244
  beforeReload,
@@ -284,17 +328,17 @@ function createZeroClient({
284
328
  });
285
329
  }
286
330
  }, [instance2, auth]);
287
- if (disable) {
288
- return children;
289
- }
290
331
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(AuthDataContext.Provider, {
291
332
  value: authData,
292
- children: instance2 ? /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_react.ZeroProvider, {
293
- zero: instance2,
294
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(SetZeroInstance, {}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(ConnectionMonitor, {
295
- zeroEvents
296
- }), children]
297
- }) : null
333
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(DisabledContext.Provider, {
334
+ value: instance2 ? false : "empty",
335
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_react.ZeroContext.Provider, {
336
+ value: instance2 ?? DISABLED_ZERO_STUB,
337
+ children: [instance2 ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(SetZeroInstance, {}) : null, instance2 ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(ConnectionMonitor, {
338
+ zeroEvents
339
+ }) : null, children]
340
+ })
341
+ })
298
342
  });
299
343
  };
300
344
  const SetZeroInstance = () => {
@@ -306,7 +350,7 @@ function createZeroClient({
306
350
  (0, import_zeroRunner.setRunner)(runner);
307
351
  }
308
352
  (0, import_react2.useEffect)(() => {
309
- zeroInstanceVersion.emit(zeroInstanceVersion.value + 1);
353
+ zeroInstanceVersion?.emit(zeroInstanceVersion.value + 1);
310
354
  }, [zeroInstance]);
311
355
  return null;
312
356
  };
@@ -24,7 +24,8 @@ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
24
24
  }), mod);
25
25
  var createZeroClient_exports = {};
26
26
  __export(createZeroClient_exports, {
27
- createZeroClient: () => createZeroClient
27
+ createZeroClient: () => createZeroClient,
28
+ createZeroClientInternal: () => createZeroClientInternal
28
29
  });
29
30
  module.exports = __toCommonJS(createZeroClient_exports);
30
31
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -81,13 +82,23 @@ function getZeroProxyValue(instance, key) {
81
82
  }
82
83
  return bound;
83
84
  }
84
- function createZeroClient(param) {
85
+ function createUnavailableDirectUseQuery() {
86
+ function useQueryDirect() {
87
+ throw new Error(`[on-zero] direct queries are optional. Import createZeroClientWithDirectQueries from 'on-zero/multi' for clients used outside the innermost ZeroProvider.`);
88
+ }
89
+ return useQueryDirect;
90
+ }
91
+ function createZeroClient(options) {
92
+ return createZeroClientInternal(options);
93
+ }
94
+ function createZeroClientInternal(param) {
85
95
  var {
86
96
  schema,
87
97
  models,
88
98
  groupedQueries,
89
99
  permissionStrategy = "optimistic",
90
- instanceName = "default"
100
+ instanceName = "default",
101
+ createDirectUseQuery
91
102
  } = param;
92
103
  (0, import_state.setSchema)(schema);
93
104
  if ((0, import_state.getEnvironment)() === null) {
@@ -239,24 +250,25 @@ function createZeroClient(param) {
239
250
  });
240
251
  var emitterScope = instanceName === "default" ? "" : `:${instanceName}`;
241
252
  var zeroEvents = (0, import_helpers.createEmitter)(`zero${emitterScope}`, null);
242
- var zeroInstanceVersion = (0, import_helpers.createEmitter)(`zero-instance-version${emitterScope}`, 0);
253
+ var zeroInstanceVersion = createDirectUseQuery ? (0, import_helpers.createEmitter)(`zero-instance-version${emitterScope}`, 0) : null;
243
254
  var AuthDataContext = /* @__PURE__ */(0, import_react2.createContext)({});
244
255
  var useQuery = (0, import_createUseQuery.createUseQuery)({
245
256
  DisabledContext,
246
257
  customQueries
247
258
  });
248
- var useQueryDirect = (0, import_createUseQuery.createUseQueryDirect)({
259
+ var useQueryDirect = createDirectUseQuery ? createDirectUseQuery({
249
260
  DisabledContext,
250
261
  customQueries,
251
262
  getZero: function () {
252
263
  return latestZeroInstance;
253
264
  },
254
265
  zeroVersion: zeroInstanceVersion
255
- });
266
+ }) : createUnavailableDirectUseQuery();
256
267
  var createUsePermission = function (useQueryImpl) {
257
268
  return function usePermission2(table, objOrId) {
258
269
  var enabled = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : typeof objOrId !== "undefined",
259
270
  debug = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false;
271
+ if (typeof window === "undefined") return null;
260
272
  var disableMode = (0, import_react2.useContext)(DisabledContext);
261
273
  var lastRef = (0, import_react2.useRef)(null);
262
274
  var tableStr = table;
@@ -292,11 +304,47 @@ function createZeroClient(param) {
292
304
  var usePermission = createUsePermission(useQuery);
293
305
  var usePermissionDirect = createUsePermission(useQueryDirect);
294
306
  var cachedZero = null;
307
+ var DISABLED_ZERO_STUB_CONNECTION_STATE = {
308
+ current: {
309
+ name: "closed"
310
+ },
311
+ subscribe: function () {
312
+ return function () {};
313
+ }
314
+ };
315
+ var DISABLED_ZERO_STUB = {
316
+ context: {},
317
+ connection: {
318
+ state: DISABLED_ZERO_STUB_CONNECTION_STATE
319
+ }
320
+ };
295
321
  var ProvideZero = function (param2) {
322
+ var {
323
+ children,
324
+ ...props
325
+ } = param2;
326
+ if (typeof window === "undefined" || props.disable) {
327
+ var _props_authData;
328
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(AuthDataContext.Provider, {
329
+ value: (_props_authData = props.authData) !== null && _props_authData !== void 0 ? _props_authData : {},
330
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(DisabledContext.Provider, {
331
+ value: "empty",
332
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.ZeroContext.Provider, {
333
+ value: DISABLED_ZERO_STUB,
334
+ children
335
+ })
336
+ })
337
+ });
338
+ }
339
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(ProvideZeroActive, {
340
+ ...props,
341
+ children
342
+ });
343
+ };
344
+ var ProvideZeroActive = function (param2) {
296
345
  var {
297
346
  children,
298
347
  authData: authDataIn,
299
- disable,
300
348
  transport,
301
349
  pullIntervalMs = 3e4,
302
350
  beforeReload,
@@ -406,17 +454,17 @@ function createZeroClient(param) {
406
454
  });
407
455
  }
408
456
  }, [instance2, auth]);
409
- if (disable) {
410
- return children;
411
- }
412
457
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(AuthDataContext.Provider, {
413
458
  value: authData,
414
- children: instance2 ? /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_react.ZeroProvider, {
415
- zero: instance2,
416
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(SetZeroInstance, {}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(ConnectionMonitor, {
417
- zeroEvents
418
- }), children]
419
- }) : null
459
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(DisabledContext.Provider, {
460
+ value: instance2 ? false : "empty",
461
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_react.ZeroContext.Provider, {
462
+ value: instance2 !== null && instance2 !== void 0 ? instance2 : DISABLED_ZERO_STUB,
463
+ children: [instance2 ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(SetZeroInstance, {}) : null, instance2 ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(ConnectionMonitor, {
464
+ zeroEvents
465
+ }) : null, children]
466
+ })
467
+ })
420
468
  });
421
469
  };
422
470
  var SetZeroInstance = function () {
@@ -430,7 +478,7 @@ function createZeroClient(param) {
430
478
  (0, import_zeroRunner.setRunner)(runner);
431
479
  }
432
480
  (0, import_react2.useEffect)(function () {
433
- zeroInstanceVersion.emit(zeroInstanceVersion.value + 1);
481
+ zeroInstanceVersion === null || zeroInstanceVersion === void 0 ? void 0 : zeroInstanceVersion.emit(zeroInstanceVersion.value + 1);
434
482
  }, [zeroInstance]);
435
483
  return null;
436
484
  };