@devvit/public-api 0.10.23-next-2024-07-02-fe7059b4e.0 → 0.10.23-next-2024-07-23-7552e0bd4.0
Sign up to get free protection for your applications and to get access to all the features.
- package/apis/AssetsClient/AssetsClient.d.ts +0 -6
- package/apis/AssetsClient/AssetsClient.d.ts.map +1 -1
- package/apis/AssetsClient/AssetsClient.js +12 -26
- package/apis/makeAPIClients.d.ts.map +1 -1
- package/apis/makeAPIClients.js +2 -2
- package/apis/realtime/RealtimeClient.d.ts +2 -2
- package/apis/realtime/RealtimeClient.d.ts.map +1 -1
- package/apis/realtime/RealtimeClient.js +2 -2
- package/apis/reddit/RedditAPIClient.d.ts +2 -10
- package/apis/reddit/RedditAPIClient.d.ts.map +1 -1
- package/apis/reddit/RedditAPIClient.js +1 -11
- package/apis/reddit/models/Comment.d.ts +0 -2
- package/apis/reddit/models/Comment.d.ts.map +1 -1
- package/apis/reddit/models/Comment.js +2 -12
- package/apis/reddit/models/Post.d.ts +0 -2
- package/apis/reddit/models/Post.d.ts.map +1 -1
- package/apis/reddit/models/Post.js +2 -12
- package/apis/reddit/models/Subreddit.d.ts +1 -17
- package/apis/reddit/models/Subreddit.d.ts.map +1 -1
- package/apis/reddit/models/Subreddit.js +0 -15
- package/apis/reddit/models/User.d.ts.map +1 -1
- package/apis/reddit/models/User.js +2 -1
- package/apis/scheduler/SchedulerClient.d.ts +1 -1
- package/apis/scheduler/SchedulerClient.d.ts.map +1 -1
- package/apis/ui/UIClient.d.ts +3 -3
- package/apis/ui/UIClient.d.ts.map +1 -1
- package/apis/ui/helpers/assertValidFormFields.d.ts +2 -2
- package/apis/ui/helpers/assertValidFormFields.d.ts.map +1 -1
- package/apis/ui/helpers/getFormValues.d.ts +2 -2
- package/apis/ui/helpers/getFormValues.d.ts.map +1 -1
- package/apis/ui/helpers/getFormValues.js +1 -3
- package/apis/ui/helpers/transformForm.d.ts +1 -1
- package/apis/ui/helpers/transformForm.d.ts.map +1 -1
- package/devvit/Devvit.d.ts +6 -8
- package/devvit/Devvit.d.ts.map +1 -1
- package/devvit/Devvit.js +2 -10
- package/devvit/internals/blocks/BlocksReconciler.d.ts.map +1 -1
- package/devvit/internals/blocks/BlocksReconciler.js +5 -25
- package/devvit/internals/blocks/BlocksTransformer.d.ts +2 -2
- package/devvit/internals/blocks/BlocksTransformer.d.ts.map +1 -1
- package/devvit/internals/blocks/BlocksTransformer.js +3 -3
- package/devvit/internals/blocks/handler/BlocksHandler.d.ts +0 -4
- package/devvit/internals/blocks/handler/BlocksHandler.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/BlocksHandler.js +9 -33
- package/devvit/internals/blocks/handler/ContextBuilder.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/ContextBuilder.js +8 -3
- package/devvit/internals/blocks/handler/RenderContext.d.ts +1 -5
- package/devvit/internals/blocks/handler/RenderContext.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/RenderContext.js +3 -30
- package/devvit/internals/blocks/handler/UIClient.d.ts +4 -4
- package/devvit/internals/blocks/handler/UIClient.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/test-helpers.d.ts +0 -1
- package/devvit/internals/blocks/handler/test-helpers.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/test-helpers.js +0 -3
- package/devvit/internals/blocks/handler/types.d.ts +9 -15
- package/devvit/internals/blocks/handler/types.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/useAsync.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/useAsync.js +13 -17
- package/devvit/internals/blocks/handler/useChannel.d.ts +1 -2
- package/devvit/internals/blocks/handler/useChannel.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/useChannel.js +13 -49
- package/devvit/internals/blocks/handler/useForm.d.ts +5 -18
- package/devvit/internals/blocks/handler/useForm.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/useForm.js +6 -3
- package/devvit/internals/blocks/handler/useState.d.ts +1 -1
- package/devvit/internals/blocks/handler/useState.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/useState.js +14 -14
- package/devvit/internals/blocks/useChannel.d.ts.map +1 -1
- package/devvit/internals/blocks/useChannel.js +2 -15
- package/devvit/internals/blocks/useForm.d.ts.map +1 -1
- package/devvit/internals/context.d.ts.map +1 -1
- package/devvit/internals/context.js +13 -16
- package/index.d.ts +0 -1
- package/index.d.ts.map +1 -1
- package/index.js +0 -1
- package/meta.json +309 -311
- package/meta.min.json +116 -186
- package/package.json +8 -8
- package/public-api.d.ts +1750 -2042
- package/public-api.iife.js +7282 -7007
- package/public-api.min.js +5 -5
- package/public-api.min.js.map +4 -4
- package/types/context.d.ts +3 -5
- package/types/context.d.ts.map +1 -1
- package/types/data.d.ts +3 -3
- package/types/data.d.ts.map +1 -1
- package/types/form.d.ts +17 -28
- package/types/form.d.ts.map +1 -1
- package/types/hooks.d.ts +7 -37
- package/types/hooks.d.ts.map +1 -1
- package/types/realtime.d.ts +3 -3
- package/types/realtime.d.ts.map +1 -1
- package/types/scheduler.d.ts +14 -15
- package/types/scheduler.d.ts.map +1 -1
- package/types/ui-client.d.ts +4 -4
- package/types/ui-client.d.ts.map +1 -1
- package/devvit/internals/blocks/handler/cache.d.ts +0 -9
- package/devvit/internals/blocks/handler/cache.d.ts.map +0 -1
- package/devvit/internals/blocks/handler/cache.js +0 -5
- package/devvit/internals/blocks/handler/cache.test.d.ts.map +0 -1
- package/devvit/internals/blocks/handler/promise_cache.d.ts +0 -67
- package/devvit/internals/blocks/handler/promise_cache.d.ts.map +0 -1
- package/devvit/internals/blocks/handler/promise_cache.js +0 -239
- package/types/context.test.d.ts.map +0 -1
- package/version.json +0 -75
package/types/context.d.ts
CHANGED
@@ -7,11 +7,9 @@ import type { RealtimeClient } from '../apis/realtime/RealtimeClient.js';
|
|
7
7
|
import type { RedditAPIClient } from '../apis/reddit/RedditAPIClient.js';
|
8
8
|
import type { EffectEmitter } from '../devvit/internals/blocks/EffectEmitter.js';
|
9
9
|
import type { CacheHelper } from '../devvit/internals/cache.js';
|
10
|
-
import type {
|
11
|
-
import type { FormToFormValues, UseChannelResult, UseIntervalHook, UseStateResult } from './hooks.js';
|
10
|
+
import type { UseChannelHook, UseFormHook, UseIntervalHook, UseStateResult } from './hooks.js';
|
12
11
|
import type { KVStore } from './kvStore.js';
|
13
12
|
import type { MediaPlugin } from './media.js';
|
14
|
-
import type { ChannelOptions } from './realtime.js';
|
15
13
|
import type { RedisClient } from './redis.js';
|
16
14
|
import type { Scheduler } from './scheduler.js';
|
17
15
|
import type { SettingsClient } from './settings.js';
|
@@ -127,12 +125,12 @@ export type ContextAPIClients = {
|
|
127
125
|
* A hook for managing a form between Block renders.
|
128
126
|
* This is only available within a Block Component.
|
129
127
|
*/
|
130
|
-
useForm:
|
128
|
+
useForm: UseFormHook;
|
131
129
|
/**
|
132
130
|
* A hook hor managing a realtime pubsub channel between Block renders.
|
133
131
|
* This is only available within a Block Component.
|
134
132
|
*/
|
135
|
-
useChannel:
|
133
|
+
useChannel: UseChannelHook;
|
136
134
|
};
|
137
135
|
/** The current app context of the event or render */
|
138
136
|
export type Context = ContextAPIClients & BaseContext;
|
package/types/context.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;CACpB,GAAG;KAeD,GAAG,IAAI,QAAQ,CAAC,CAAC,EAAE,MAAM;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,mDAAmD;IACnD,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACtC,qEAAqE;IACrE,KAAK,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kCAAkC;IAClC,MAAM,EAAE,YAAY,CAAC;IACrB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,KAAK,EAAE,WAAW,CAAC;IACnB,iCAAiC;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,kCAAkC;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,oCAAoC;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,qCAAqC;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,6BAA6B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,0DAA0D;IAC1D,MAAM,EAAE,YAAY,CAAC;IACrB,gCAAgC;IAChC,QAAQ,EAAE,cAAc,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,0CAA0C;IAC1C,EAAE,EAAE,QAAQ,CAAC;IACb;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC9F,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1F,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1F,QAAQ,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,GAAG,IAAI,EAC7C,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GACvC,cAAc,CAAC,CAAC,CAAC,CAAC;IACrB;;;OAGG;IACH,WAAW,EAAE,eAAe,CAAC;IAC7B;;;OAGG;IACH,OAAO,EAAE,WAAW,CAAC;IACrB;;;OAGG;IACH,UAAU,EAAE,cAAc,CAAC;CAC5B,CAAC;AAEF,qDAAqD;AACrD,MAAM,MAAM,OAAO,GAAG,iBAAiB,GAAG,WAAW,CAAC"}
|
package/types/data.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
export type Data = {
|
2
|
+
[key: string]: any;
|
3
|
+
};
|
4
4
|
//# sourceMappingURL=data.d.ts.map
|
package/types/data.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/types/data.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/types/data.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,IAAI,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC"}
|
package/types/form.d.ts
CHANGED
@@ -1,23 +1,22 @@
|
|
1
1
|
import type { FieldConfig_Boolean, FieldConfig_Number, FieldConfig_Paragraph, FieldConfig_Selection, FieldConfig_Selection_Item, FieldConfig_String } from '@devvit/protos';
|
2
2
|
import type { Prettify } from '@devvit/shared-types/Prettify.js';
|
3
|
-
import type {
|
4
|
-
import type { FormKey } from '@devvit/shared-types/useForm.js';
|
3
|
+
import type { Data } from './data.js';
|
5
4
|
import type { Devvit } from '../devvit/Devvit.js';
|
6
|
-
|
7
|
-
export type
|
8
|
-
export type FormValues = JSONObject;
|
9
|
-
export type FormOnSubmitEvent<T extends Partial<JSONObject>> = {
|
5
|
+
export type FormValues = Data;
|
6
|
+
export type FormOnSubmitEvent = {
|
10
7
|
/** The form values that were submitted */
|
11
|
-
values:
|
8
|
+
values: FormValues;
|
12
9
|
};
|
13
|
-
|
10
|
+
/** A unique key generated by `Devvit.createForm` or the `useForm` hook. */
|
11
|
+
export type FormKey = `form.${number}` | `form.hook.${string}.${number}`;
|
12
|
+
export type FormOnSubmitEventHandler = (
|
14
13
|
/** The event object containing the results of the form submission */
|
15
|
-
event: FormOnSubmitEvent
|
14
|
+
event: FormOnSubmitEvent,
|
16
15
|
/** The current app context of the form submission event */
|
17
16
|
context: Devvit.Context) => void | Promise<void>;
|
18
17
|
export type Form = {
|
19
18
|
/** The fields that will be displayed in the form */
|
20
|
-
fields:
|
19
|
+
fields: FormField[];
|
21
20
|
/** An optional title for the form */
|
22
21
|
title?: string;
|
23
22
|
/** An optional description for the form */
|
@@ -44,36 +43,27 @@ export type Form = {
|
|
44
43
|
* });
|
45
44
|
* ```
|
46
45
|
* */
|
47
|
-
export type FormFunction
|
48
|
-
export type FormDefinition
|
46
|
+
export type FormFunction = (data: Data) => Form;
|
47
|
+
export type FormDefinition = {
|
49
48
|
/** A form or a function that returns a form */
|
50
|
-
form:
|
49
|
+
form: Form | FormFunction;
|
51
50
|
/** A callback that will be invoked when the form is submitted */
|
52
|
-
onSubmit: FormOnSubmitEventHandler
|
51
|
+
onSubmit: FormOnSubmitEventHandler;
|
53
52
|
};
|
54
53
|
export type BaseField<ValueType> = {
|
55
|
-
/**
|
56
|
-
* The name of the field. This will be used as the key in the `values` object
|
57
|
-
* when the form is submitted.
|
58
|
-
*/
|
54
|
+
/** The name of the field. This will be used as the key in the `values` object when the form is submitted */
|
59
55
|
name: string;
|
60
56
|
/** The label of the field. This will be displayed to the user */
|
61
57
|
label: string;
|
62
58
|
/** An optional help text that will be displayed below the field */
|
63
59
|
helpText?: string | undefined;
|
64
|
-
/**
|
65
|
-
* If true the field will be required and the user will not be able to submit
|
66
|
-
* the form without filling it in.
|
67
|
-
*/
|
60
|
+
/** If true the field will be required and the user will not be able to submit the form without filling it in */
|
68
61
|
required?: boolean | undefined;
|
69
62
|
/** If true the field will be disabled */
|
70
63
|
disabled?: boolean | undefined;
|
71
64
|
/** The default value of the field */
|
72
65
|
defaultValue?: ValueType | undefined;
|
73
|
-
/**
|
74
|
-
* This indicates whether the field (setting) is an app level or install level
|
75
|
-
* setting. App setting values can be used by any installation.
|
76
|
-
*/
|
66
|
+
/** This indicates whether the field (setting) is an app level or install level setting. App setting values can be used by any installation. */
|
77
67
|
scope?: SettingScopeType | undefined;
|
78
68
|
};
|
79
69
|
export type SettingScopeType = 'installation' | 'app';
|
@@ -117,10 +107,9 @@ export type FormFieldGroup = {
|
|
117
107
|
/** The label of the group that will be displayed to the user */
|
118
108
|
label: string;
|
119
109
|
/** The fields that will be displayed in the group */
|
120
|
-
fields:
|
110
|
+
fields: FormField[];
|
121
111
|
/** An optional help text that will be displayed below the group */
|
122
112
|
helpText?: string | undefined;
|
123
|
-
required?: never;
|
124
113
|
};
|
125
114
|
export type FormField = StringField | ImageField | ParagraphField | NumberField | BooleanField | SelectField | FormFieldGroup;
|
126
115
|
//# sourceMappingURL=form.d.ts.map
|
package/types/form.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/types/form.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/types/form.ts"],"names":[],"mappings":"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"}
|
package/types/hooks.d.ts
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
import type { JSONObject, JSONValue } from '@devvit/shared-types/json.js';
|
2
|
-
import type { FormKey } from '@devvit/shared-types/useForm.js';
|
3
1
|
import type { Context } from './context.js';
|
4
|
-
import type {
|
2
|
+
import type { Data } from './data.js';
|
3
|
+
import type { Form, FormFunction, FormKey, FormValues } from './form.js';
|
5
4
|
import type { ChannelOptions, ChannelStatus } from './realtime.js';
|
6
5
|
export type Dispatch<A> = (value: A) => void;
|
7
6
|
export type SetStateAction<S> = S | ((prevState: S) => S);
|
@@ -9,8 +8,8 @@ export type StateSetter<S> = Dispatch<SetStateAction<S>>;
|
|
9
8
|
/** A tuple containing the current state and a function to update it */
|
10
9
|
export type UseStateResult<S> = [S, StateSetter<S>];
|
11
10
|
export type UseStateHook = Context['useState'];
|
11
|
+
export type UseStateInitializer<S> = S | (() => S);
|
12
12
|
export type AsyncUseStateInitializer<S> = () => Promise<S>;
|
13
|
-
export type UseStateInitializer<S> = S | (() => S) | AsyncUseStateInitializer<S>;
|
14
13
|
export type AsyncError = {
|
15
14
|
message: string;
|
16
15
|
details: string | null;
|
@@ -21,35 +20,7 @@ export type UseAsyncResult<S> = {
|
|
21
20
|
error: AsyncError | null;
|
22
21
|
};
|
23
22
|
/** A hook that returns a form key that can be used in the `ui.showForm` */
|
24
|
-
export type UseFormHook
|
25
|
-
export type FormToFormValues<T extends Form | FormFunction = Form | FormFunction> = FormFieldsToFormValues<(T extends FormFunction ? ReturnType<T> : T)['fields']>;
|
26
|
-
/**
|
27
|
-
* Input is a FormField[], output is a
|
28
|
-
* {fieldNameA: fieldTypeA, fieldNameB: fieldTypeB}.
|
29
|
-
*/
|
30
|
-
type FormFieldsToFormValues<T extends readonly FormField[]> = T extends readonly [
|
31
|
-
infer Field extends FormField,
|
32
|
-
...infer Rest extends FormField[]
|
33
|
-
] ? FormFieldToFormValue<Field> & FormFieldsToFormValues<Rest> : JSONObject;
|
34
|
-
/** Input is a FormField, output is a {fieldName: fieldType}. */
|
35
|
-
type FormFieldToFormValue<T extends FormField> = T extends BooleanField ? {
|
36
|
-
[_ in T['name']]: boolean;
|
37
|
-
} : T extends ImageField | ParagraphField | StringField ? FormFieldToRequiredFormValue<T, string> : T extends NumberField ? FormFieldToRequiredFormValue<T, number> : T extends SelectField ? {
|
38
|
-
[_ in T['name']]: string[];
|
39
|
-
} : T extends FormFieldGroup ? FormFieldsToFormValues<T['fields']> : never;
|
40
|
-
/**
|
41
|
-
* Input is a FormField, output is a {fieldName: fieldType} or
|
42
|
-
* {fieldName?: fieldType}.
|
43
|
-
*/
|
44
|
-
type FormFieldToRequiredFormValue<T extends ImageField | ParagraphField | StringField | NumberField, V> = T extends {
|
45
|
-
required: true;
|
46
|
-
} | {
|
47
|
-
defaultValue: boolean | number | string;
|
48
|
-
} ? {
|
49
|
-
[_ in T['name']]: V;
|
50
|
-
} : {
|
51
|
-
[_ in T['name']]?: V;
|
52
|
-
};
|
23
|
+
export type UseFormHook = (form: Form | FormFunction, onSubmit: (values: FormValues) => void | Promise<void>) => FormKey;
|
53
24
|
/** An object that contains functions to start and stop the interval created by the `useInterval` hook */
|
54
25
|
export type UseIntervalResult = {
|
55
26
|
/** Start the interval */
|
@@ -63,16 +34,15 @@ export type UseIntervalHook = (
|
|
63
34
|
callback: () => void | Promise<void>,
|
64
35
|
/** The delay between each callback run in milliseconds. Delay must be at least 100ms. */
|
65
36
|
delay: number) => UseIntervalResult;
|
66
|
-
export type UseChannelHook
|
67
|
-
export type UseChannelResult
|
37
|
+
export type UseChannelHook = (options: ChannelOptions) => UseChannelResult;
|
38
|
+
export type UseChannelResult = {
|
68
39
|
/** Subscribe to the channel */
|
69
40
|
subscribe(): void;
|
70
41
|
/** Unsubscribe from the channel */
|
71
42
|
unsubscribe(): void;
|
72
43
|
/** Publish a message to the channel */
|
73
|
-
send(
|
44
|
+
send(data: Data): Promise<void>;
|
74
45
|
/** Current subscription status */
|
75
46
|
status: ChannelStatus;
|
76
47
|
};
|
77
|
-
export {};
|
78
48
|
//# sourceMappingURL=hooks.d.ts.map
|
package/types/hooks.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/types/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/types/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnE,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAC7C,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzD,uEAAuE;AACvE,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/C,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AACrE,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,CAAC;AAoB/F,2EAA2E;AAC3E,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,IAAI,GAAG,YAAY,EACzB,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KACnD,OAAO,CAAC;AAEb,yGAAyG;AACzG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,yBAAyB;IACzB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,wBAAwB;IACxB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,uIAAuI;AACvI,MAAM,MAAM,eAAe,GAAG;AAC5B,yCAAyC;AACzC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AACpC,yFAAyF;AACzF,KAAK,EAAE,MAAM,KACV,iBAAiB,CAAC;AAUvB,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,gBAAgB,CAAC;AAW3E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+BAA+B;IAC/B,SAAS,IAAI,IAAI,CAAC;IAClB,mCAAmC;IACnC,WAAW,IAAI,IAAI,CAAC;IACpB,uCAAuC;IACvC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,kCAAkC;IAClC,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC"}
|
package/types/realtime.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import type {
|
1
|
+
import type { Data } from './data.js';
|
2
2
|
export declare enum ChannelStatus {
|
3
3
|
Unknown = 0,
|
4
4
|
Connecting = 1,
|
@@ -6,11 +6,11 @@ export declare enum ChannelStatus {
|
|
6
6
|
Disconnecting = 3,
|
7
7
|
Disconnected = 4
|
8
8
|
}
|
9
|
-
export type ChannelOptions
|
9
|
+
export type ChannelOptions = {
|
10
10
|
/** Name of the channel */
|
11
11
|
name: string;
|
12
12
|
/** Called every time a message is received on this channel */
|
13
|
-
onMessage(
|
13
|
+
onMessage(data: Data): void | undefined;
|
14
14
|
/** Optional hook to be informed when the channel has connected */
|
15
15
|
onSubscribed?: (() => void | Promise<void>) | undefined;
|
16
16
|
/** Optional hook to be informed when the channel has disconnected */
|
package/types/realtime.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/types/realtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/types/realtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,oBAAY,aAAa;IACvB,OAAO,IAAA;IACP,UAAU,IAAA;IACV,SAAS,IAAA;IACT,aAAa,IAAA;IACb,YAAY,IAAA;CACb;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,kEAAkE;IAClE,YAAY,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACxD,qEAAqE;IACrE,cAAc,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;CAC3D,CAAC"}
|
package/types/scheduler.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import type {
|
1
|
+
import type { Data } from './data.js';
|
2
2
|
import type { Devvit } from '../devvit/Devvit.js';
|
3
3
|
export type ScheduledJob = {
|
4
4
|
/** ID of the scheduled job. Use this with scheduler.cancelJob to cancel the job. */
|
@@ -6,7 +6,7 @@ export type ScheduledJob = {
|
|
6
6
|
/** The name of the scheduled job type */
|
7
7
|
name: string;
|
8
8
|
/** Additional data passed in by the scheduler client */
|
9
|
-
data:
|
9
|
+
data: Data | undefined;
|
10
10
|
/** The Date of when this job should run */
|
11
11
|
runAt: Date;
|
12
12
|
};
|
@@ -16,23 +16,23 @@ export type ScheduledCronJob = {
|
|
16
16
|
/** The name of the scheduled job type */
|
17
17
|
name: string;
|
18
18
|
/** Additional data passed in by the scheduler client */
|
19
|
-
data
|
19
|
+
data: Data | undefined;
|
20
20
|
/** The cron string of when this job should run */
|
21
21
|
cron: string;
|
22
22
|
};
|
23
|
-
export type ScheduledJobOptions
|
23
|
+
export type ScheduledJobOptions = {
|
24
24
|
/** The name of the scheduled job type */
|
25
25
|
name: string;
|
26
26
|
/** Additional data passed in by the scheduler client */
|
27
|
-
data?:
|
27
|
+
data?: Data | undefined;
|
28
28
|
/** The Date of when this job should run */
|
29
29
|
runAt: Date;
|
30
30
|
};
|
31
|
-
export type ScheduledCronJobOptions
|
31
|
+
export type ScheduledCronJobOptions = {
|
32
32
|
/** The name of the scheduled job type */
|
33
33
|
name: string;
|
34
34
|
/** Additional data passed in by the scheduler client */
|
35
|
-
data?:
|
35
|
+
data?: Data | undefined;
|
36
36
|
/** The cron string of when this job should run */
|
37
37
|
cron: string;
|
38
38
|
};
|
@@ -41,7 +41,7 @@ export type ScheduledCronJobOptions<T extends JSONObject | undefined = JSONObjec
|
|
41
41
|
* @param job The job to schedule
|
42
42
|
* @returns {} The id of the scheduled job
|
43
43
|
*/
|
44
|
-
export type RunJob
|
44
|
+
export type RunJob = (job: ScheduledJobOptions | ScheduledCronJobOptions) => Promise<string>;
|
45
45
|
/**
|
46
46
|
* Cancel a scheduled job
|
47
47
|
* @param jobId The id of the job to cancel
|
@@ -57,7 +57,7 @@ export type Scheduler = {
|
|
57
57
|
* @param job The job to schedule
|
58
58
|
* @returns {} The id of the scheduled job
|
59
59
|
*/
|
60
|
-
runJob:
|
60
|
+
runJob: RunJob;
|
61
61
|
/**
|
62
62
|
* Cancel a scheduled job
|
63
63
|
* @param jobId The id of the job to cancel
|
@@ -68,18 +68,17 @@ export type Scheduler = {
|
|
68
68
|
*/
|
69
69
|
listJobs: () => Promise<(ScheduledJob | ScheduledCronJob)[]>;
|
70
70
|
};
|
71
|
-
export type ScheduledJobEvent
|
71
|
+
export type ScheduledJobEvent = {
|
72
72
|
/** The name of the scheduled job */
|
73
73
|
name: string;
|
74
74
|
/** Additional data passed in by the scheduler client */
|
75
|
-
data
|
75
|
+
data?: Data | undefined;
|
76
76
|
};
|
77
|
-
export type ScheduledJobHandler
|
78
|
-
export type
|
79
|
-
export type ScheduledJobType<Data extends JSONObject | undefined> = {
|
77
|
+
export type ScheduledJobHandler = (event: ScheduledJobEvent, context: Omit<Devvit.Context, 'ui' | 'dimensions' | 'modLog' | 'uiEnvironment'>) => void | Promise<void>;
|
78
|
+
export type ScheduledJobType = {
|
80
79
|
/** The name of the scheduled job type */
|
81
80
|
name: string;
|
82
81
|
/** The function that will be called when the job is scheduled to run */
|
83
|
-
onRun: ScheduledJobHandler
|
82
|
+
onRun: ScheduledJobHandler;
|
84
83
|
};
|
85
84
|
//# sourceMappingURL=scheduler.d.ts.map
|
package/types/scheduler.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/types/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/types/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG;IACzB,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IACX,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB,2CAA2C;IAC3C,KAAK,EAAE,IAAI,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IACX,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,2CAA2C;IAC3C,KAAK,EAAE,IAAI,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,mBAAmB,GAAG,uBAAuB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7F;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC;IACrB;;OAEG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,YAAY,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,YAAY,GAAG,QAAQ,GAAG,eAAe,CAAC,KAC5E,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,KAAK,EAAE,mBAAmB,CAAC;CAC5B,CAAC"}
|
package/types/ui-client.d.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
import type {
|
2
|
-
import type {
|
3
|
-
import type { Comment, Post, Subreddit, User } from '../apis/reddit/models/index.js';
|
1
|
+
import type { FormKey } from './form.js';
|
2
|
+
import type { Data } from './data.js';
|
4
3
|
import type { Toast } from './toast.js';
|
4
|
+
import type { Comment, Post, Subreddit, User } from '../apis/reddit/models/index.js';
|
5
5
|
/**
|
6
6
|
* The UI client lets your app interact with the Reddit frontend.
|
7
7
|
* This client will only be available for capabilities that have
|
@@ -10,7 +10,7 @@ import type { Toast } from './toast.js';
|
|
10
10
|
*/
|
11
11
|
export type UIClient = {
|
12
12
|
/** Open a form in a modal */
|
13
|
-
showForm(formKey: FormKey, data?:
|
13
|
+
showForm(formKey: FormKey, data?: Data | undefined): void;
|
14
14
|
/** Show a message in a toast. */
|
15
15
|
showToast(text: string): void;
|
16
16
|
showToast(toast: Toast): void;
|
package/types/ui-client.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ui-client.d.ts","sourceRoot":"","sources":["../../src/types/ui-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"ui-client.d.ts","sourceRoot":"","sources":["../../src/types/ui-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAErF;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1D,iCAAiC;IACjC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC9B,wBAAwB;IACxB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACvC,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;CAC1E,CAAC"}
|
@@ -1,9 +0,0 @@
|
|
1
|
-
import type { RedisClient } from '../../../../types/redis.js';
|
2
|
-
import type { JSONValue } from '@devvit/shared-types/json.js';
|
3
|
-
import type { CacheOptions, Clock, LocalCache } from './promise_cache.js';
|
4
|
-
import type { RenderContext } from './RenderContext.js';
|
5
|
-
export type CacheHelper = <T extends JSONValue>(fn: () => Promise<T>, options: CacheOptions) => Promise<T>;
|
6
|
-
export declare function makeCache(redis: RedisClient, state: RenderContext['_state'] & {
|
7
|
-
__cache?: LocalCache;
|
8
|
-
}, clock?: Clock): CacheHelper;
|
9
|
-
//# sourceMappingURL=cache.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,SAAS,EAC5C,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE,YAAY,KAClB,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhB,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,EACzD,KAAK,GAAE,KAAmB,GACzB,WAAW,CAGb"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"cache.test.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/cache.test.ts"],"names":[],"mappings":""}
|
@@ -1,67 +0,0 @@
|
|
1
|
-
import type { JSONValue, RedisClient } from '../../../../index.js';
|
2
|
-
export type CacheEntry = {
|
3
|
-
value: JSONValue | null;
|
4
|
-
expires: number;
|
5
|
-
error: string | null;
|
6
|
-
errorTime: number | null;
|
7
|
-
checkedAt: number;
|
8
|
-
errorCount: number;
|
9
|
-
};
|
10
|
-
export type Clock = {
|
11
|
-
now(): Date;
|
12
|
-
};
|
13
|
-
export declare const SystemClock: Clock;
|
14
|
-
export type CacheOptions = {
|
15
|
-
/**
|
16
|
-
* Time to live in milliseconds.
|
17
|
-
*/
|
18
|
-
ttl: number;
|
19
|
-
/**
|
20
|
-
* Key to use for caching.
|
21
|
-
*/
|
22
|
-
key: string;
|
23
|
-
};
|
24
|
-
export type LocalCache = {
|
25
|
-
[key: string]: CacheEntry;
|
26
|
-
};
|
27
|
-
export declare function _namespaced(key: string): string;
|
28
|
-
export declare function _lock(key: string): string;
|
29
|
-
export declare const retryLimit = 3;
|
30
|
-
export declare const clientRetryDelay = 1000;
|
31
|
-
export declare const allowStaleFor = 30000;
|
32
|
-
type WithLocalCache = {
|
33
|
-
__cache?: LocalCache;
|
34
|
-
};
|
35
|
-
/**
|
36
|
-
* Refactored out into a class to allow for easier testing and clarity of purpose.
|
37
|
-
*
|
38
|
-
* This class is responsible for managing the caching of promises. It is a layered cache, meaning it will first check
|
39
|
-
* the local cache, then the redis cache, and finally the source of truth. It will also handle refreshing the cache according
|
40
|
-
* to the TTL and error handling.
|
41
|
-
*
|
42
|
-
* Please note that in order to prevent a stampede of requests to the source of truth, we use a lock in redis to ensure only one
|
43
|
-
* request is made to the source of truth at a time. If the lock is obtained, the cache will be updated and the lock will be released.
|
44
|
-
*
|
45
|
-
* Additionally, we use a polling mechanism to fetch the cache if the lock is not obtained. This is to prevent unnecessary errors.
|
46
|
-
*
|
47
|
-
* Finally, we also want to prevent stampedes against redis for the lock election and the retries. We use a ramping probability to ease in the
|
48
|
-
* attempts to get the lock, and not every error will trigger a retry.
|
49
|
-
*
|
50
|
-
* This means that the cache will be eventually consistent, but will not be immediately consistent. This is a tradeoff we are willing to make.
|
51
|
-
* Additionally, this means that the TTL is not precice. The cache may be updated a bit more often than the TTL, but it will not be updated less often.
|
52
|
-
*
|
53
|
-
*/
|
54
|
-
export declare class PromiseCache {
|
55
|
-
#private;
|
56
|
-
constructor(redis: RedisClient, state: WithLocalCache, clock?: Clock);
|
57
|
-
/**
|
58
|
-
* This is the public API for the cache. Call this method to cache a promise.
|
59
|
-
*
|
60
|
-
* @param closure
|
61
|
-
* @param options
|
62
|
-
* @returns
|
63
|
-
*/
|
64
|
-
cache<T extends JSONValue>(closure: () => Promise<T>, options: CacheOptions): Promise<T>;
|
65
|
-
}
|
66
|
-
export {};
|
67
|
-
//# sourceMappingURL=promise_cache.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"promise_cache.d.ts","sourceRoot":"","sources":["../../../../../src/devvit/internals/blocks/handler/promise_cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnE,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,GAAG,IAAI,IAAI,CAAC;CACb,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAA;CAAE,CAAC;AAEvD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AACD,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzC;AAKD,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,aAAa,QAAS,CAAC;AAEpC,KAAK,cAAc,GAAG;IACpB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB,CAAC;AASF;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,YAAY;;gBAUX,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,GAAE,KAAmB;IAMjF;;;;;;OAMG;IACG,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC;CA6M/F"}
|