@devvit/ui-renderer 0.10.15-next-2024-02-14-b85ea9563.0 → 0.10.15-next-2024-02-15-ea5e1b95f.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":"renderImageBlock.d.ts","sourceRoot":"","sources":["../../../library/src/blocks/templates/renderImageBlock.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AASvC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAyD,YAAY,EAAE,MAAM,WAAW,CAAC;AAKhG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,GAAG,YAAY,CA0D/E"}
1
+ {"version":3,"file":"renderImageBlock.d.ts","sourceRoot":"","sources":["../../../library/src/blocks/templates/renderImageBlock.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AASvC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAA6B,YAAY,EAAE,MAAM,WAAW,CAAC;AASpE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,GAAG,YAAY,CA0D/E"}
@@ -1,8 +1,8 @@
1
1
  import { nothing } from 'lit';
2
2
  import { getTemplateRenderingStrategy } from '@reddit/faceplate-ui/faceplateUIConfig.js';
3
3
  import { defaultClasses, defaultStyles, imageClasses, imageStyle, onClickAction, } from '../attributes.js';
4
- import { classMap, isDataUrl, isValidImageURL, sanitizeDataUrl } from './util.js';
5
- import { VerifiedPublicImageHosts } from './constants.js';
4
+ import { classMap, sanitizeDataUrl } from './util.js';
5
+ import { VerifiedPublicImageHosts, isDataUrl, isValidImageURL, } from '@devvit/shared-types/imageUtil.js';
6
6
  const FALLBACK_IMG_URL = 'https://i.redd.it/p1vmc5ulmpib1.png';
7
7
  export function renderImageBlock(block, ctx) {
8
8
  const { html, styleMap, ifDefined } = getTemplateRenderingStrategy();
@@ -16,19 +16,10 @@ export declare function resolveIcon(name: string): TemplateResult;
16
16
  * @param styleInfo
17
17
  */
18
18
  export declare function sanitizeStyleInfo(styleInfo: StyleInfo): StyleInfo;
19
- export declare function isDataUrl(input: string): boolean;
20
- export declare function parseDataUrl(dataUrl: string): {
21
- mimeType: string | undefined;
22
- charset: string | undefined;
23
- isBase64: boolean;
24
- data: string;
25
- } | null;
26
19
  /**
27
20
  * Only supports SVG elements!
28
21
  */
29
22
  export declare function sanitizeDataUrl(dataUrl: string): string | undefined;
30
- export declare function isAcceptableDataUrl(maybeDataUrl: string): boolean;
31
- export declare function isValidImageURL(imageUrl: string): boolean;
32
23
  /**
33
24
  * Returns a BlockSizes object either directly from the block or constructs
34
25
  * one from the legacy `size` field
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../library/src/blocks/templates/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAKnE,OAAO,EACL,KAAK,EACL,UAAU,EACV,UAAU,EACV,0BAA0B,EAC1B,aAAa,EACd,MAAM,gBAAgB,CAAC;AAGxB,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,OAAO,OAAO,CAAC;AAE3D,wBAAgB,QAAQ,CACtB,SAAS,EAAE,SAAS,EACpB,WAAW,CAAC,EAAE,OAAO,GACpB,MAAM,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAiB5C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,GAAG,YAAY,CAMxF;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,GAAG,MAAM,CAM7E;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,EAAE,IAAI,WAAW,CAEtF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAiBxD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CASjE;AAcD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG;IAC7C,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAWP;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmDnE;AASD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAMjE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAazD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,CA2B7D;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,0BAA0B,GAAG,SAAS,EAC7C,QAAQ,GAAE,aAAa,GAAG,SAAqB,GAC9C,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAUpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,GAC/B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,CAIzD"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../library/src/blocks/templates/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAInE,OAAO,EACL,KAAK,EACL,UAAU,EACV,UAAU,EACV,0BAA0B,EAC1B,aAAa,EACd,MAAM,gBAAgB,CAAC;AAIxB,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,OAAO,OAAO,CAAC;AAE3D,wBAAgB,QAAQ,CACtB,SAAS,EAAE,SAAS,EACpB,WAAW,CAAC,EAAE,OAAO,GACpB,MAAM,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAiB5C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,GAAG,YAAY,CAMxF;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,GAAG,MAAM,CAM7E;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,EAAE,IAAI,WAAW,CAEtF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAiBxD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CASjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmDnE;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,CA2B7D;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,0BAA0B,GAAG,SAAS,EAC7C,QAAQ,GAAE,aAAa,GAAG,SAAqB,GAC9C,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAUpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,GAC/B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,CAIzD"}
@@ -4,9 +4,9 @@ import { unsafeHTML as clientUnsafeHTML } from 'lit/directives/unsafe-html.js';
4
4
  import { unsafeHTML as serverUnsafeHTML } from '@reddit/baseplate/html/html.js';
5
5
  import { getTemplateRenderingStrategy } from '@reddit/faceplate-ui/faceplateUIConfig.js';
6
6
  import faceplateIcons from '@reddit/faceplate-ui/svgs/svg-manifest.js';
7
- import { REDD_IT, VerifiedImageHosts } from './constants.js';
8
7
  import { BlockSizeUnit, } from '@devvit/protos';
9
8
  import { sanitizeSvg } from '@devvit/shared-types/sanitizeSvg.js';
9
+ import { parseDataUrl, isAcceptableDataUrlMimeType } from '@devvit/shared-types/imageUtil.js';
10
10
  export function classMap(classInfo, forceString) {
11
11
  const { getType } = getTemplateRenderingStrategy();
12
12
  if (getType() === 'client' && forceString !== true) {
@@ -73,30 +73,6 @@ export function sanitizeStyleInfo(styleInfo) {
73
73
  }
74
74
  return styleInfo;
75
75
  }
76
- const DATA_URL_REGEX =
77
- // eslint-disable-next-line security/detect-unsafe-regex
78
- /^data:([a-zA-Z]+\/[a-zA-Z0-9.+_-]+)?(;charset=[a-zA-Z0-9._+-]+)?(;base64)?,(.*)/;
79
- function preprocessDataUrl(input) {
80
- /**
81
- * This can be submitted to us as multi-line and that will break the parser
82
- * so we remove all newlines here
83
- */
84
- return input.trim().replace(/[\r\n]+/g, '');
85
- }
86
- export function isDataUrl(input) {
87
- return !!preprocessDataUrl(input).match(DATA_URL_REGEX);
88
- }
89
- export function parseDataUrl(dataUrl) {
90
- const matches = DATA_URL_REGEX.exec(preprocessDataUrl(dataUrl));
91
- if (!matches)
92
- return null;
93
- return {
94
- mimeType: matches[1],
95
- charset: matches[2]?.split('=')[1], // Extract charset without ';charset='
96
- isBase64: !!matches[3],
97
- data: matches[4].trim(),
98
- };
99
- }
100
76
  /**
101
77
  * Only supports SVG elements!
102
78
  */
@@ -148,31 +124,6 @@ export function sanitizeDataUrl(dataUrl) {
148
124
  return undefined;
149
125
  }
150
126
  }
151
- function isAcceptableDataUrlMimeType(mimeType) {
152
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#image_types
153
- const ACCEPTABLE_MIME_TYPES = ['image/svg+xml'];
154
- return ACCEPTABLE_MIME_TYPES.includes(mimeType);
155
- }
156
- export function isAcceptableDataUrl(maybeDataUrl) {
157
- const parsedDataUrl = parseDataUrl(maybeDataUrl);
158
- if (!parsedDataUrl?.mimeType)
159
- return false;
160
- return isAcceptableDataUrlMimeType(parsedDataUrl.mimeType);
161
- }
162
- export function isValidImageURL(imageUrl) {
163
- try {
164
- if (isAcceptableDataUrl(imageUrl))
165
- return true;
166
- // The second "base" param helps to handle relative paths to local files
167
- // https://developer.mozilla.org/en-US/docs/Web/API/URL/URL#parameters
168
- const hostName = new URL(imageUrl, `https://i.${REDD_IT}`)?.hostname;
169
- const tld = hostName.split('.').slice(-2).join('.');
170
- return Boolean(tld) && VerifiedImageHosts.includes(tld);
171
- }
172
- catch (_) {
173
- return false;
174
- }
175
- }
176
127
  /**
177
128
  * Returns a BlockSizes object either directly from the block or constructs
178
129
  * one from the legacy `size` field
@@ -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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"}
@@ -53,6 +53,8 @@ let DevvitCustomPost = class DevvitCustomPost extends LitElement {
53
53
  super();
54
54
  _DevvitCustomPost_instances.add(this);
55
55
  this.useExperimentalBlocks = false;
56
+ // to-do: don't use attributes initialized to true. They cannot be passed by
57
+ // attributes.
56
58
  this.useSandbox = true;
57
59
  _DevvitCustomPost_appState.set(this, {});
58
60
  _DevvitCustomPost_customPostActor.set(this, void 0);
@@ -62,7 +64,8 @@ let DevvitCustomPost = class DevvitCustomPost extends LitElement {
62
64
  _DevvitCustomPost_localClient.set(this, void 0);
63
65
  _DevvitCustomPost_rerenderTimeout.set(this, void 0);
64
66
  _DevvitCustomPost_rootHeight.set(this, void 0);
65
- // No concurrency is used to enforce order.
67
+ // No concurrency is used to enforce order. Priority is used to allow server
68
+ // responses to jump to the front when received.
66
69
  _DevvitCustomPost_rpcQueue.set(this, new PQueue({ concurrency: 1 }));
67
70
  _DevvitCustomPost_uiEventHandlerActor.set(this, void 0);
68
71
  _DevvitCustomPost_handleUserAction.set(this, async (event) => {
@@ -127,18 +130,22 @@ let DevvitCustomPost = class DevvitCustomPost extends LitElement {
127
130
  </div>`;
128
131
  }
129
132
  async willUpdate(props) {
130
- if (props.has('localRuntimeCode') && this.localRuntimeCode) {
133
+ if (props.has('localRuntimeCode') || props.has('bundle') || props.has('useSandbox')) {
134
+ // The runtime or the bundle has changed. Reset.
131
135
  __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.quit();
136
+ __classPrivateFieldGet(this, _DevvitCustomPost_rpcQueue, "f").clear();
137
+ if (__classPrivateFieldGet(this, _DevvitCustomPost_rerenderTimeout, "f") != null)
138
+ clearTimeout(__classPrivateFieldGet(this, _DevvitCustomPost_rerenderTimeout, "f"));
139
+ __classPrivateFieldSet(this, _DevvitCustomPost_rerenderTimeout, undefined, "f");
140
+ }
141
+ if (props.has('localRuntimeCode') && this.localRuntimeCode) {
132
142
  __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");
133
143
  }
134
- const actorRefChanged = props.has('actorRef');
135
- if (actorRefChanged) {
144
+ if (props.has('actorRef')) {
136
145
  __classPrivateFieldSet(this, _DevvitCustomPost_customPostActor, this.actorRef?.As(CustomPostDefinition), "f");
137
146
  __classPrivateFieldSet(this, _DevvitCustomPost_uiEventHandlerActor, this.actorRef?.As(UIEventHandlerDefinition), "f");
138
147
  }
139
- if (props.has('bundle') || props.has('useSandbox'))
140
- __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.quit();
141
- if ((this.actorRef && (actorRefChanged || props.has('bundle'))) || props.has('useSandbox')) {
148
+ if (props.has('actorRef') || props.has('bundle') || props.has('useSandbox')) {
142
149
  if (this.bundle) {
143
150
  // offline/online, defer initialRender for offline client
144
151
  try {
@@ -148,6 +155,9 @@ let DevvitCustomPost = class DevvitCustomPost extends LitElement {
148
155
  __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_bubble).call(this, 'devvit-ui-error', { type: 'Error', err });
149
156
  throw err;
150
157
  }
158
+ // No remote runtime. Queue initial render.
159
+ if (!this.actorRef)
160
+ __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_initialRender).call(this);
151
161
  }
152
162
  else if ((this.bundle && props.has('bundle')) || !__classPrivateFieldGet(this, _DevvitCustomPost_hasInitialRender, "f")) {
153
163
  // online only
@@ -223,7 +233,7 @@ _DevvitCustomPost_processEvent = async function _DevvitCustomPost_processEvent(e
223
233
  call = (await __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.call('HandleUIEvent', req, this.metadata));
224
234
  }
225
235
  catch (err) {
226
- if (!isCircuitBreaker(err) && __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.ready) {
236
+ if ((!isCircuitBreaker(err) && __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.ready) || !__classPrivateFieldGet(this, _DevvitCustomPost_uiEventHandlerActor, "f")) {
227
237
  console.error(err);
228
238
  __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_bubble).call(this, 'devvit-ui-error', { err, type: 'Error' });
229
239
  }
@@ -241,15 +251,14 @@ _DevvitCustomPost_processEvent = async function _DevvitCustomPost_processEvent(e
241
251
  }
242
252
  }
243
253
  if (call) {
244
- const res = await call;
245
254
  // Can only change state on the main queue.
246
255
  if (!ev.queue) {
247
- __classPrivateFieldSet(this, _DevvitCustomPost_appState, res.state ?? {}, "f");
256
+ __classPrivateFieldSet(this, _DevvitCustomPost_appState, call.state ?? {}, "f");
248
257
  }
249
258
  const renderType = ev.realtimeEvent
250
259
  ? BlockRenderEventType.RENDER_EFFECT_EVENT
251
260
  : BlockRenderEventType.RENDER_USER_ACTION;
252
- await __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_handleEffects).call(this, renderType, res.effects);
261
+ await __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_handleEffects).call(this, renderType, call.effects);
253
262
  }
254
263
  };
255
264
  _DevvitCustomPost_queueRenderPost = function _DevvitCustomPost_queueRenderPost(req, circuitBreak) {
@@ -277,7 +286,7 @@ _DevvitCustomPost_renderPost = async function _DevvitCustomPost_renderPost(req,
277
286
  }
278
287
  else {
279
288
  // Render now.
280
- if (!circuitBreak && __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.ready) {
289
+ if ((!circuitBreak || !__classPrivateFieldGet(this, _DevvitCustomPost_customPostActor, "f")) && __classPrivateFieldGet(this, _DevvitCustomPost_localClient, "f")?.ready) {
281
290
  __classPrivateFieldGet(this, _DevvitCustomPost_instances, "m", _DevvitCustomPost_bubble).call(this, 'devvit-ui-error', { err, type: 'Error' });
282
291
  console.error(err);
283
292
  }
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-b85ea9563.0",
3
+ "version": "0.10.15-next-2024-02-15-ea5e1b95f.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-b85ea9563.0",
58
- "@devvit/runtime-lite": "0.10.15-next-2024-02-14-b85ea9563.0",
59
- "@devvit/runtimes": "0.10.15-next-2024-02-14-b85ea9563.0",
60
- "@devvit/shared-types": "0.10.15-next-2024-02-14-b85ea9563.0",
57
+ "@devvit/protos": "0.10.15-next-2024-02-15-ea5e1b95f.0",
58
+ "@devvit/runtime-lite": "0.10.15-next-2024-02-15-ea5e1b95f.0",
59
+ "@devvit/runtimes": "0.10.15-next-2024-02-15-ea5e1b95f.0",
60
+ "@devvit/shared-types": "0.10.15-next-2024-02-15-ea5e1b95f.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-b85ea9563.0",
87
+ "@devvit/tsconfig": "0.10.15-next-2024-02-15-ea5e1b95f.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": "ee788dad24864862de31f0f840635b5810a08692"
119
+ "gitHead": "48cd25b0170f2b5a269f4bab901c444b78fae5a5"
120
120
  }
@@ -1,7 +0,0 @@
1
- export declare const REDD_IT = "redd.it";
2
- export declare const REDDIT_STATIC = "redditstatic.com";
3
- export declare const REDDIT_MEDIA = "redditmedia.com";
4
- export declare const SNOO_DEV = "snoo.dev";
5
- export declare const VerifiedPublicImageHosts: string[];
6
- export declare const VerifiedImageHosts: string[];
7
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../library/src/blocks/templates/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,YAAY,CAAC;AACjC,eAAO,MAAM,aAAa,qBAAqB,CAAC;AAChD,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAC9C,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,eAAO,MAAM,wBAAwB,UAAyC,CAAC;AAC/E,eAAO,MAAM,kBAAkB,UAAmD,CAAC"}
@@ -1,7 +0,0 @@
1
- // Only the following domains are approved: redd.it, redditstatic.com, redditmedia.com, or snoo.dev
2
- export const REDD_IT = 'redd.it';
3
- export const REDDIT_STATIC = 'redditstatic.com';
4
- export const REDDIT_MEDIA = 'redditmedia.com';
5
- export const SNOO_DEV = 'snoo.dev';
6
- export const VerifiedPublicImageHosts = [REDD_IT, REDDIT_STATIC, REDDIT_MEDIA];
7
- export const VerifiedImageHosts = [SNOO_DEV, REDD_IT, REDDIT_STATIC, REDDIT_MEDIA];