@devvit/ui-renderer 0.10.15-next-2024-02-14-08faeb14a.0 → 0.10.15-next-2024-02-14-23d01383f.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.
@@ -71,7 +71,6 @@ export declare class DevvitCustomPost extends LitElement {
71
71
  disconnectedCallback(): void;
72
72
  rerender(): void;
73
73
  static get styles(): import("lit").CSSResult[];
74
- suspendPost(): void;
75
74
  protected render(): import("lit-html").TemplateResult<1>;
76
75
  protected willUpdate(props: PropertyValues<this>): Promise<void>;
77
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"devvit-custom-post.d.ts","sourceRoot":"","sources":["../../library/src/client/devvit-custom-post.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devvit-custom-post.d.ts","sourceRoot":"","sources":["../../library/src/client/devvit-custom-post.ts"],"names":[],"mappings":"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"}
@@ -18,11 +18,11 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
18
18
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
19
19
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
20
20
  };
21
- var _DevvitCustomPost_instances, _DevvitCustomPost_appState, _DevvitCustomPost_customPostActor, _DevvitCustomPost_hasInitialRender, _DevvitCustomPost_lastRequest, _DevvitCustomPost_localClient, _DevvitCustomPost_rerenderTimeout, _DevvitCustomPost_rootHeight, _DevvitCustomPost_rpcQueue, _DevvitCustomPost_uiEventHandlerActor, _DevvitCustomPost_bubble, _DevvitCustomPost_effectEventRender, _DevvitCustomPost_handleEffects, _DevvitCustomPost_handleUserAction, _DevvitCustomPost_initialRender, _DevvitCustomPost_makeRenderContext, _DevvitCustomPost_newRenderRequest, _DevvitCustomPost_onPluginCall, _DevvitCustomPost_processEvent, _DevvitCustomPost_queueEvent, _DevvitCustomPost_queueRenderPost, _DevvitCustomPost_renderPost, _DevvitCustomPost_state_get, _DevvitCustomPost_userActionRender;
21
+ var _DevvitCustomPost_instances, _DevvitCustomPost_appState, _DevvitCustomPost_customPostActor, _DevvitCustomPost_hasInitialRender, _DevvitCustomPost_lastRequest, _DevvitCustomPost_localClient, _DevvitCustomPost_rerenderTimeout, _DevvitCustomPost_rootHeight, _DevvitCustomPost_rpcQueue, _DevvitCustomPost_uiEventHandlerActor, _DevvitCustomPost_bubble, _DevvitCustomPost_effectEventRender, _DevvitCustomPost_handleEffects, _DevvitCustomPost_handleUserAction, _DevvitCustomPost_initialRender, _DevvitCustomPost_makeRenderContext, _DevvitCustomPost_newRenderRequest, _DevvitCustomPost_onPluginCall, _DevvitCustomPost_processEvent, _DevvitCustomPost_queueEvent, _DevvitCustomPost_queueRenderPost, _DevvitCustomPost_renderPost, _DevvitCustomPost_state_get, _DevvitCustomPost_suspendPost, _DevvitCustomPost_userActionRender;
22
22
  import '@reddit/faceplate-ui/templateRenderingStrategy/clientStrategy.js';
23
23
  import { BlockConfig_Root, BlockRenderEventType, BlockStackDirection, CustomPostDefinition, EffectType, RealtimeDefinition, UIEventHandlerDefinition, } from '@devvit/protos';
24
24
  import { BrowserLiteClient, } from '@devvit/runtime-lite/client/BrowserLiteClient.js';
25
- import { isCircuitBreaker } from '@devvit/runtime-lite/types/CircuitBreaker.js';
25
+ import { isCircuitBreaker, } from '@devvit/runtime-lite/types/CircuitBreaker.js';
26
26
  import { customEvent } from '@reddit/faceplate/lib/custom-event.js';
27
27
  import { LitElement, html } from 'lit';
28
28
  import { customElement, property, query, state } from 'lit/decorators.js';
@@ -85,14 +85,21 @@ let DevvitCustomPost = class DevvitCustomPost extends LitElement {
85
85
  __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.onPluginResponse(id, { error: undefined, success: true, value: {} });
86
86
  }
87
87
  });
88
- _DevvitCustomPost_queueEvent.set(this, async (ev) => {
89
- await __classPrivateFieldGet(this, _DevvitCustomPost_rpcQueue, "f").add(() => __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_processEvent).call(this, ev));
88
+ _DevvitCustomPost_queueEvent.set(this, (ev) => {
89
+ if (ev.queue) {
90
+ // TODO: Add QoS for different types of events on alternate queues. For now, treat alternate queues as having
91
+ // infinite concurrency.
92
+ void __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_processEvent).call(this, ev);
93
+ }
94
+ else {
95
+ void __classPrivateFieldGet(this, _DevvitCustomPost_rpcQueue, "f").add(() => __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_processEvent).call(this, ev));
96
+ }
90
97
  });
91
98
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
92
99
  this.addEventListener('devvit-user-action', __classPrivateFieldGet(this, _DevvitCustomPost_handleUserAction, "f"));
93
100
  }
94
101
  disconnectedCallback() {
95
- this.suspendPost();
102
+ __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_suspendPost).call(this);
96
103
  super.disconnectedCallback();
97
104
  }
98
105
  rerender() {
@@ -101,13 +108,6 @@ let DevvitCustomPost = class DevvitCustomPost extends LitElement {
101
108
  static get styles() {
102
109
  return [styles];
103
110
  }
104
- suspendPost() {
105
- this._isSuspended = true;
106
- if (__classPrivateFieldGet(this, _DevvitCustomPost_rerenderTimeout, "f") !== undefined) {
107
- window.clearTimeout(__classPrivateFieldGet(this, _DevvitCustomPost_rerenderTimeout, "f"));
108
- }
109
- __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.quit();
110
- }
111
111
  render() {
112
112
  if (!this.renderResponse) {
113
113
  // The slot content is considered the loading state.
@@ -129,10 +129,7 @@ let DevvitCustomPost = class DevvitCustomPost extends LitElement {
129
129
  async willUpdate(props) {
130
130
  if (props.has('localRuntimeCode') && this.localRuntimeCode) {
131
131
  __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.quit();
132
- __classPrivateFieldSet(this, _DevvitCustomPost_localClient, new BrowserLiteClient(this.localRuntimeCode, undefined, {
133
- callback: __classPrivateFieldGet(this, _DevvitCustomPost_onPluginCall, "f"),
134
- plugins: [RealtimeDefinition.fullName],
135
- }), "f");
132
+ __classPrivateFieldSet(this, _DevvitCustomPost_localClient, new BrowserLiteClient(this.localRuntimeCode, (type, err) => __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_bubble).call(this, 'devvit-ui-error', { type, err }), { callback: __classPrivateFieldGet(this, _DevvitCustomPost_onPluginCall, "f"), plugins: [RealtimeDefinition.fullName] }), "f");
136
133
  }
137
134
  const actorRefChanged = props.has('actorRef');
138
135
  if (actorRefChanged) {
@@ -144,7 +141,13 @@ let DevvitCustomPost = class DevvitCustomPost extends LitElement {
144
141
  if ((this.actorRef && (actorRefChanged || props.has('bundle'))) || props.has('useSandbox')) {
145
142
  if (this.bundle) {
146
143
  // offline/online, defer initialRender for offline client
147
- await __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.loadBundle(this.bundle, this.useSandbox);
144
+ try {
145
+ await __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.loadBundle(this.bundle, this.useSandbox);
146
+ }
147
+ catch (err) {
148
+ __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_bubble).call(this, 'devvit-ui-error', { type: 'Error', err });
149
+ throw err;
150
+ }
148
151
  }
149
152
  else if ((this.bundle && props.has('bundle')) || !__classPrivateFieldGet(this, _DevvitCustomPost_hasInitialRender, "f")) {
150
153
  // online only
@@ -175,12 +178,16 @@ _DevvitCustomPost_bubble = function _DevvitCustomPost_bubble(type, detail) {
175
178
  this.dispatchEvent(customEvent(type, detail));
176
179
  };
177
180
  _DevvitCustomPost_effectEventRender = async function _DevvitCustomPost_effectEventRender(effectType, effectData) {
178
- await __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_queueRenderPost).call(this, __classPrivateFieldGet(this, _DevvitCustomPost_newRenderRequest, "f").call(this, BlockRenderEventType.RENDER_EFFECT_EVENT, effectType, effectData), 'CircuitClose' // eslint-disable-line @reddit/i18n-shreddit/no-unwrapped-strings
179
- );
181
+ await __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_queueRenderPost).call(this, __classPrivateFieldGet(this, _DevvitCustomPost_newRenderRequest, "f").call(this, BlockRenderEventType.RENDER_EFFECT_EVENT, effectType, effectData), undefined);
180
182
  };
181
183
  _DevvitCustomPost_handleEffects = async function _DevvitCustomPost_handleEffects(renderType, effects) {
182
184
  effects.forEach((effect) => {
183
- if (effect.type === EffectType.EFFECT_RERENDER_UI) {
185
+ if (effect.type === EffectType.EFFECT_SEND_EVENT) {
186
+ if (effect.sendEvent?.event) {
187
+ __classPrivateFieldGet(this, _DevvitCustomPost_queueEvent, "f").call(this, effect.sendEvent.event);
188
+ }
189
+ }
190
+ else if (effect.type === EffectType.EFFECT_RERENDER_UI) {
184
191
  if (__classPrivateFieldGet(this, _DevvitCustomPost_rerenderTimeout, "f") != null)
185
192
  clearTimeout(__classPrivateFieldGet(this, _DevvitCustomPost_rerenderTimeout, "f"));
186
193
  __classPrivateFieldSet(this, _DevvitCustomPost_rerenderTimeout, setTimeout(() => {
@@ -192,7 +199,7 @@ _DevvitCustomPost_handleEffects = async function _DevvitCustomPost_handleEffects
192
199
  USER_ACTION_EFFECTS.includes(effect.type)) {
193
200
  __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_bubble).call(this, 'devvit-ui-effect', {
194
201
  effect,
195
- onEvent: (ev) => void __classPrivateFieldGet(this, _DevvitCustomPost_queueEvent, "f").call(this, ev),
202
+ onEvent: (ev) => __classPrivateFieldGet(this, _DevvitCustomPost_queueEvent, "f").call(this, ev),
196
203
  });
197
204
  }
198
205
  }
@@ -204,8 +211,7 @@ _DevvitCustomPost_initialRender = function _DevvitCustomPost_initialRender() {
204
211
  }
205
212
  __classPrivateFieldSet(this, _DevvitCustomPost_rootHeight, undefined, "f");
206
213
  __classPrivateFieldSet(this, _DevvitCustomPost_hasInitialRender, true, "f");
207
- __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_queueRenderPost).call(this, __classPrivateFieldGet(this, _DevvitCustomPost_newRenderRequest, "f").call(this, BlockRenderEventType.RENDER_INITIAL), 'CircuitClose' // eslint-disable-line @reddit/i18n-shreddit/no-unwrapped-strings
208
- );
214
+ __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_queueRenderPost).call(this, __classPrivateFieldGet(this, _DevvitCustomPost_newRenderRequest, "f").call(this, BlockRenderEventType.RENDER_INITIAL), undefined);
209
215
  };
210
216
  _DevvitCustomPost_processEvent = async function _DevvitCustomPost_processEvent(ev) {
211
217
  const req = {
@@ -216,59 +222,77 @@ _DevvitCustomPost_processEvent = async function _DevvitCustomPost_processEvent(e
216
222
  try {
217
223
  call = (await __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.call('HandleUIEvent', req, this.metadata));
218
224
  }
219
- catch (e) {
220
- if (!isCircuitBreaker(e) && __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.ready) {
221
- console.error(e);
225
+ catch (err) {
226
+ if (!isCircuitBreaker(err) && __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.ready) {
227
+ console.error(err);
228
+ __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_bubble).call(this, 'devvit-ui-error', { err, type: 'Error' });
222
229
  }
223
230
  else {
224
231
  if (devvit?.logCircuitBreaks)
225
- console.warn('remote call triggered at', e);
232
+ console.warn('remote call triggered at', err);
226
233
  }
227
234
  // Call remote runtime.
228
- call = await __classPrivateFieldGet(this, _DevvitCustomPost_uiEventHandlerActor, "f")?.HandleUIEvent(req, this.metadata);
235
+ try {
236
+ call = await __classPrivateFieldGet(this, _DevvitCustomPost_uiEventHandlerActor, "f")?.HandleUIEvent(req, this.metadata);
237
+ }
238
+ catch (err) {
239
+ __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_bubble).call(this, 'devvit-ui-error', { err, type: 'Error' });
240
+ throw err;
241
+ }
229
242
  }
230
243
  if (call) {
231
244
  const res = await call;
232
- __classPrivateFieldSet(this, _DevvitCustomPost_appState, res.state ?? {}, "f");
245
+ // Can only change state on the main queue.
246
+ if (!ev.queue) {
247
+ __classPrivateFieldSet(this, _DevvitCustomPost_appState, res.state ?? {}, "f");
248
+ }
233
249
  const renderType = ev.realtimeEvent
234
250
  ? BlockRenderEventType.RENDER_EFFECT_EVENT
235
251
  : BlockRenderEventType.RENDER_USER_ACTION;
236
252
  await __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_handleEffects).call(this, renderType, res.effects);
237
253
  }
238
254
  };
239
- _DevvitCustomPost_queueRenderPost = function _DevvitCustomPost_queueRenderPost(req, circuit) {
240
- void __classPrivateFieldGet(this, _DevvitCustomPost_rpcQueue, "f").add(() => __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_renderPost).call(this, req, circuit),
255
+ _DevvitCustomPost_queueRenderPost = function _DevvitCustomPost_queueRenderPost(req, circuitBreak) {
256
+ void __classPrivateFieldGet(this, _DevvitCustomPost_rpcQueue, "f").add(() => __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_renderPost).call(this, req, circuitBreak),
241
257
  // Cut in line to re-render from server response immediately
242
- { priority: circuit === 'CircuitBreak' ? 100 : 0 });
258
+ { priority: circuitBreak ? 100 : 0 });
243
259
  };
244
- _DevvitCustomPost_renderPost = async function _DevvitCustomPost_renderPost(req, circuit) {
260
+ _DevvitCustomPost_renderPost = async function _DevvitCustomPost_renderPost(req, circuitBreak) {
245
261
  var _a, _b;
246
262
  let call;
247
263
  req.state = __classPrivateFieldGet(this, _DevvitCustomPost_instances, "a", _DevvitCustomPost_state_get);
248
264
  try {
249
- if (circuit === 'CircuitBreak') {
250
- throw new Error();
251
- }
265
+ if (circuitBreak)
266
+ throw circuitBreak;
252
267
  call = (await __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.call('RenderPost', req, this.metadata));
253
268
  }
254
- catch (e) {
255
- if (isCircuitBreaker(e)) {
256
- if (e.response) {
257
- call = e.response;
269
+ catch (err) {
270
+ // Local runtime call failed.
271
+ if (!circuitBreak && isCircuitBreaker(err)) {
272
+ // Circuit break. Enqueue remote runtime render.
273
+ if (err.response) {
274
+ call = err.response;
258
275
  }
259
- __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_queueRenderPost).call(this, req, 'CircuitBreak' // eslint-disable-line @reddit/i18n-shreddit/no-unwrapped-strings
260
- );
276
+ __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_queueRenderPost).call(this, req, err);
261
277
  }
262
278
  else {
263
- if (circuit === 'CircuitClose' && __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.ready) {
264
- console.error(e);
279
+ // Render now.
280
+ if (!circuitBreak && __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.ready) {
281
+ __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_bubble).call(this, 'devvit-ui-error', { err, type: 'Error' });
282
+ console.error(err);
265
283
  }
266
284
  else {
267
285
  if (devvit?.logCircuitBreaks)
268
- console.warn('remote call triggered at', e);
286
+ console.warn('remote call triggered at', err);
269
287
  }
270
288
  // Call remote runtime.
271
- call = await __classPrivateFieldGet(this, _DevvitCustomPost_customPostActor, "f")?.RenderPost(req, this.metadata);
289
+ try {
290
+ call = await __classPrivateFieldGet(this, _DevvitCustomPost_customPostActor, "f")?.RenderPost(req, this.metadata);
291
+ }
292
+ catch (err) {
293
+ __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_bubble).call(this, 'devvit-ui-error', { err, type: 'Error' });
294
+ throw err;
295
+ }
272
296
  }
273
297
  }
274
298
  if (call) {
@@ -297,9 +321,14 @@ _DevvitCustomPost_state_get = function _DevvitCustomPost_state_get() {
297
321
  const data = { __postData: { thingId: this.postId, config: this.postConfig } };
298
322
  return Object.assign({}, __classPrivateFieldGet(this, _DevvitCustomPost_appState, "f"), data);
299
323
  };
324
+ _DevvitCustomPost_suspendPost = function _DevvitCustomPost_suspendPost() {
325
+ this._isSuspended = true;
326
+ if (__classPrivateFieldGet(this, _DevvitCustomPost_rerenderTimeout, "f") != null)
327
+ clearTimeout(__classPrivateFieldGet(this, _DevvitCustomPost_rerenderTimeout, "f"));
328
+ __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.quit();
329
+ };
300
330
  _DevvitCustomPost_userActionRender = async function _DevvitCustomPost_userActionRender(actionId, data = {}) {
301
- await __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_queueRenderPost).call(this, __classPrivateFieldGet(this, _DevvitCustomPost_newRenderRequest, "f").call(this, BlockRenderEventType.RENDER_USER_ACTION, actionId, data), 'CircuitClose' // eslint-disable-line @reddit/i18n-shreddit/no-unwrapped-strings
302
- );
331
+ await __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_queueRenderPost).call(this, __classPrivateFieldGet(this, _DevvitCustomPost_newRenderRequest, "f").call(this, BlockRenderEventType.RENDER_USER_ACTION, actionId, data), undefined);
303
332
  };
304
333
  __decorate([
305
334
  property({ attribute: false }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devvit/ui-renderer",
3
- "version": "0.10.15-next-2024-02-14-08faeb14a.0",
3
+ "version": "0.10.15-next-2024-02-14-23d01383f.0",
4
4
  "license": "BSD-3-Clause",
5
5
  "repository": {
6
6
  "type": "git",
@@ -54,10 +54,10 @@
54
54
  },
55
55
  "types": "./index.d.ts",
56
56
  "dependencies": {
57
- "@devvit/protos": "0.10.15-next-2024-02-14-08faeb14a.0",
58
- "@devvit/runtime-lite": "0.10.15-next-2024-02-14-08faeb14a.0",
59
- "@devvit/runtimes": "0.10.15-next-2024-02-14-08faeb14a.0",
60
- "@devvit/shared-types": "0.10.15-next-2024-02-14-08faeb14a.0",
57
+ "@devvit/protos": "0.10.15-next-2024-02-14-23d01383f.0",
58
+ "@devvit/runtime-lite": "0.10.15-next-2024-02-14-23d01383f.0",
59
+ "@devvit/runtimes": "0.10.15-next-2024-02-14-23d01383f.0",
60
+ "@devvit/shared-types": "0.10.15-next-2024-02-14-23d01383f.0",
61
61
  "@dotlottie/player-component": "2.7.2",
62
62
  "p-queue": "7.3.4",
63
63
  "rxjs": "7.5.7"
@@ -84,7 +84,7 @@
84
84
  "devDependencies": {
85
85
  "@devvit/eslint-config": "0.10.14",
86
86
  "@devvit/repo-tools": "0.10.14",
87
- "@devvit/tsconfig": "0.10.15-next-2024-02-14-08faeb14a.0",
87
+ "@devvit/tsconfig": "0.10.15-next-2024-02-14-23d01383f.0",
88
88
  "@lit-labs/ssr": "^2.2.3",
89
89
  "@lit/localize": "0.11.4",
90
90
  "@open-wc/testing-helpers": "2.3.0",
@@ -116,5 +116,5 @@
116
116
  "directory": "dist"
117
117
  },
118
118
  "source": "./src/index.ts",
119
- "gitHead": "b16ca50ce404fe0aac5f517cdc611e99a4ba84af"
119
+ "gitHead": "697e67325e43ed8aaa7d2582d794b455210ed5ba"
120
120
  }