@typed/async-data 0.5.1 → 0.6.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/dist/cjs/AsyncData.js.map +1 -1
- package/dist/cjs/Progress.js.map +1 -1
- package/dist/cjs/Schema.js +35 -21
- package/dist/cjs/Schema.js.map +1 -1
- package/dist/cjs/internal/async-data.js.map +1 -1
- package/dist/dts/AsyncData.d.ts +43 -44
- package/dist/dts/AsyncData.d.ts.map +1 -1
- package/dist/dts/Progress.d.ts +1 -3
- package/dist/dts/Progress.d.ts.map +1 -1
- package/dist/dts/Schema.d.ts +8 -8
- package/dist/dts/Schema.d.ts.map +1 -1
- package/dist/dts/internal/async-data.d.ts +6 -6
- package/dist/dts/internal/async-data.d.ts.map +1 -1
- package/dist/esm/AsyncData.js.map +1 -1
- package/dist/esm/Progress.js.map +1 -1
- package/dist/esm/Schema.js +28 -23
- package/dist/esm/Schema.js.map +1 -1
- package/dist/esm/internal/async-data.js.map +1 -1
- package/package.json +4 -4
- package/src/AsyncData.ts +63 -63
- package/src/Progress.ts +4 -9
- package/src/Schema.ts +79 -73
- package/src/internal/async-data.ts +5 -5
package/src/AsyncData.ts
CHANGED
|
@@ -29,7 +29,7 @@ const getCurrentTimestamp = () => Date.now()
|
|
|
29
29
|
*
|
|
30
30
|
* @since 1.0.0
|
|
31
31
|
*/
|
|
32
|
-
export type AsyncData<
|
|
32
|
+
export type AsyncData<A, E = never> = NoData | Loading | Failure<E> | Success<A> | Optimistic<A, E>
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
35
|
* @since 1.0.0
|
|
@@ -38,12 +38,12 @@ export namespace AsyncData {
|
|
|
38
38
|
/**
|
|
39
39
|
* @since 1.0.0
|
|
40
40
|
*/
|
|
41
|
-
export type Error<T> = [T] extends [AsyncData<infer
|
|
41
|
+
export type Error<T> = [T] extends [AsyncData<infer _, infer E>] ? E : never
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
44
|
* @since 1.0.0
|
|
45
45
|
*/
|
|
46
|
-
export type Success<T> = [T] extends [AsyncData<infer
|
|
46
|
+
export type Success<T> = [T] extends [AsyncData<infer A, infer _>] ? A : never
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* @category models
|
|
@@ -98,7 +98,7 @@ export class NoData extends Data.TaggedError(NO_DATA_TAG)<{}> {
|
|
|
98
98
|
*/
|
|
99
99
|
export const noData: {
|
|
100
100
|
(): NoData
|
|
101
|
-
<
|
|
101
|
+
<A, E>(): AsyncData<A, E>
|
|
102
102
|
} = (): NoData => new NoData()
|
|
103
103
|
|
|
104
104
|
/**
|
|
@@ -146,7 +146,7 @@ export type OptionalPartial<A> = [
|
|
|
146
146
|
*/
|
|
147
147
|
export const loading: {
|
|
148
148
|
(options?: OptionalPartial<LoadingOptions>): Loading
|
|
149
|
-
<
|
|
149
|
+
<A, E>(options?: OptionalPartial<LoadingOptions>): AsyncData<A, E>
|
|
150
150
|
} = (options?: OptionalPartial<LoadingOptions>): Loading =>
|
|
151
151
|
new Loading({
|
|
152
152
|
[AsyncDataTypeId]: AsyncDataTypeId,
|
|
@@ -209,7 +209,7 @@ export type FailureOptions = {
|
|
|
209
209
|
*/
|
|
210
210
|
export const failCause: {
|
|
211
211
|
<E>(cause: Cause.Cause<E>, options?: OptionalPartial<FailureOptions>): Failure<E>
|
|
212
|
-
<
|
|
212
|
+
<A, E>(cause: Cause.Cause<E>, options?: OptionalPartial<FailureOptions>): AsyncData<A, E>
|
|
213
213
|
} = <E>(cause: Cause.Cause<E>, options?: OptionalPartial<FailureOptions>): Failure<E> =>
|
|
214
214
|
new internal.FailureImpl(
|
|
215
215
|
cause,
|
|
@@ -222,7 +222,7 @@ export const failCause: {
|
|
|
222
222
|
*/
|
|
223
223
|
export const fail: {
|
|
224
224
|
<E>(error: E, options?: OptionalPartial<FailureOptions>): Failure<E>
|
|
225
|
-
<
|
|
225
|
+
<A, E>(error: E, options?: OptionalPartial<FailureOptions>): AsyncData<A, E>
|
|
226
226
|
} = <E>(error: E, options?: OptionalPartial<FailureOptions>): Failure<E> => failCause<E>(Cause.fail(error), options)
|
|
227
227
|
|
|
228
228
|
/**
|
|
@@ -257,7 +257,7 @@ export type SuccessOptions = {
|
|
|
257
257
|
*/
|
|
258
258
|
export const success: {
|
|
259
259
|
<A>(value: A, options?: OptionalPartial<SuccessOptions>): Success<A>
|
|
260
|
-
<
|
|
260
|
+
<A, E>(value: A, options?: OptionalPartial<SuccessOptions>): AsyncData<A, E>
|
|
261
261
|
} = <A>(value: A, options?: OptionalPartial<SuccessOptions>): Success<A> =>
|
|
262
262
|
new internal.SuccessImpl(
|
|
263
263
|
value,
|
|
@@ -268,12 +268,12 @@ export const success: {
|
|
|
268
268
|
/**
|
|
269
269
|
* @since 1.0.0
|
|
270
270
|
*/
|
|
271
|
-
export interface Optimistic<
|
|
271
|
+
export interface Optimistic<A, E = never> extends Effect.Effect<never, never, A> {
|
|
272
272
|
readonly [AsyncDataTypeId]: AsyncDataTypeId
|
|
273
273
|
readonly _tag: "Optimistic"
|
|
274
274
|
readonly value: A
|
|
275
275
|
readonly timestamp: number // Date.now()
|
|
276
|
-
readonly previous: AsyncData<
|
|
276
|
+
readonly previous: AsyncData<A, E>
|
|
277
277
|
|
|
278
278
|
readonly [Unify.typeSymbol]: unknown
|
|
279
279
|
readonly [Unify.unifySymbol]: AsyncData.Unify<this>
|
|
@@ -293,12 +293,12 @@ const isAsyncDataFirst = (args: IArguments) => isAsyncData(args[0])
|
|
|
293
293
|
* @since 1.0.0
|
|
294
294
|
*/
|
|
295
295
|
export const optimistic: {
|
|
296
|
-
<A>(value: A, options?: OptionalPartial<OptimisticOptions>): <E>(previous: AsyncData<
|
|
297
|
-
<
|
|
296
|
+
<A>(value: A, options?: OptionalPartial<OptimisticOptions>): <E>(previous: AsyncData<A, E>) => Optimistic<A, E>
|
|
297
|
+
<A, E = never>(previous: AsyncData<A, E>, value: A, options?: OptionalPartial<OptimisticOptions>): Optimistic<A, E>
|
|
298
298
|
} = dual(
|
|
299
299
|
(args) => args.length === 3 || isAsyncDataFirst(args),
|
|
300
|
-
<
|
|
301
|
-
new internal.OptimisticImpl(
|
|
300
|
+
<A, E>(previous: AsyncData<A, E>, value: A, options?: OptionalPartial<OptimisticOptions>): Optimistic<A, E> =>
|
|
301
|
+
new internal.OptimisticImpl<A, E>(
|
|
302
302
|
value,
|
|
303
303
|
options?.timestamp ?? getCurrentTimestamp(),
|
|
304
304
|
// We don't want to nest Optimistic values, so we unwrap the previous value if it's already optimistic
|
|
@@ -309,32 +309,32 @@ export const optimistic: {
|
|
|
309
309
|
/**
|
|
310
310
|
* @since 1.0.0
|
|
311
311
|
*/
|
|
312
|
-
export const isSuccess = <
|
|
312
|
+
export const isSuccess = <A, E>(data: AsyncData<A, E>): data is Success<A> => data._tag === SUCCESS_TAG
|
|
313
313
|
|
|
314
314
|
/**
|
|
315
315
|
* @since 1.0.0
|
|
316
316
|
*/
|
|
317
|
-
export const isOptimistic = <
|
|
317
|
+
export const isOptimistic = <A, E>(data: AsyncData<A, E>): data is Optimistic<A, E> => data._tag === OPTIMISTIC_TAG
|
|
318
318
|
|
|
319
319
|
/**
|
|
320
320
|
* @since 1.0.0
|
|
321
321
|
*/
|
|
322
|
-
export const isFailure = <
|
|
322
|
+
export const isFailure = <A, E>(data: AsyncData<A, E>): data is Failure<E> => data._tag === FAILURE_TAG
|
|
323
323
|
|
|
324
324
|
/**
|
|
325
325
|
* @since 1.0.0
|
|
326
326
|
*/
|
|
327
|
-
export const isLoading = <
|
|
327
|
+
export const isLoading = <A, E>(data: AsyncData<A, E>): data is Loading => data._tag === LOADING_TAG
|
|
328
328
|
|
|
329
329
|
/**
|
|
330
330
|
* @since 1.0.0
|
|
331
331
|
*/
|
|
332
|
-
export const isNoData = <
|
|
332
|
+
export const isNoData = <A, E>(data: AsyncData<A, E>): data is NoData => data._tag === NO_DATA_TAG
|
|
333
333
|
|
|
334
334
|
/**
|
|
335
335
|
* @since 1.0.0
|
|
336
336
|
*/
|
|
337
|
-
export type Refreshing<
|
|
337
|
+
export type Refreshing<A, E> = RefreshingFailure<E> | RefreshingSuccess<A>
|
|
338
338
|
|
|
339
339
|
/**
|
|
340
340
|
* @since 1.0.0
|
|
@@ -353,7 +353,7 @@ export interface RefreshingSuccess<A> extends Success<A> {
|
|
|
353
353
|
/**
|
|
354
354
|
* @since 1.0.0
|
|
355
355
|
*/
|
|
356
|
-
export const isRefreshing = <
|
|
356
|
+
export const isRefreshing = <A, E>(data: AsyncData<A, E>): data is Refreshing<A, E> =>
|
|
357
357
|
isSuccess(data) || isFailure(data)
|
|
358
358
|
? Option.isSome(data.refreshing)
|
|
359
359
|
: isOptimistic(data)
|
|
@@ -363,39 +363,39 @@ export const isRefreshing = <E, A>(data: AsyncData<E, A>): data is Refreshing<E,
|
|
|
363
363
|
/**
|
|
364
364
|
* @since 1.0.0
|
|
365
365
|
*/
|
|
366
|
-
export const isLoadingOrRefreshing = <
|
|
366
|
+
export const isLoadingOrRefreshing = <A, E>(data: AsyncData<A, E>): data is Loading | Refreshing<A, E> =>
|
|
367
367
|
isLoading(data) || isRefreshing(data) || (isOptimistic(data) && isLoadingOrRefreshing(data.previous))
|
|
368
368
|
|
|
369
369
|
/**
|
|
370
370
|
* @since 1.0.0
|
|
371
371
|
*/
|
|
372
372
|
export const match: {
|
|
373
|
-
<
|
|
373
|
+
<A, E, R1, R2, R3, R4, R5>(
|
|
374
374
|
matchers: {
|
|
375
375
|
NoData: (data: NoData) => R1
|
|
376
376
|
Loading: (data: Loading) => R2
|
|
377
377
|
Failure: (cause: Cause.Cause<E>, data: Failure<E>) => R3
|
|
378
378
|
Success: (value: A, data: Success<A>) => R4
|
|
379
|
-
Optimistic: (value: A, data: Optimistic<
|
|
379
|
+
Optimistic: (value: A, data: Optimistic<A, E>) => R5
|
|
380
380
|
}
|
|
381
|
-
): (data: AsyncData<
|
|
381
|
+
): (data: AsyncData<A, E>) => Unify.Unify<R1 | R2 | R3 | R4 | R5>
|
|
382
382
|
|
|
383
|
-
<
|
|
384
|
-
data: AsyncData<
|
|
383
|
+
<A, E, R1, R2, R3, R4, R5>(
|
|
384
|
+
data: AsyncData<A, E>,
|
|
385
385
|
matchers: {
|
|
386
386
|
NoData: (data: NoData) => R1
|
|
387
387
|
Loading: (data: Loading) => R2
|
|
388
388
|
Failure: (cause: Cause.Cause<E>, data: Failure<E>) => R3
|
|
389
389
|
Success: (value: A, data: Success<A>) => R4
|
|
390
|
-
Optimistic: (value: A, data: Optimistic<
|
|
390
|
+
Optimistic: (value: A, data: Optimistic<A, E>) => R5
|
|
391
391
|
}
|
|
392
392
|
): Unify.Unify<R1 | R2 | R3 | R4 | R5>
|
|
393
|
-
} = dual(2, <
|
|
393
|
+
} = dual(2, <A, E, R1, R2, R3, R4, R5>(data: AsyncData<A, E>, matchers: {
|
|
394
394
|
NoData: (data: NoData) => R1
|
|
395
395
|
Loading: (data: Loading) => R2
|
|
396
396
|
Failure: (cause: Cause.Cause<E>, data: Failure<E>) => R3
|
|
397
397
|
Success: (value: A, data: Success<A>) => R4
|
|
398
|
-
Optimistic: (value: A, data: Optimistic<
|
|
398
|
+
Optimistic: (value: A, data: Optimistic<A, E>) => R5
|
|
399
399
|
}): Unify.Unify<R1 | R2 | R3 | R4> => {
|
|
400
400
|
if (isSuccess(data)) {
|
|
401
401
|
return matchers.Success(data.value, data) as Unify.Unify<R1 | R2 | R3 | R4>
|
|
@@ -414,9 +414,9 @@ export const match: {
|
|
|
414
414
|
* @since 1.0.0
|
|
415
415
|
*/
|
|
416
416
|
export const map: {
|
|
417
|
-
<A, B>(f: (a: A) => B): <E>(data: AsyncData<
|
|
418
|
-
<
|
|
419
|
-
} = dual(2, function map<
|
|
417
|
+
<A, B>(f: (a: A) => B): <E>(data: AsyncData<A, E>) => AsyncData<B, E>
|
|
418
|
+
<A, E, B>(data: AsyncData<A, E>, f: (a: A) => B): AsyncData<B, E>
|
|
419
|
+
} = dual(2, function map<A, E, B>(data: AsyncData<A, E>, f: (a: A) => B): AsyncData<B, E> {
|
|
420
420
|
if (isSuccess(data)) {
|
|
421
421
|
return success(f(data.value), {
|
|
422
422
|
timestamp: data.timestamp,
|
|
@@ -433,19 +433,19 @@ export const map: {
|
|
|
433
433
|
* @since 1.0.0
|
|
434
434
|
*/
|
|
435
435
|
export const flatMap: {
|
|
436
|
-
<E,
|
|
437
|
-
f: (a: A, data: Success<A> | Optimistic<
|
|
438
|
-
): (data: AsyncData<
|
|
439
|
-
<E,
|
|
440
|
-
data: AsyncData<
|
|
441
|
-
f: (a: A, data: Success<A> | Optimistic<
|
|
442
|
-
): AsyncData<E | E2
|
|
436
|
+
<A, E, B, E2>(
|
|
437
|
+
f: (a: A, data: Success<A> | Optimistic<A, E>) => AsyncData<B, E2>
|
|
438
|
+
): (data: AsyncData<A, E>) => AsyncData<B, E | E2>
|
|
439
|
+
<A, E, B, E2>(
|
|
440
|
+
data: AsyncData<A, E>,
|
|
441
|
+
f: (a: A, data: Success<A> | Optimistic<A, E>) => AsyncData<B, E>
|
|
442
|
+
): AsyncData<B, E | E2>
|
|
443
443
|
} = dual(
|
|
444
444
|
2,
|
|
445
|
-
function<E,
|
|
446
|
-
data: AsyncData<
|
|
447
|
-
f: (a: A, data: Success<A> | Optimistic<
|
|
448
|
-
): AsyncData<E | E2
|
|
445
|
+
function<A, E, B, E2>(
|
|
446
|
+
data: AsyncData<A, E>,
|
|
447
|
+
f: (a: A, data: Success<A> | Optimistic<A, E>) => AsyncData<B, E2>
|
|
448
|
+
): AsyncData<B, E | E2> {
|
|
449
449
|
if (isSuccess(data) || isOptimistic(data)) {
|
|
450
450
|
return f(data.value, data)
|
|
451
451
|
} else {
|
|
@@ -457,7 +457,7 @@ export const flatMap: {
|
|
|
457
457
|
/**
|
|
458
458
|
* @since 1.0.0
|
|
459
459
|
*/
|
|
460
|
-
export const startLoading = <
|
|
460
|
+
export const startLoading = <A, E>(data: AsyncData<A, E>): AsyncData<A, E> => {
|
|
461
461
|
if (isSuccess(data)) {
|
|
462
462
|
return Option.isSome(data.refreshing) ? data : success(data.value, { ...data, refreshing: loading() })
|
|
463
463
|
} else if (isFailure(data)) {
|
|
@@ -474,7 +474,7 @@ export const startLoading = <E, A>(data: AsyncData<E, A>): AsyncData<E, A> => {
|
|
|
474
474
|
/**
|
|
475
475
|
* @since 1.0.0
|
|
476
476
|
*/
|
|
477
|
-
export const stopLoading = <
|
|
477
|
+
export const stopLoading = <A, E>(data: AsyncData<A, E>): AsyncData<A, E> => {
|
|
478
478
|
if (isSuccess(data)) {
|
|
479
479
|
return Option.isSome(data.refreshing) ? success(data.value) : data
|
|
480
480
|
} else if (isFailure(data)) {
|
|
@@ -489,12 +489,12 @@ export const stopLoading = <E, A>(data: AsyncData<E, A>): AsyncData<E, A> => {
|
|
|
489
489
|
/**
|
|
490
490
|
* @since 1.0.0
|
|
491
491
|
*/
|
|
492
|
-
export const isAsyncData: <
|
|
492
|
+
export const isAsyncData: <A, E>(u: unknown) => u is AsyncData<A, E> = internal.isAsyncData
|
|
493
493
|
|
|
494
494
|
/**
|
|
495
495
|
* @since 1.0.0
|
|
496
496
|
*/
|
|
497
|
-
export const done = <
|
|
497
|
+
export const done = <A, E = never>(exit: Exit.Exit<A, E>): AsyncData<A, E> =>
|
|
498
498
|
Exit.match(exit, {
|
|
499
499
|
onFailure: (cause) => failCause(cause),
|
|
500
500
|
onSuccess: (value) => success(value)
|
|
@@ -503,13 +503,13 @@ export const done = <E, A>(exit: Exit.Exit<E, A>): AsyncData<E, A> =>
|
|
|
503
503
|
/**
|
|
504
504
|
* @since 1.0.0
|
|
505
505
|
*/
|
|
506
|
-
export const getFailure = <
|
|
506
|
+
export const getFailure = <A, E>(data: AsyncData<A, E>): Option.Option<E> =>
|
|
507
507
|
isFailure(data) ? Cause.failureOption(data.cause) : Option.none()
|
|
508
508
|
|
|
509
509
|
/**
|
|
510
510
|
* @since 1.0.0
|
|
511
511
|
*/
|
|
512
|
-
export const getSuccess = <
|
|
512
|
+
export const getSuccess = <A, E>(data: AsyncData<A, E>): Option.Option<A> =>
|
|
513
513
|
isSuccess(data) || isOptimistic(data) ? Option.some(data.value) : Option.none()
|
|
514
514
|
|
|
515
515
|
const optionProgressEq = Option.getEquivalence(Progress.equals)
|
|
@@ -537,10 +537,10 @@ const successEquivalence = <A>(valueEq: Equivalence.Equivalence<A>): Equivalence
|
|
|
537
537
|
refreshing: optionLoadingEq
|
|
538
538
|
})
|
|
539
539
|
|
|
540
|
-
const optimisticEquivalence = <
|
|
540
|
+
const optimisticEquivalence = <A, E>(
|
|
541
541
|
valueEq: Equivalence.Equivalence<A>
|
|
542
|
-
): Equivalence.Equivalence<Optimistic<
|
|
543
|
-
let previousEq: Equivalence.Equivalence<AsyncData<
|
|
542
|
+
): Equivalence.Equivalence<Optimistic<A, E>> => {
|
|
543
|
+
let previousEq: Equivalence.Equivalence<AsyncData<A, E>> | undefined
|
|
544
544
|
const get = () => {
|
|
545
545
|
if (previousEq === undefined) {
|
|
546
546
|
previousEq = getEquivalence(valueEq)
|
|
@@ -552,16 +552,16 @@ const optimisticEquivalence = <E, A>(
|
|
|
552
552
|
_tag: Equivalence.string,
|
|
553
553
|
value: valueEq,
|
|
554
554
|
timestamp: Equivalence.number,
|
|
555
|
-
previous: (a, b) => get()(a, b)
|
|
555
|
+
previous: (a: AsyncData<A, E>, b: AsyncData<A, E>) => get()(a, b)
|
|
556
556
|
})
|
|
557
557
|
}
|
|
558
558
|
|
|
559
559
|
/**
|
|
560
560
|
* @since 1.0.0
|
|
561
561
|
*/
|
|
562
|
-
export const getEquivalence = <
|
|
562
|
+
export const getEquivalence = <A, E>(
|
|
563
563
|
valueEq: Equivalence.Equivalence<A> = Equal.equals
|
|
564
|
-
): Equivalence.Equivalence<AsyncData<
|
|
564
|
+
): Equivalence.Equivalence<AsyncData<A, E>> => {
|
|
565
565
|
const successEq_ = successEquivalence(valueEq)
|
|
566
566
|
const optimisticEq_ = optimisticEquivalence(valueEq)
|
|
567
567
|
return (a, b) => {
|
|
@@ -580,7 +580,7 @@ export const getEquivalence = <E, A>(
|
|
|
580
580
|
/**
|
|
581
581
|
* @since 1.0.0
|
|
582
582
|
*/
|
|
583
|
-
export function fromExit<
|
|
583
|
+
export function fromExit<A, E>(exit: Exit.Exit<A, E>): AsyncData<A, E> {
|
|
584
584
|
return Exit.match(exit, {
|
|
585
585
|
onFailure: (cause) => failCause(cause),
|
|
586
586
|
onSuccess: (value) => success(value)
|
|
@@ -590,7 +590,7 @@ export function fromExit<E, A>(exit: Exit.Exit<E, A>): AsyncData<E, A> {
|
|
|
590
590
|
/**
|
|
591
591
|
* @since 1.0.0
|
|
592
592
|
*/
|
|
593
|
-
export function fromEither<E, A>(either: Either.Either<E, A>): AsyncData<
|
|
593
|
+
export function fromEither<E, A>(either: Either.Either<E, A>): AsyncData<A, E> {
|
|
594
594
|
return Either.match(either, {
|
|
595
595
|
onLeft: (e) => fail(e),
|
|
596
596
|
onRight: (a) => success(a)
|
|
@@ -601,10 +601,10 @@ export function fromEither<E, A>(either: Either.Either<E, A>): AsyncData<E, A> {
|
|
|
601
601
|
* @since 1.0.0
|
|
602
602
|
*/
|
|
603
603
|
export const isExpired: {
|
|
604
|
-
(ttl: Duration.DurationInput, now?: number): <
|
|
605
|
-
<
|
|
606
|
-
} = dual(isAsyncDataFirst, function isExpired<
|
|
607
|
-
data: AsyncData<
|
|
604
|
+
(ttl: Duration.DurationInput, now?: number): <A, E>(data: AsyncData<A, E>) => boolean
|
|
605
|
+
<A, E>(data: AsyncData<A, E>, ttl: Duration.DurationInput, now?: number): boolean
|
|
606
|
+
} = dual(isAsyncDataFirst, function isExpired<A, E>(
|
|
607
|
+
data: AsyncData<A, E>,
|
|
608
608
|
ttl: Duration.DurationInput,
|
|
609
609
|
now: number = getCurrentTimestamp()
|
|
610
610
|
): boolean {
|
|
@@ -636,7 +636,7 @@ function isPastTTL(timestamp: number, ttl: Duration.DurationInput, now: number):
|
|
|
636
636
|
*
|
|
637
637
|
* @since 1.0.0
|
|
638
638
|
*/
|
|
639
|
-
export function dataEqual<
|
|
639
|
+
export function dataEqual<A, E>(first: AsyncData<A, E>, second: AsyncData<A, E>): boolean {
|
|
640
640
|
return match(first, {
|
|
641
641
|
NoData: () => isNoData(second),
|
|
642
642
|
Loading: (l) => isLoading(second) && Equal.equals(l.progress, second.progress),
|
package/src/Progress.ts
CHANGED
|
@@ -10,12 +10,9 @@ import * as Option from "effect/Option"
|
|
|
10
10
|
/**
|
|
11
11
|
* @since 1.0.0
|
|
12
12
|
*/
|
|
13
|
-
export interface Progress
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
readonly total: Option.Option<bigint>
|
|
17
|
-
}>
|
|
18
|
-
{
|
|
13
|
+
export interface Progress {
|
|
14
|
+
readonly loaded: bigint
|
|
15
|
+
readonly total: Option.Option<bigint>
|
|
19
16
|
}
|
|
20
17
|
|
|
21
18
|
/**
|
|
@@ -62,9 +59,7 @@ export const setTotal: {
|
|
|
62
59
|
/**
|
|
63
60
|
* @since 1.0.0
|
|
64
61
|
*/
|
|
65
|
-
export const equals: Equivalence.Equivalence<Progress> = Equivalence.struct
|
|
66
|
-
{ readonly [K in Exclude<keyof Progress, keyof Data.Data<any>>]: Equivalence.Equivalence<Progress[K]> }
|
|
67
|
-
>({
|
|
62
|
+
export const equals: Equivalence.Equivalence<Progress> = Equivalence.struct({
|
|
68
63
|
loaded: Equivalence.bigint,
|
|
69
64
|
total: Option.getEquivalence(Equivalence.bigint)
|
|
70
65
|
})
|