@typed/async-data 0.12.0 → 0.13.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/.nvmrc +1 -0
- package/biome.json +36 -0
- package/dist/AsyncData.d.ts +196 -0
- package/dist/AsyncData.js +285 -0
- package/dist/AsyncData.js.map +1 -0
- package/dist/LazyRef.d.ts +21 -0
- package/dist/LazyRef.js +27 -0
- package/dist/LazyRef.js.map +1 -0
- package/dist/Progress.d.ts +25 -0
- package/dist/Progress.js +21 -0
- package/dist/Progress.js.map +1 -0
- package/dist/{dts/TypeId.d.ts → TypeId.d.ts} +0 -1
- package/dist/TypeId.js +8 -0
- package/dist/TypeId.js.map +1 -0
- package/dist/_internal.d.ts +16 -0
- package/dist/_internal.js +53 -0
- package/dist/_internal.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/package.json +31 -49
- package/readme.md +218 -0
- package/src/AsyncData.test.ts +89 -0
- package/src/AsyncData.ts +555 -595
- package/src/LazyRef.ts +87 -0
- package/src/Progress.ts +18 -65
- package/src/TypeId.ts +1 -1
- package/src/_internal.ts +114 -0
- package/src/index.ts +4 -0
- package/tsconfig.json +27 -0
- package/AsyncData/package.json +0 -6
- package/LICENSE +0 -21
- package/Progress/package.json +0 -6
- package/README.md +0 -5
- package/Schema/package.json +0 -6
- package/TypeId/package.json +0 -6
- package/dist/cjs/AsyncData.js +0 -399
- package/dist/cjs/AsyncData.js.map +0 -1
- package/dist/cjs/Progress.js +0 -62
- package/dist/cjs/Progress.js.map +0 -1
- package/dist/cjs/Schema.js +0 -539
- package/dist/cjs/Schema.js.map +0 -1
- package/dist/cjs/TypeId.js +0 -14
- package/dist/cjs/TypeId.js.map +0 -1
- package/dist/cjs/internal/async-data.js +0 -94
- package/dist/cjs/internal/async-data.js.map +0 -1
- package/dist/cjs/internal/tag.js +0 -12
- package/dist/cjs/internal/tag.js.map +0 -1
- package/dist/dts/AsyncData.d.ts +0 -386
- package/dist/dts/AsyncData.d.ts.map +0 -1
- package/dist/dts/Progress.d.ts +0 -43
- package/dist/dts/Progress.d.ts.map +0 -1
- package/dist/dts/Schema.d.ts +0 -78
- package/dist/dts/Schema.d.ts.map +0 -1
- package/dist/dts/TypeId.d.ts.map +0 -1
- package/dist/dts/internal/async-data.d.ts +0 -43
- package/dist/dts/internal/async-data.d.ts.map +0 -1
- package/dist/dts/internal/tag.d.ts +0 -6
- package/dist/dts/internal/tag.d.ts.map +0 -1
- package/dist/esm/AsyncData.js +0 -372
- package/dist/esm/AsyncData.js.map +0 -1
- package/dist/esm/Progress.js +0 -49
- package/dist/esm/Progress.js.map +0 -1
- package/dist/esm/Schema.js +0 -500
- package/dist/esm/Schema.js.map +0 -1
- package/dist/esm/TypeId.js +0 -8
- package/dist/esm/TypeId.js.map +0 -1
- package/dist/esm/internal/async-data.js +0 -91
- package/dist/esm/internal/async-data.js.map +0 -1
- package/dist/esm/internal/tag.js +0 -6
- package/dist/esm/internal/tag.js.map +0 -1
- package/dist/esm/package.json +0 -4
- package/src/Schema.ts +0 -754
- package/src/internal/async-data.ts +0 -114
- package/src/internal/tag.ts +0 -9
package/.nvmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
22
|
package/biome.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
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 {};
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { Cause, Effect, Either, Equal, Equivalence, Exit, identity, Option, Schema, SchemaAST, Unify, } from 'effect';
|
|
2
|
+
import { dual } from 'effect/Function';
|
|
3
|
+
import { Progress } from './Progress.js';
|
|
4
|
+
import { DataEffect, LiteralWithDefault } from './_internal.js';
|
|
5
|
+
export class NoData extends Schema.TaggedError()('NoData', {}) {
|
|
6
|
+
}
|
|
7
|
+
export const noData = () => NoData.make();
|
|
8
|
+
export class Loading extends Schema.TaggedError()('Loading', {
|
|
9
|
+
progress: Schema.optionalWith(Progress, { as: 'Option', default: undefined }),
|
|
10
|
+
}) {
|
|
11
|
+
}
|
|
12
|
+
export function loading(progress) {
|
|
13
|
+
return Loading.make({ progress: Option.fromNullable(progress) });
|
|
14
|
+
}
|
|
15
|
+
export class Success extends DataEffect('Success') {
|
|
16
|
+
constructor(value) {
|
|
17
|
+
super({ value }, Effect.succeed(value));
|
|
18
|
+
}
|
|
19
|
+
static schema(value) {
|
|
20
|
+
return Schema.Struct({
|
|
21
|
+
_tag: LiteralWithDefault()('Success'),
|
|
22
|
+
value,
|
|
23
|
+
}).pipe(Schema.transform(Schema.instanceOf((Success)), {
|
|
24
|
+
strict: true,
|
|
25
|
+
decode: (from) => new Success(from.value),
|
|
26
|
+
encode: identity,
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function success(value) {
|
|
31
|
+
return new Success(value);
|
|
32
|
+
}
|
|
33
|
+
export class Failure extends DataEffect('Failure') {
|
|
34
|
+
constructor(cause) {
|
|
35
|
+
super({ cause }, Effect.failCause(cause));
|
|
36
|
+
}
|
|
37
|
+
static schema(error) {
|
|
38
|
+
return Schema.Struct({
|
|
39
|
+
_tag: LiteralWithDefault()('Failure'),
|
|
40
|
+
cause: Schema.Cause({
|
|
41
|
+
error,
|
|
42
|
+
defect: Schema.Unknown,
|
|
43
|
+
}),
|
|
44
|
+
}).pipe(Schema.transform(Schema.instanceOf((Failure)), {
|
|
45
|
+
strict: true,
|
|
46
|
+
decode: (from) => new Failure(from.cause),
|
|
47
|
+
encode: identity,
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export function failure(cause) {
|
|
52
|
+
return new Failure(cause);
|
|
53
|
+
}
|
|
54
|
+
export function die(cause) {
|
|
55
|
+
return new Failure(Cause.die(cause));
|
|
56
|
+
}
|
|
57
|
+
export function fail(error) {
|
|
58
|
+
return new Failure(Cause.fail(error));
|
|
59
|
+
}
|
|
60
|
+
export class Refreshing extends DataEffect('Refreshing') {
|
|
61
|
+
constructor(previous, progress) {
|
|
62
|
+
super({ previous, progress }, previous);
|
|
63
|
+
}
|
|
64
|
+
static schema(previous) {
|
|
65
|
+
return Schema.Struct({
|
|
66
|
+
_tag: LiteralWithDefault()('Refreshing'),
|
|
67
|
+
previous,
|
|
68
|
+
progress: Schema.optionalWith(Progress, { as: 'Option', default: undefined }),
|
|
69
|
+
}).pipe(Schema.transform(Schema.instanceOf((Refreshing)), {
|
|
70
|
+
strict: true,
|
|
71
|
+
decode: (from) => new Refreshing(from.previous, from.progress),
|
|
72
|
+
encode: identity,
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export function refreshing(previous, progress) {
|
|
77
|
+
return new Refreshing(previous, Option.fromNullable(progress));
|
|
78
|
+
}
|
|
79
|
+
export class Optimistic extends DataEffect('Optimistic') {
|
|
80
|
+
constructor(previous, value) {
|
|
81
|
+
super({ previous, value }, Effect.succeed(value));
|
|
82
|
+
}
|
|
83
|
+
static schema(previous, value) {
|
|
84
|
+
return Schema.Struct({
|
|
85
|
+
_tag: LiteralWithDefault()('Optimistic'),
|
|
86
|
+
previous,
|
|
87
|
+
value,
|
|
88
|
+
}).pipe(Schema.transform(Schema.instanceOf((Optimistic)), {
|
|
89
|
+
strict: true,
|
|
90
|
+
decode: (from) => new Optimistic(from.previous, from.value),
|
|
91
|
+
encode: identity,
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export const optimistic = dual(2, function optimistic(previous, value) {
|
|
96
|
+
return new Optimistic(previous, value);
|
|
97
|
+
});
|
|
98
|
+
export const matchAll = dual(2, function matchAll(data, matchers) {
|
|
99
|
+
switch (data._tag) {
|
|
100
|
+
case 'NoData':
|
|
101
|
+
return matchers.NoData();
|
|
102
|
+
case 'Loading':
|
|
103
|
+
return matchers.Loading(data.progress);
|
|
104
|
+
case 'Success':
|
|
105
|
+
return matchers.Success(data.value);
|
|
106
|
+
case 'Failure':
|
|
107
|
+
return matchers.Failure(data.cause);
|
|
108
|
+
case 'Refreshing':
|
|
109
|
+
return matchers.Refreshing(data.previous, data.progress);
|
|
110
|
+
case 'Optimistic':
|
|
111
|
+
return matchers.Optimistic(data.value, data.previous);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
export const match = dual(2, function match(data, matchers) {
|
|
115
|
+
const match_ = (data, params) => matchAll(data, {
|
|
116
|
+
NoData: matchers.NoData,
|
|
117
|
+
Loading: matchers.Loading,
|
|
118
|
+
Success: (value) => matchers.Success(value, params),
|
|
119
|
+
Failure: (cause) => matchers.Failure(cause, params),
|
|
120
|
+
Refreshing: (previous, progress) => match_(previous, { ...params, isRefreshing: true, progress }),
|
|
121
|
+
Optimistic: (value) => matchers.Success(value, { ...params, isOptimistic: true }),
|
|
122
|
+
});
|
|
123
|
+
return Unify.unify(match_(data, {
|
|
124
|
+
isRefreshing: false,
|
|
125
|
+
isOptimistic: false,
|
|
126
|
+
progress: Option.none(),
|
|
127
|
+
}));
|
|
128
|
+
});
|
|
129
|
+
export function startLoading(data, progress) {
|
|
130
|
+
switch (data._tag) {
|
|
131
|
+
case 'Success':
|
|
132
|
+
case 'Failure':
|
|
133
|
+
return refreshing(data, progress);
|
|
134
|
+
case 'NoData':
|
|
135
|
+
return loading(progress);
|
|
136
|
+
case 'Optimistic':
|
|
137
|
+
return optimistic(startLoading(data.previous, progress), data.value);
|
|
138
|
+
default:
|
|
139
|
+
return data;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export function stopLoading(data) {
|
|
143
|
+
switch (data._tag) {
|
|
144
|
+
case 'Refreshing':
|
|
145
|
+
return data.previous;
|
|
146
|
+
case 'Loading':
|
|
147
|
+
return noData();
|
|
148
|
+
case 'Optimistic':
|
|
149
|
+
return optimistic(stopLoading(data.previous), data.value);
|
|
150
|
+
default:
|
|
151
|
+
return data;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export function updateProgress(data, progress) {
|
|
155
|
+
switch (data._tag) {
|
|
156
|
+
case 'Refreshing':
|
|
157
|
+
return refreshing(data.previous, progress);
|
|
158
|
+
case 'Loading':
|
|
159
|
+
return loading(progress);
|
|
160
|
+
case 'Optimistic':
|
|
161
|
+
return optimistic(updateProgress(data.previous, progress), data.value);
|
|
162
|
+
default:
|
|
163
|
+
return data;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
export function AsyncData(schemas, annotations) {
|
|
167
|
+
const identifier = Option.all({
|
|
168
|
+
E: getIdentifier(schemas.failure.ast),
|
|
169
|
+
A: getIdentifier(schemas.success.ast),
|
|
170
|
+
}).pipe(Option.match({
|
|
171
|
+
onNone: () => 'AsyncData',
|
|
172
|
+
onSome: ({ E, A }) => `AsyncData<${E}, ${A}>`,
|
|
173
|
+
}));
|
|
174
|
+
const equivalence = makeEquivalence(Schema.equivalence(schemas.success), Schema.equivalence(schemas.failure));
|
|
175
|
+
const recursive = Schema.suspend(() => AsyncData).annotations({
|
|
176
|
+
identifier,
|
|
177
|
+
equivalence: () => equivalence,
|
|
178
|
+
...annotations,
|
|
179
|
+
});
|
|
180
|
+
const successAndFailure = Schema.Union(Success.schema(schemas.success), Failure.schema(schemas.failure));
|
|
181
|
+
const AsyncData = Schema.Union(NoData, Loading, successAndFailure, Refreshing.schema(successAndFailure), Optimistic.schema(recursive, schemas.success)).annotations({
|
|
182
|
+
equivalence: () => equivalence,
|
|
183
|
+
});
|
|
184
|
+
return class extends AsyncData {
|
|
185
|
+
static eq = equivalence;
|
|
186
|
+
static success = success;
|
|
187
|
+
static failCause = failure;
|
|
188
|
+
static fail = fail;
|
|
189
|
+
static die = die;
|
|
190
|
+
static optimistic = optimistic;
|
|
191
|
+
static refreshing = refreshing;
|
|
192
|
+
static loading = loading;
|
|
193
|
+
static noData = noData;
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
function getIdentifier(ast) {
|
|
197
|
+
return SchemaAST.getJSONIdentifier(ast).pipe(Option.orElse(() => SchemaAST.getTitleAnnotation(ast)));
|
|
198
|
+
}
|
|
199
|
+
export function fromExit(exit) {
|
|
200
|
+
return Exit.match(exit, { onSuccess: (success), onFailure: (failure) });
|
|
201
|
+
}
|
|
202
|
+
export function fromEither(either) {
|
|
203
|
+
return Either.match(either, { onLeft: (fail), onRight: (success) });
|
|
204
|
+
}
|
|
205
|
+
export function fromOption(option) {
|
|
206
|
+
return Option.match(option, { onSome: (success), onNone: (noData) });
|
|
207
|
+
}
|
|
208
|
+
export const map = dual(2, function map(data, f) {
|
|
209
|
+
if (data._tag === 'Success') {
|
|
210
|
+
return new Success(f(data.value));
|
|
211
|
+
}
|
|
212
|
+
else if (data._tag === 'Refreshing' && data.previous._tag === 'Success') {
|
|
213
|
+
return new Refreshing(new Success(f(data.previous.value)), data.progress);
|
|
214
|
+
}
|
|
215
|
+
else if (data._tag === 'Optimistic') {
|
|
216
|
+
if (data.previous._tag === 'Success') {
|
|
217
|
+
return new Optimistic(new Success(f(data.previous.value)), f(data.value));
|
|
218
|
+
}
|
|
219
|
+
else if (data.previous._tag === 'Failure') {
|
|
220
|
+
return new Optimistic(data.previous, f(data.value));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return data;
|
|
224
|
+
});
|
|
225
|
+
export const flatMap = dual(2, function flatMap(data, f) {
|
|
226
|
+
if (data._tag === 'Success' || data._tag === 'Optimistic') {
|
|
227
|
+
return f(data.value);
|
|
228
|
+
}
|
|
229
|
+
else if (data._tag === 'Refreshing' && data.previous._tag === 'Success') {
|
|
230
|
+
return f(data.previous.value);
|
|
231
|
+
}
|
|
232
|
+
return data;
|
|
233
|
+
});
|
|
234
|
+
export function isNoData(data) {
|
|
235
|
+
return data._tag === 'NoData';
|
|
236
|
+
}
|
|
237
|
+
export function isLoading(data) {
|
|
238
|
+
return data._tag === 'Loading';
|
|
239
|
+
}
|
|
240
|
+
export function isSuccess(data) {
|
|
241
|
+
return data._tag === 'Success';
|
|
242
|
+
}
|
|
243
|
+
export function isFailure(data) {
|
|
244
|
+
return data._tag === 'Failure';
|
|
245
|
+
}
|
|
246
|
+
export function isRefreshing(data) {
|
|
247
|
+
return data._tag === 'Refreshing';
|
|
248
|
+
}
|
|
249
|
+
export function isLoadingOrRefreshing(data) {
|
|
250
|
+
return isLoading(data) || isRefreshing(data);
|
|
251
|
+
}
|
|
252
|
+
export function isOptimistic(data) {
|
|
253
|
+
return data._tag === 'Optimistic';
|
|
254
|
+
}
|
|
255
|
+
export function makeEquivalence(eqA, eqB) {
|
|
256
|
+
const eqCause = Equivalence.make((a, b) => {
|
|
257
|
+
const failuresA = Array.from(Cause.failures(a));
|
|
258
|
+
const failuresB = Array.from(Cause.failures(b));
|
|
259
|
+
if (failuresA.length > 0) {
|
|
260
|
+
return (failuresA.length === failuresB.length && failuresA.every((e, i) => eqB(e, failuresB[i])));
|
|
261
|
+
}
|
|
262
|
+
return Equal.equals(a, b);
|
|
263
|
+
});
|
|
264
|
+
const eq = Equivalence.make((a, b) => matchAll(a, {
|
|
265
|
+
NoData: () => isNoData(b),
|
|
266
|
+
Loading: (progress) => isLoading(b) && Equal.equals(progress, b.progress),
|
|
267
|
+
Success: (value) => isSuccess(b) && eqA(value, b.value),
|
|
268
|
+
Failure: (cause) => isFailure(b) && eqCause(cause, b.cause),
|
|
269
|
+
Refreshing: (previous, progress) => isRefreshing(b) && eq(previous, b.previous) && Equal.equals(progress, b.progress),
|
|
270
|
+
Optimistic: (value, previous) => isOptimistic(b) && eqA(value, b.value) && eq(previous, b.previous),
|
|
271
|
+
}));
|
|
272
|
+
return eq;
|
|
273
|
+
}
|
|
274
|
+
function unionEquivalence(eqs) {
|
|
275
|
+
return (a, b) => {
|
|
276
|
+
for (const eq of eqs) {
|
|
277
|
+
if (eq(a, b)) {
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return false;
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
export const equals = makeEquivalence(Equal.equals, Equal.equals);
|
|
285
|
+
//# sourceMappingURL=AsyncData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncData.js","sourceRoot":"","sources":["../src/AsyncData.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as L from '@typed/lazy-ref';
|
|
2
|
+
import { Effect, Layer } from 'effect';
|
|
3
|
+
import type { Scope } from 'effect/Scope';
|
|
4
|
+
import * as AsyncData from './AsyncData.js';
|
|
5
|
+
export interface LazyRef<A, E = never, R = never> extends L.LazyRef<AsyncData.AsyncData<A, E>, never, R> {
|
|
6
|
+
}
|
|
7
|
+
export type LazyRefOptions<A, E = never> = L.LazyRefOptions<AsyncData.AsyncData<A, E>> & {
|
|
8
|
+
readonly drop?: number;
|
|
9
|
+
readonly take?: number;
|
|
10
|
+
};
|
|
11
|
+
export interface Tagged<Self, Id extends string, A, E = never> extends L.TaggedClass<Self, Id, AsyncData.AsyncData<A, E>, never> {
|
|
12
|
+
readonly Default: Layer.Layer<Self>;
|
|
13
|
+
readonly fromEffect: <R>(effect: Effect.Effect<A, E, R>) => Layer.Layer<Self, never, Exclude<R, Scope>>;
|
|
14
|
+
readonly run: <R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R | Self>;
|
|
15
|
+
}
|
|
16
|
+
export declare function Tag<const Id extends string>(id: Id): <Self, A, E = never>(options?: L.LazyRefOptions<AsyncData.AsyncData<A, E>>) => Tagged<Self, Id, A, E>;
|
|
17
|
+
export declare function lazyRef<A, E = never>(options?: L.LazyRefOptions<AsyncData.AsyncData<A, E>>): Effect.Effect<LazyRef<A, E>, never, Scope>;
|
|
18
|
+
export declare const runEffect: {
|
|
19
|
+
<A, E, R2>(effect: Effect.Effect<A, E, R2>): <R>(lazyRef: L.LazyRef<AsyncData.AsyncData<A, E>, never, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>;
|
|
20
|
+
<A, E, R, R2>(lazyRef: L.LazyRef<AsyncData.AsyncData<A, E>, never, R>, effect: Effect.Effect<A, E, R2>): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>;
|
|
21
|
+
};
|
package/dist/LazyRef.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as L from '@typed/lazy-ref';
|
|
2
|
+
import { Effect, Layer } from 'effect';
|
|
3
|
+
import { dual } from 'effect/Function';
|
|
4
|
+
import * as AsyncData from './AsyncData.js';
|
|
5
|
+
export function Tag(id) {
|
|
6
|
+
return (options) => class extends L.Tag(id)() {
|
|
7
|
+
static Default = this.make(Effect.sync((AsyncData.noData)), options);
|
|
8
|
+
static fromEffect = (effect) => Layer.scoped(this.tag, Effect.gen(function* () {
|
|
9
|
+
const ref = yield* lazyRef(options);
|
|
10
|
+
yield* runEffect(ref, effect).pipe(Effect.forkScoped, Effect.interruptible);
|
|
11
|
+
return ref;
|
|
12
|
+
}));
|
|
13
|
+
static run = (effect) => runEffect(this, effect);
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function lazyRef(options) {
|
|
17
|
+
return L.sync((AsyncData.noData), options);
|
|
18
|
+
}
|
|
19
|
+
export const runEffect = dual(2, function runEffect(lazyRef, effect) {
|
|
20
|
+
return lazyRef.runUpdates(({ get, set }) => Effect.gen(function* () {
|
|
21
|
+
const initial = yield* get;
|
|
22
|
+
yield* set(AsyncData.startLoading(initial));
|
|
23
|
+
const exit = yield* effect.pipe(Effect.onInterrupt(() => set(initial)), Effect.exit);
|
|
24
|
+
return yield* set(AsyncData.fromExit(exit));
|
|
25
|
+
}));
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=LazyRef.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LazyRef.js","sourceRoot":"","sources":["../src/LazyRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,iBAAiB,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAwB3C,MAAM,UAAU,GAAG,CAA0B,EAAM;IACjD,OAAO,CACL,OAAqD,EAC7B,EAAE,CAC1B,KAAM,SAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAmC;QACxD,MAAM,CAAU,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,SAAS,CAAC,MAAY,CAAA,CAAC,EAAE,OAAO,CAAC,CAAA;QAEjF,MAAM,CAAU,UAAU,GAAG,CAAI,MAA8B,EAAE,EAAE,CACjE,KAAK,CAAC,MAAM,CACV,IAAI,CAAC,GAAG,EACR,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YACnC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;YAC3E,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CACH,CAAA;QAEH,MAAM,CAAU,GAAG,GAAG,CAAI,MAA8B,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;KACrF,CAAA;AACL,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,OAAqD;IAErD,OAAO,CAAC,CAAC,IAAI,CAA4B,CAAA,SAAS,CAAC,MAAY,CAAA,EAAE,OAAO,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAUlB,IAAI,CAAC,CAAC,EAAE,SAAS,SAAS,CAK5B,OAAuD,EAAE,MAA+B;IAKxF,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAA;QAC1B,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAC7B,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EACtC,MAAM,CAAC,IAAI,CACZ,CAAA;QACD,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7C,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
export declare const Progress: Schema.Struct<{
|
|
3
|
+
loaded: typeof Schema.Number;
|
|
4
|
+
total: Schema.optionalWith<typeof Schema.Number, {
|
|
5
|
+
as: "Option";
|
|
6
|
+
default: undefined;
|
|
7
|
+
}>;
|
|
8
|
+
}>;
|
|
9
|
+
export type ProgressEncoded = typeof Progress.Encoded;
|
|
10
|
+
export type Progress = typeof Progress.Type;
|
|
11
|
+
export declare const empty: Progress;
|
|
12
|
+
/**
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
*/
|
|
15
|
+
export declare const setLoaded: {
|
|
16
|
+
(loaded: number): (progress: Progress) => Progress;
|
|
17
|
+
(progress: Progress, loaded: number): Progress;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* @since 1.0.0
|
|
21
|
+
*/
|
|
22
|
+
export declare const setTotal: {
|
|
23
|
+
(total: number): (progress: Progress) => Progress;
|
|
24
|
+
(progress: Progress, total: number): Progress;
|
|
25
|
+
};
|
package/dist/Progress.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Option, Schema } from 'effect';
|
|
2
|
+
import { dual } from 'effect/Function';
|
|
3
|
+
import { DataStruct } from './_internal.js';
|
|
4
|
+
export const Progress = DataStruct({
|
|
5
|
+
loaded: Schema.Number,
|
|
6
|
+
total: Schema.optionalWith(Schema.Number, { as: 'Option', default: undefined }),
|
|
7
|
+
});
|
|
8
|
+
export const empty = Progress.make({ loaded: 0, total: Option.none() });
|
|
9
|
+
/**
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
export const setLoaded = dual(2, function setLoaded(progress, loaded) {
|
|
13
|
+
return Progress.make({ loaded, total: progress.total });
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
export const setTotal = dual(2, function setTotal(progress, total) {
|
|
19
|
+
return Progress.make({ loaded: progress.loaded, total: Option.some(total) });
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=Progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Progress.js","sourceRoot":"","sources":["../src/Progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;CAChF,CAAC,CAAA;AAKF,MAAM,CAAC,MAAM,KAAK,GAAa,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AAEjF;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAGlB,IAAI,CAAC,CAAC,EAAE,SAAS,SAAS,CAAC,QAAkB,EAAE,MAAc;IAC/D,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;AACzD,CAAC,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAGjB,IAAI,CAAC,CAAC,EAAE,SAAS,QAAQ,CAAC,QAAkB,EAAE,KAAa;IAC7D,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AAC9E,CAAC,CAAC,CAAA"}
|