@devvit/public-api 0.11.0-next-2024-07-24-67e594e5c.0 → 0.11.0-next-2024-07-24-919ab41f5.0
Sign up to get free protection for your applications and to get access to all the features.
- package/devvit/internals/blocks/handler/BlocksHandler.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/BlocksHandler.js +22 -22
- package/devvit/internals/blocks/handler/RenderContext.d.ts +12 -0
- package/devvit/internals/blocks/handler/RenderContext.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/RenderContext.js +3 -0
- package/devvit/internals/blocks/handler/useAsync.d.ts +1 -0
- package/devvit/internals/blocks/handler/useAsync.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/useState.d.ts +1 -2
- package/devvit/internals/blocks/handler/useState.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/useState.js +82 -42
- package/devvit/internals/blocks/handler/useState.test.d.ts.map +1 -1
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js +1 -1
- package/meta.json +12 -17
- package/meta.min.json +12 -18
- package/package.json +7 -7
- package/public-api.d.ts +0 -2
- package/public-api.iife.js +84 -61
- package/public-api.min.js +5 -5
- package/public-api.min.js.map +4 -4
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"BlocksHandler.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/BlocksHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
1
|
+
{"version":3,"file":"BlocksHandler.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/BlocksHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAgB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAe,IAAI,EAAE,UAAU,EAAE,WAAW,EAAS,MAAM,YAAY,CAAC;AAGpF;;;;;;GAMG;AACH,eAAO,IAAI,oBAAoB,EAAE,aAAa,GAAG,IAAW,CAAC;AAE7D,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CASxD;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,IAAI,EACzC,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,CAAC,GAChC,CAAC,CAkCH;AAED,eAAO,IAAI,oBAAoB,EAAE,aAAa,GAAG,IAAW,CAAC;AAE7D;;;;GAIG;AACH,qBAAa,aAAa;;IAMxB,oBAAoB,EAAE,aAAa,GAAG,IAAI,CAAQ;gBAEtC,IAAI,EAAE,GAAG,CAAC,iBAAiB;IAMjC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;CAyW1E"}
|
@@ -10,7 +10,6 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
10
10
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
11
11
|
};
|
12
12
|
var _BlocksHandler_instances, _BlocksHandler_root, _BlocksHandler_contextBuilder, _BlocksHandler_blocksTransformer, _BlocksHandler_debug_get, _BlocksHandler_loadHooks, _BlocksHandler_handleAsyncQueues, _BlocksHandler_attemptHook, _BlocksHandler_handleMainQueue, _BlocksHandler_renderRoot, _BlocksHandler_render, _BlocksHandler_renderList, _BlocksHandler_renderElement, _BlocksHandler_reifyProps;
|
13
|
-
import isEqual from 'lodash.isequal';
|
14
13
|
import { BlocksTransformer } from '../BlocksTransformer.js';
|
15
14
|
import { ContextBuilder } from './ContextBuilder.js';
|
16
15
|
import { _isTombstone, RenderContext } from './RenderContext.js';
|
@@ -69,6 +68,7 @@ export function registerHook(options, initializer) {
|
|
69
68
|
assertValidNamespace(options.namespace);
|
70
69
|
const hookId = _activeRenderContext.nextHookId(options);
|
71
70
|
const context = _activeRenderContext;
|
71
|
+
context._touched[hookId] = true;
|
72
72
|
const params = {
|
73
73
|
hookId,
|
74
74
|
invalidate: () => {
|
@@ -129,6 +129,13 @@ export class BlocksHandler {
|
|
129
129
|
let changed;
|
130
130
|
let progress;
|
131
131
|
let remaining = [...eventsToProcess];
|
132
|
+
/**
|
133
|
+
* When purely rendering, we now add one synthetic event. This enables us to loop over the events that an initial render may generate
|
134
|
+
* in an async world. This is a bit of a hack, but it's the simplest way to handle this.
|
135
|
+
*/
|
136
|
+
if (eventsToProcess.length === 0) {
|
137
|
+
eventsToProcess.push({});
|
138
|
+
}
|
132
139
|
if (__classPrivateFieldGet(this, _BlocksHandler_instances, "a", _BlocksHandler_debug_get))
|
133
140
|
console.debug('[blocks] starting processing events');
|
134
141
|
while (eventsToProcess.length > 0) {
|
@@ -163,6 +170,7 @@ export class BlocksHandler {
|
|
163
170
|
catch (e) {
|
164
171
|
if (__classPrivateFieldGet(this, _BlocksHandler_instances, "a", _BlocksHandler_debug_get))
|
165
172
|
console.debug('[blocks] caught in handler', e);
|
173
|
+
context._latestRenderContent = undefined;
|
166
174
|
/**
|
167
175
|
* If we have a progress, we can recover from an error by rolling back to the last progress, and then letting the
|
168
176
|
* remaining events be reprocessed.
|
@@ -180,6 +188,7 @@ export class BlocksHandler {
|
|
180
188
|
break;
|
181
189
|
}
|
182
190
|
else {
|
191
|
+
console.error('[blocks] unhandled error in handler', e);
|
183
192
|
throw e;
|
184
193
|
}
|
185
194
|
}
|
@@ -220,27 +229,12 @@ export class BlocksHandler {
|
|
220
229
|
remaining = [...eventsToProcess];
|
221
230
|
}
|
222
231
|
} // End of while loop
|
232
|
+
// Rendering only happens on the main queue.
|
223
233
|
if (isMainQueue) {
|
224
|
-
|
225
|
-
|
226
|
-
const effectsCopy = { ...context._effects };
|
227
|
-
// Rendering only happens on the main queue.
|
228
|
-
const tags = __classPrivateFieldGet(this, _BlocksHandler_instances, "m", _BlocksHandler_renderRoot).call(this, __classPrivateFieldGet(this, _BlocksHandler_root, "f"), context._rootProps ?? {}, context);
|
229
|
-
/**
|
230
|
-
* It's technically ok for renderRoot to mutate, but that's only in the context of loadHooks. This render should
|
231
|
-
* be idempotent, so we're going to enforce that it doesn't mutate state.
|
232
|
-
*
|
233
|
-
* TODO: hide this behind a flag, because it's possibly expensive.
|
234
|
-
*/
|
235
|
-
if (!isEqual(context._state, stateCopy)) {
|
236
|
-
console.error('[blocks] State was mutated during rendering', context._state, stateCopy);
|
237
|
-
}
|
238
|
-
if (!isEqual(context._requeueEvents, eventsCopy)) {
|
239
|
-
console.error('[blocks] Events were mutated during rendering', context._requeueEvents, eventsCopy);
|
240
|
-
}
|
241
|
-
if (!isEqual(context._effects, effectsCopy)) {
|
242
|
-
console.error('[blocks] Effects were mutated during rendering', context._effects, effectsCopy);
|
234
|
+
if (!context._latestRenderContent) {
|
235
|
+
context._latestRenderContent = __classPrivateFieldGet(this, _BlocksHandler_instances, "m", _BlocksHandler_renderRoot).call(this, __classPrivateFieldGet(this, _BlocksHandler_root, "f"), context.request.props ?? {}, context);
|
243
236
|
}
|
237
|
+
const tags = context._latestRenderContent;
|
244
238
|
if (tags) {
|
245
239
|
blocks = __classPrivateFieldGet(this, _BlocksHandler_blocksTransformer, "f").createBlocksElementOrThrow(tags);
|
246
240
|
blocks = __classPrivateFieldGet(this, _BlocksHandler_blocksTransformer, "f").ensureRootBlock(blocks);
|
@@ -258,8 +252,13 @@ _BlocksHandler_root = new WeakMap(), _BlocksHandler_contextBuilder = new WeakMap
|
|
258
252
|
return !!this._latestRenderContext?.devvitContext.debug.blocks;
|
259
253
|
}, _BlocksHandler_loadHooks = function _BlocksHandler_loadHooks(context, ..._events) {
|
260
254
|
// TBD: partial rendering
|
261
|
-
context.
|
255
|
+
context._touched = {};
|
262
256
|
__classPrivateFieldGet(this, _BlocksHandler_instances, "m", _BlocksHandler_renderRoot).call(this, __classPrivateFieldGet(this, _BlocksHandler_root, "f"), context.request.props ?? {}, context);
|
257
|
+
for (const hookId in context._hooks) {
|
258
|
+
if (!context._touched[hookId]) {
|
259
|
+
delete context._hooks[hookId];
|
260
|
+
}
|
261
|
+
}
|
263
262
|
}, _BlocksHandler_handleAsyncQueues =
|
264
263
|
/**
|
265
264
|
* These can all run in parallel, because they only emit effects
|
@@ -307,7 +306,7 @@ async function _BlocksHandler_handleAsyncQueues(context, ...batch) {
|
|
307
306
|
if (__classPrivateFieldGet(this, _BlocksHandler_instances, "a", _BlocksHandler_debug_get))
|
308
307
|
console.log('[blocks] after', context._state);
|
309
308
|
}
|
310
|
-
//
|
309
|
+
// We need this to process possible unmounts given the most recent event
|
311
310
|
__classPrivateFieldGet(this, _BlocksHandler_instances, "m", _BlocksHandler_loadHooks).call(this, context);
|
312
311
|
}, _BlocksHandler_renderRoot = function _BlocksHandler_renderRoot(component, props, context) {
|
313
312
|
if (__classPrivateFieldGet(this, _BlocksHandler_instances, "a", _BlocksHandler_debug_get))
|
@@ -329,6 +328,7 @@ async function _BlocksHandler_handleAsyncQueues(context, ...batch) {
|
|
329
328
|
if (typeof root === 'string') {
|
330
329
|
throw new Error(`The root element must return a valid block, not a string. Try wrapping the element in a <text>your content</text> tag to continue.`);
|
331
330
|
}
|
331
|
+
context._latestRenderContent = root;
|
332
332
|
return root;
|
333
333
|
}
|
334
334
|
catch (e) {
|
@@ -2,6 +2,7 @@ import type { Effect, Metadata, UIEvent, UIRequest } from '@devvit/protos';
|
|
2
2
|
import type { Devvit } from '../../../Devvit.js';
|
3
3
|
import type { EffectEmitter } from '../EffectEmitter.js';
|
4
4
|
import type { BlocksState, EventHandler, Hook, HookRef, HookSegment } from './types.js';
|
5
|
+
import type { ReifiedBlockElement } from '../BlocksReconciler.js';
|
5
6
|
/**
|
6
7
|
* The RenderContext is a class that holds the state of the rendering process.
|
7
8
|
*
|
@@ -26,9 +27,20 @@ export declare class RenderContext implements EffectEmitter {
|
|
26
27
|
_effects: {
|
27
28
|
[key: string]: Effect;
|
28
29
|
};
|
30
|
+
/**
|
31
|
+
* While processing events, we do some renders to load hooks. If those renders produce valid content, then
|
32
|
+
* we won't have to render at the end of the event processing, rather we can hang onto the last render and
|
33
|
+
* reuse it.
|
34
|
+
*/
|
35
|
+
_latestRenderContent: ReifiedBlockElement | undefined;
|
36
|
+
/** Has this state been mutated since initially loaded? */
|
29
37
|
_changed: {
|
30
38
|
[hookID: string]: true;
|
31
39
|
};
|
40
|
+
/** Does this hook still exist in the most recent render? */
|
41
|
+
_touched: {
|
42
|
+
[hookID: string]: true;
|
43
|
+
};
|
32
44
|
/** Events that will re-enter the dispatcher queue */
|
33
45
|
_requeueEvents: UIEvent[];
|
34
46
|
_rootProps: {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RenderContext.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/RenderContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
1
|
+
{"version":3,"file":"RenderContext.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/RenderContext.ts"],"names":[],"mappings":"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"}
|
@@ -40,7 +40,10 @@ export class RenderContext {
|
|
40
40
|
this._hooks = {};
|
41
41
|
this._prevHookId = '';
|
42
42
|
this._effects = {};
|
43
|
+
/** Has this state been mutated since initially loaded? */
|
43
44
|
this._changed = {};
|
45
|
+
/** Does this hook still exist in the most recent render? */
|
46
|
+
this._touched = {};
|
44
47
|
/** Events that will re-enter the dispatcher queue */
|
45
48
|
this._requeueEvents = [];
|
46
49
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useAsync.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/useAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAQ3F,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,CAAC;
|
1
|
+
{"version":3,"file":"useAsync.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/useAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAQ3F,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAyGhF;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAC1C,WAAW,EAAE,wBAAwB,CAAC,CAAC,CAAC,EACxC,OAAO,GAAE,YAAiB,GACzB,cAAc,CAAC,CAAC,CAAC,CAUnB"}
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import type { JSONValue } from '@devvit/shared-types/json.js';
|
2
|
-
import type {
|
3
|
-
export declare function useAsyncState<S extends JSONValue>(initializer: AsyncUseStateInitializer<S>): UseStateResult<S>;
|
2
|
+
import type { UseStateInitializer, UseStateResult } from '../../../../types/hooks.js';
|
4
3
|
export declare function useState(initialState: UseStateInitializer<boolean>): UseStateResult<boolean>;
|
5
4
|
export declare function useState(initialState: UseStateInitializer<number>): UseStateResult<number>;
|
6
5
|
export declare function useState(initialState: UseStateInitializer<string>): UseStateResult<string>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useState.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/useState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"useState.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/useState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAEV,mBAAmB,EACnB,cAAc,EACf,MAAM,4BAA4B,CAAC;AAoGpC,wBAAgB,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;AAC9F,wBAAgB,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAC5F,wBAAgB,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAC5F,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAC1C,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAC,GACnC,cAAc,CAAC,CAAC,CAAC,CAAC"}
|
@@ -9,63 +9,103 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
11
11
|
};
|
12
|
-
var
|
12
|
+
var _UseStateHook_changed, _UseStateHook_ctx, _UseStateHook_initializer, _UseStateHook_hookId, _UseStateHook_promise;
|
13
13
|
import { registerHook } from './BlocksHandler.js';
|
14
14
|
import { RenderInterruptError } from './types.js';
|
15
|
-
|
15
|
+
/**
|
16
|
+
* Implementation of the useState hook.
|
17
|
+
*/
|
18
|
+
class UseStateHook {
|
16
19
|
constructor(initializer, params) {
|
17
|
-
this.state = { value: null,
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
__classPrivateFieldSet(this,
|
24
|
-
__classPrivateFieldSet(this,
|
25
|
-
__classPrivateFieldSet(this,
|
20
|
+
this.state = { value: null, load_state: 'initial' };
|
21
|
+
_UseStateHook_changed.set(this, void 0);
|
22
|
+
_UseStateHook_ctx.set(this, void 0);
|
23
|
+
_UseStateHook_initializer.set(this, void 0);
|
24
|
+
_UseStateHook_hookId.set(this, void 0);
|
25
|
+
_UseStateHook_promise.set(this, void 0);
|
26
|
+
__classPrivateFieldSet(this, _UseStateHook_initializer, initializer, "f");
|
27
|
+
__classPrivateFieldSet(this, _UseStateHook_hookId, params.hookId, "f");
|
28
|
+
__classPrivateFieldSet(this, _UseStateHook_changed, params.invalidate, "f");
|
29
|
+
__classPrivateFieldSet(this, _UseStateHook_ctx, params.context, "f");
|
26
30
|
}
|
31
|
+
/**
|
32
|
+
* For state initialized with a promise, this function is called when the promise resolves. This should
|
33
|
+
* happen inside the same event loop as the original call to useState, assuming circuit-breaking didn't happen.
|
34
|
+
*
|
35
|
+
* If circuit-breaking did happen, this function will be called on the server and the state will propagate to
|
36
|
+
* the client.
|
37
|
+
*
|
38
|
+
* This is intended to be synchronous in the event loop, so will block and waterfall. useAsync is the non-waterfalling
|
39
|
+
* version, but this version is provided for backwards compatibility.
|
40
|
+
*/
|
27
41
|
async onUIEvent() {
|
28
|
-
if (this.state.
|
29
|
-
|
30
|
-
|
31
|
-
|
42
|
+
if (this.state.load_state === 'loading' && __classPrivateFieldGet(this, _UseStateHook_promise, "f")) {
|
43
|
+
try {
|
44
|
+
this.state.value = await __classPrivateFieldGet(this, _UseStateHook_promise, "f");
|
45
|
+
this.state.load_state = 'loaded';
|
46
|
+
}
|
47
|
+
catch (e) {
|
48
|
+
this.state.load_state = 'error';
|
49
|
+
console.error('Error loading async state: ', e);
|
50
|
+
}
|
51
|
+
__classPrivateFieldGet(this, _UseStateHook_changed, "f").call(this);
|
52
|
+
}
|
53
|
+
else {
|
54
|
+
/**
|
55
|
+
* This would probably be some sort of concurrent access bug. It's not clear what would put us
|
56
|
+
* in this state, but it's worth logging so we can investigate.
|
57
|
+
*/
|
58
|
+
console.warn('Invalid state: ', this.state.load_state, __classPrivateFieldGet(this, _UseStateHook_promise, "f"));
|
32
59
|
}
|
33
60
|
}
|
34
61
|
setter(action) {
|
35
62
|
this.state.value = action instanceof Function ? action(this.state.value) : action;
|
36
|
-
|
63
|
+
this.state.load_state = 'loaded';
|
64
|
+
__classPrivateFieldGet(this, _UseStateHook_changed, "f").call(this);
|
37
65
|
}
|
66
|
+
/**
|
67
|
+
* After the existing state is loaded, we need to run the initializer if there was no state found.
|
68
|
+
*/
|
38
69
|
onStateLoaded() {
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
asyncRequest: { requestId: __classPrivateFieldGet(this, _AsyncStateHook_hookId, "f") },
|
44
|
-
hook: __classPrivateFieldGet(this, _AsyncStateHook_hookId, "f"),
|
45
|
-
};
|
46
|
-
__classPrivateFieldGet(this, _AsyncStateHook_ctx, "f").addToRequeueEvents(requeueEvent);
|
70
|
+
/**
|
71
|
+
* If the state is still loading, we need to throw an error to prevent using the null state.
|
72
|
+
*/
|
73
|
+
if (this.state.load_state === 'loading') {
|
47
74
|
throw new RenderInterruptError();
|
48
75
|
}
|
76
|
+
if (this.state.load_state === 'initial') {
|
77
|
+
let initialValue;
|
78
|
+
try {
|
79
|
+
initialValue =
|
80
|
+
__classPrivateFieldGet(this, _UseStateHook_initializer, "f") instanceof Function ? __classPrivateFieldGet(this, _UseStateHook_initializer, "f").call(this) : __classPrivateFieldGet(this, _UseStateHook_initializer, "f");
|
81
|
+
}
|
82
|
+
catch (e) {
|
83
|
+
console.log('error in loading async', e);
|
84
|
+
this.state.load_state = 'error';
|
85
|
+
__classPrivateFieldGet(this, _UseStateHook_changed, "f").call(this);
|
86
|
+
return;
|
87
|
+
}
|
88
|
+
if (initialValue instanceof Promise) {
|
89
|
+
__classPrivateFieldSet(this, _UseStateHook_promise, initialValue, "f");
|
90
|
+
this.state.load_state = 'loading';
|
91
|
+
const requeueEvent = {
|
92
|
+
asyncRequest: { requestId: __classPrivateFieldGet(this, _UseStateHook_hookId, "f") },
|
93
|
+
hook: __classPrivateFieldGet(this, _UseStateHook_hookId, "f"),
|
94
|
+
};
|
95
|
+
__classPrivateFieldGet(this, _UseStateHook_ctx, "f").addToRequeueEvents(requeueEvent);
|
96
|
+
__classPrivateFieldGet(this, _UseStateHook_changed, "f").call(this);
|
97
|
+
throw new RenderInterruptError();
|
98
|
+
}
|
99
|
+
else {
|
100
|
+
this.state.value = initialValue;
|
101
|
+
this.state.load_state = 'loaded';
|
102
|
+
}
|
103
|
+
__classPrivateFieldGet(this, _UseStateHook_changed, "f").call(this);
|
104
|
+
}
|
49
105
|
}
|
50
106
|
}
|
51
|
-
|
52
|
-
export function useAsyncState(initializer) {
|
53
|
-
const hook = registerHook({ namespace: 'useAsyncState' }, (params) => {
|
54
|
-
return new AsyncStateHook(initializer, params);
|
55
|
-
});
|
56
|
-
return [hook.state.value, hook.setter.bind(hook)];
|
57
|
-
}
|
107
|
+
_UseStateHook_changed = new WeakMap(), _UseStateHook_ctx = new WeakMap(), _UseStateHook_initializer = new WeakMap(), _UseStateHook_hookId = new WeakMap(), _UseStateHook_promise = new WeakMap();
|
58
108
|
export function useState(initialState) {
|
59
|
-
const hook = registerHook({ namespace: 'useState' }, (params) =>
|
60
|
-
const state = initialState instanceof Function ? initialState() : initialState;
|
61
|
-
if (state instanceof Promise) {
|
62
|
-
return new AsyncStateHook(() => state, params);
|
63
|
-
}
|
64
|
-
const setter = (action) => {
|
65
|
-
hook.state.value = action instanceof Function ? action(hook.state.value) : action;
|
66
|
-
params.invalidate();
|
67
|
-
};
|
68
|
-
return { state: { value: state }, setter };
|
69
|
-
});
|
109
|
+
const hook = registerHook({ namespace: 'useState' }, (params) => new UseStateHook(initialState, params));
|
70
110
|
return [hook.state.value, hook.setter.bind(hook)];
|
71
111
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useState.test.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/useState.test.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"useState.test.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/useState.test.tsx"],"names":[],"mappings":""}
|
package/index.d.ts
CHANGED
@@ -7,7 +7,7 @@ export * from './types/index.js';
|
|
7
7
|
export * from '@devvit/shared-types/json.js';
|
8
8
|
export * from './apis/ui/helpers/svg.js';
|
9
9
|
export { useAsync } from './devvit/internals/blocks/handler/useAsync.js';
|
10
|
-
export { useState
|
10
|
+
export { useState } from './devvit/internals/blocks/handler/useState.js';
|
11
11
|
export { useForm } from './devvit/internals/blocks/handler/useForm.js';
|
12
12
|
export { useInterval } from './devvit/internals/blocks/handler/useInterval.js';
|
13
13
|
export { useChannel } from './devvit/internals/blocks/handler/useChannel.js';
|
package/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAE5B,cAAc,+BAA+B,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAE5B,cAAc,+BAA+B,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,8CAA8C,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC"}
|
package/index.js
CHANGED
@@ -6,7 +6,7 @@ export * from './types/index.js';
|
|
6
6
|
export * from '@devvit/shared-types/json.js';
|
7
7
|
export * from './apis/ui/helpers/svg.js';
|
8
8
|
export { useAsync } from './devvit/internals/blocks/handler/useAsync.js';
|
9
|
-
export { useState
|
9
|
+
export { useState } from './devvit/internals/blocks/handler/useState.js';
|
10
10
|
export { useForm } from './devvit/internals/blocks/handler/useForm.js';
|
11
11
|
export { useInterval } from './devvit/internals/blocks/handler/useInterval.js';
|
12
12
|
export { useChannel } from './devvit/internals/blocks/handler/useChannel.js';
|
package/meta.json
CHANGED
@@ -12280,7 +12280,7 @@
|
|
12280
12280
|
"format": "esm"
|
12281
12281
|
},
|
12282
12282
|
"src/devvit/internals/blocks/handler/RenderContext.ts": {
|
12283
|
-
"bytes":
|
12283
|
+
"bytes": 7063,
|
12284
12284
|
"imports": [
|
12285
12285
|
{
|
12286
12286
|
"path": "<runtime>",
|
@@ -12322,7 +12322,7 @@
|
|
12322
12322
|
"format": "esm"
|
12323
12323
|
},
|
12324
12324
|
"src/devvit/internals/blocks/handler/useState.ts": {
|
12325
|
-
"bytes":
|
12325
|
+
"bytes": 4372,
|
12326
12326
|
"imports": [
|
12327
12327
|
{
|
12328
12328
|
"path": "src/devvit/internals/blocks/handler/BlocksHandler.ts",
|
@@ -12456,18 +12456,13 @@
|
|
12456
12456
|
"format": "esm"
|
12457
12457
|
},
|
12458
12458
|
"src/devvit/internals/blocks/handler/BlocksHandler.ts": {
|
12459
|
-
"bytes":
|
12459
|
+
"bytes": 17988,
|
12460
12460
|
"imports": [
|
12461
12461
|
{
|
12462
12462
|
"path": "@devvit/protos",
|
12463
12463
|
"kind": "import-statement",
|
12464
12464
|
"external": true
|
12465
12465
|
},
|
12466
|
-
{
|
12467
|
-
"path": "../../node_modules/lodash.isequal/index.js",
|
12468
|
-
"kind": "import-statement",
|
12469
|
-
"original": "lodash.isequal"
|
12470
|
-
},
|
12471
12466
|
{
|
12472
12467
|
"path": "src/devvit/internals/blocks/BlocksTransformer.ts",
|
12473
12468
|
"kind": "import-statement",
|
@@ -13295,7 +13290,7 @@
|
|
13295
13290
|
"format": "esm"
|
13296
13291
|
},
|
13297
13292
|
"src/devvit/internals/blocks/handler/useAsync.ts": {
|
13298
|
-
"bytes":
|
13293
|
+
"bytes": 4999,
|
13299
13294
|
"imports": [
|
13300
13295
|
{
|
13301
13296
|
"path": "../shared-types/dist/CircuitBreaker.js",
|
@@ -13321,7 +13316,7 @@
|
|
13321
13316
|
"format": "esm"
|
13322
13317
|
},
|
13323
13318
|
"src/index.ts": {
|
13324
|
-
"bytes":
|
13319
|
+
"bytes": 770,
|
13325
13320
|
"imports": [
|
13326
13321
|
{
|
13327
13322
|
"path": "../../node_modules/core-js/web/url.js",
|
@@ -13811,7 +13806,7 @@
|
|
13811
13806
|
"bytesInOutput": 3912
|
13812
13807
|
},
|
13813
13808
|
"src/index.ts": {
|
13814
|
-
"bytesInOutput":
|
13809
|
+
"bytesInOutput": 1880
|
13815
13810
|
},
|
13816
13811
|
"../shared-types/dist/NonNull.js": {
|
13817
13812
|
"bytesInOutput": 118
|
@@ -14389,9 +14384,6 @@
|
|
14389
14384
|
"src/devvit/internals/ui-event-handler.ts": {
|
14390
14385
|
"bytesInOutput": 3085
|
14391
14386
|
},
|
14392
|
-
"src/devvit/internals/blocks/handler/BlocksHandler.ts": {
|
14393
|
-
"bytesInOutput": 15311
|
14394
|
-
},
|
14395
14387
|
"../shared-types/dist/useForm.js": {
|
14396
14388
|
"bytesInOutput": 162
|
14397
14389
|
},
|
@@ -14405,7 +14397,7 @@
|
|
14405
14397
|
"bytesInOutput": 5221
|
14406
14398
|
},
|
14407
14399
|
"src/devvit/internals/blocks/handler/RenderContext.ts": {
|
14408
|
-
"bytesInOutput":
|
14400
|
+
"bytesInOutput": 5094
|
14409
14401
|
},
|
14410
14402
|
"src/devvit/internals/blocks/handler/useInterval.ts": {
|
14411
14403
|
"bytesInOutput": 2446
|
@@ -14414,7 +14406,7 @@
|
|
14414
14406
|
"bytesInOutput": 56
|
14415
14407
|
},
|
14416
14408
|
"src/devvit/internals/blocks/handler/useState.ts": {
|
14417
|
-
"bytesInOutput":
|
14409
|
+
"bytesInOutput": 3643
|
14418
14410
|
},
|
14419
14411
|
"src/devvit/internals/blocks/handler/promise_cache.ts": {
|
14420
14412
|
"bytesInOutput": 9074
|
@@ -14425,6 +14417,9 @@
|
|
14425
14417
|
"src/devvit/internals/blocks/handler/ContextBuilder.ts": {
|
14426
14418
|
"bytesInOutput": 1362
|
14427
14419
|
},
|
14420
|
+
"src/devvit/internals/blocks/handler/BlocksHandler.ts": {
|
14421
|
+
"bytesInOutput": 14970
|
14422
|
+
},
|
14428
14423
|
"src/devvit/internals/ui-request-handler.ts": {
|
14429
14424
|
"bytesInOutput": 618
|
14430
14425
|
},
|
@@ -14513,7 +14508,7 @@
|
|
14513
14508
|
"bytesInOutput": 4358
|
14514
14509
|
}
|
14515
14510
|
},
|
14516
|
-
"bytes":
|
14511
|
+
"bytes": 15030071
|
14517
14512
|
}
|
14518
14513
|
}
|
14519
14514
|
}
|
package/meta.min.json
CHANGED
@@ -3609,7 +3609,7 @@
|
|
3609
3609
|
"format": "esm"
|
3610
3610
|
},
|
3611
3611
|
"src/devvit/internals/blocks/handler/RenderContext.ts": {
|
3612
|
-
"bytes":
|
3612
|
+
"bytes": 7063,
|
3613
3613
|
"imports": [
|
3614
3614
|
{
|
3615
3615
|
"path": "<runtime>",
|
@@ -3651,7 +3651,7 @@
|
|
3651
3651
|
"format": "esm"
|
3652
3652
|
},
|
3653
3653
|
"src/devvit/internals/blocks/handler/useState.ts": {
|
3654
|
-
"bytes":
|
3654
|
+
"bytes": 4372,
|
3655
3655
|
"imports": [
|
3656
3656
|
{
|
3657
3657
|
"path": "src/devvit/internals/blocks/handler/BlocksHandler.ts",
|
@@ -3785,18 +3785,13 @@
|
|
3785
3785
|
"format": "esm"
|
3786
3786
|
},
|
3787
3787
|
"src/devvit/internals/blocks/handler/BlocksHandler.ts": {
|
3788
|
-
"bytes":
|
3788
|
+
"bytes": 17988,
|
3789
3789
|
"imports": [
|
3790
3790
|
{
|
3791
3791
|
"path": "@devvit/protos",
|
3792
3792
|
"kind": "import-statement",
|
3793
3793
|
"external": true
|
3794
3794
|
},
|
3795
|
-
{
|
3796
|
-
"path": "../../node_modules/lodash.isequal/index.js",
|
3797
|
-
"kind": "import-statement",
|
3798
|
-
"original": "lodash.isequal"
|
3799
|
-
},
|
3800
3795
|
{
|
3801
3796
|
"path": "src/devvit/internals/blocks/BlocksTransformer.ts",
|
3802
3797
|
"kind": "import-statement",
|
@@ -4624,7 +4619,7 @@
|
|
4624
4619
|
"format": "esm"
|
4625
4620
|
},
|
4626
4621
|
"src/devvit/internals/blocks/handler/useAsync.ts": {
|
4627
|
-
"bytes":
|
4622
|
+
"bytes": 4999,
|
4628
4623
|
"imports": [
|
4629
4624
|
{
|
4630
4625
|
"path": "../shared-types/dist/CircuitBreaker.js",
|
@@ -4650,7 +4645,7 @@
|
|
4650
4645
|
"format": "esm"
|
4651
4646
|
},
|
4652
4647
|
"src/index.ts": {
|
4653
|
-
"bytes":
|
4648
|
+
"bytes": 770,
|
4654
4649
|
"imports": [
|
4655
4650
|
{
|
4656
4651
|
"path": "../../node_modules/core-js/web/url.js",
|
@@ -4721,7 +4716,7 @@
|
|
4721
4716
|
"imports": [],
|
4722
4717
|
"exports": [],
|
4723
4718
|
"inputs": {},
|
4724
|
-
"bytes":
|
4719
|
+
"bytes": 1181597
|
4725
4720
|
},
|
4726
4721
|
"dist/public-api.min.js": {
|
4727
4722
|
"imports": [
|
@@ -4888,7 +4883,6 @@
|
|
4888
4883
|
"getVaultByUserId",
|
4889
4884
|
"svg",
|
4890
4885
|
"useAsync",
|
4891
|
-
"useAsyncState",
|
4892
4886
|
"useChannel",
|
4893
4887
|
"useForm",
|
4894
4888
|
"useInterval",
|
@@ -5415,9 +5409,6 @@
|
|
5415
5409
|
"src/devvit/internals/ui-request-handler.ts": {
|
5416
5410
|
"bytesInOutput": 260
|
5417
5411
|
},
|
5418
|
-
"src/devvit/internals/blocks/handler/BlocksHandler.ts": {
|
5419
|
-
"bytesInOutput": 6990
|
5420
|
-
},
|
5421
5412
|
"src/devvit/internals/blocks/handler/UIClient.ts": {
|
5422
5413
|
"bytesInOutput": 974
|
5423
5414
|
},
|
@@ -5434,13 +5425,13 @@
|
|
5434
5425
|
"bytesInOutput": 1229
|
5435
5426
|
},
|
5436
5427
|
"src/devvit/internals/blocks/handler/RenderContext.ts": {
|
5437
|
-
"bytesInOutput":
|
5428
|
+
"bytesInOutput": 2411
|
5438
5429
|
},
|
5439
5430
|
"src/devvit/internals/blocks/handler/types.ts": {
|
5440
5431
|
"bytesInOutput": 29
|
5441
5432
|
},
|
5442
5433
|
"src/devvit/internals/blocks/handler/useState.ts": {
|
5443
|
-
"bytesInOutput":
|
5434
|
+
"bytesInOutput": 1439
|
5444
5435
|
},
|
5445
5436
|
"src/devvit/internals/blocks/handler/promise_cache.ts": {
|
5446
5437
|
"bytesInOutput": 2835
|
@@ -5451,6 +5442,9 @@
|
|
5451
5442
|
"src/devvit/internals/blocks/handler/ContextBuilder.ts": {
|
5452
5443
|
"bytesInOutput": 530
|
5453
5444
|
},
|
5445
|
+
"src/devvit/internals/blocks/handler/BlocksHandler.ts": {
|
5446
|
+
"bytesInOutput": 6879
|
5447
|
+
},
|
5454
5448
|
"src/apis/reddit/helpers/makeGettersEnumerable.ts": {
|
5455
5449
|
"bytesInOutput": 166
|
5456
5450
|
},
|
@@ -5533,7 +5527,7 @@
|
|
5533
5527
|
"bytesInOutput": 2083
|
5534
5528
|
}
|
5535
5529
|
},
|
5536
|
-
"bytes":
|
5530
|
+
"bytes": 250880
|
5537
5531
|
}
|
5538
5532
|
}
|
5539
5533
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@devvit/public-api",
|
3
|
-
"version": "0.11.0-next-2024-07-24-
|
3
|
+
"version": "0.11.0-next-2024-07-24-919ab41f5.0",
|
4
4
|
"license": "BSD-3-Clause",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -30,8 +30,8 @@
|
|
30
30
|
},
|
31
31
|
"types": "./index.d.ts",
|
32
32
|
"dependencies": {
|
33
|
-
"@devvit/protos": "0.11.0-next-2024-07-24-
|
34
|
-
"@devvit/shared-types": "0.11.0-next-2024-07-24-
|
33
|
+
"@devvit/protos": "0.11.0-next-2024-07-24-919ab41f5.0",
|
34
|
+
"@devvit/shared-types": "0.11.0-next-2024-07-24-919ab41f5.0",
|
35
35
|
"base64-js": "1.5.1",
|
36
36
|
"clone-deep": "4.0.1",
|
37
37
|
"core-js": "3.27.2",
|
@@ -39,9 +39,9 @@
|
|
39
39
|
},
|
40
40
|
"devDependencies": {
|
41
41
|
"@ampproject/filesize": "4.3.0",
|
42
|
-
"@devvit/eslint-config": "0.11.0-next-2024-07-24-
|
43
|
-
"@devvit/repo-tools": "0.11.0-next-2024-07-24-
|
44
|
-
"@devvit/tsconfig": "0.11.0-next-2024-07-24-
|
42
|
+
"@devvit/eslint-config": "0.11.0-next-2024-07-24-919ab41f5.0",
|
43
|
+
"@devvit/repo-tools": "0.11.0-next-2024-07-24-919ab41f5.0",
|
44
|
+
"@devvit/tsconfig": "0.11.0-next-2024-07-24-919ab41f5.0",
|
45
45
|
"@microsoft/api-extractor": "7.41.0",
|
46
46
|
"@reddit/faceplate-ui": "11.3.3",
|
47
47
|
"@types/clone-deep": "4.0.1",
|
@@ -64,5 +64,5 @@
|
|
64
64
|
}
|
65
65
|
},
|
66
66
|
"source": "./src/index.ts",
|
67
|
-
"gitHead": "
|
67
|
+
"gitHead": "e966605bac9112be583a0da1dd7ed18f24da1e7e"
|
68
68
|
}
|