@devvit/ui-renderer 0.10.23-next-2024-06-20-020b1b212.0 → 0.10.23-next-2024-06-24-5f3b561b2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"devvit-surface.d.ts","sourceRoot":"","sources":["../../library/src/client/devvit-surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devvit-surface.d.ts","sourceRoot":"","sources":["../../library/src/client/devvit-surface.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ 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 _DevvitSurface_rootHeight, _DevvitSurface_resizeObserver, _DevvitSurface_intersectionObserver, _DevvitSurface_dispatcher, _DevvitSurface_newRenderContext, _DevvitSurface_onRender;
21
+ var _DevvitSurface_instances, _DevvitSurface_rootHeight, _DevvitSurface_resizeObserver, _DevvitSurface_intersectionObserver, _DevvitSurface_dispatcher, _DevvitSurface_newRenderContext, _DevvitSurface_onRender, _DevvitSurface_bubble, _DevvitSurface_onUserActionEffect;
22
22
  import '@reddit/faceplate-ui/templateRenderingStrategy/clientStrategy.js';
23
23
  import { BlockConfig_Root, BlockStackDirection, UIDimensions } from '@devvit/protos';
24
24
  import { throttle } from '@devvit/shared-types/throttle.js';
@@ -28,6 +28,7 @@ import { customElement, property, state } from 'lit/decorators.js';
28
28
  import { DEFAULT_ROOT_HEIGHT } from '../blocks/templates/renderBlock.js';
29
29
  import { styles } from '../styles.js';
30
30
  import { WebDispatcher } from './webDispatcher.js';
31
+ import { customEvent } from '@reddit/faceplate/lib/custom-event.js';
31
32
  import '../blocks/components/devvit-blocks-renderer.js';
32
33
  import '../blocks/components/devvit-blocks-webview.js';
33
34
  import './devvit-animation-player.js';
@@ -47,6 +48,7 @@ let DevvitSurface = class DevvitSurface extends LitElement {
47
48
  }
48
49
  constructor() {
49
50
  super();
51
+ _DevvitSurface_instances.add(this);
50
52
  /** Enables debug logging for the local runtime */
51
53
  this.runtimeDebugLogging = false;
52
54
  /** Enable the use of experimental blocks that are not production ready */
@@ -60,9 +62,6 @@ let DevvitSurface = class DevvitSurface extends LitElement {
60
62
  _DevvitSurface_intersectionObserver.set(this, void 0);
61
63
  /** The orchestrates events for blocks */
62
64
  _DevvitSurface_dispatcher.set(this, void 0);
63
- // #bubble<T>(type: string, detail: T): void {
64
- // this.dispatchEvent(customEvent(type, detail));
65
- // }
66
65
  _DevvitSurface_newRenderContext.set(this, () => ({
67
66
  experimental: this.useExperimentalBlocks,
68
67
  webViewEnabled: this.allowWebView,
@@ -98,6 +97,12 @@ let DevvitSurface = class DevvitSurface extends LitElement {
98
97
  }
99
98
  }
100
99
  });
100
+ _DevvitSurface_onUserActionEffect.set(this, (fx) => {
101
+ __classPrivateFieldGet(this, _DevvitSurface_instances, "m", _DevvitSurface_bubble).call(this, 'devvit-ui-effect', {
102
+ effect: fx,
103
+ onEvent: (ev) => __classPrivateFieldGet(this, _DevvitSurface_dispatcher, "f")?.submit([ev]),
104
+ });
105
+ });
101
106
  if (devvit?.debug.surface)
102
107
  console.debug(`[surface] Using devvit-surface and KMP!`);
103
108
  }
@@ -113,6 +118,7 @@ let DevvitSurface = class DevvitSurface extends LitElement {
113
118
  }, {
114
119
  useSpeculativeExecution: this.useSpeculativeExecution,
115
120
  }), "f");
121
+ __classPrivateFieldGet(this, _DevvitSurface_dispatcher, "f").onUserAction = __classPrivateFieldGet(this, _DevvitSurface_onUserActionEffect, "f");
116
122
  __classPrivateFieldGet(this, _DevvitSurface_dispatcher, "f").subscribe((params) => {
117
123
  __classPrivateFieldGet(this, _DevvitSurface_onRender, "f").call(this, {
118
124
  request: params.request,
@@ -225,6 +231,11 @@ _DevvitSurface_intersectionObserver = new WeakMap();
225
231
  _DevvitSurface_dispatcher = new WeakMap();
226
232
  _DevvitSurface_newRenderContext = new WeakMap();
227
233
  _DevvitSurface_onRender = new WeakMap();
234
+ _DevvitSurface_onUserActionEffect = new WeakMap();
235
+ _DevvitSurface_instances = new WeakSet();
236
+ _DevvitSurface_bubble = function _DevvitSurface_bubble(type, detail) {
237
+ this.dispatchEvent(customEvent(type, detail));
238
+ };
228
239
  __decorate([
229
240
  property({ attribute: false }),
230
241
  __metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"devvit-form-dialog.d.ts","sourceRoot":"","sources":["../../../library/src/client/formbuilder/devvit-form-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAIvC,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,kEAAkE,CAAC;AAG1E,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,kCAAkC,CAAC;AAI7F,OAAO,KAAK,EAAE,IAAI,EAAa,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAiC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAKxE,OAAO,kDAAkD,CAAC;AAC1D,OAAO,gDAAgD,CAAC;AAIxD,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,0BAA0B,CAAC,GAAG;IAC/E,MAAM,EAAE;QACN,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH,CAAC;AAEF;;;;;;GAMG;AACH,qBACa,gBAAiB,SAAQ,UAAU;;IAE9C,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IAGvB,OAAO,CAAC,EAAE,eAAe,CAAC;IAG1B,KAAK,CAAC,EAAE,aAAa,CAAC;IAKtB,WAAoB,MAAM,8BAEzB;IAED,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IA2GpD,MAAM;CAuDhB"}
1
+ {"version":3,"file":"devvit-form-dialog.d.ts","sourceRoot":"","sources":["../../../library/src/client/formbuilder/devvit-form-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAIvC,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,kEAAkE,CAAC;AAG1E,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,kCAAkC,CAAC;AAI7F,OAAO,KAAK,EAAE,IAAI,EAAa,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAiC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAKxE,OAAO,kDAAkD,CAAC;AAC1D,OAAO,gDAAgD,CAAC;AAKxD,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,0BAA0B,CAAC,GAAG;IAC/E,MAAM,EAAE;QACN,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH,CAAC;AAEF;;;;;;GAMG;AACH,qBACa,gBAAiB,SAAQ,UAAU;;IAE9C,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IAGvB,OAAO,CAAC,EAAE,eAAe,CAAC;IAG1B,KAAK,CAAC,EAAE,aAAa,CAAC;IAKtB,WAAoB,MAAM,8BAEzB;IAED,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAkHpD,MAAM;CAuDhB"}
@@ -33,6 +33,7 @@ import { styles } from '../../styles.js';
33
33
  import { renderFormFields } from './fields/index.js';
34
34
  import '@reddit/faceplate-ui/components/faceplate-dialog';
35
35
  import '@reddit/faceplate/components/faceplate-form.js';
36
+ import { formKeyToHookId } from '@devvit/shared-types/useForm.js';
36
37
  /**
37
38
  * Devvit form dialog.
38
39
  *
@@ -97,9 +98,13 @@ let DevvitFormDialog = class DevvitFormDialog extends LitElement {
97
98
  if (!invalidFields || invalidFields.length > 0) {
98
99
  return;
99
100
  }
101
+ if (!this.form?.id) {
102
+ throw new Error(`Cannot submit form due to missing form id. If you are using 'useForm' please make sure that it is not called conditionally inside of your component.`);
103
+ }
100
104
  __classPrivateFieldGet(this, _DevvitFormDialog_onEvent, "f").call(this, UIEvent.fromPartial({
105
+ hook: formKeyToHookId(this.form.id),
101
106
  formSubmitted: {
102
- formId: this.form?.id,
107
+ formId: this.form.id,
103
108
  results: __classPrivateFieldGet(this, _DevvitFormDialog_collectValues, "f").call(this),
104
109
  },
105
110
  }));
@@ -1,6 +1,6 @@
1
1
  import type { Dispatcher, SubscribeCallbackParams } from '@devvit/multiplatform/ui-shared-shared.js';
2
2
  import { JsDispatcherImpl } from '@devvit/multiplatform/ui-shared-shared.js';
3
- import type { UIRequest } from '@devvit/protos';
3
+ import type { Effect, UIRequest } from '@devvit/protos';
4
4
  import { type Metadata, type UIEnvironment, type UIEvent } from '@devvit/protos';
5
5
  import type { ReplayUIResponse, UIProps, UIState } from './runtimes.js';
6
6
  import { LocalRuntime, RemoteRuntime } from './runtimes.js';
@@ -15,6 +15,7 @@ export declare class WebDispatcher {
15
15
  * render events.
16
16
  */
17
17
  hasRendered: boolean;
18
+ onUserAction?: ((fx: Effect) => void) | undefined;
18
19
  get state(): KMPDispatcher['state'];
19
20
  constructor(initialState: Record<string, unknown>, env: UIEnvironment, config: {
20
21
  useSpeculativeExecution: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"webDispatcher.d.ts","sourceRoot":"","sources":["../../library/src/client/webDispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAGV,uBAAuB,EAExB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,2CAA2C,CAAC;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAuC,MAAM,eAAe,CAAC;AAkBjG,KAAK,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAwC/C,qBAAa,aAAa;;IAOxB;;;;;;OAMG;IACH,WAAW,UAAS;IAMpB,IAAI,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC,CAElC;gBAGC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE;QAAE,uBAAuB,EAAE,OAAO,CAAA;KAAE;IAkC9C,IAAI,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,EAOpD;IAED,IAAI,mBAAmB,CAAC,mBAAmB,EAAE,OAAO,EAEnD;IAED,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,uBAAuB,CAAC,SAAS,EAAE,gBAAgB,CAAC,KAAK,IAAI,GAAG,IAAI;IAiCtF,MAAM,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI;IAIlF,WAAW,IAAI,IAAI;IAInB,IAAI,IAAI,IAAI;IAIZ,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAUjC,aAAa,IAAI,IAAI;IAKrB,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAIhC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,UAAU,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI;IAItD,SAAS,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzE,eAAe,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI;CAGxE"}
1
+ {"version":3,"file":"webDispatcher.d.ts","sourceRoot":"","sources":["../../library/src/client/webDispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAGV,uBAAuB,EAExB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,2CAA2C,CAAC;AAC9F,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAuC,MAAM,eAAe,CAAC;AAkBjG,KAAK,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AA2C/C,qBAAa,aAAa;;IAOxB;;;;;;OAMG;IACH,WAAW,UAAS;IAKpB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAElD,IAAI,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC,CAElC;gBAGC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE;QAAE,uBAAuB,EAAE,OAAO,CAAA;KAAE;IAkC9C,IAAI,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,EAOpD;IAED,IAAI,mBAAmB,CAAC,mBAAmB,EAAE,OAAO,EAEnD;IAED,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,uBAAuB,CAAC,SAAS,EAAE,gBAAgB,CAAC,KAAK,IAAI,GAAG,IAAI;IA+CtF,MAAM,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI;IAIlF,WAAW,IAAI,IAAI;IAInB,IAAI,IAAI,IAAI;IAIZ,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAUjC,aAAa,IAAI,IAAI;IAKrB,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAIhC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,UAAU,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI;IAItD,SAAS,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzE,eAAe,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI;CAGxE"}
@@ -18,16 +18,16 @@ import { Timers } from './timers.js';
18
18
  class Logger {
19
19
  debug(messages) {
20
20
  if (devvit?.debug.runtime)
21
- console.debug(...messages);
21
+ console.debug('[kmp-dispatcher]', ...messages);
22
22
  }
23
23
  error(messages) {
24
- console.error(...messages);
24
+ console.error('[kmp-dispatcher]', ...messages);
25
25
  }
26
26
  info(messages) {
27
- console.info(...messages);
27
+ console.info('[kmp-dispatcher]', ...messages);
28
28
  }
29
29
  warn(messages) {
30
- console.warn(...messages);
30
+ console.warn('[kmp-dispatcher]', ...messages);
31
31
  }
32
32
  }
33
33
  /**
@@ -58,6 +58,8 @@ const makeMillisecondsFromDuration = ({ nanos, seconds, }) => {
58
58
  const nanosInMillis = nanos / 1000000;
59
59
  return Math.floor(secondsInMillis + nanosInMillis);
60
60
  };
61
+ // Effects that can only be fired as the result of a user action
62
+ const userActionEffects = ['showToast', 'showForm', 'navigateToUrl'];
61
63
  export class WebDispatcher {
62
64
  get state() {
63
65
  return __classPrivateFieldGet(this, _WebDispatcher_dispatcher, "f").state;
@@ -118,16 +120,21 @@ export class WebDispatcher {
118
120
  console.debug(`[runtime] dispatcher got a new event from subscribe`, args[0]);
119
121
  const [{ response }] = args;
120
122
  response.effects.forEach((effect) => {
121
- // We only need to handle interval effects!
122
- if (!effect.interval)
123
+ if (userActionEffects.some((type) => effect[type])) {
124
+ this.onUserAction?.(effect);
123
125
  return;
124
- const entries = Object.entries(effect.interval.intervals);
125
- if (entries.length === 0) {
126
- __classPrivateFieldGet(this, _WebDispatcher_timers, "f").clear();
127
126
  }
128
- __classPrivateFieldGet(this, _WebDispatcher_timers, "f").apply(entries.map(([id, meta]) =>
129
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
130
- new TimerDefinition(id, makeMillisecondsFromDuration(meta.duration))));
127
+ if (effect.interval) {
128
+ const entries = Object.entries(effect.interval.intervals);
129
+ if (entries.length === 0) {
130
+ __classPrivateFieldGet(this, _WebDispatcher_timers, "f").clear();
131
+ }
132
+ __classPrivateFieldGet(this, _WebDispatcher_timers, "f").apply(entries.map(([id, meta]) =>
133
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
134
+ new TimerDefinition(id, makeMillisecondsFromDuration(meta.duration))));
135
+ return;
136
+ }
137
+ console.warn(`Received an effect that is not implemented! Please add an effect handler to the web dispatcher. Effect: ${JSON.stringify(effect, null, 2)}`);
131
138
  });
132
139
  cb(...args);
133
140
  }), "f");
@@ -10194,7 +10194,7 @@
10194
10194
  "format": "esm"
10195
10195
  },
10196
10196
  "library/src/client/webDispatcher.ts": {
10197
- "bytes": 7256,
10197
+ "bytes": 7938,
10198
10198
  "imports": [
10199
10199
  {
10200
10200
  "path": "../../node_modules/@devvit/multiplatform/kotlin/ui-shared-shared.js",
@@ -10835,7 +10835,7 @@
10835
10835
  "format": "esm"
10836
10836
  },
10837
10837
  "library/src/client/devvit-surface.ts": {
10838
- "bytes": 11011,
10838
+ "bytes": 11323,
10839
10839
  "imports": [
10840
10840
  {
10841
10841
  "path": "../../node_modules/@reddit/faceplate-ui/templateRenderingStrategy/clientStrategy.js",
@@ -10887,6 +10887,11 @@
10887
10887
  "kind": "import-statement",
10888
10888
  "original": "./webDispatcher.js"
10889
10889
  },
10890
+ {
10891
+ "path": "../../node_modules/@reddit/faceplate/lib/custom-event.js",
10892
+ "kind": "import-statement",
10893
+ "original": "@reddit/faceplate/lib/custom-event.js"
10894
+ },
10890
10895
  {
10891
10896
  "path": "library/src/blocks/components/devvit-blocks-renderer.ts",
10892
10897
  "kind": "import-statement",
@@ -10916,7 +10921,7 @@
10916
10921
  "imports": [],
10917
10922
  "exports": [],
10918
10923
  "inputs": {},
10919
- "bytes": 12145737
10924
+ "bytes": 12147442
10920
10925
  },
10921
10926
  "dist/devvit-surface.min.js": {
10922
10927
  "imports": [
@@ -11528,10 +11533,10 @@
11528
11533
  "bytesInOutput": 3097
11529
11534
  },
11530
11535
  "../protos/dist/types/devvit/plugin/redditapi/flair/flair_svc.js": {
11531
- "bytesInOutput": 4386
11536
+ "bytesInOutput": 4387
11532
11537
  },
11533
11538
  "../protos/dist/types/devvit/gateway/utils/v1alpha/utilities.js": {
11534
- "bytesInOutput": 6614
11539
+ "bytesInOutput": 6616
11535
11540
  },
11536
11541
  "../protos/dist/types/devvit/data/api/v1alpha/intake.js": {
11537
11542
  "bytesInOutput": 1675
@@ -11546,10 +11551,10 @@
11546
11551
  "bytesInOutput": 6051
11547
11552
  },
11548
11553
  "../protos/dist/types/devvit/actor/settings/v1alpha/instance_settings.js": {
11549
- "bytesInOutput": 18
11554
+ "bytesInOutput": 19
11550
11555
  },
11551
11556
  "../protos/dist/types/devvit/actor/settings/v1alpha/installation_settings.js": {
11552
- "bytesInOutput": 18
11557
+ "bytesInOutput": 19
11553
11558
  },
11554
11559
  "../protos/dist/types/devvit/actor/settings/v1alpha/app_settings.js": {
11555
11560
  "bytesInOutput": 19
@@ -11732,7 +11737,7 @@
11732
11737
  "bytesInOutput": 1178
11733
11738
  },
11734
11739
  "library/src/client/webDispatcher.ts": {
11735
- "bytesInOutput": 2190
11740
+ "bytesInOutput": 2511
11736
11741
  },
11737
11742
  "../../node_modules/@lit/localize/internal/str-tag.js": {
11738
11743
  "bytesInOutput": 131
@@ -11792,10 +11797,10 @@
11792
11797
  "bytesInOutput": 1710
11793
11798
  },
11794
11799
  "library/src/client/devvit-surface.ts": {
11795
- "bytesInOutput": 4129
11800
+ "bytesInOutput": 4372
11796
11801
  }
11797
11802
  },
11798
- "bytes": 4389549
11803
+ "bytes": 4390170
11799
11804
  }
11800
11805
  }
11801
11806
  }