@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.
@@ -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;AAM7F,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,CAiCH;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;CA8W1E"}
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
- const stateCopy = _structuredClone(context._state);
225
- const eventsCopy = [...context._requeueEvents];
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._hooks = {};
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
- // TODO: Decide whether this is excessive. It doesn't hurt anything besides performance.
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":"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"}
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
@@ -6,6 +6,7 @@ export type AsyncOptions = {
6
6
  */
7
7
  depends?: JSONValue;
8
8
  };
9
+ export type LoadState = 'initial' | 'loading' | 'loaded' | 'error' | 'disabled';
9
10
  /**
10
11
  * This is the preferred way to handle async state in Devvit.
11
12
  *
@@ -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;AA2GF;;;;;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
+ {"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 { AsyncUseStateInitializer, UseStateInitializer, UseStateResult } from '../../../../types/hooks.js';
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,EACV,wBAAwB,EAExB,mBAAmB,EACnB,cAAc,EACf,MAAM,4BAA4B,CAAC;AA+CpC,wBAAgB,aAAa,CAAC,CAAC,SAAS,SAAS,EAC/C,WAAW,EAAE,wBAAwB,CAAC,CAAC,CAAC,GACvC,cAAc,CAAC,CAAC,CAAC,CAMnB;AAED,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"}
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 _AsyncStateHook_changed, _AsyncStateHook_ctx, _AsyncStateHook_initializer, _AsyncStateHook_hookId;
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
- class AsyncStateHook {
15
+ /**
16
+ * Implementation of the useState hook.
17
+ */
18
+ class UseStateHook {
16
19
  constructor(initializer, params) {
17
- this.state = { value: null, loading: false };
18
- _AsyncStateHook_changed.set(this, void 0);
19
- _AsyncStateHook_ctx.set(this, void 0);
20
- _AsyncStateHook_initializer.set(this, void 0);
21
- _AsyncStateHook_hookId.set(this, void 0);
22
- __classPrivateFieldSet(this, _AsyncStateHook_initializer, initializer, "f");
23
- __classPrivateFieldSet(this, _AsyncStateHook_hookId, params.hookId, "f");
24
- __classPrivateFieldSet(this, _AsyncStateHook_changed, params.invalidate, "f");
25
- __classPrivateFieldSet(this, _AsyncStateHook_ctx, params.context, "f");
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.value === null) {
29
- this.state.value = await __classPrivateFieldGet(this, _AsyncStateHook_initializer, "f").call(this);
30
- this.state.loading = false;
31
- __classPrivateFieldGet(this, _AsyncStateHook_changed, "f").call(this);
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
- __classPrivateFieldGet(this, _AsyncStateHook_changed, "f").call(this);
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
- if (this.state.value === null) {
40
- this.state.loading = true;
41
- __classPrivateFieldGet(this, _AsyncStateHook_changed, "f").call(this);
42
- const requeueEvent = {
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
- _AsyncStateHook_changed = new WeakMap(), _AsyncStateHook_ctx = new WeakMap(), _AsyncStateHook_initializer = new WeakMap(), _AsyncStateHook_hookId = new WeakMap();
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":"AAAA,gCAAgC;AAChC,+BAA+B"}
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, useAsyncState } from './devvit/internals/blocks/handler/useState.js';
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,aAAa,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,MAAM,8CAA8C,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC"}
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, useAsyncState } from './devvit/internals/blocks/handler/useState.js';
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": 6522,
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": 3003,
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": 18262,
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": 4992,
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": 785,
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": 1920
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": 4936
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": 2314
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": 15026688
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": 6522,
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": 3003,
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": 18262,
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": 4992,
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": 785,
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": 1179857
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": 2394
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": 1088
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": 250643
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-67e594e5c.0",
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-67e594e5c.0",
34
- "@devvit/shared-types": "0.11.0-next-2024-07-24-67e594e5c.0",
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-67e594e5c.0",
43
- "@devvit/repo-tools": "0.11.0-next-2024-07-24-67e594e5c.0",
44
- "@devvit/tsconfig": "0.11.0-next-2024-07-24-67e594e5c.0",
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": "b48a62ba24dd2407675f2207100b409341a85e39"
67
+ "gitHead": "e966605bac9112be583a0da1dd7ed18f24da1e7e"
68
68
  }