@valbuild/next 0.96.2 → 0.97.0
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/README.md +33 -0
- package/client/dist/valbuild-next-client.cjs.dev.js +29 -10
- package/client/dist/valbuild-next-client.cjs.prod.js +29 -10
- package/client/dist/valbuild-next-client.esm.js +29 -10
- package/dist/{ValNextProvider-26ef0c1c.cjs.dev.js → ValNextProvider-03a9f8fd.cjs.dev.js} +103 -25
- package/dist/ValNextProvider-6103cb74.cjs.js +7 -0
- package/dist/{ValNextProvider-b0d9fa24.cjs.prod.js → ValNextProvider-6103cb74.cjs.prod.js} +103 -25
- package/dist/{ValNextProvider-e163e127.esm.js → ValNextProvider-7302b8af.esm.js} +104 -26
- package/dist/ValOverlayContext-3c37e5a7.esm.js +251 -0
- package/dist/ValOverlayContext-c6f27a6d.cjs.dev.js +262 -0
- package/dist/ValOverlayContext-f7f45bc7.cjs.js +7 -0
- package/dist/ValOverlayContext-f7f45bc7.cjs.prod.js +262 -0
- package/dist/declarations/src/ValProvider.d.ts +1 -0
- package/dist/declarations/src/initVal.d.ts +25 -0
- package/dist/defineProperty-8951f469.cjs.prod.js +29 -0
- package/dist/defineProperty-cca5affa.esm.js +26 -0
- package/dist/defineProperty-f90345d7.cjs.dev.js +29 -0
- package/dist/{objectSpread2-3c87fb4f.cjs.prod.js → objectSpread2-13f847a9.cjs.prod.js} +2 -27
- package/dist/{objectSpread2-792eb2c2.cjs.dev.js → objectSpread2-58024783.cjs.dev.js} +2 -27
- package/dist/{objectSpread2-c1340c1c.esm.js → objectSpread2-60d1bd93.esm.js} +2 -25
- package/dist/{routeFromVal-ef8c304a.cjs.prod.js → routeFromVal-13c832b2.cjs.prod.js} +1 -1
- package/dist/{routeFromVal-748d2aec.esm.js → routeFromVal-8855a5cc.esm.js} +1 -1
- package/dist/{routeFromVal-8fdaa0d0.cjs.dev.js → routeFromVal-9b610e77.cjs.dev.js} +1 -1
- package/dist/valbuild-next.cjs.dev.js +46 -3
- package/dist/valbuild-next.cjs.prod.js +46 -3
- package/dist/valbuild-next.esm.js +46 -3
- package/dist/{asyncToGenerator-8e5c36c8.cjs.prod.js → version-0e6da9a7.cjs.prod.js} +10 -0
- package/dist/{asyncToGenerator-500f022f.esm.js → version-4d7b692c.esm.js} +10 -1
- package/dist/{asyncToGenerator-c3823d62.cjs.dev.js → version-c311d818.cjs.dev.js} +10 -0
- package/package.json +14 -8
- package/rsc/dist/valbuild-next-rsc.cjs.dev.js +35 -35
- package/rsc/dist/valbuild-next-rsc.cjs.prod.js +35 -35
- package/rsc/dist/valbuild-next-rsc.esm.js +4 -4
- package/server/dist/valbuild-next-server.cjs.dev.js +9 -9
- package/server/dist/valbuild-next-server.cjs.prod.js +9 -9
- package/server/dist/valbuild-next-server.esm.js +3 -3
- package/dist/ValNextProvider-b0d9fa24.cjs.js +0 -7
- package/dist/ValOverlayContext-6635a4d7.esm.js +0 -114
- package/dist/ValOverlayContext-942f1294.cjs.js +0 -7
- package/dist/ValOverlayContext-942f1294.cjs.prod.js +0 -125
- package/dist/ValOverlayContext-c82a4507.cjs.dev.js +0 -125
- package/dist/version-16f6b0ce.esm.js +0 -10
- package/dist/version-d034b2fc.cjs.dev.js +0 -12
- package/dist/version-d2061026.cjs.prod.js +0 -12
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var createForOfIteratorHelper = require('./createForOfIteratorHelper-0445603c.cjs.dev.js');
|
|
7
|
+
var defineProperty = require('./defineProperty-f90345d7.cjs.dev.js');
|
|
8
|
+
var React = require('react');
|
|
9
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
10
|
+
require('./unsupportedIterableToArray-c8ab77c9.cjs.dev.js');
|
|
11
|
+
|
|
12
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
13
|
+
|
|
14
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
15
|
+
|
|
16
|
+
function _classCallCheck(a, n) {
|
|
17
|
+
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function _defineProperties(e, r) {
|
|
21
|
+
for (var t = 0; t < r.length; t++) {
|
|
22
|
+
var o = r[t];
|
|
23
|
+
o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, defineProperty._toPropertyKey(o.key), o);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function _createClass(e, r, t) {
|
|
27
|
+
return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
|
|
28
|
+
writable: !1
|
|
29
|
+
}), e;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
var LOAD_TIMEOUT_MS = 10000;
|
|
33
|
+
var ValExternalStore = /*#__PURE__*/function () {
|
|
34
|
+
// Path-keyed cache of every source seen via update(). The single source of
|
|
35
|
+
// truth: load state and snapshots are both derived from this, so data can be
|
|
36
|
+
// queried for any combination of paths even before a subscriber registers.
|
|
37
|
+
|
|
38
|
+
// Reference-stable per-subscriberId snapshot cache for useSyncExternalStore.
|
|
39
|
+
// Built lazily from loadedSources in get() and invalidated in update().
|
|
40
|
+
|
|
41
|
+
// One-shot listeners used solely by waitForLoad. Kept separate from the
|
|
42
|
+
// useSyncExternalStore listeners so waitForLoad never has to register (and
|
|
43
|
+
// leak) a subscriberId.
|
|
44
|
+
|
|
45
|
+
function ValExternalStore() {
|
|
46
|
+
var _this = this;
|
|
47
|
+
_classCallCheck(this, ValExternalStore);
|
|
48
|
+
defineProperty._defineProperty(this, "subscribe", function (paths) {
|
|
49
|
+
return function (listener) {
|
|
50
|
+
var subscriberId = createSubscriberId(paths);
|
|
51
|
+
var existing = _this.listeners.get(subscriberId);
|
|
52
|
+
if (existing) {
|
|
53
|
+
existing.push(listener);
|
|
54
|
+
} else {
|
|
55
|
+
_this.listeners.set(subscriberId, [listener]);
|
|
56
|
+
}
|
|
57
|
+
return function () {
|
|
58
|
+
var current = _this.listeners.get(subscriberId);
|
|
59
|
+
if (!current) return;
|
|
60
|
+
var idx = current.indexOf(listener);
|
|
61
|
+
if (idx >= 0) current.splice(idx, 1);
|
|
62
|
+
if (current.length === 0) _this.listeners["delete"](subscriberId);
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
defineProperty._defineProperty(this, "getSnapshot", function (paths) {
|
|
67
|
+
return function () {
|
|
68
|
+
return _this.get(paths);
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
defineProperty._defineProperty(this, "getServerSnapshot", function (paths) {
|
|
72
|
+
return function () {
|
|
73
|
+
return _this.get(paths);
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
defineProperty._defineProperty(this, "get", function (paths) {
|
|
77
|
+
var subscriberId = createSubscriberId(paths);
|
|
78
|
+
if (_this.snapshots.has(subscriberId)) {
|
|
79
|
+
return _this.snapshots.get(subscriberId);
|
|
80
|
+
}
|
|
81
|
+
// Build the snapshot from the path-keyed loadedSources so data that arrived
|
|
82
|
+
// before this subscriber registered is still returned. Cache it for a
|
|
83
|
+
// reference-stable result (required by useSyncExternalStore).
|
|
84
|
+
var record;
|
|
85
|
+
var _iterator = createForOfIteratorHelper._createForOfIteratorHelper(paths),
|
|
86
|
+
_step;
|
|
87
|
+
try {
|
|
88
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
89
|
+
var p = _step.value;
|
|
90
|
+
// Json never holds `undefined`, so a defined value means the path loaded.
|
|
91
|
+
var loaded = _this.loadedSources.get(p);
|
|
92
|
+
if (loaded !== undefined) {
|
|
93
|
+
if (!record) {
|
|
94
|
+
record = {};
|
|
95
|
+
}
|
|
96
|
+
record[p] = loaded;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
} catch (err) {
|
|
100
|
+
_iterator.e(err);
|
|
101
|
+
} finally {
|
|
102
|
+
_iterator.f();
|
|
103
|
+
}
|
|
104
|
+
_this.snapshots.set(subscriberId, record);
|
|
105
|
+
return record;
|
|
106
|
+
});
|
|
107
|
+
defineProperty._defineProperty(this, "hasAllLoaded", function (paths) {
|
|
108
|
+
var _iterator2 = createForOfIteratorHelper._createForOfIteratorHelper(paths),
|
|
109
|
+
_step2;
|
|
110
|
+
try {
|
|
111
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
112
|
+
var p = _step2.value;
|
|
113
|
+
if (!_this.loadedSources.has(p)) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
} catch (err) {
|
|
118
|
+
_iterator2.e(err);
|
|
119
|
+
} finally {
|
|
120
|
+
_iterator2.f();
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
123
|
+
});
|
|
124
|
+
/**
|
|
125
|
+
* Returns a cached promise that resolves once `update()` has populated
|
|
126
|
+
* every path in `paths`. The same promise instance is returned for the
|
|
127
|
+
* same paths until it resolves — required so `React.use` / classic
|
|
128
|
+
* Suspense doesn't re-suspend on every render.
|
|
129
|
+
*
|
|
130
|
+
* If the data never arrives (network failure, a path that is never
|
|
131
|
+
* `update()`'d, a typo in a module path) the promise would otherwise hang
|
|
132
|
+
* forever and keep the Suspense boundary in its fallback. To avoid a silent
|
|
133
|
+
* hang it resolves anyway after `LOAD_TIMEOUT_MS`, logging an error so the
|
|
134
|
+
* failure is diagnosable while the page still renders with partial data.
|
|
135
|
+
*/
|
|
136
|
+
defineProperty._defineProperty(this, "waitForLoad", function (paths) {
|
|
137
|
+
if (_this.hasAllLoaded(paths)) {
|
|
138
|
+
return Promise.resolve();
|
|
139
|
+
}
|
|
140
|
+
var subscriberId = createSubscriberId(paths);
|
|
141
|
+
var existing = _this.loadPromises.get(subscriberId);
|
|
142
|
+
if (existing) {
|
|
143
|
+
return existing;
|
|
144
|
+
}
|
|
145
|
+
var promise = new Promise(function (resolve) {
|
|
146
|
+
var cleanup = function cleanup() {
|
|
147
|
+
clearTimeout(timeout);
|
|
148
|
+
_this.loadListeners["delete"](listener);
|
|
149
|
+
_this.loadPromises["delete"](subscriberId);
|
|
150
|
+
};
|
|
151
|
+
var listener = function listener() {
|
|
152
|
+
if (_this.hasAllLoaded(paths)) {
|
|
153
|
+
cleanup();
|
|
154
|
+
resolve();
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
var timeout = setTimeout(function () {
|
|
158
|
+
var missing = paths.filter(function (p) {
|
|
159
|
+
return !_this.loadedSources.has(p);
|
|
160
|
+
});
|
|
161
|
+
console.error("Val: draft module(s) did not load within ".concat(LOAD_TIMEOUT_MS, "ms; rendering with partial data. Missing: ").concat(missing.join(", ")));
|
|
162
|
+
cleanup();
|
|
163
|
+
resolve();
|
|
164
|
+
}, LOAD_TIMEOUT_MS);
|
|
165
|
+
// Don't let the pending timer keep a Node process (e.g. the test runner
|
|
166
|
+
// or SSR) alive; setTimeout returns a number in the browser, where there
|
|
167
|
+
// is nothing to unref.
|
|
168
|
+
if (typeof timeout !== "number") {
|
|
169
|
+
timeout.unref();
|
|
170
|
+
}
|
|
171
|
+
_this.loadListeners.add(listener);
|
|
172
|
+
});
|
|
173
|
+
_this.loadPromises.set(subscriberId, promise);
|
|
174
|
+
return promise;
|
|
175
|
+
});
|
|
176
|
+
this.listeners = new Map();
|
|
177
|
+
this.loadPromises = new Map();
|
|
178
|
+
this.loadedSources = new Map();
|
|
179
|
+
this.snapshots = new Map();
|
|
180
|
+
this.loadListeners = new Set();
|
|
181
|
+
}
|
|
182
|
+
return _createClass(ValExternalStore, [{
|
|
183
|
+
key: "update",
|
|
184
|
+
value: function update(path, source) {
|
|
185
|
+
this.loadedSources.set(path, source);
|
|
186
|
+
// Invalidate cached snapshots that include this path so the next get()
|
|
187
|
+
// rebuilds a fresh (new-reference) record, then notify their listeners.
|
|
188
|
+
for (var _i = 0, _Array$from = Array.from(this.snapshots.keys()); _i < _Array$from.length; _i++) {
|
|
189
|
+
var subscriberId = _Array$from[_i];
|
|
190
|
+
if (subscriberId.includes(path)) {
|
|
191
|
+
// TODO: hash paths instead
|
|
192
|
+
this.snapshots["delete"](subscriberId);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
var _iterator3 = createForOfIteratorHelper._createForOfIteratorHelper(this.listeners.keys()),
|
|
196
|
+
_step3;
|
|
197
|
+
try {
|
|
198
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
199
|
+
var _subscriberId = _step3.value;
|
|
200
|
+
if (_subscriberId.includes(path)) {
|
|
201
|
+
this.emitChange(_subscriberId);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
} catch (err) {
|
|
205
|
+
_iterator3.e(err);
|
|
206
|
+
} finally {
|
|
207
|
+
_iterator3.f();
|
|
208
|
+
}
|
|
209
|
+
for (var _i2 = 0, _Array$from2 = Array.from(this.loadListeners); _i2 < _Array$from2.length; _i2++) {
|
|
210
|
+
var listener = _Array$from2[_i2];
|
|
211
|
+
listener();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}, {
|
|
215
|
+
key: "emitChange",
|
|
216
|
+
value: function emitChange(subscriberId) {
|
|
217
|
+
var _this$listeners$get;
|
|
218
|
+
var _iterator4 = createForOfIteratorHelper._createForOfIteratorHelper((_this$listeners$get = this.listeners.get(subscriberId)) !== null && _this$listeners$get !== void 0 ? _this$listeners$get : []),
|
|
219
|
+
_step4;
|
|
220
|
+
try {
|
|
221
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
222
|
+
var listener = _step4.value;
|
|
223
|
+
listener();
|
|
224
|
+
}
|
|
225
|
+
} catch (err) {
|
|
226
|
+
_iterator4.e(err);
|
|
227
|
+
} finally {
|
|
228
|
+
_iterator4.f();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}]);
|
|
232
|
+
}();
|
|
233
|
+
function createSubscriberId(paths) {
|
|
234
|
+
return paths.slice().sort().join("&");
|
|
235
|
+
}
|
|
236
|
+
var ValOverlayContext = /*#__PURE__*/React__default["default"].createContext({
|
|
237
|
+
store: undefined,
|
|
238
|
+
draftMode: false,
|
|
239
|
+
suspend: false
|
|
240
|
+
});
|
|
241
|
+
function ValOverlayProvider(_ref) {
|
|
242
|
+
var store = _ref.store,
|
|
243
|
+
draftMode = _ref.draftMode,
|
|
244
|
+
suspend = _ref.suspend,
|
|
245
|
+
children = _ref.children;
|
|
246
|
+
return /*#__PURE__*/jsxRuntime.jsx(ValOverlayContext.Provider, {
|
|
247
|
+
value: {
|
|
248
|
+
store: store,
|
|
249
|
+
draftMode: draftMode,
|
|
250
|
+
suspend: suspend
|
|
251
|
+
},
|
|
252
|
+
children: children
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
var useValOverlayContext = function useValOverlayContext() {
|
|
256
|
+
return React__default["default"].useContext(ValOverlayContext);
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
exports.ValExternalStore = ValExternalStore;
|
|
260
|
+
exports.ValOverlayContext = ValOverlayContext;
|
|
261
|
+
exports.ValOverlayProvider = ValOverlayProvider;
|
|
262
|
+
exports.useValOverlayContext = useValOverlayContext;
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var createForOfIteratorHelper = require('./createForOfIteratorHelper-d4afcad8.cjs.prod.js');
|
|
7
|
+
var defineProperty = require('./defineProperty-8951f469.cjs.prod.js');
|
|
8
|
+
var React = require('react');
|
|
9
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
10
|
+
require('./unsupportedIterableToArray-0d2087a2.cjs.prod.js');
|
|
11
|
+
|
|
12
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
13
|
+
|
|
14
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
15
|
+
|
|
16
|
+
function _classCallCheck(a, n) {
|
|
17
|
+
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function _defineProperties(e, r) {
|
|
21
|
+
for (var t = 0; t < r.length; t++) {
|
|
22
|
+
var o = r[t];
|
|
23
|
+
o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, defineProperty._toPropertyKey(o.key), o);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function _createClass(e, r, t) {
|
|
27
|
+
return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
|
|
28
|
+
writable: !1
|
|
29
|
+
}), e;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
var LOAD_TIMEOUT_MS = 10000;
|
|
33
|
+
var ValExternalStore = /*#__PURE__*/function () {
|
|
34
|
+
// Path-keyed cache of every source seen via update(). The single source of
|
|
35
|
+
// truth: load state and snapshots are both derived from this, so data can be
|
|
36
|
+
// queried for any combination of paths even before a subscriber registers.
|
|
37
|
+
|
|
38
|
+
// Reference-stable per-subscriberId snapshot cache for useSyncExternalStore.
|
|
39
|
+
// Built lazily from loadedSources in get() and invalidated in update().
|
|
40
|
+
|
|
41
|
+
// One-shot listeners used solely by waitForLoad. Kept separate from the
|
|
42
|
+
// useSyncExternalStore listeners so waitForLoad never has to register (and
|
|
43
|
+
// leak) a subscriberId.
|
|
44
|
+
|
|
45
|
+
function ValExternalStore() {
|
|
46
|
+
var _this = this;
|
|
47
|
+
_classCallCheck(this, ValExternalStore);
|
|
48
|
+
defineProperty._defineProperty(this, "subscribe", function (paths) {
|
|
49
|
+
return function (listener) {
|
|
50
|
+
var subscriberId = createSubscriberId(paths);
|
|
51
|
+
var existing = _this.listeners.get(subscriberId);
|
|
52
|
+
if (existing) {
|
|
53
|
+
existing.push(listener);
|
|
54
|
+
} else {
|
|
55
|
+
_this.listeners.set(subscriberId, [listener]);
|
|
56
|
+
}
|
|
57
|
+
return function () {
|
|
58
|
+
var current = _this.listeners.get(subscriberId);
|
|
59
|
+
if (!current) return;
|
|
60
|
+
var idx = current.indexOf(listener);
|
|
61
|
+
if (idx >= 0) current.splice(idx, 1);
|
|
62
|
+
if (current.length === 0) _this.listeners["delete"](subscriberId);
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
defineProperty._defineProperty(this, "getSnapshot", function (paths) {
|
|
67
|
+
return function () {
|
|
68
|
+
return _this.get(paths);
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
defineProperty._defineProperty(this, "getServerSnapshot", function (paths) {
|
|
72
|
+
return function () {
|
|
73
|
+
return _this.get(paths);
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
defineProperty._defineProperty(this, "get", function (paths) {
|
|
77
|
+
var subscriberId = createSubscriberId(paths);
|
|
78
|
+
if (_this.snapshots.has(subscriberId)) {
|
|
79
|
+
return _this.snapshots.get(subscriberId);
|
|
80
|
+
}
|
|
81
|
+
// Build the snapshot from the path-keyed loadedSources so data that arrived
|
|
82
|
+
// before this subscriber registered is still returned. Cache it for a
|
|
83
|
+
// reference-stable result (required by useSyncExternalStore).
|
|
84
|
+
var record;
|
|
85
|
+
var _iterator = createForOfIteratorHelper._createForOfIteratorHelper(paths),
|
|
86
|
+
_step;
|
|
87
|
+
try {
|
|
88
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
89
|
+
var p = _step.value;
|
|
90
|
+
// Json never holds `undefined`, so a defined value means the path loaded.
|
|
91
|
+
var loaded = _this.loadedSources.get(p);
|
|
92
|
+
if (loaded !== undefined) {
|
|
93
|
+
if (!record) {
|
|
94
|
+
record = {};
|
|
95
|
+
}
|
|
96
|
+
record[p] = loaded;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
} catch (err) {
|
|
100
|
+
_iterator.e(err);
|
|
101
|
+
} finally {
|
|
102
|
+
_iterator.f();
|
|
103
|
+
}
|
|
104
|
+
_this.snapshots.set(subscriberId, record);
|
|
105
|
+
return record;
|
|
106
|
+
});
|
|
107
|
+
defineProperty._defineProperty(this, "hasAllLoaded", function (paths) {
|
|
108
|
+
var _iterator2 = createForOfIteratorHelper._createForOfIteratorHelper(paths),
|
|
109
|
+
_step2;
|
|
110
|
+
try {
|
|
111
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
112
|
+
var p = _step2.value;
|
|
113
|
+
if (!_this.loadedSources.has(p)) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
} catch (err) {
|
|
118
|
+
_iterator2.e(err);
|
|
119
|
+
} finally {
|
|
120
|
+
_iterator2.f();
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
123
|
+
});
|
|
124
|
+
/**
|
|
125
|
+
* Returns a cached promise that resolves once `update()` has populated
|
|
126
|
+
* every path in `paths`. The same promise instance is returned for the
|
|
127
|
+
* same paths until it resolves — required so `React.use` / classic
|
|
128
|
+
* Suspense doesn't re-suspend on every render.
|
|
129
|
+
*
|
|
130
|
+
* If the data never arrives (network failure, a path that is never
|
|
131
|
+
* `update()`'d, a typo in a module path) the promise would otherwise hang
|
|
132
|
+
* forever and keep the Suspense boundary in its fallback. To avoid a silent
|
|
133
|
+
* hang it resolves anyway after `LOAD_TIMEOUT_MS`, logging an error so the
|
|
134
|
+
* failure is diagnosable while the page still renders with partial data.
|
|
135
|
+
*/
|
|
136
|
+
defineProperty._defineProperty(this, "waitForLoad", function (paths) {
|
|
137
|
+
if (_this.hasAllLoaded(paths)) {
|
|
138
|
+
return Promise.resolve();
|
|
139
|
+
}
|
|
140
|
+
var subscriberId = createSubscriberId(paths);
|
|
141
|
+
var existing = _this.loadPromises.get(subscriberId);
|
|
142
|
+
if (existing) {
|
|
143
|
+
return existing;
|
|
144
|
+
}
|
|
145
|
+
var promise = new Promise(function (resolve) {
|
|
146
|
+
var cleanup = function cleanup() {
|
|
147
|
+
clearTimeout(timeout);
|
|
148
|
+
_this.loadListeners["delete"](listener);
|
|
149
|
+
_this.loadPromises["delete"](subscriberId);
|
|
150
|
+
};
|
|
151
|
+
var listener = function listener() {
|
|
152
|
+
if (_this.hasAllLoaded(paths)) {
|
|
153
|
+
cleanup();
|
|
154
|
+
resolve();
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
var timeout = setTimeout(function () {
|
|
158
|
+
var missing = paths.filter(function (p) {
|
|
159
|
+
return !_this.loadedSources.has(p);
|
|
160
|
+
});
|
|
161
|
+
console.error("Val: draft module(s) did not load within ".concat(LOAD_TIMEOUT_MS, "ms; rendering with partial data. Missing: ").concat(missing.join(", ")));
|
|
162
|
+
cleanup();
|
|
163
|
+
resolve();
|
|
164
|
+
}, LOAD_TIMEOUT_MS);
|
|
165
|
+
// Don't let the pending timer keep a Node process (e.g. the test runner
|
|
166
|
+
// or SSR) alive; setTimeout returns a number in the browser, where there
|
|
167
|
+
// is nothing to unref.
|
|
168
|
+
if (typeof timeout !== "number") {
|
|
169
|
+
timeout.unref();
|
|
170
|
+
}
|
|
171
|
+
_this.loadListeners.add(listener);
|
|
172
|
+
});
|
|
173
|
+
_this.loadPromises.set(subscriberId, promise);
|
|
174
|
+
return promise;
|
|
175
|
+
});
|
|
176
|
+
this.listeners = new Map();
|
|
177
|
+
this.loadPromises = new Map();
|
|
178
|
+
this.loadedSources = new Map();
|
|
179
|
+
this.snapshots = new Map();
|
|
180
|
+
this.loadListeners = new Set();
|
|
181
|
+
}
|
|
182
|
+
return _createClass(ValExternalStore, [{
|
|
183
|
+
key: "update",
|
|
184
|
+
value: function update(path, source) {
|
|
185
|
+
this.loadedSources.set(path, source);
|
|
186
|
+
// Invalidate cached snapshots that include this path so the next get()
|
|
187
|
+
// rebuilds a fresh (new-reference) record, then notify their listeners.
|
|
188
|
+
for (var _i = 0, _Array$from = Array.from(this.snapshots.keys()); _i < _Array$from.length; _i++) {
|
|
189
|
+
var subscriberId = _Array$from[_i];
|
|
190
|
+
if (subscriberId.includes(path)) {
|
|
191
|
+
// TODO: hash paths instead
|
|
192
|
+
this.snapshots["delete"](subscriberId);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
var _iterator3 = createForOfIteratorHelper._createForOfIteratorHelper(this.listeners.keys()),
|
|
196
|
+
_step3;
|
|
197
|
+
try {
|
|
198
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
199
|
+
var _subscriberId = _step3.value;
|
|
200
|
+
if (_subscriberId.includes(path)) {
|
|
201
|
+
this.emitChange(_subscriberId);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
} catch (err) {
|
|
205
|
+
_iterator3.e(err);
|
|
206
|
+
} finally {
|
|
207
|
+
_iterator3.f();
|
|
208
|
+
}
|
|
209
|
+
for (var _i2 = 0, _Array$from2 = Array.from(this.loadListeners); _i2 < _Array$from2.length; _i2++) {
|
|
210
|
+
var listener = _Array$from2[_i2];
|
|
211
|
+
listener();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}, {
|
|
215
|
+
key: "emitChange",
|
|
216
|
+
value: function emitChange(subscriberId) {
|
|
217
|
+
var _this$listeners$get;
|
|
218
|
+
var _iterator4 = createForOfIteratorHelper._createForOfIteratorHelper((_this$listeners$get = this.listeners.get(subscriberId)) !== null && _this$listeners$get !== void 0 ? _this$listeners$get : []),
|
|
219
|
+
_step4;
|
|
220
|
+
try {
|
|
221
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
222
|
+
var listener = _step4.value;
|
|
223
|
+
listener();
|
|
224
|
+
}
|
|
225
|
+
} catch (err) {
|
|
226
|
+
_iterator4.e(err);
|
|
227
|
+
} finally {
|
|
228
|
+
_iterator4.f();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}]);
|
|
232
|
+
}();
|
|
233
|
+
function createSubscriberId(paths) {
|
|
234
|
+
return paths.slice().sort().join("&");
|
|
235
|
+
}
|
|
236
|
+
var ValOverlayContext = /*#__PURE__*/React__default["default"].createContext({
|
|
237
|
+
store: undefined,
|
|
238
|
+
draftMode: false,
|
|
239
|
+
suspend: false
|
|
240
|
+
});
|
|
241
|
+
function ValOverlayProvider(_ref) {
|
|
242
|
+
var store = _ref.store,
|
|
243
|
+
draftMode = _ref.draftMode,
|
|
244
|
+
suspend = _ref.suspend,
|
|
245
|
+
children = _ref.children;
|
|
246
|
+
return /*#__PURE__*/jsxRuntime.jsx(ValOverlayContext.Provider, {
|
|
247
|
+
value: {
|
|
248
|
+
store: store,
|
|
249
|
+
draftMode: draftMode,
|
|
250
|
+
suspend: suspend
|
|
251
|
+
},
|
|
252
|
+
children: children
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
var useValOverlayContext = function useValOverlayContext() {
|
|
256
|
+
return React__default["default"].useContext(ValOverlayContext);
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
exports.ValExternalStore = ValExternalStore;
|
|
260
|
+
exports.ValOverlayContext = ValOverlayContext;
|
|
261
|
+
exports.ValOverlayProvider = ValOverlayProvider;
|
|
262
|
+
exports.useValOverlayContext = useValOverlayContext;
|
|
@@ -3,7 +3,31 @@ import { raw } from "@valbuild/react/stega";
|
|
|
3
3
|
import { getUnpatchedUnencodedVal } from "./getUnpatchedUnencodedVal.js";
|
|
4
4
|
import { decodeValPathsOfString } from "./decodeValPathsOfString.js";
|
|
5
5
|
import { attrs } from "@valbuild/react/stega";
|
|
6
|
+
/**
|
|
7
|
+
* Returns true if the Val Enable cookie is set. Must be called in a
|
|
8
|
+
* Server Component, Server Action, or Route Handler — it reads from
|
|
9
|
+
* `next/headers` and returns false in any other context.
|
|
10
|
+
*
|
|
11
|
+
* ⚠️ Reading cookies opts the route into **dynamic rendering**: calling this
|
|
12
|
+
* in a layout or page disables static generation and the full route cache for
|
|
13
|
+
* every route it covers, for all visitors. It is NOT needed for the
|
|
14
|
+
* `suspend` prop on ValProvider (which detects the cookie client-side) —
|
|
15
|
+
* reserve it for advanced server-side conditionals.
|
|
16
|
+
*/
|
|
17
|
+
declare function isValEnabled(): Promise<boolean>;
|
|
6
18
|
export declare const initVal: (config?: ValConfig) => InitVal & {
|
|
19
|
+
/**
|
|
20
|
+
* Returns true if the Val Enable cookie is set. Must be called in a
|
|
21
|
+
* Server Component, Server Action, or Route Handler — it reads from
|
|
22
|
+
* `next/headers` and returns false in any other context.
|
|
23
|
+
*
|
|
24
|
+
* ⚠️ Reading cookies opts the route into **dynamic rendering**: calling
|
|
25
|
+
* this in a layout or page disables static generation and the full route
|
|
26
|
+
* cache for every route it covers, for all visitors. It is NOT needed for
|
|
27
|
+
* the `suspend` prop on ValProvider (which detects the cookie client-side)
|
|
28
|
+
* — reserve it for advanced server-side conditionals.
|
|
29
|
+
*/
|
|
30
|
+
isValEnabled: typeof isValEnabled;
|
|
7
31
|
val: ValConstructor & {
|
|
8
32
|
/**
|
|
9
33
|
* Returns the original module data, without any applied patches or stega encoding.
|
|
@@ -51,3 +75,4 @@ export declare const initVal: (config?: ValConfig) => InitVal & {
|
|
|
51
75
|
nextAppRouter: ValRouter;
|
|
52
76
|
externalPageRouter: ValRouter;
|
|
53
77
|
};
|
|
78
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function _toPrimitive(t, r) {
|
|
4
|
+
if ("object" != typeof t || !t) return t;
|
|
5
|
+
var e = t[Symbol.toPrimitive];
|
|
6
|
+
if (void 0 !== e) {
|
|
7
|
+
var i = e.call(t, r || "default");
|
|
8
|
+
if ("object" != typeof i) return i;
|
|
9
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
10
|
+
}
|
|
11
|
+
return ("string" === r ? String : Number)(t);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function _toPropertyKey(t) {
|
|
15
|
+
var i = _toPrimitive(t, "string");
|
|
16
|
+
return "symbol" == typeof i ? i : i + "";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function _defineProperty(e, r, t) {
|
|
20
|
+
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
21
|
+
value: t,
|
|
22
|
+
enumerable: !0,
|
|
23
|
+
configurable: !0,
|
|
24
|
+
writable: !0
|
|
25
|
+
}) : e[r] = t, e;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
exports._defineProperty = _defineProperty;
|
|
29
|
+
exports._toPropertyKey = _toPropertyKey;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
function _toPrimitive(t, r) {
|
|
2
|
+
if ("object" != typeof t || !t) return t;
|
|
3
|
+
var e = t[Symbol.toPrimitive];
|
|
4
|
+
if (void 0 !== e) {
|
|
5
|
+
var i = e.call(t, r || "default");
|
|
6
|
+
if ("object" != typeof i) return i;
|
|
7
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
8
|
+
}
|
|
9
|
+
return ("string" === r ? String : Number)(t);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function _toPropertyKey(t) {
|
|
13
|
+
var i = _toPrimitive(t, "string");
|
|
14
|
+
return "symbol" == typeof i ? i : i + "";
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function _defineProperty(e, r, t) {
|
|
18
|
+
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
19
|
+
value: t,
|
|
20
|
+
enumerable: !0,
|
|
21
|
+
configurable: !0,
|
|
22
|
+
writable: !0
|
|
23
|
+
}) : e[r] = t, e;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { _defineProperty as _, _toPropertyKey as a };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function _toPrimitive(t, r) {
|
|
4
|
+
if ("object" != typeof t || !t) return t;
|
|
5
|
+
var e = t[Symbol.toPrimitive];
|
|
6
|
+
if (void 0 !== e) {
|
|
7
|
+
var i = e.call(t, r || "default");
|
|
8
|
+
if ("object" != typeof i) return i;
|
|
9
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
10
|
+
}
|
|
11
|
+
return ("string" === r ? String : Number)(t);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function _toPropertyKey(t) {
|
|
15
|
+
var i = _toPrimitive(t, "string");
|
|
16
|
+
return "symbol" == typeof i ? i : i + "";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function _defineProperty(e, r, t) {
|
|
20
|
+
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
21
|
+
value: t,
|
|
22
|
+
enumerable: !0,
|
|
23
|
+
configurable: !0,
|
|
24
|
+
writable: !0
|
|
25
|
+
}) : e[r] = t, e;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
exports._defineProperty = _defineProperty;
|
|
29
|
+
exports._toPropertyKey = _toPropertyKey;
|