@cascateer/core 2.1.4 → 2.1.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cascateer/core",
3
- "version": "2.1.4",
3
+ "version": "2.1.6",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/cascateer/core.git"
package/src/api.ts CHANGED
@@ -10,6 +10,7 @@ import objectHash from "object-hash";
10
10
  import {
11
11
  combineLatest,
12
12
  filter,
13
+ finalize,
13
14
  lastValueFrom,
14
15
  map,
15
16
  NextObserver,
@@ -17,7 +18,6 @@ import {
17
18
  repeat,
18
19
  shareReplay,
19
20
  Subject,
20
- tap,
21
21
  UnaryFunction,
22
22
  } from "rxjs";
23
23
  import { asObservable, ExtendableDictionary, property } from "./lib";
@@ -49,9 +49,9 @@ class Memoizable<Args, Result> {
49
49
  this.subscribe = (invalidatedTags) => {
50
50
  const memoizedEffect: AsyncEffect<Args, Result> = memoize(
51
51
  (args) =>
52
- new AsyncObservable(
52
+ new AsyncObservable((complete) =>
53
53
  this.predicate(args).pipe(
54
- tap({ complete: () => console.log("complete") }),
54
+ finalize(complete),
55
55
  repeat({
56
56
  delay: () =>
57
57
  combineLatest([
@@ -1,4 +1,12 @@
1
- import { BehaviorSubject, defer, finalize, Observable } from "rxjs";
1
+ import { constant } from "lodash";
2
+ import {
3
+ BehaviorSubject,
4
+ defer,
5
+ finalize,
6
+ isObservable,
7
+ Observable,
8
+ UnaryFunction,
9
+ } from "rxjs";
2
10
  import { ProxyObservable } from "./ProxyObservable";
3
11
 
4
12
  export interface AsyncObservable<T> {
@@ -6,13 +14,18 @@ export interface AsyncObservable<T> {
6
14
  }
7
15
 
8
16
  export class AsyncObservable<T> extends ProxyObservable<T> {
9
- constructor(source: Observable<T>) {
17
+ constructor(
18
+ source: Observable<T> | UnaryFunction<() => void, Observable<T>>,
19
+ ) {
10
20
  const pending = new BehaviorSubject(false);
21
+ const complete = () => pending.next(false);
11
22
 
12
- super(source, (source) =>
13
- defer(() => (pending.next(true), source)).pipe(
14
- finalize(() => pending.next(false)),
15
- ),
23
+ if (isObservable(source)) {
24
+ source = constant(source);
25
+ }
26
+
27
+ super(source(complete), (source) =>
28
+ defer(() => (pending.next(true), source)).pipe(finalize(complete)),
16
29
  );
17
30
 
18
31
  this.pending = pending;
package/src/terminal.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Dictionary, thru } from "lodash";
1
+ import { Dictionary } from "lodash";
2
2
  import { UnaryFunction } from "rxjs";
3
3
  import { ApiAdapter, ApiEffect } from "./api";
4
4
  import { ExtendableDictionary } from "./lib";
@@ -79,29 +79,25 @@ export class ExtendableTerminalAdapter<
79
79
  ) {
80
80
  return new ExtendableTerminalAdapter(
81
81
  this.context,
82
- this.extendableEffects.extend(
83
- (currentEffects) => () =>
84
- effects({
85
- effect: (constructor) => {
86
- const interceptor = new AsyncEffectInterceptor();
82
+ this.extendableEffects.extend((currentEffects) => () => {
83
+ const interceptor = new AsyncEffectInterceptor();
84
+ const source = {
85
+ store: {
86
+ effects: asStoreEffects(this.context.store.signals),
87
+ },
88
+ api: {
89
+ effects: interceptor.intercept(this.context.api.effects),
90
+ },
91
+ terminal: {
92
+ effects: interceptor.intercept(currentEffects),
93
+ },
94
+ };
87
95
 
88
- return thru(
89
- constructor({
90
- store: {
91
- effects: asStoreEffects(this.context.store.signals),
92
- },
93
- api: {
94
- effects: interceptor.intercept(this.context.api.effects),
95
- },
96
- terminal: {
97
- effects: interceptor.intercept(currentEffects),
98
- },
99
- }),
100
- interceptor.toAsyncEffect,
101
- );
102
- },
103
- }),
104
- ),
96
+ return effects({
97
+ effect: (constructor) =>
98
+ interceptor.toAsyncEffect(constructor(source)),
99
+ });
100
+ }),
105
101
  this.extendableActions,
106
102
  );
107
103
  }
package/src/types.ts CHANGED
@@ -39,17 +39,19 @@ export type AsyncEffects<Effects extends Dictionary<AsyncEffect<any, any>>> = {
39
39
  export class AsyncEffectInterceptor extends ReplaySubject<
40
40
  AsyncObservable<any>
41
41
  > {
42
- intercept = <Effects extends Dictionary<AsyncEffect<any, any>>>(
42
+ intercept<Effects extends Dictionary<AsyncEffect<any, any>>>(
43
43
  effects: Effects,
44
- ): AsyncEffects<Effects> =>
45
- mapValues(
44
+ ): AsyncEffects<Effects> {
45
+ return mapValues(
46
46
  effects,
47
47
  (effect) => (args) => tap(effect(args), (source) => this.next(source)),
48
48
  );
49
+ }
49
50
 
50
- toAsyncEffect =
51
- <Args, Result>(effect: Effect<Args, Result>): AsyncEffect<Args, Result> =>
52
- (args) =>
51
+ toAsyncEffect<Args, Result>(
52
+ effect: Effect<Args, Result>,
53
+ ): AsyncEffect<Args, Result> {
54
+ return (args) =>
53
55
  new (class
54
56
  extends ProxyObservable<Result>
55
57
  implements AsyncObservable<Result>
@@ -69,6 +71,7 @@ export class AsyncEffectInterceptor extends ReplaySubject<
69
71
  );
70
72
  }
71
73
  })(this);
74
+ }
72
75
  }
73
76
 
74
77
  export interface Action<Args, Result> extends UnaryFunction<