@typed/async-data 0.13.0 → 1.0.0-beta.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.
package/src/index.ts CHANGED
@@ -1,4 +1,291 @@
1
- export * from './AsyncData.js'
2
- export * from './LazyRef.js'
3
- export * from './Progress.js'
4
- export * from './TypeId.js'
1
+ import * as Cause from "effect/Cause";
2
+ import * as Exit from "effect/Exit";
3
+ import { dual } from "effect/Function";
4
+ import * as Option from "effect/Option";
5
+ import { hasProperty, isObject, isString } from "effect/Predicate";
6
+ import * as Result from "effect/Result";
7
+ import * as Schema from "effect/Schema";
8
+ import type { Unify } from "effect/Unify";
9
+
10
+ export interface Progress {
11
+ readonly loaded: number;
12
+ readonly total?: number | undefined;
13
+ }
14
+
15
+ export interface NoData {
16
+ readonly _tag: "NoData";
17
+ }
18
+
19
+ export interface Loading {
20
+ readonly _tag: "Loading";
21
+ readonly progress?: Progress | undefined;
22
+ }
23
+
24
+ export interface Success<A> {
25
+ readonly _tag: "Success";
26
+ readonly value: A;
27
+ readonly progress?: Progress | undefined;
28
+ }
29
+
30
+ export interface Failure<E> {
31
+ readonly _tag: "Failure";
32
+ readonly cause: Cause.Cause<E>;
33
+ readonly progress?: Progress | undefined;
34
+ }
35
+
36
+ export interface Optimistic<A, E> {
37
+ readonly _tag: "Optimistic";
38
+ readonly value: A;
39
+ readonly previous: AsyncData<A, E>;
40
+ }
41
+
42
+ export type AsyncData<A, E> = NoData | Loading | Success<A> | Failure<E> | Optimistic<A, E>;
43
+
44
+ export type Refreshing<A, E> = (Success<A> | Failure<E>) & { readonly progress: Progress };
45
+
46
+ export const AsyncData = <const A extends Schema.Top, E extends Schema.Top>(
47
+ A: A,
48
+ E: E,
49
+ ): Schema.Codec<
50
+ AsyncData<A["Type"], E["Type"]>,
51
+ AsyncData<A["Encoded"], E["Encoded"]>,
52
+ A["DecodingServices"] | E["DecodingServices"],
53
+ A["EncodingServices"] | E["EncodingServices"]
54
+ > => {
55
+ const Progress = Schema.Struct({ loaded: Schema.Number, total: Schema.optional(Schema.Number) });
56
+ const NoData = Schema.Struct({ _tag: Schema.tag("NoData") });
57
+ const Loading = Schema.Struct({
58
+ _tag: Schema.tag("Loading"),
59
+ progress: Schema.optional(Progress),
60
+ });
61
+ const Success = Schema.Struct({
62
+ _tag: Schema.tag("Success"),
63
+ value: A,
64
+ progress: Schema.optional(Progress),
65
+ });
66
+ const Failure = Schema.Struct({
67
+ _tag: Schema.tag("Failure"),
68
+ cause: E,
69
+ progress: Schema.optional(Progress),
70
+ });
71
+ const Optimistic = Schema.Struct({
72
+ _tag: Schema.tag("Optimistic"),
73
+ value: A,
74
+ previous: Schema.suspend(() => AsyncData),
75
+ });
76
+ const AsyncData = Schema.Union([NoData, Loading, Success, Failure, Optimistic]) as Schema.Codec<
77
+ AsyncData<A["Type"], E["Type"]>,
78
+ AsyncData<A["Encoded"], E["Encoded"]>,
79
+ A["DecodingServices"] | E["DecodingServices"],
80
+ A["EncodingServices"] | E["EncodingServices"]
81
+ >;
82
+ return AsyncData;
83
+ };
84
+
85
+ export const isNoData = <A, E>(asyncData: AsyncData<A, E>): asyncData is NoData =>
86
+ asyncData._tag === "NoData";
87
+ export const isLoading = <A, E>(asyncData: AsyncData<A, E>): asyncData is Loading =>
88
+ asyncData._tag === "Loading";
89
+ export const isSuccess = <A, E>(asyncData: AsyncData<A, E>): asyncData is Success<A> =>
90
+ asyncData._tag === "Success";
91
+ export const isFailure = <A, E>(asyncData: AsyncData<A, E>): asyncData is Failure<E> =>
92
+ asyncData._tag === "Failure";
93
+ export const isOptimistic = <A, E>(asyncData: AsyncData<A, E>): asyncData is Optimistic<A, E> =>
94
+ asyncData._tag === "Optimistic";
95
+
96
+ const TAGS = new Set(["NoData", "Loading", "Success", "Failure", "Optimistic"]);
97
+
98
+ export const isAsyncData = <A, E>(u: unknown): u is AsyncData<A, E> =>
99
+ isObject(u) && hasProperty(u, "_tag") && isString(u._tag) && TAGS.has(u._tag);
100
+
101
+ export const isRefreshing = <A, E>(asyncData: AsyncData<A, E>): asyncData is Refreshing<A, E> =>
102
+ (asyncData._tag === "Success" || asyncData._tag === "Failure") &&
103
+ asyncData.progress !== undefined;
104
+
105
+ export const isPending = <A, E>(
106
+ asyncData: AsyncData<A, E>,
107
+ ): asyncData is Loading | Refreshing<A, E> =>
108
+ asyncData._tag === "Loading" || isRefreshing(asyncData);
109
+
110
+ export const NoData: NoData = { _tag: "NoData" };
111
+
112
+ export const loading = (progress?: Progress): Loading => ({ _tag: "Loading", progress });
113
+
114
+ export const success = <A>(value: A, progress?: Progress): Success<A> => ({
115
+ _tag: "Success",
116
+ value,
117
+ progress,
118
+ });
119
+
120
+ export const failure = <E>(cause: Cause.Cause<E>, progress?: Progress): Failure<E> => ({
121
+ _tag: "Failure",
122
+ cause,
123
+ progress,
124
+ });
125
+
126
+ export const optimistic = <A, E>(previous: AsyncData<A, E>, value: A): Optimistic<A, E> => ({
127
+ _tag: "Optimistic",
128
+ value,
129
+ previous,
130
+ });
131
+
132
+ export const startLoading = <A, E>(data: AsyncData<A, E>, progress?: Progress): AsyncData<A, E> => {
133
+ if (isSuccess(data)) {
134
+ return success(data.value, progress);
135
+ } else if (isFailure(data)) {
136
+ return failure(data.cause, progress);
137
+ } else if (isOptimistic(data)) {
138
+ return optimistic(startLoading(data.previous, progress), data.value);
139
+ } else {
140
+ return loading(progress);
141
+ }
142
+ };
143
+
144
+ export const stopLoading = <A, E>(data: AsyncData<A, E>): AsyncData<A, E> => {
145
+ if (isSuccess(data)) {
146
+ return success(data.value);
147
+ } else if (isFailure(data)) {
148
+ return failure(data.cause);
149
+ } else if (isOptimistic(data)) {
150
+ return optimistic(stopLoading(data.previous), data.value);
151
+ } else {
152
+ return data;
153
+ }
154
+ };
155
+
156
+ export const match: {
157
+ <A, E, R1, R2, R3, R4, R5>(matchers: {
158
+ NoData: (data: NoData) => R1;
159
+ Loading: (data: Loading) => R2;
160
+ Failure: (cause: Cause.Cause<E>, data: Failure<E>) => R3;
161
+ Success: (value: A, data: Success<A>) => R4;
162
+ Optimistic: (value: A, data: Optimistic<A, E>) => R5;
163
+ }): (data: AsyncData<A, E>) => Unify<R1 | R2 | R3 | R4 | R5>;
164
+
165
+ <A, E, R1, R2, R3, R4, R5>(
166
+ data: AsyncData<A, E>,
167
+ matchers: {
168
+ NoData: (data: NoData) => R1;
169
+ Loading: (data: Loading) => R2;
170
+ Failure: (cause: Cause.Cause<E>, data: Failure<E>) => R3;
171
+ Success: (value: A, data: Success<A>) => R4;
172
+ Optimistic: (value: A, data: Optimistic<A, E>) => R5;
173
+ },
174
+ ): Unify<R1 | R2 | R3 | R4 | R5>;
175
+ } = dual(
176
+ 2,
177
+ <A, E, R1, R2, R3, R4, R5>(
178
+ data: AsyncData<A, E>,
179
+ matchers: {
180
+ NoData: (data: NoData) => R1;
181
+ Loading: (data: Loading) => R2;
182
+ Failure: (cause: Cause.Cause<E>, data: Failure<E>) => R3;
183
+ Success: (value: A, data: Success<A>) => R4;
184
+ Optimistic: (value: A, data: Optimistic<A, E>) => R5;
185
+ },
186
+ ): Unify<R1 | R2 | R3 | R4> => {
187
+ if (isSuccess(data)) {
188
+ return matchers.Success(data.value, data) as Unify<R1 | R2 | R3 | R4>;
189
+ } else if (isFailure(data)) {
190
+ return matchers.Failure(data.cause, data) as Unify<R1 | R2 | R3 | R4>;
191
+ } else if (isLoading(data)) {
192
+ return matchers.Loading(data) as Unify<R1 | R2 | R3 | R4>;
193
+ } else if (isNoData(data)) {
194
+ return matchers.NoData(data) as Unify<R1 | R2 | R3 | R4>;
195
+ } else {
196
+ return matchers.Optimistic(data.value, data) as Unify<R1 | R2 | R3 | R4>;
197
+ }
198
+ },
199
+ );
200
+
201
+ export function getSuccess<A, E>(data: AsyncData<A, E>): Option.Option<A> {
202
+ return match(data, {
203
+ NoData: Option.none,
204
+ Loading: Option.none,
205
+ Failure: Option.none,
206
+ Success: Option.some,
207
+ Optimistic: Option.some,
208
+ });
209
+ }
210
+
211
+ /**
212
+ * @since 1.0.0
213
+ */
214
+ export function getCause<A, E>(data: AsyncData<A, E>): Option.Option<Cause.Cause<E>> {
215
+ return match(data, {
216
+ NoData: Option.none,
217
+ Loading: Option.none,
218
+ Failure: Option.some,
219
+ Success: Option.none,
220
+ Optimistic: Option.none,
221
+ });
222
+ }
223
+
224
+ /**
225
+ * @since 1.0.0
226
+ */
227
+ export function getError<A, E>(data: AsyncData<A, E>): Option.Option<E> {
228
+ return match(data, {
229
+ NoData: Option.none,
230
+ Loading: Option.none,
231
+ Failure: Cause.findErrorOption,
232
+ Success: Option.none,
233
+ Optimistic: Option.none,
234
+ });
235
+ }
236
+
237
+ export const map: {
238
+ <A, B>(f: (a: A) => B): <E>(data: AsyncData<A, E>) => AsyncData<B, E>;
239
+ <A, E, B>(data: AsyncData<A, E>, f: (a: A) => B): AsyncData<B, E>;
240
+ } = dual(2, function map<A, E, B>(data: AsyncData<A, E>, f: (a: A) => B): AsyncData<B, E> {
241
+ if (isSuccess(data)) {
242
+ return success(f(data.value), data.progress);
243
+ } else if (isOptimistic(data)) {
244
+ return optimistic(map(data.previous, f), f(data.value));
245
+ } else {
246
+ return data;
247
+ }
248
+ });
249
+
250
+ export const flatMap: {
251
+ <A, E, B, E2>(
252
+ f: (a: A, data: Success<A> | Optimistic<A, E>) => AsyncData<B, E2>,
253
+ ): (data: AsyncData<A, E>) => AsyncData<B, E | E2>;
254
+ <A, E, B, E2>(
255
+ data: AsyncData<A, E>,
256
+ f: (a: A, data: Success<A> | Optimistic<A, E>) => AsyncData<B, E>,
257
+ ): AsyncData<B, E | E2>;
258
+ } = dual(2, function <
259
+ A,
260
+ E,
261
+ B,
262
+ E2,
263
+ >(data: AsyncData<A, E>, f: (a: A, data: Success<A> | Optimistic<A, E>) => AsyncData<B, E2>): AsyncData<
264
+ B,
265
+ E | E2
266
+ > {
267
+ if (isSuccess(data) || isOptimistic(data)) {
268
+ return f(data.value, data);
269
+ } else {
270
+ return data;
271
+ }
272
+ });
273
+
274
+ export const mapError: {
275
+ <A, E, E2>(f: (e: E) => E2): (data: AsyncData<A, E>) => AsyncData<A, E2>;
276
+ <A, E, E2>(data: AsyncData<A, E>, f: (e: E) => E2): AsyncData<A, E2>;
277
+ } = dual(2, function mapError<A, E, E2>(data: AsyncData<A, E>, f: (e: E) => E2): AsyncData<A, E2> {
278
+ if (isFailure(data)) {
279
+ return failure(Cause.map(data.cause, f), data.progress);
280
+ } else if (isOptimistic(data)) {
281
+ return optimistic(mapError(data.previous, f), data.value);
282
+ } else {
283
+ return data;
284
+ }
285
+ });
286
+
287
+ export const fromExit = <A, E>(exit: Exit.Exit<A, E>): AsyncData<A, E> =>
288
+ Exit.isSuccess(exit) ? success(exit.value) : failure(exit.cause);
289
+
290
+ export const fromResult = <A, E>(result: Result.Result<A, E>): AsyncData<A, E> =>
291
+ Result.isSuccess(result) ? success(result.success) : failure(Cause.fail(result.failure));
package/tsconfig.json CHANGED
@@ -1,27 +1,6 @@
1
1
  {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ESNext",
5
- "moduleResolution": "bundler",
6
- "lib": [
7
- "ES2022",
8
- "DOM"
9
- ],
10
- "strict": true,
11
- "esModuleInterop": true,
12
- "skipLibCheck": true,
13
- "forceConsistentCasingInFileNames": true,
14
- "declaration": true,
15
- "sourceMap": true,
16
- "outDir": "dist",
17
- "rootDir": "src"
18
- },
19
- "include": [
20
- "src/**/*"
21
- ],
22
- "exclude": [
23
- "node_modules",
24
- "dist",
25
- "**/*.test.ts"
26
- ]
27
- }
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": { "rootDir": "src", "outDir": "dist" },
4
+ "include": ["src"],
5
+ "exclude": ["**/*.test.ts"]
6
+ }
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- 22
package/biome.json DELETED
@@ -1,36 +0,0 @@
1
- {
2
- "organizeImports": {
3
- "enabled": true
4
- },
5
- "linter": {
6
- "enabled": true,
7
- "rules": {
8
- "recommended": true,
9
- "suspicious": {
10
- "noExplicitAny": "off",
11
- "noAssignInExpressions": "off",
12
- "noShadowRestrictedNames": "off"
13
- },
14
- "style": {
15
- "noParameterAssign": "off",
16
- "noUselessElse": "off"
17
- },
18
- "complexity": {
19
- "noBannedTypes": "off"
20
- }
21
- }
22
- },
23
- "formatter": {
24
- "enabled": true,
25
- "indentStyle": "space",
26
- "indentWidth": 2,
27
- "lineWidth": 100
28
- },
29
- "javascript": {
30
- "formatter": {
31
- "quoteStyle": "single",
32
- "trailingCommas": "all",
33
- "semicolons": "asNeeded"
34
- }
35
- }
36
- }
@@ -1,196 +0,0 @@
1
- import { Cause, Effect, Either, Equivalence, Exit, Option, Schema, Unify } from 'effect';
2
- import { Progress, type ProgressEncoded } from './Progress.js';
3
- export type AsyncData<A, E = never> = NoData | Loading | Success<A> | Failure<E> | Refreshing<A, E> | Optimistic<A, E>;
4
- export declare namespace AsyncData {
5
- export type Encoded<A, E = never> = typeof NoData.Encoded | typeof Loading.Encoded | SuccessEncoded<A> | FailureEncoded<E> | RefreshingEncoded<A, E> | OptimisticEncoded<A, E>;
6
- export interface SuccessEncoded<A> {
7
- readonly _tag: 'Success';
8
- readonly value: A;
9
- }
10
- export interface FailureEncoded<E> {
11
- readonly _tag: 'Failure';
12
- readonly cause: Schema.CauseEncoded<E, unknown>;
13
- }
14
- export type RefreshingEncoded<A, E = never> = {
15
- readonly _tag: 'Refreshing';
16
- readonly previous: SuccessEncoded<A> | FailureEncoded<E>;
17
- readonly progress?: ProgressEncoded;
18
- };
19
- export interface OptimisticEncoded<A, E = never> {
20
- readonly _tag: 'Optimistic';
21
- readonly previous: Encoded<A, E>;
22
- readonly value: A;
23
- }
24
- /**
25
- * @category models
26
- * @since 1.0.0
27
- */
28
- export interface Unify<A extends {
29
- [Unify.typeSymbol]?: any;
30
- }> extends Effect.EffectUnify<A> {
31
- AsyncData: () => Unify_<A[Unify.typeSymbol]> extends AsyncData<infer E0, infer A0> | infer _ ? AsyncData<E0, A0> : never;
32
- }
33
- type Unify_<T extends AsyncData<any, any>> = T extends NoData ? AsyncData<never, never> : T extends Loading ? AsyncData<never, never> : T extends Failure<infer E> ? AsyncData<E, never> : T extends Success<infer A> ? AsyncData<never, A> : T extends Optimistic<infer A, infer E> ? AsyncData<A, E> : T extends Refreshing<infer A, infer E> ? AsyncData<A, E> : never;
34
- /**
35
- * @category models
36
- * @since 1.0.0
37
- */
38
- export interface IgnoreList extends Effect.EffectUnifyIgnore {
39
- Effect: true;
40
- }
41
- export {};
42
- }
43
- declare const NoData_base: Schema.TaggedErrorClass<NoData, "NoData", {
44
- readonly _tag: Schema.tag<"NoData">;
45
- }>;
46
- export declare class NoData extends NoData_base implements Effect.Effect<never, NoData, never> {
47
- }
48
- export declare const noData: {
49
- (): NoData;
50
- <A, E = never>(): AsyncData<A, E>;
51
- };
52
- declare const Loading_base: Schema.TaggedErrorClass<Loading, "Loading", {
53
- readonly _tag: Schema.tag<"Loading">;
54
- } & {
55
- progress: Schema.optionalWith<Schema.Struct<{
56
- loaded: typeof Schema.Number;
57
- total: Schema.optionalWith<typeof Schema.Number, {
58
- as: "Option";
59
- default: undefined;
60
- }>;
61
- }>, {
62
- as: "Option";
63
- default: undefined;
64
- }>;
65
- }>;
66
- export declare class Loading extends Loading_base implements Effect.Effect<never, Loading, never> {
67
- }
68
- export declare function loading(progress?: Progress): Loading;
69
- export declare function loading<A, E = never>(progress?: Progress): AsyncData<A, E>;
70
- declare const Success_base: import("./_internal.js").DataEffectClass<"Success">;
71
- export declare class Success<A> extends Success_base<{
72
- readonly value: A;
73
- }, A> implements Effect.Effect<A> {
74
- constructor(value: A);
75
- static schema<A, I, R>(value: Schema.Schema<A, I, R>): Schema.SchemaClass<Success<A>, AsyncData.SuccessEncoded<I>, R>;
76
- }
77
- export declare function success<A>(value: A): Success<A>;
78
- export declare function success<A, E = never>(value: A): AsyncData<A, E>;
79
- declare const Failure_base: import("./_internal.js").DataEffectClass<"Failure">;
80
- export declare class Failure<E> extends Failure_base<{
81
- readonly cause: Cause.Cause<E>;
82
- }, never, E, never> implements Effect.Effect<never, E, never> {
83
- constructor(cause: Cause.Cause<E>);
84
- static schema<E, I, R>(error: Schema.Schema<E, I, R>): Schema.SchemaClass<Failure<E>, AsyncData.FailureEncoded<I>, R>;
85
- }
86
- export declare function failure<E>(cause: Cause.Cause<E>): Failure<E>;
87
- export declare function failure<E, A = never>(cause: Cause.Cause<E>): AsyncData<A, E>;
88
- export declare function die(cause: unknown): Failure<never>;
89
- export declare function die<A, E = never>(cause: unknown): AsyncData<A, E>;
90
- export declare function fail<E>(error: E): Failure<E>;
91
- declare const Refreshing_base: import("./_internal.js").DataEffectClass<"Refreshing">;
92
- export declare class Refreshing<A, E> extends Refreshing_base<{
93
- readonly previous: Success<A> | Failure<E>;
94
- readonly progress: Option.Option<Progress>;
95
- }, A, E, never> implements Effect.Effect<A, E> {
96
- constructor(previous: Success<A> | Failure<E>, progress: Option.Option<Progress>);
97
- static schema<A, EI, E, AI, R>(previous: Schema.Schema<Success<A> | Failure<E>, AsyncData.SuccessEncoded<AI> | AsyncData.FailureEncoded<EI>, R>): Schema.SchemaClass<Refreshing<A, E>, AsyncData.RefreshingEncoded<AI, EI>, R>;
98
- }
99
- export declare function refreshing<A = never, E = never>(previous: Success<A> | Failure<E>, progress?: Progress): Refreshing<A, E>;
100
- declare const Optimistic_base: import("./_internal.js").DataEffectClass<"Optimistic">;
101
- export declare class Optimistic<A, E> extends Optimistic_base<{
102
- readonly previous: AsyncData<A, E>;
103
- readonly value: A;
104
- }, A> implements Effect.Effect<A> {
105
- constructor(previous: AsyncData<A, E>, value: A);
106
- static schema<A, EI, E, AI, R, R2>(previous: Schema.Schema<AsyncData<A, E>, AsyncData.Encoded<AI, EI>, R>, value: Schema.Schema<A, AI, R2>): Schema.SchemaClass<Optimistic<A, E>, AsyncData.OptimisticEncoded<AI, EI>, R | R2>;
107
- }
108
- export declare const optimistic: {
109
- <A>(value: A): <E>(previous: AsyncData<A, E>) => Optimistic<A, E>;
110
- <A, E>(previous: AsyncData<A, E>, value: A): Optimistic<A, E>;
111
- };
112
- export declare const matchAll: {
113
- <A, E, R1, R2, R3, R4, R5, R6>(data: AsyncData<A, E>, matchers: {
114
- readonly NoData: () => R1;
115
- readonly Loading: (progress: Option.Option<Progress>) => R2;
116
- readonly Success: (value: A) => R3;
117
- readonly Failure: (cause: Cause.Cause<E>) => R4;
118
- readonly Refreshing: (previous: Success<A> | Failure<E>, progress: Option.Option<Progress>) => R5;
119
- readonly Optimistic: (value: A, previous: AsyncData<A, E>) => R6;
120
- }): R1 | R2 | R3 | R4 | R5 | R6;
121
- <A, E, R1, R2, R3, R4, R5, R6>(data: AsyncData<A, E>, matchers: {
122
- readonly NoData: () => R1;
123
- readonly Loading: (progress: Option.Option<Progress>) => R2;
124
- readonly Success: (value: A) => R3;
125
- readonly Failure: (cause: Cause.Cause<E>) => R4;
126
- readonly Refreshing: (previous: Success<A> | Failure<E>, progress: Option.Option<Progress>) => R5;
127
- readonly Optimistic: (value: A, previous: AsyncData<A, E>) => R6;
128
- }): R1 | R2 | R3 | R4 | R5 | R6;
129
- };
130
- export declare const match: {
131
- <A, E, R1, R2, R3, R4>(matchers: {
132
- readonly NoData: () => R1;
133
- readonly Loading: (progress: Option.Option<Progress>) => R2;
134
- readonly Success: (value: A, params: {
135
- readonly isRefreshing: boolean;
136
- readonly isOptimistic: boolean;
137
- readonly progress: Option.Option<Progress>;
138
- }) => R3;
139
- readonly Failure: (cause: Cause.Cause<E>, params: {
140
- readonly isRefreshing: boolean;
141
- readonly progress: Option.Option<Progress>;
142
- }) => R4;
143
- }): (data: AsyncData<A, E>) => Unify.Unify<R1 | R2 | R3 | R4>;
144
- <A, E, R1, R2, R3, R4>(data: AsyncData<A, E>, matchers: {
145
- readonly NoData: () => R1;
146
- readonly Loading: (progress: Option.Option<Progress>) => R2;
147
- readonly Success: (value: A, params: {
148
- readonly isRefreshing: boolean;
149
- readonly isOptimistic: boolean;
150
- readonly progress: Option.Option<Progress>;
151
- }) => R3;
152
- readonly Failure: (cause: Cause.Cause<E>, params: {
153
- readonly isRefreshing: boolean;
154
- readonly progress: Option.Option<Progress>;
155
- }) => R4;
156
- }): Unify.Unify<R1 | R2 | R3 | R4>;
157
- };
158
- export declare function startLoading<A, E>(data: AsyncData<A, E>, progress?: Progress): AsyncData<A, E>;
159
- export declare function stopLoading<A, E>(data: AsyncData<A, E>): AsyncData<A, E>;
160
- export declare function updateProgress<A, E>(data: AsyncData<A, E>, progress: Progress): AsyncData<A, E>;
161
- export interface AsyncDataSchemaClass<E, EI, ER, A, AI, AR> extends Schema.SchemaClass<AsyncData<A, E>, AsyncData.Encoded<AI, EI>, AR | ER> {
162
- readonly eq: Equivalence.Equivalence<AsyncData<A, E>>;
163
- readonly success: (value: A) => AsyncData<A, E>;
164
- readonly failCause: (cause: Cause.Cause<E>) => AsyncData<A, E>;
165
- readonly fail: (error: E) => AsyncData<A, E>;
166
- readonly die: (cause: unknown) => AsyncData<A, E>;
167
- readonly optimistic: (previous: AsyncData<A, E>, value: A) => AsyncData<A, E>;
168
- readonly refreshing: (previous: Success<A> | Failure<E>, progress?: Progress) => AsyncData<A, E>;
169
- readonly loading: (progress?: Progress) => AsyncData<A, E>;
170
- readonly noData: () => AsyncData<A, E>;
171
- }
172
- export declare function AsyncData<A, AI, AR, E, EI, ER>(schemas: {
173
- readonly success: Schema.Schema<A, AI, AR>;
174
- readonly failure: Schema.Schema<E, EI, ER>;
175
- }, annotations?: Schema.Annotations.Schema<AsyncData<A, E>>): AsyncDataSchemaClass<E, EI, ER, A, AI, AR>;
176
- export declare function fromExit<A, E>(exit: Exit.Exit<A, E>): AsyncData<A, E>;
177
- export declare function fromEither<A, E>(either: Either.Either<A, E>): AsyncData<A, E>;
178
- export declare function fromOption<A>(option: Option.Option<A>): AsyncData<A>;
179
- export declare const map: {
180
- <A, B>(f: (a: A) => B): <E>(data: AsyncData<A, E>) => AsyncData<B, E>;
181
- <A, E, B>(data: AsyncData<A, E>, f: (a: A) => B): AsyncData<B, E>;
182
- };
183
- export declare const flatMap: {
184
- <A, B, E2>(f: (a: A) => AsyncData<B, E2>): <E>(data: AsyncData<A, E>) => AsyncData<B, E | E2>;
185
- <A, E, B, E2>(data: AsyncData<A, E>, f: (a: A) => AsyncData<B, E2>): AsyncData<B, E | E2>;
186
- };
187
- export declare function isNoData<A, E>(data: AsyncData<A, E>): data is NoData;
188
- export declare function isLoading<A, E>(data: AsyncData<A, E>): data is Loading;
189
- export declare function isSuccess<A, E>(data: AsyncData<A, E>): data is Success<A>;
190
- export declare function isFailure<A, E>(data: AsyncData<A, E>): data is Failure<E>;
191
- export declare function isRefreshing<A, E>(data: AsyncData<A, E>): data is Refreshing<A, E>;
192
- export declare function isLoadingOrRefreshing<A, E>(data: AsyncData<A, E>): data is Loading | Refreshing<A, E>;
193
- export declare function isOptimistic<A, E>(data: AsyncData<A, E>): data is Optimistic<A, E>;
194
- export declare function makeEquivalence<A, E>(eqA: Equivalence.Equivalence<A>, eqB: Equivalence.Equivalence<E>): Equivalence.Equivalence<AsyncData<A, E>>;
195
- export declare const equals: Equivalence.Equivalence<AsyncData<unknown, unknown>>;
196
- export {};