@tethys/cdk 16.0.5 → 16.1.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.
@@ -1,8 +1,9 @@
1
+ import { Signal } from '@angular/core';
1
2
  import { Observable } from 'rxjs';
2
3
  import { Behavior, BehaviorContext } from './behavior';
3
4
  import { ErrorFn, ExtractObservableValue, SuccessFn } from './types';
4
5
  interface ActionBehavior<R> {
5
- saving: boolean;
6
+ saving: Signal<boolean>;
6
7
  execute(success?: SuccessFn<R>, error?: ErrorFn): void;
7
8
  execute(context: BehaviorContext<R>): void;
8
9
  execute(successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): void;
@@ -1,12 +1,13 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { Behavior, BehaviorContext } from './behavior';
3
3
  import { ErrorFn, ExtractObservableValue, SuccessFn } from './types';
4
+ import { Signal } from '@angular/core';
4
5
  export interface AsyncBehavior<R> {
5
- loadingDone: boolean;
6
- loading: boolean;
7
- state: 'pending' | 'loading' | 'success' | 'error';
8
- error?: Error;
9
- value?: R;
6
+ loadingDone: Signal<boolean>;
7
+ loading: Signal<boolean>;
8
+ state: Signal<'pending' | 'loading' | 'success' | 'error'>;
9
+ error?: Signal<Error>;
10
+ value?: Signal<R>;
10
11
  execute(success?: SuccessFn<R>, error?: ErrorFn): void;
11
12
  execute(context: BehaviorContext<R>): void;
12
13
  execute(successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): void;
@@ -1,37 +1,40 @@
1
+ import { signal } from '@angular/core';
2
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
1
3
  import { finalize, tap } from 'rxjs/operators';
2
4
  import { createBehaviorFromFunction, handleBehaviorError, pickBehaviorCallbacks } from './behavior';
3
5
  class ActionBehaviorImpl {
4
6
  constructor(action, context) {
5
7
  this.action = action;
6
8
  this.context = context;
7
- this.saving = false;
9
+ this.saving = signal(false);
10
+ this.takeUntilDestroyed = takeUntilDestroyed();
8
11
  }
9
12
  execute(successOrContext, error) {
10
- if (this.saving) {
13
+ if (this.saving()) {
11
14
  return;
12
15
  }
13
- this.saving = true;
16
+ this.saving.set(true);
14
17
  const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);
15
18
  try {
16
19
  return this.action
17
20
  .apply(undefined, this.executeParams)
18
- .pipe(finalize(() => {
19
- this.saving = false;
21
+ .pipe(this.takeUntilDestroyed, finalize(() => {
22
+ this.saving.set(false);
20
23
  this.executeParams = undefined;
21
24
  }), tap(value => {
22
- this.saving = false;
25
+ this.saving.set(false);
23
26
  this.executeParams = undefined;
24
27
  }))
25
28
  .subscribe({
26
29
  next: callbacks?.success,
27
30
  error: (error) => {
28
- this.saving = false;
31
+ this.saving.set(false);
29
32
  handleBehaviorError(error, callbacks.error);
30
33
  }
31
34
  });
32
35
  }
33
36
  catch (error) {
34
- this.saving = false;
37
+ this.saving.set(false);
35
38
  handleBehaviorError(error, callbacks.error);
36
39
  }
37
40
  }
@@ -45,8 +48,9 @@ export function useAction(action, context = {}) {
45
48
  return createBehaviorFromFunction(fn, {
46
49
  context: context,
47
50
  action: action,
48
- execute: behavior.execute,
51
+ takeUntilDestroyed: behavior.takeUntilDestroyed,
52
+ execute: behavior.execute.bind(fn),
49
53
  saving: behavior.saving
50
54
  });
51
55
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJlaGF2aW9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY2RrL2JlaGF2aW9ycy9hY3Rpb24tYmVoYXZpb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFjLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQTZCLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBWS9ILE1BQU0sa0JBQWtCO0lBSXBCLFlBQW9CLE1BQVMsRUFBVSxPQUEyQjtRQUE5QyxXQUFNLEdBQU4sTUFBTSxDQUFHO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFIbEUsV0FBTSxHQUFHLEtBQUssQ0FBQztJQUdzRCxDQUFDO0lBSXRFLE9BQU8sQ0FBQyxnQkFBbUQsRUFBRSxLQUFlO1FBQ3hFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0UsSUFBSTtZQUNBLE9BQU8sSUFBSSxDQUFDLE1BQU07aUJBQ2IsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO2lCQUNwQyxJQUFJLENBQ0QsUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7WUFDbkMsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FDTDtpQkFDQSxTQUFTLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPO2dCQUN4QixLQUFLLEVBQUUsQ0FBQyxLQUFZLEVBQUUsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLG1CQUFtQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7YUFDSixDQUFDLENBQUM7U0FDVjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7Q0FDSjtBQUVELE1BQU0sVUFBVSxTQUFTLENBQ3JCLE1BQVMsRUFDVCxVQUFrRSxFQUFFO0lBRXBFLE1BQU0sUUFBUSxHQUFHLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXpELE1BQU0sRUFBRSxHQUFHLFVBQVUsR0FBRyxNQUFxQjtRQUN6QyxFQUFFLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzdCLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBQ0YsT0FBTywwQkFBMEIsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsT0FBTyxFQUFFLE9BQU87UUFDaEIsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87UUFDekIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0tBQzFCLENBQ3dELENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3IsIEJlaGF2aW9yQ29udGV4dCwgY3JlYXRlQmVoYXZpb3JGcm9tRnVuY3Rpb24sIGhhbmRsZUJlaGF2aW9yRXJyb3IsIHBpY2tCZWhhdmlvckNhbGxiYWNrcyB9IGZyb20gJy4vYmVoYXZpb3InO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEVycm9ySGFuZGxlciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBFcnJvckZuLCBFeHRyYWN0T2JzZXJ2YWJsZVZhbHVlLCBTdWNjZXNzRm4gfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIEFjdGlvbkJlaGF2aW9yPFI+IHtcbiAgICBzYXZpbmc6IGJvb2xlYW47XG5cbiAgICBleGVjdXRlKHN1Y2Nlc3M/OiBTdWNjZXNzRm48Uj4sIGVycm9yPzogRXJyb3JGbik6IHZvaWQ7XG4gICAgZXhlY3V0ZShjb250ZXh0OiBCZWhhdmlvckNvbnRleHQ8Uj4pOiB2b2lkO1xuICAgIGV4ZWN1dGUoc3VjY2Vzc09yQ29udGV4dDogU3VjY2Vzc0ZuPFI+IHwgQmVoYXZpb3JDb250ZXh0PFI+LCBlcnJvcj86IEVycm9yRm4pOiB2b2lkO1xufVxuXG5jbGFzcyBBY3Rpb25CZWhhdmlvckltcGw8UiwgQSBleHRlbmRzICguLi5hcmdzOiBhbnkpID0+IE9ic2VydmFibGU8Uj4+IGltcGxlbWVudHMgQWN0aW9uQmVoYXZpb3I8Uj4ge1xuICAgIHNhdmluZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBleGVjdXRlUGFyYW1zOiBQYXJhbWV0ZXJzPEE+O1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9uOiBBLCBwcml2YXRlIGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxSPikge31cblxuICAgIGV4ZWN1dGUoc3VjY2Vzcz86IFN1Y2Nlc3NGbjxSPiwgZXJyb3I/OiBFcnJvckZuKTogdm9pZDtcbiAgICBleGVjdXRlKGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxSPik6IHZvaWQ7XG4gICAgZXhlY3V0ZShzdWNjZXNzT3JDb250ZXh0OiBTdWNjZXNzRm48Uj4gfCBCZWhhdmlvckNvbnRleHQ8Uj4sIGVycm9yPzogRXJyb3JGbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zYXZpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNhdmluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHBpY2tCZWhhdmlvckNhbGxiYWNrcyh0aGlzLmNvbnRleHQsIHN1Y2Nlc3NPckNvbnRleHQsIGVycm9yKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGlvblxuICAgICAgICAgICAgICAgIC5hcHBseSh1bmRlZmluZWQsIHRoaXMuZXhlY3V0ZVBhcmFtcylcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVBhcmFtcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlUGFyYW1zID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogY2FsbGJhY2tzPy5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJlaGF2aW9yRXJyb3IoZXJyb3IsIGNhbGxiYWNrcy5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBoYW5kbGVCZWhhdmlvckVycm9yKGVycm9yLCBjYWxsYmFja3MuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQWN0aW9uPEEgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4gPSAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4+KFxuICAgIGFjdGlvbjogQSxcbiAgICBjb250ZXh0OiBCZWhhdmlvckNvbnRleHQ8RXh0cmFjdE9ic2VydmFibGVWYWx1ZTxSZXR1cm5UeXBlPEE+Pj4gPSB7fVxuKSB7XG4gICAgY29uc3QgYmVoYXZpb3IgPSBuZXcgQWN0aW9uQmVoYXZpb3JJbXBsKGFjdGlvbiwgY29udGV4dCk7XG5cbiAgICBjb25zdCBmbiA9IGZ1bmN0aW9uICguLi5wYXJhbXM6IFBhcmFtZXRlcnM8QT4pIHtcbiAgICAgICAgZm5bJ2V4ZWN1dGVQYXJhbXMnXSA9IHBhcmFtcztcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gICAgcmV0dXJuIGNyZWF0ZUJlaGF2aW9yRnJvbUZ1bmN0aW9uKGZuLCB7XG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBleGVjdXRlOiBiZWhhdmlvci5leGVjdXRlLFxuICAgICAgICBzYXZpbmc6IGJlaGF2aW9yLnNhdmluZ1xuICAgIH0pIGFzIHVua25vd24gYXMgQmVoYXZpb3I8UGFyYW1ldGVyczxBPiwgQWN0aW9uQmVoYXZpb3I8RXh0cmFjdE9ic2VydmFibGVWYWx1ZTxSZXR1cm5UeXBlPEE+Pj4+ICZcbiAgICAgICAgQWN0aW9uQmVoYXZpb3I8RXh0cmFjdE9ic2VydmFibGVWYWx1ZTxSZXR1cm5UeXBlPEE+Pj47XG59XG4iXX0=
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJlaGF2aW9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY2RrL2JlaGF2aW9ycy9hY3Rpb24tYmVoYXZpb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBNkIsMEJBQTBCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFXL0gsTUFBTSxrQkFBa0I7SUFPcEIsWUFBb0IsTUFBUyxFQUFVLE9BQTJCO1FBQTlDLFdBQU0sR0FBTixNQUFNLENBQUc7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQU5sRSxXQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBSXZCLHVCQUFrQixHQUFHLGtCQUFrQixFQUFFLENBQUM7SUFFMkIsQ0FBQztJQUl0RSxPQUFPLENBQUMsZ0JBQW1ELEVBQUUsS0FBZTtRQUN4RSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNmLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0UsSUFBSTtZQUNBLE9BQU8sSUFBSSxDQUFDLE1BQU07aUJBQ2IsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO2lCQUNwQyxJQUFJLENBQ0QsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUNuQyxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUNMO2lCQUNBLFNBQVMsQ0FBQztnQkFDUCxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU87Z0JBQ3hCLEtBQUssRUFBRSxDQUFDLEtBQVksRUFBRSxFQUFFO29CQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdkIsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEQsQ0FBQzthQUNKLENBQUMsQ0FBQztTQUNWO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9DO0lBQ0wsQ0FBQztDQUNKO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FDckIsTUFBUyxFQUNULFVBQWtFLEVBQUU7SUFFcEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFekQsTUFBTSxFQUFFLEdBQUcsVUFBVSxHQUFHLE1BQXFCO1FBQ3pDLEVBQUUsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDN0IsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDLENBQUM7SUFDRixPQUFPLDBCQUEwQixDQUFDLEVBQUUsRUFBRTtRQUNsQyxPQUFPLEVBQUUsT0FBTztRQUNoQixNQUFNLEVBQUUsTUFBTTtRQUNkLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7UUFDL0MsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07S0FDMUIsQ0FDd0QsQ0FBQztBQUM5RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbmFsaXplLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCZWhhdmlvciwgQmVoYXZpb3JDb250ZXh0LCBjcmVhdGVCZWhhdmlvckZyb21GdW5jdGlvbiwgaGFuZGxlQmVoYXZpb3JFcnJvciwgcGlja0JlaGF2aW9yQ2FsbGJhY2tzIH0gZnJvbSAnLi9iZWhhdmlvcic7XG5pbXBvcnQgeyBFcnJvckZuLCBFeHRyYWN0T2JzZXJ2YWJsZVZhbHVlLCBTdWNjZXNzRm4gfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIEFjdGlvbkJlaGF2aW9yPFI+IHtcbiAgICBzYXZpbmc6IFNpZ25hbDxib29sZWFuPjtcblxuICAgIGV4ZWN1dGUoc3VjY2Vzcz86IFN1Y2Nlc3NGbjxSPiwgZXJyb3I/OiBFcnJvckZuKTogdm9pZDtcbiAgICBleGVjdXRlKGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxSPik6IHZvaWQ7XG4gICAgZXhlY3V0ZShzdWNjZXNzT3JDb250ZXh0OiBTdWNjZXNzRm48Uj4gfCBCZWhhdmlvckNvbnRleHQ8Uj4sIGVycm9yPzogRXJyb3JGbik6IHZvaWQ7XG59XG5cbmNsYXNzIEFjdGlvbkJlaGF2aW9ySW1wbDxSLCBBIGV4dGVuZHMgKC4uLmFyZ3M6IGFueSkgPT4gT2JzZXJ2YWJsZTxSPj4gaW1wbGVtZW50cyBBY3Rpb25CZWhhdmlvcjxSPiB7XG4gICAgc2F2aW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIGV4ZWN1dGVQYXJhbXM6IFBhcmFtZXRlcnM8QT47XG5cbiAgICB0YWtlVW50aWxEZXN0cm95ZWQgPSB0YWtlVW50aWxEZXN0cm95ZWQoKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9uOiBBLCBwcml2YXRlIGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxSPikge31cblxuICAgIGV4ZWN1dGUoc3VjY2Vzcz86IFN1Y2Nlc3NGbjxSPiwgZXJyb3I/OiBFcnJvckZuKTogdm9pZDtcbiAgICBleGVjdXRlKGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxSPik6IHZvaWQ7XG4gICAgZXhlY3V0ZShzdWNjZXNzT3JDb250ZXh0OiBTdWNjZXNzRm48Uj4gfCBCZWhhdmlvckNvbnRleHQ8Uj4sIGVycm9yPzogRXJyb3JGbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zYXZpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2F2aW5nLnNldCh0cnVlKTtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gcGlja0JlaGF2aW9yQ2FsbGJhY2tzKHRoaXMuY29udGV4dCwgc3VjY2Vzc09yQ29udGV4dCwgZXJyb3IpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uXG4gICAgICAgICAgICAgICAgLmFwcGx5KHVuZGVmaW5lZCwgdGhpcy5leGVjdXRlUGFyYW1zKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRha2VVbnRpbERlc3Ryb3llZCxcbiAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVBhcmFtcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlUGFyYW1zID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogY2FsbGJhY2tzPy5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJlaGF2aW9yRXJyb3IoZXJyb3IsIGNhbGxiYWNrcy5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICBoYW5kbGVCZWhhdmlvckVycm9yKGVycm9yLCBjYWxsYmFja3MuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQWN0aW9uPEEgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4gPSAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4+KFxuICAgIGFjdGlvbjogQSxcbiAgICBjb250ZXh0OiBCZWhhdmlvckNvbnRleHQ8RXh0cmFjdE9ic2VydmFibGVWYWx1ZTxSZXR1cm5UeXBlPEE+Pj4gPSB7fVxuKSB7XG4gICAgY29uc3QgYmVoYXZpb3IgPSBuZXcgQWN0aW9uQmVoYXZpb3JJbXBsKGFjdGlvbiwgY29udGV4dCk7XG5cbiAgICBjb25zdCBmbiA9IGZ1bmN0aW9uICguLi5wYXJhbXM6IFBhcmFtZXRlcnM8QT4pIHtcbiAgICAgICAgZm5bJ2V4ZWN1dGVQYXJhbXMnXSA9IHBhcmFtcztcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gICAgcmV0dXJuIGNyZWF0ZUJlaGF2aW9yRnJvbUZ1bmN0aW9uKGZuLCB7XG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQ6IGJlaGF2aW9yLnRha2VVbnRpbERlc3Ryb3llZCxcbiAgICAgICAgZXhlY3V0ZTogYmVoYXZpb3IuZXhlY3V0ZS5iaW5kKGZuKSxcbiAgICAgICAgc2F2aW5nOiBiZWhhdmlvci5zYXZpbmdcbiAgICB9KSBhcyB1bmtub3duIGFzIEJlaGF2aW9yPFBhcmFtZXRlcnM8QT4sIEFjdGlvbkJlaGF2aW9yPEV4dHJhY3RPYnNlcnZhYmxlVmFsdWU8UmV0dXJuVHlwZTxBPj4+PiAmXG4gICAgICAgIEFjdGlvbkJlaGF2aW9yPEV4dHJhY3RPYnNlcnZhYmxlVmFsdWU8UmV0dXJuVHlwZTxBPj4+O1xufVxuIl19
@@ -1,46 +1,50 @@
1
1
  import { finalize, tap } from 'rxjs/operators';
2
2
  import { createBehaviorFromFunction, handleBehaviorError, pickBehaviorCallbacks } from './behavior';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { computed, signal } from '@angular/core';
3
5
  class AsyncBehaviorImpl {
4
6
  constructor(action, context) {
5
7
  this.action = action;
6
8
  this.context = context;
7
- this.loadingDone = true;
8
- this.loading = false;
9
- this.state = 'pending';
9
+ this.loading = signal(false);
10
+ this.loadingDone = computed(() => !this.loading());
11
+ this.value = signal(null);
12
+ this.state = signal('pending');
13
+ this.error = signal(null);
14
+ this.takeUntilDestroyed = takeUntilDestroyed();
10
15
  }
11
16
  execute(successOrContext, error) {
12
17
  this.setLoadingState(true);
13
- this.state = 'loading';
18
+ this.state.set('loading');
14
19
  const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);
15
20
  try {
16
21
  return this.action
17
22
  .apply(undefined, this.executeParams)
18
- .pipe(finalize(() => {
23
+ .pipe(this.takeUntilDestroyed, finalize(() => {
19
24
  this.setLoadingState(false);
20
25
  }), tap(value => {
21
- this.value = value;
22
- this.state = 'success';
26
+ this.value.set(value);
27
+ this.state.set('success');
23
28
  this.setLoadingState(false);
24
29
  }))
25
30
  .subscribe({
26
31
  next: callbacks.success,
27
32
  error: error => {
28
- this.state = 'error';
29
- this.error = error;
33
+ this.state.set('error');
34
+ this.error.set(error);
30
35
  handleBehaviorError(error, callbacks.error);
31
36
  }
32
37
  });
33
38
  }
34
39
  catch (error) {
35
- this.state = 'error';
36
- this.error = error;
40
+ this.state.set('error');
41
+ this.error.set(error);
37
42
  this.setLoadingState(false);
38
43
  handleBehaviorError(error, callbacks.error);
39
44
  }
40
45
  }
41
46
  setLoadingState(loading) {
42
- this.loading = loading;
43
- this.loadingDone = !loading;
47
+ this.loading.set(loading);
44
48
  }
45
49
  }
46
50
  export function useAsync(action, context = {}) {
@@ -52,8 +56,9 @@ export function useAsync(action, context = {}) {
52
56
  return createBehaviorFromFunction(fn, {
53
57
  context: context,
54
58
  action: action,
55
- execute: behavior.execute,
56
- setLoadingState: behavior.setLoadingState,
59
+ takeUntilDestroyed: behavior.takeUntilDestroyed,
60
+ execute: behavior.execute.bind(fn),
61
+ setLoadingState: behavior.setLoadingState.bind(fn),
57
62
  loadingDone: behavior.loadingDone,
58
63
  loading: behavior.loading,
59
64
  state: behavior.state,
@@ -61,4 +66,4 @@ export function useAsync(action, context = {}) {
61
66
  value: behavior.value
62
67
  });
63
68
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtYmVoYXZpb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvYmVoYXZpb3JzL2FzeW5jLWJlaGF2aW9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUE2QiwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQWUvSCxNQUFNLGlCQUFpQjtJQWFuQixZQUFvQixNQUFTLEVBQVUsT0FBMkI7UUFBOUMsV0FBTSxHQUFOLE1BQU0sQ0FBRztRQUFVLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBWmxFLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFJaEIsVUFBSyxHQUFnRCxTQUFTLENBQUM7SUFNTSxDQUFDO0lBSXRFLE9BQU8sQ0FBQyxnQkFBbUQsRUFBRSxLQUFlO1FBQ3hFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDdkIsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRSxJQUFJO1lBQ0EsT0FBTyxJQUFJLENBQUMsTUFBTTtpQkFDYixLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUM7aUJBQ3BDLElBQUksQ0FDRCxRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNSLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBVSxDQUFDO2dCQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FDTDtpQkFDQSxTQUFTLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO29CQUNuQixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO2FBQ0osQ0FBQyxDQUFDO1NBQ1Y7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBZ0I7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUNoQyxDQUFDO0NBQ0o7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFTLEVBQ1QsVUFBa0UsRUFBRTtJQUVwRSxNQUFNLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV4RCxNQUFNLEVBQUUsR0FBRyxVQUFVLEdBQUcsTUFBcUI7UUFDekMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUM3QixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUMsQ0FBQztJQUNGLE9BQU8sMEJBQTBCLENBQUMsRUFBRSxFQUFFO1FBQ2xDLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1FBQ3pCLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZTtRQUN6QyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7UUFDakMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1FBQ3pCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztRQUNyQixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7UUFDckIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO0tBQ3hCLENBQ3VELENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgdGFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3IsIEJlaGF2aW9yQ29udGV4dCwgY3JlYXRlQmVoYXZpb3JGcm9tRnVuY3Rpb24sIGhhbmRsZUJlaGF2aW9yRXJyb3IsIHBpY2tCZWhhdmlvckNhbGxiYWNrcyB9IGZyb20gJy4vYmVoYXZpb3InO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEVycm9ySGFuZGxlciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBFcnJvckZuLCBFeHRyYWN0T2JzZXJ2YWJsZVZhbHVlLCBTdWNjZXNzRm4gfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBBc3luY0JlaGF2aW9yPFI+IHtcbiAgICBsb2FkaW5nRG9uZTogYm9vbGVhbjtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgIHN0YXRlOiAncGVuZGluZycgfCAnbG9hZGluZycgfCAnc3VjY2VzcycgfCAnZXJyb3InO1xuICAgIGVycm9yPzogRXJyb3I7XG4gICAgdmFsdWU/OiBSO1xuICAgIGV4ZWN1dGUoc3VjY2Vzcz86IFN1Y2Nlc3NGbjxSPiwgZXJyb3I/OiBFcnJvckZuKTogdm9pZDtcbiAgICBleGVjdXRlKGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxSPik6IHZvaWQ7XG4gICAgZXhlY3V0ZShzdWNjZXNzT3JDb250ZXh0OiBTdWNjZXNzRm48Uj4gfCBCZWhhdmlvckNvbnRleHQ8Uj4sIGVycm9yPzogRXJyb3JGbik6IHZvaWQ7XG59XG5cbmNsYXNzIEFzeW5jQmVoYXZpb3JJbXBsPFQsIEEgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPFQ+PiBpbXBsZW1lbnRzIEFzeW5jQmVoYXZpb3I8VD4ge1xuICAgIGxvYWRpbmdEb25lID0gdHJ1ZTtcblxuICAgIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIHZhbHVlOiBUO1xuXG4gICAgc3RhdGU6ICdwZW5kaW5nJyB8ICdsb2FkaW5nJyB8ICdzdWNjZXNzJyB8ICdlcnJvcicgPSAncGVuZGluZyc7XG5cbiAgICBlcnJvcj86IEVycm9yO1xuXG4gICAgcHJpdmF0ZSBleGVjdXRlUGFyYW1zOiBQYXJhbWV0ZXJzPEE+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhY3Rpb246IEEsIHByaXZhdGUgY29udGV4dDogQmVoYXZpb3JDb250ZXh0PFQ+KSB7fVxuXG4gICAgZXhlY3V0ZShzdWNjZXNzPzogU3VjY2Vzc0ZuPFQ+LCBlcnJvcj86IEVycm9yRm4pOiB2b2lkO1xuICAgIGV4ZWN1dGUoY29udGV4dDogQmVoYXZpb3JDb250ZXh0PFQ+KTogdm9pZDtcbiAgICBleGVjdXRlKHN1Y2Nlc3NPckNvbnRleHQ6IFN1Y2Nlc3NGbjxUPiB8IEJlaGF2aW9yQ29udGV4dDxUPiwgZXJyb3I/OiBFcnJvckZuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKHRydWUpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2xvYWRpbmcnO1xuICAgICAgICBjb25zdCBjYWxsYmFja3MgPSBwaWNrQmVoYXZpb3JDYWxsYmFja3ModGhpcy5jb250ZXh0LCBzdWNjZXNzT3JDb250ZXh0LCBlcnJvcik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25cbiAgICAgICAgICAgICAgICAuYXBwbHkodW5kZWZpbmVkLCB0aGlzLmV4ZWN1dGVQYXJhbXMpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRpbmdTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBjYWxsYmFja3Muc3VjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQmVoYXZpb3JFcnJvcihlcnJvciwgY2FsbGJhY2tzLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB0aGlzLnNldExvYWRpbmdTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICBoYW5kbGVCZWhhdmlvckVycm9yKGVycm9yLCBjYWxsYmFja3MuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0TG9hZGluZ1N0YXRlKGxvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gbG9hZGluZztcbiAgICAgICAgdGhpcy5sb2FkaW5nRG9uZSA9ICFsb2FkaW5nO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUFzeW5jPEEgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4gPSAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4+KFxuICAgIGFjdGlvbjogQSxcbiAgICBjb250ZXh0OiBCZWhhdmlvckNvbnRleHQ8RXh0cmFjdE9ic2VydmFibGVWYWx1ZTxSZXR1cm5UeXBlPEE+Pj4gPSB7fVxuKSB7XG4gICAgY29uc3QgYmVoYXZpb3IgPSBuZXcgQXN5bmNCZWhhdmlvckltcGwoYWN0aW9uLCBjb250ZXh0KTtcblxuICAgIGNvbnN0IGZuID0gZnVuY3Rpb24gKC4uLnBhcmFtczogUGFyYW1ldGVyczxBPikge1xuICAgICAgICBmblsnZXhlY3V0ZVBhcmFtcyddID0gcGFyYW1zO1xuICAgICAgICByZXR1cm4gZm47XG4gICAgfTtcbiAgICByZXR1cm4gY3JlYXRlQmVoYXZpb3JGcm9tRnVuY3Rpb24oZm4sIHtcbiAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGV4ZWN1dGU6IGJlaGF2aW9yLmV4ZWN1dGUsXG4gICAgICAgIHNldExvYWRpbmdTdGF0ZTogYmVoYXZpb3Iuc2V0TG9hZGluZ1N0YXRlLFxuICAgICAgICBsb2FkaW5nRG9uZTogYmVoYXZpb3IubG9hZGluZ0RvbmUsXG4gICAgICAgIGxvYWRpbmc6IGJlaGF2aW9yLmxvYWRpbmcsXG4gICAgICAgIHN0YXRlOiBiZWhhdmlvci5zdGF0ZSxcbiAgICAgICAgZXJyb3I6IGJlaGF2aW9yLmVycm9yLFxuICAgICAgICB2YWx1ZTogYmVoYXZpb3IudmFsdWVcbiAgICB9KSBhcyB1bmtub3duIGFzIEJlaGF2aW9yPFBhcmFtZXRlcnM8QT4sIEFzeW5jQmVoYXZpb3I8RXh0cmFjdE9ic2VydmFibGVWYWx1ZTxSZXR1cm5UeXBlPEE+Pj4+ICZcbiAgICAgICAgQXN5bmNCZWhhdmlvcjxFeHRyYWN0T2JzZXJ2YWJsZVZhbHVlPFJldHVyblR5cGU8QT4+Pjtcbn1cbiJdfQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtYmVoYXZpb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvYmVoYXZpb3JzL2FzeW5jLWJlaGF2aW9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUE2QiwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUcvSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQTBCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFhekUsTUFBTSxpQkFBaUI7SUFlbkIsWUFBb0IsTUFBUyxFQUFVLE9BQTJCO1FBQTlDLFdBQU0sR0FBTixNQUFNLENBQUc7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQWRsRSxZQUFPLEdBQTRCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRCxnQkFBVyxHQUFvQixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUUvRCxVQUFLLEdBQXNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV4QyxVQUFLLEdBQWdFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV2RixVQUFLLEdBQTJCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUk3Qyx1QkFBa0IsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0lBRTJCLENBQUM7SUFJdEUsT0FBTyxDQUFDLGdCQUFtRCxFQUFFLEtBQWU7UUFDeEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixNQUFNLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9FLElBQUk7WUFDQSxPQUFPLElBQUksQ0FBQyxNQUFNO2lCQUNiLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQztpQkFDcEMsSUFBSSxDQUNELElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDUixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFVLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQ0w7aUJBQ0EsU0FBUyxDQUFDO2dCQUNQLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTztnQkFDdkIsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdEIsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEQsQ0FBQzthQUNKLENBQUMsQ0FBQztTQUNWO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLG1CQUFtQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0M7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQWdCO1FBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDSjtBQUVELE1BQU0sVUFBVSxRQUFRLENBQ3BCLE1BQVMsRUFDVCxVQUFrRSxFQUFFO0lBRXBFLE1BQU0sUUFBUSxHQUFHLElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXhELE1BQU0sRUFBRSxHQUFHLFVBQVUsR0FBRyxNQUFxQjtRQUN6QyxFQUFFLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzdCLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBQ0YsT0FBTywwQkFBMEIsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsT0FBTyxFQUFFLE9BQU87UUFDaEIsTUFBTSxFQUFFLE1BQU07UUFDZCxrQkFBa0IsRUFBRSxRQUFRLENBQUMsa0JBQWtCO1FBQy9DLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsRCxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7UUFDakMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1FBQ3pCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztRQUNyQixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7UUFDckIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO0tBQ3hCLENBQ3VELENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbmFsaXplLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCZWhhdmlvciwgQmVoYXZpb3JDb250ZXh0LCBjcmVhdGVCZWhhdmlvckZyb21GdW5jdGlvbiwgaGFuZGxlQmVoYXZpb3JFcnJvciwgcGlja0JlaGF2aW9yQ2FsbGJhY2tzIH0gZnJvbSAnLi9iZWhhdmlvcic7XG5cbmltcG9ydCB7IEVycm9yRm4sIEV4dHJhY3RPYnNlcnZhYmxlVmFsdWUsIFN1Y2Nlc3NGbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgU2lnbmFsLCBXcml0YWJsZVNpZ25hbCwgY29tcHV0ZWQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jQmVoYXZpb3I8Uj4ge1xuICAgIGxvYWRpbmdEb25lOiBTaWduYWw8Ym9vbGVhbj47XG4gICAgbG9hZGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICAgIHN0YXRlOiBTaWduYWw8J3BlbmRpbmcnIHwgJ2xvYWRpbmcnIHwgJ3N1Y2Nlc3MnIHwgJ2Vycm9yJz47XG4gICAgZXJyb3I/OiBTaWduYWw8RXJyb3I+O1xuICAgIHZhbHVlPzogU2lnbmFsPFI+O1xuICAgIGV4ZWN1dGUoc3VjY2Vzcz86IFN1Y2Nlc3NGbjxSPiwgZXJyb3I/OiBFcnJvckZuKTogdm9pZDtcbiAgICBleGVjdXRlKGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxSPik6IHZvaWQ7XG4gICAgZXhlY3V0ZShzdWNjZXNzT3JDb250ZXh0OiBTdWNjZXNzRm48Uj4gfCBCZWhhdmlvckNvbnRleHQ8Uj4sIGVycm9yPzogRXJyb3JGbik6IHZvaWQ7XG59XG5cbmNsYXNzIEFzeW5jQmVoYXZpb3JJbXBsPFQsIEEgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPFQ+PiBpbXBsZW1lbnRzIEFzeW5jQmVoYXZpb3I8VD4ge1xuICAgIGxvYWRpbmc6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIGxvYWRpbmdEb25lOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiAhdGhpcy5sb2FkaW5nKCkpO1xuXG4gICAgdmFsdWU6IFdyaXRhYmxlU2lnbmFsPFQ+ID0gc2lnbmFsKG51bGwpO1xuXG4gICAgc3RhdGU6IFdyaXRhYmxlU2lnbmFsPCdwZW5kaW5nJyB8ICdsb2FkaW5nJyB8ICdzdWNjZXNzJyB8ICdlcnJvcic+ID0gc2lnbmFsKCdwZW5kaW5nJyk7XG5cbiAgICBlcnJvcj86IFdyaXRhYmxlU2lnbmFsPEVycm9yPiA9IHNpZ25hbChudWxsKTtcblxuICAgIGV4ZWN1dGVQYXJhbXM6IFBhcmFtZXRlcnM8QT47XG5cbiAgICB0YWtlVW50aWxEZXN0cm95ZWQgPSB0YWtlVW50aWxEZXN0cm95ZWQoKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9uOiBBLCBwcml2YXRlIGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxUPikge31cblxuICAgIGV4ZWN1dGUoc3VjY2Vzcz86IFN1Y2Nlc3NGbjxUPiwgZXJyb3I/OiBFcnJvckZuKTogdm9pZDtcbiAgICBleGVjdXRlKGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxUPik6IHZvaWQ7XG4gICAgZXhlY3V0ZShzdWNjZXNzT3JDb250ZXh0OiBTdWNjZXNzRm48VD4gfCBCZWhhdmlvckNvbnRleHQ8VD4sIGVycm9yPzogRXJyb3JGbik6IHZvaWQge1xuICAgICAgICB0aGlzLnNldExvYWRpbmdTdGF0ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5zdGF0ZS5zZXQoJ2xvYWRpbmcnKTtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gcGlja0JlaGF2aW9yQ2FsbGJhY2tzKHRoaXMuY29udGV4dCwgc3VjY2Vzc09yQ29udGV4dCwgZXJyb3IpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uXG4gICAgICAgICAgICAgICAgLmFwcGx5KHVuZGVmaW5lZCwgdGhpcy5leGVjdXRlUGFyYW1zKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRha2VVbnRpbERlc3Ryb3llZCxcbiAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlIGFzIFQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zZXQoJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGNhbGxiYWNrcy5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zZXQoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yLnNldChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVCZWhhdmlvckVycm9yKGVycm9yLCBjYWxsYmFja3MuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLnNldCgnZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3Iuc2V0KGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIGhhbmRsZUJlaGF2aW9yRXJyb3IoZXJyb3IsIGNhbGxiYWNrcy5lcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRMb2FkaW5nU3RhdGUobG9hZGluZzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGxvYWRpbmcpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUFzeW5jPEEgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4gPSAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4+KFxuICAgIGFjdGlvbjogQSxcbiAgICBjb250ZXh0OiBCZWhhdmlvckNvbnRleHQ8RXh0cmFjdE9ic2VydmFibGVWYWx1ZTxSZXR1cm5UeXBlPEE+Pj4gPSB7fVxuKSB7XG4gICAgY29uc3QgYmVoYXZpb3IgPSBuZXcgQXN5bmNCZWhhdmlvckltcGwoYWN0aW9uLCBjb250ZXh0KTtcblxuICAgIGNvbnN0IGZuID0gZnVuY3Rpb24gKC4uLnBhcmFtczogUGFyYW1ldGVyczxBPikge1xuICAgICAgICBmblsnZXhlY3V0ZVBhcmFtcyddID0gcGFyYW1zO1xuICAgICAgICByZXR1cm4gZm47XG4gICAgfTtcbiAgICByZXR1cm4gY3JlYXRlQmVoYXZpb3JGcm9tRnVuY3Rpb24oZm4sIHtcbiAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZDogYmVoYXZpb3IudGFrZVVudGlsRGVzdHJveWVkLFxuICAgICAgICBleGVjdXRlOiBiZWhhdmlvci5leGVjdXRlLmJpbmQoZm4pLFxuICAgICAgICBzZXRMb2FkaW5nU3RhdGU6IGJlaGF2aW9yLnNldExvYWRpbmdTdGF0ZS5iaW5kKGZuKSxcbiAgICAgICAgbG9hZGluZ0RvbmU6IGJlaGF2aW9yLmxvYWRpbmdEb25lLFxuICAgICAgICBsb2FkaW5nOiBiZWhhdmlvci5sb2FkaW5nLFxuICAgICAgICBzdGF0ZTogYmVoYXZpb3Iuc3RhdGUsXG4gICAgICAgIGVycm9yOiBiZWhhdmlvci5lcnJvcixcbiAgICAgICAgdmFsdWU6IGJlaGF2aW9yLnZhbHVlXG4gICAgfSkgYXMgdW5rbm93biBhcyBCZWhhdmlvcjxQYXJhbWV0ZXJzPEE+LCBBc3luY0JlaGF2aW9yPEV4dHJhY3RPYnNlcnZhYmxlVmFsdWU8UmV0dXJuVHlwZTxBPj4+PiAmXG4gICAgICAgIEFzeW5jQmVoYXZpb3I8RXh0cmFjdE9ic2VydmFibGVWYWx1ZTxSZXR1cm5UeXBlPEE+Pj47XG59XG4iXX0=
@@ -5,7 +5,7 @@ export function createBehaviorFromFunction(fn, extraApi = {}) {
5
5
  fn[BEHAVIOR] = true;
6
6
  Object.keys(extraApi).forEach(key => {
7
7
  const value = extraApi[key];
8
- Object.assign(fn, { [key]: isFunction(value) ? value.bind(fn) : value });
8
+ Object.assign(fn, { [key]: value });
9
9
  });
10
10
  return fn;
11
11
  }
@@ -39,4 +39,4 @@ export function handleBehaviorError(error, errorFn) {
39
39
  defaultErrorHandler && defaultErrorHandler(error);
40
40
  }
41
41
  }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoYXZpb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvYmVoYXZpb3JzL2JlaGF2aW9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFnQnBDLE1BQU0sVUFBVSwwQkFBMEIsQ0FDdEMsRUFBVyxFQUNYLFdBQWMsRUFBTztJQUVwQixFQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxFQUF3QixDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLGFBQWlDLEVBQ2pDLGdCQUFtRCxFQUNuRCxLQUFlO0lBRWYsSUFBSSxTQUF1QixDQUFDO0lBQzVCLElBQUksT0FBZ0IsQ0FBQztJQUNyQixJQUFJLGdCQUFnQixFQUFFO1FBQ2xCLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDOUIsU0FBUyxHQUFHLGdCQUFnQixDQUFDO1lBQzdCLE9BQU8sR0FBRyxLQUFLLENBQUM7U0FDbkI7YUFBTTtZQUNILFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDckMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztTQUNwQztLQUNKO1NBQU07UUFDSCxPQUFPLEdBQUcsS0FBSyxDQUFDO0tBQ25CO0lBQ0QsT0FBTztRQUNILE9BQU8sRUFBRSxTQUFTLElBQUksYUFBYSxFQUFFLE9BQU87UUFDNUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxhQUFhLEVBQUUsS0FBSztLQUN6QyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFZLEVBQUUsT0FBZ0I7SUFDOUQsSUFBSSxPQUFPLEVBQUU7UUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbEI7U0FBTTtRQUNILE1BQU0sbUJBQW1CLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztRQUNyRCxtQkFBbUIsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNyRDtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQHRldGh5cy9jZGsvaXMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEVycm9ySGFuZGxlciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBFcnJvckZuLCBTdWNjZXNzRm4gfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQkVIQVZJT1IgPSBTeW1ib2woJ0JFSEFWSU9SJyk7XG5cbmV4cG9ydCB0eXBlIEJlaGF2aW9yPFAgZXh0ZW5kcyBBcnJheTxhbnk+LCBSPiA9ICguLi5hcmdzOiBQKSA9PiBSICYge1xuICAgIFtCRUhBVklPUl06IHRydWU7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEJlaGF2aW9yQ29udGV4dDxSPiB7XG4gICAgc3VjY2Vzcz86IFN1Y2Nlc3NGbjxSPjtcbiAgICBlcnJvcj86IEVycm9yRm47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCZWhhdmlvckZyb21GdW5jdGlvbjxQIGV4dGVuZHMgYW55W10sIFI+KGZuOiAoKSA9PiBSKTogQmVoYXZpb3I8UCwgUj47XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmVoYXZpb3JGcm9tRnVuY3Rpb248UCBleHRlbmRzIGFueVtdLCBSLCBVIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgIGZuOiAoKSA9PiBSLFxuICAgIGV4dHJhQXBpOiBVXG4pOiBCZWhhdmlvcjxQLCBSPiAmIFU7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmVoYXZpb3JGcm9tRnVuY3Rpb248UCBleHRlbmRzIGFueVtdLCBSLCBVIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fT4oXG4gICAgZm46ICgpID0+IFIsXG4gICAgZXh0cmFBcGk6IFUgPSB7fSBhcyBVXG4pOiBCZWhhdmlvcjxQLCBSPiAmIFUge1xuICAgIChmbiBhcyBhbnkpW0JFSEFWSU9SXSA9IHRydWU7XG4gICAgT2JqZWN0LmtleXMoZXh0cmFBcGkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBleHRyYUFwaVtrZXldO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZuLCB7IFtrZXldOiBpc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmJpbmQoZm4pIDogdmFsdWUgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZuIGFzIEJlaGF2aW9yPFAsIFI+ICYgVTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBpY2tCZWhhdmlvckNhbGxiYWNrczxSPihcbiAgICBiZWZvcmVDb250ZXh0OiBCZWhhdmlvckNvbnRleHQ8Uj4sXG4gICAgc3VjY2Vzc09yQ29udGV4dDogU3VjY2Vzc0ZuPFI+IHwgQmVoYXZpb3JDb250ZXh0PFI+LFxuICAgIGVycm9yPzogRXJyb3JGblxuKSB7XG4gICAgbGV0IHN1Y2Nlc3NGbjogU3VjY2Vzc0ZuPFI+O1xuICAgIGxldCBlcnJvckZuOiBFcnJvckZuO1xuICAgIGlmIChzdWNjZXNzT3JDb250ZXh0KSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHN1Y2Nlc3NPckNvbnRleHQpKSB7XG4gICAgICAgICAgICBzdWNjZXNzRm4gPSBzdWNjZXNzT3JDb250ZXh0O1xuICAgICAgICAgICAgZXJyb3JGbiA9IGVycm9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VjY2Vzc0ZuID0gc3VjY2Vzc09yQ29udGV4dC5zdWNjZXNzO1xuICAgICAgICAgICAgZXJyb3JGbiA9IHN1Y2Nlc3NPckNvbnRleHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvckZuID0gZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NGbiB8fCBiZWZvcmVDb250ZXh0Py5zdWNjZXNzLFxuICAgICAgICBlcnJvcjogZXJyb3JGbiB8fCBiZWZvcmVDb250ZXh0Py5lcnJvclxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVCZWhhdmlvckVycm9yKGVycm9yOiBFcnJvciwgZXJyb3JGbjogRXJyb3JGbikge1xuICAgIGlmIChlcnJvckZuKSB7XG4gICAgICAgIGVycm9yRm4oZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRFcnJvckhhbmRsZXIgPSBnZXREZWZhdWx0RXJyb3JIYW5kbGVyKCk7XG4gICAgICAgIGRlZmF1bHRFcnJvckhhbmRsZXIgJiYgZGVmYXVsdEVycm9ySGFuZGxlcihlcnJvcik7XG4gICAgfVxufVxuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoYXZpb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvYmVoYXZpb3JzL2JlaGF2aW9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFnQnBDLE1BQU0sVUFBVSwwQkFBMEIsQ0FDdEMsRUFBVyxFQUNYLFdBQWMsRUFBTztJQUVwQixFQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sRUFBd0IsQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUNqQyxhQUFpQyxFQUNqQyxnQkFBbUQsRUFDbkQsS0FBZTtJQUVmLElBQUksU0FBdUIsQ0FBQztJQUM1QixJQUFJLE9BQWdCLENBQUM7SUFDckIsSUFBSSxnQkFBZ0IsRUFBRTtRQUNsQixJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQzlCLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztZQUM3QixPQUFPLEdBQUcsS0FBSyxDQUFDO1NBQ25CO2FBQU07WUFDSCxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1lBQ3JDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7U0FDcEM7S0FDSjtTQUFNO1FBQ0gsT0FBTyxHQUFHLEtBQUssQ0FBQztLQUNuQjtJQUNELE9BQU87UUFDSCxPQUFPLEVBQUUsU0FBUyxJQUFJLGFBQWEsRUFBRSxPQUFPO1FBQzVDLEtBQUssRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLEtBQUs7S0FDekMsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBWSxFQUFFLE9BQWdCO0lBQzlELElBQUksT0FBTyxFQUFFO1FBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2xCO1NBQU07UUFDSCxNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFDckQsbUJBQW1CLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDckQ7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0B0ZXRoeXMvY2RrL2lzJztcbmltcG9ydCB7IGdldERlZmF1bHRFcnJvckhhbmRsZXIgfSBmcm9tICcuL2Vycm9yLWhhbmRsZXInO1xuaW1wb3J0IHsgRXJyb3JGbiwgU3VjY2Vzc0ZuIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IEJFSEFWSU9SID0gU3ltYm9sKCdCRUhBVklPUicpO1xuXG5leHBvcnQgdHlwZSBCZWhhdmlvcjxQIGV4dGVuZHMgQXJyYXk8YW55PiwgUj4gPSAoLi4uYXJnczogUCkgPT4gUiAmIHtcbiAgICBbQkVIQVZJT1JdOiB0cnVlO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBCZWhhdmlvckNvbnRleHQ8Uj4ge1xuICAgIHN1Y2Nlc3M/OiBTdWNjZXNzRm48Uj47XG4gICAgZXJyb3I/OiBFcnJvckZuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmVoYXZpb3JGcm9tRnVuY3Rpb248UCBleHRlbmRzIGFueVtdLCBSPihmbjogKCkgPT4gUik6IEJlaGF2aW9yPFAsIFI+O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJlaGF2aW9yRnJvbUZ1bmN0aW9uPFAgZXh0ZW5kcyBhbnlbXSwgUiwgVSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICBmbjogKCkgPT4gUixcbiAgICBleHRyYUFwaTogVVxuKTogQmVoYXZpb3I8UCwgUj4gJiBVO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJlaGF2aW9yRnJvbUZ1bmN0aW9uPFAgZXh0ZW5kcyBhbnlbXSwgUiwgVSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30+KFxuICAgIGZuOiAoKSA9PiBSLFxuICAgIGV4dHJhQXBpOiBVID0ge30gYXMgVVxuKTogQmVoYXZpb3I8UCwgUj4gJiBVIHtcbiAgICAoZm4gYXMgYW55KVtCRUhBVklPUl0gPSB0cnVlO1xuICAgIE9iamVjdC5rZXlzKGV4dHJhQXBpKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXh0cmFBcGlba2V5XTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmbiwgeyBba2V5XTogdmFsdWUgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZuIGFzIEJlaGF2aW9yPFAsIFI+ICYgVTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBpY2tCZWhhdmlvckNhbGxiYWNrczxSPihcbiAgICBiZWZvcmVDb250ZXh0OiBCZWhhdmlvckNvbnRleHQ8Uj4sXG4gICAgc3VjY2Vzc09yQ29udGV4dDogU3VjY2Vzc0ZuPFI+IHwgQmVoYXZpb3JDb250ZXh0PFI+LFxuICAgIGVycm9yPzogRXJyb3JGblxuKSB7XG4gICAgbGV0IHN1Y2Nlc3NGbjogU3VjY2Vzc0ZuPFI+O1xuICAgIGxldCBlcnJvckZuOiBFcnJvckZuO1xuICAgIGlmIChzdWNjZXNzT3JDb250ZXh0KSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHN1Y2Nlc3NPckNvbnRleHQpKSB7XG4gICAgICAgICAgICBzdWNjZXNzRm4gPSBzdWNjZXNzT3JDb250ZXh0O1xuICAgICAgICAgICAgZXJyb3JGbiA9IGVycm9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VjY2Vzc0ZuID0gc3VjY2Vzc09yQ29udGV4dC5zdWNjZXNzO1xuICAgICAgICAgICAgZXJyb3JGbiA9IHN1Y2Nlc3NPckNvbnRleHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvckZuID0gZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NGbiB8fCBiZWZvcmVDb250ZXh0Py5zdWNjZXNzLFxuICAgICAgICBlcnJvcjogZXJyb3JGbiB8fCBiZWZvcmVDb250ZXh0Py5lcnJvclxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVCZWhhdmlvckVycm9yKGVycm9yOiBFcnJvciwgZXJyb3JGbjogRXJyb3JGbikge1xuICAgIGlmIChlcnJvckZuKSB7XG4gICAgICAgIGVycm9yRm4oZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRFcnJvckhhbmRsZXIgPSBnZXREZWZhdWx0RXJyb3JIYW5kbGVyKCk7XG4gICAgICAgIGRlZmF1bHRFcnJvckhhbmRsZXIgJiYgZGVmYXVsdEVycm9ySGFuZGxlcihlcnJvcik7XG4gICAgfVxufVxuIl19
@@ -1,6 +1,8 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { finalize, tap } from 'rxjs/operators';
3
3
  import { isFunction } from '@tethys/cdk/is';
4
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
+ import { signal, computed } from '@angular/core';
4
6
 
5
7
  function runInZone(zone) {
6
8
  return source => {
@@ -30,7 +32,7 @@ function createBehaviorFromFunction(fn, extraApi = {}) {
30
32
  fn[BEHAVIOR] = true;
31
33
  Object.keys(extraApi).forEach(key => {
32
34
  const value = extraApi[key];
33
- Object.assign(fn, { [key]: isFunction(value) ? value.bind(fn) : value });
35
+ Object.assign(fn, { [key]: value });
34
36
  });
35
37
  return fn;
36
38
  }
@@ -69,43 +71,45 @@ class AsyncBehaviorImpl {
69
71
  constructor(action, context) {
70
72
  this.action = action;
71
73
  this.context = context;
72
- this.loadingDone = true;
73
- this.loading = false;
74
- this.state = 'pending';
74
+ this.loading = signal(false);
75
+ this.loadingDone = computed(() => !this.loading());
76
+ this.value = signal(null);
77
+ this.state = signal('pending');
78
+ this.error = signal(null);
79
+ this.takeUntilDestroyed = takeUntilDestroyed();
75
80
  }
76
81
  execute(successOrContext, error) {
77
82
  this.setLoadingState(true);
78
- this.state = 'loading';
83
+ this.state.set('loading');
79
84
  const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);
80
85
  try {
81
86
  return this.action
82
87
  .apply(undefined, this.executeParams)
83
- .pipe(finalize(() => {
88
+ .pipe(this.takeUntilDestroyed, finalize(() => {
84
89
  this.setLoadingState(false);
85
90
  }), tap(value => {
86
- this.value = value;
87
- this.state = 'success';
91
+ this.value.set(value);
92
+ this.state.set('success');
88
93
  this.setLoadingState(false);
89
94
  }))
90
95
  .subscribe({
91
96
  next: callbacks.success,
92
97
  error: error => {
93
- this.state = 'error';
94
- this.error = error;
98
+ this.state.set('error');
99
+ this.error.set(error);
95
100
  handleBehaviorError(error, callbacks.error);
96
101
  }
97
102
  });
98
103
  }
99
104
  catch (error) {
100
- this.state = 'error';
101
- this.error = error;
105
+ this.state.set('error');
106
+ this.error.set(error);
102
107
  this.setLoadingState(false);
103
108
  handleBehaviorError(error, callbacks.error);
104
109
  }
105
110
  }
106
111
  setLoadingState(loading) {
107
- this.loading = loading;
108
- this.loadingDone = !loading;
112
+ this.loading.set(loading);
109
113
  }
110
114
  }
111
115
  function useAsync(action, context = {}) {
@@ -117,8 +121,9 @@ function useAsync(action, context = {}) {
117
121
  return createBehaviorFromFunction(fn, {
118
122
  context: context,
119
123
  action: action,
120
- execute: behavior.execute,
121
- setLoadingState: behavior.setLoadingState,
124
+ takeUntilDestroyed: behavior.takeUntilDestroyed,
125
+ execute: behavior.execute.bind(fn),
126
+ setLoadingState: behavior.setLoadingState.bind(fn),
122
127
  loadingDone: behavior.loadingDone,
123
128
  loading: behavior.loading,
124
129
  state: behavior.state,
@@ -131,34 +136,35 @@ class ActionBehaviorImpl {
131
136
  constructor(action, context) {
132
137
  this.action = action;
133
138
  this.context = context;
134
- this.saving = false;
139
+ this.saving = signal(false);
140
+ this.takeUntilDestroyed = takeUntilDestroyed();
135
141
  }
136
142
  execute(successOrContext, error) {
137
- if (this.saving) {
143
+ if (this.saving()) {
138
144
  return;
139
145
  }
140
- this.saving = true;
146
+ this.saving.set(true);
141
147
  const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);
142
148
  try {
143
149
  return this.action
144
150
  .apply(undefined, this.executeParams)
145
- .pipe(finalize(() => {
146
- this.saving = false;
151
+ .pipe(this.takeUntilDestroyed, finalize(() => {
152
+ this.saving.set(false);
147
153
  this.executeParams = undefined;
148
154
  }), tap(value => {
149
- this.saving = false;
155
+ this.saving.set(false);
150
156
  this.executeParams = undefined;
151
157
  }))
152
158
  .subscribe({
153
159
  next: callbacks?.success,
154
160
  error: (error) => {
155
- this.saving = false;
161
+ this.saving.set(false);
156
162
  handleBehaviorError(error, callbacks.error);
157
163
  }
158
164
  });
159
165
  }
160
166
  catch (error) {
161
- this.saving = false;
167
+ this.saving.set(false);
162
168
  handleBehaviorError(error, callbacks.error);
163
169
  }
164
170
  }
@@ -172,7 +178,8 @@ function useAction(action, context = {}) {
172
178
  return createBehaviorFromFunction(fn, {
173
179
  context: context,
174
180
  action: action,
175
- execute: behavior.execute,
181
+ takeUntilDestroyed: behavior.takeUntilDestroyed,
182
+ execute: behavior.execute.bind(fn),
176
183
  saving: behavior.saving
177
184
  });
178
185
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tethys-cdk-behaviors.mjs","sources":["../../../cdk/behaviors/run-in-zone.ts","../../../cdk/behaviors/error-handler.ts","../../../cdk/behaviors/behavior.ts","../../../cdk/behaviors/async-behavior.ts","../../../cdk/behaviors/action-behavior.ts","../../../cdk/behaviors/tethys-cdk-behaviors.ts"],"sourcesContent":["import { NgZone } from '@angular/core';\nimport { Observable, OperatorFunction } from 'rxjs';\n\nexport function runInZone<T>(zone: NgZone): OperatorFunction<T, T> {\n return source => {\n return new Observable(observer => {\n const onNext = (value: T) => zone.run(() => observer.next(value));\n const onError = (e: Error) => zone.run(() => observer.error(e));\n const onComplete = () => zone.run(() => observer.complete());\n return source.subscribe({\n next: onNext,\n error: onError,\n complete: onComplete\n });\n });\n };\n}\n","export type DefaultErrorHandler = (error: Error) => void;\n\nlet _defaultErrorHandler: DefaultErrorHandler = (error: Error) => {};\n\nexport function setDefaultErrorHandler(defaultErrorHandler: DefaultErrorHandler) {\n _defaultErrorHandler = defaultErrorHandler;\n}\n\nexport function getDefaultErrorHandler() {\n return _defaultErrorHandler;\n}\n","import { isFunction } from '@tethys/cdk/is';\nimport { getDefaultErrorHandler } from './error-handler';\nimport { ErrorFn, SuccessFn } from './types';\n\nconst BEHAVIOR = Symbol('BEHAVIOR');\n\nexport type Behavior<P extends Array<any>, R> = (...args: P) => R & {\n [BEHAVIOR]: true;\n};\n\nexport interface BehaviorContext<R> {\n success?: SuccessFn<R>;\n error?: ErrorFn;\n}\n\nexport function createBehaviorFromFunction<P extends any[], R>(fn: () => R): Behavior<P, R>;\nexport function createBehaviorFromFunction<P extends any[], R, U extends Record<string, unknown>>(\n fn: () => R,\n extraApi: U\n): Behavior<P, R> & U;\nexport function createBehaviorFromFunction<P extends any[], R, U extends Record<string, unknown> = {}>(\n fn: () => R,\n extraApi: U = {} as U\n): Behavior<P, R> & U {\n (fn as any)[BEHAVIOR] = true;\n Object.keys(extraApi).forEach(key => {\n const value = extraApi[key];\n Object.assign(fn, { [key]: isFunction(value) ? value.bind(fn) : value });\n });\n return fn as Behavior<P, R> & U;\n}\n\nexport function pickBehaviorCallbacks<R>(\n beforeContext: BehaviorContext<R>,\n successOrContext: SuccessFn<R> | BehaviorContext<R>,\n error?: ErrorFn\n) {\n let successFn: SuccessFn<R>;\n let errorFn: ErrorFn;\n if (successOrContext) {\n if (isFunction(successOrContext)) {\n successFn = successOrContext;\n errorFn = error;\n } else {\n successFn = successOrContext.success;\n errorFn = successOrContext.error;\n }\n } else {\n errorFn = error;\n }\n return {\n success: successFn || beforeContext?.success,\n error: errorFn || beforeContext?.error\n };\n}\n\nexport function handleBehaviorError(error: Error, errorFn: ErrorFn) {\n if (errorFn) {\n errorFn(error);\n } else {\n const defaultErrorHandler = getDefaultErrorHandler();\n defaultErrorHandler && defaultErrorHandler(error);\n }\n}\n","import { Observable, of } from 'rxjs';\nimport { finalize, tap, catchError } from 'rxjs/operators';\nimport { Behavior, BehaviorContext, createBehaviorFromFunction, handleBehaviorError, pickBehaviorCallbacks } from './behavior';\nimport { getDefaultErrorHandler } from './error-handler';\nimport { ErrorFn, ExtractObservableValue, SuccessFn } from './types';\n\nexport interface AsyncBehavior<R> {\n loadingDone: boolean;\n loading: boolean;\n state: 'pending' | 'loading' | 'success' | 'error';\n error?: Error;\n value?: R;\n execute(success?: SuccessFn<R>, error?: ErrorFn): void;\n execute(context: BehaviorContext<R>): void;\n execute(successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): void;\n}\n\nclass AsyncBehaviorImpl<T, A extends (...args: any) => Observable<T>> implements AsyncBehavior<T> {\n loadingDone = true;\n\n loading = false;\n\n value: T;\n\n state: 'pending' | 'loading' | 'success' | 'error' = 'pending';\n\n error?: Error;\n\n private executeParams: Parameters<A>;\n\n constructor(private action: A, private context: BehaviorContext<T>) {}\n\n execute(success?: SuccessFn<T>, error?: ErrorFn): void;\n execute(context: BehaviorContext<T>): void;\n execute(successOrContext: SuccessFn<T> | BehaviorContext<T>, error?: ErrorFn): void {\n this.setLoadingState(true);\n this.state = 'loading';\n const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);\n try {\n return this.action\n .apply(undefined, this.executeParams)\n .pipe(\n finalize(() => {\n this.setLoadingState(false);\n }),\n tap(value => {\n this.value = value as T;\n this.state = 'success';\n this.setLoadingState(false);\n })\n )\n .subscribe({\n next: callbacks.success,\n error: error => {\n this.state = 'error';\n this.error = error;\n handleBehaviorError(error, callbacks.error);\n }\n });\n } catch (error) {\n this.state = 'error';\n this.error = error;\n this.setLoadingState(false);\n handleBehaviorError(error, callbacks.error);\n }\n }\n\n setLoadingState(loading: boolean) {\n this.loading = loading;\n this.loadingDone = !loading;\n }\n}\n\nexport function useAsync<A extends (...args: any) => Observable<any> = (...args: any) => Observable<any>>(\n action: A,\n context: BehaviorContext<ExtractObservableValue<ReturnType<A>>> = {}\n) {\n const behavior = new AsyncBehaviorImpl(action, context);\n\n const fn = function (...params: Parameters<A>) {\n fn['executeParams'] = params;\n return fn;\n };\n return createBehaviorFromFunction(fn, {\n context: context,\n action: action,\n execute: behavior.execute,\n setLoadingState: behavior.setLoadingState,\n loadingDone: behavior.loadingDone,\n loading: behavior.loading,\n state: behavior.state,\n error: behavior.error,\n value: behavior.value\n }) as unknown as Behavior<Parameters<A>, AsyncBehavior<ExtractObservableValue<ReturnType<A>>>> &\n AsyncBehavior<ExtractObservableValue<ReturnType<A>>>;\n}\n","import { Observable, of, throwError } from 'rxjs';\nimport { catchError, finalize, tap } from 'rxjs/operators';\nimport { Behavior, BehaviorContext, createBehaviorFromFunction, handleBehaviorError, pickBehaviorCallbacks } from './behavior';\nimport { getDefaultErrorHandler } from './error-handler';\nimport { ErrorFn, ExtractObservableValue, SuccessFn } from './types';\n\ninterface ActionBehavior<R> {\n saving: boolean;\n\n execute(success?: SuccessFn<R>, error?: ErrorFn): void;\n execute(context: BehaviorContext<R>): void;\n execute(successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): void;\n}\n\nclass ActionBehaviorImpl<R, A extends (...args: any) => Observable<R>> implements ActionBehavior<R> {\n saving = false;\n\n private executeParams: Parameters<A>;\n constructor(private action: A, private context: BehaviorContext<R>) {}\n\n execute(success?: SuccessFn<R>, error?: ErrorFn): void;\n execute(context: BehaviorContext<R>): void;\n execute(successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): void {\n if (this.saving) {\n return;\n }\n this.saving = true;\n const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);\n try {\n return this.action\n .apply(undefined, this.executeParams)\n .pipe(\n finalize(() => {\n this.saving = false;\n this.executeParams = undefined;\n }),\n tap(value => {\n this.saving = false;\n this.executeParams = undefined;\n })\n )\n .subscribe({\n next: callbacks?.success,\n error: (error: Error) => {\n this.saving = false;\n handleBehaviorError(error, callbacks.error);\n }\n });\n } catch (error) {\n this.saving = false;\n handleBehaviorError(error, callbacks.error);\n }\n }\n}\n\nexport function useAction<A extends (...args: any) => Observable<any> = (...args: any) => Observable<any>>(\n action: A,\n context: BehaviorContext<ExtractObservableValue<ReturnType<A>>> = {}\n) {\n const behavior = new ActionBehaviorImpl(action, context);\n\n const fn = function (...params: Parameters<A>) {\n fn['executeParams'] = params;\n return fn;\n };\n return createBehaviorFromFunction(fn, {\n context: context,\n action: action,\n execute: behavior.execute,\n saving: behavior.saving\n }) as unknown as Behavior<Parameters<A>, ActionBehavior<ExtractObservableValue<ReturnType<A>>>> &\n ActionBehavior<ExtractObservableValue<ReturnType<A>>>;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAGM,SAAU,SAAS,CAAI,IAAY,EAAA;IACrC,OAAO,MAAM,IAAG;AACZ,QAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAG;YAC7B,MAAM,MAAM,GAAG,CAAC,KAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,CAAC,CAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7D,OAAO,MAAM,CAAC,SAAS,CAAC;AACpB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,UAAU;AACvB,aAAA,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACP,KAAC,CAAC;AACN;;ACdA,IAAI,oBAAoB,GAAwB,CAAC,KAAY,KAAI,GAAG,CAAC;AAE/D,SAAU,sBAAsB,CAAC,mBAAwC,EAAA;IAC3E,oBAAoB,GAAG,mBAAmB,CAAC;AAC/C,CAAC;SAEe,sBAAsB,GAAA;AAClC,IAAA,OAAO,oBAAoB,CAAC;AAChC;;ACNA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;SAgBpB,0BAA0B,CACtC,EAAW,EACX,WAAc,EAAO,EAAA;AAEpB,IAAA,EAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AAChC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAA,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;AAC7E,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,EAAwB,CAAC;AACpC,CAAC;SAEe,qBAAqB,CACjC,aAAiC,EACjC,gBAAmD,EACnD,KAAe,EAAA;AAEf,IAAA,IAAI,SAAuB,CAAC;AAC5B,IAAA,IAAI,OAAgB,CAAC;AACrB,IAAA,IAAI,gBAAgB,EAAE;AAClB,QAAA,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE;YAC9B,SAAS,GAAG,gBAAgB,CAAC;YAC7B,OAAO,GAAG,KAAK,CAAC;AACnB,SAAA;AAAM,aAAA;AACH,YAAA,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC;AACrC,YAAA,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC;AACpC,SAAA;AACJ,KAAA;AAAM,SAAA;QACH,OAAO,GAAG,KAAK,CAAC;AACnB,KAAA;IACD,OAAO;AACH,QAAA,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,OAAO;AAC5C,QAAA,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,KAAK;KACzC,CAAC;AACN,CAAC;AAEe,SAAA,mBAAmB,CAAC,KAAY,EAAE,OAAgB,EAAA;AAC9D,IAAA,IAAI,OAAO,EAAE;QACT,OAAO,CAAC,KAAK,CAAC,CAAC;AAClB,KAAA;AAAM,SAAA;AACH,QAAA,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAC;AACrD,QAAA,mBAAmB,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACrD,KAAA;AACL;;AC9CA,MAAM,iBAAiB,CAAA;IAanB,WAAoB,CAAA,MAAS,EAAU,OAA2B,EAAA;QAA9C,IAAM,CAAA,MAAA,GAAN,MAAM,CAAG;QAAU,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAZlE,IAAW,CAAA,WAAA,GAAG,IAAI,CAAC;QAEnB,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAIhB,IAAK,CAAA,KAAA,GAAgD,SAAS,CAAC;KAMO;IAItE,OAAO,CAAC,gBAAmD,EAAE,KAAe,EAAA;AACxE,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AACvB,QAAA,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAC/E,IAAI;YACA,OAAO,IAAI,CAAC,MAAM;AACb,iBAAA,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC;AACpC,iBAAA,IAAI,CACD,QAAQ,CAAC,MAAK;AACV,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,aAAC,CAAC,EACF,GAAG,CAAC,KAAK,IAAG;AACR,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAU,CAAC;AACxB,gBAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AACvB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,aAAC,CAAC,CACL;AACA,iBAAA,SAAS,CAAC;gBACP,IAAI,EAAE,SAAS,CAAC,OAAO;gBACvB,KAAK,EAAE,KAAK,IAAG;AACX,oBAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACrB,oBAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,oBAAA,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;iBAC/C;AACJ,aAAA,CAAC,CAAC;AACV,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACrB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC5B,YAAA,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/C,SAAA;KACJ;AAED,IAAA,eAAe,CAAC,OAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,CAAC;KAC/B;AACJ,CAAA;SAEe,QAAQ,CACpB,MAAS,EACT,UAAkE,EAAE,EAAA;IAEpE,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExD,IAAA,MAAM,EAAE,GAAG,UAAU,GAAG,MAAqB,EAAA;AACzC,QAAA,EAAE,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC;AAC7B,QAAA,OAAO,EAAE,CAAC;AACd,KAAC,CAAC;IACF,OAAO,0BAA0B,CAAC,EAAE,EAAE;AAClC,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;AACxB,KAAA,CACuD,CAAC;AAC7D;;ACjFA,MAAM,kBAAkB,CAAA;IAIpB,WAAoB,CAAA,MAAS,EAAU,OAA2B,EAAA;QAA9C,IAAM,CAAA,MAAA,GAAN,MAAM,CAAG;QAAU,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAHlE,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;KAGuD;IAItE,OAAO,CAAC,gBAAmD,EAAE,KAAe,EAAA;QACxE,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,QAAA,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAC/E,IAAI;YACA,OAAO,IAAI,CAAC,MAAM;AACb,iBAAA,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC;AACpC,iBAAA,IAAI,CACD,QAAQ,CAAC,MAAK;AACV,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AACnC,aAAC,CAAC,EACF,GAAG,CAAC,KAAK,IAAG;AACR,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AACnC,aAAC,CAAC,CACL;AACA,iBAAA,SAAS,CAAC;gBACP,IAAI,EAAE,SAAS,EAAE,OAAO;AACxB,gBAAA,KAAK,EAAE,CAAC,KAAY,KAAI;AACpB,oBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,oBAAA,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;iBAC/C;AACJ,aAAA,CAAC,CAAC;AACV,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAA,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/C,SAAA;KACJ;AACJ,CAAA;SAEe,SAAS,CACrB,MAAS,EACT,UAAkE,EAAE,EAAA;IAEpE,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzD,IAAA,MAAM,EAAE,GAAG,UAAU,GAAG,MAAqB,EAAA;AACzC,QAAA,EAAE,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC;AAC7B,QAAA,OAAO,EAAE,CAAC;AACd,KAAC,CAAC;IACF,OAAO,0BAA0B,CAAC,EAAE,EAAE;AAClC,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;AAC1B,KAAA,CACwD,CAAC;AAC9D;;ACxEA;;AAEG;;;;"}
1
+ {"version":3,"file":"tethys-cdk-behaviors.mjs","sources":["../../../cdk/behaviors/run-in-zone.ts","../../../cdk/behaviors/error-handler.ts","../../../cdk/behaviors/behavior.ts","../../../cdk/behaviors/async-behavior.ts","../../../cdk/behaviors/action-behavior.ts","../../../cdk/behaviors/tethys-cdk-behaviors.ts"],"sourcesContent":["import { NgZone } from '@angular/core';\nimport { Observable, OperatorFunction } from 'rxjs';\n\nexport function runInZone<T>(zone: NgZone): OperatorFunction<T, T> {\n return source => {\n return new Observable(observer => {\n const onNext = (value: T) => zone.run(() => observer.next(value));\n const onError = (e: Error) => zone.run(() => observer.error(e));\n const onComplete = () => zone.run(() => observer.complete());\n return source.subscribe({\n next: onNext,\n error: onError,\n complete: onComplete\n });\n });\n };\n}\n","export type DefaultErrorHandler = (error: Error) => void;\n\nlet _defaultErrorHandler: DefaultErrorHandler = (error: Error) => {};\n\nexport function setDefaultErrorHandler(defaultErrorHandler: DefaultErrorHandler) {\n _defaultErrorHandler = defaultErrorHandler;\n}\n\nexport function getDefaultErrorHandler() {\n return _defaultErrorHandler;\n}\n","import { isFunction } from '@tethys/cdk/is';\nimport { getDefaultErrorHandler } from './error-handler';\nimport { ErrorFn, SuccessFn } from './types';\n\nconst BEHAVIOR = Symbol('BEHAVIOR');\n\nexport type Behavior<P extends Array<any>, R> = (...args: P) => R & {\n [BEHAVIOR]: true;\n};\n\nexport interface BehaviorContext<R> {\n success?: SuccessFn<R>;\n error?: ErrorFn;\n}\n\nexport function createBehaviorFromFunction<P extends any[], R>(fn: () => R): Behavior<P, R>;\nexport function createBehaviorFromFunction<P extends any[], R, U extends Record<string, unknown>>(\n fn: () => R,\n extraApi: U\n): Behavior<P, R> & U;\nexport function createBehaviorFromFunction<P extends any[], R, U extends Record<string, unknown> = {}>(\n fn: () => R,\n extraApi: U = {} as U\n): Behavior<P, R> & U {\n (fn as any)[BEHAVIOR] = true;\n Object.keys(extraApi).forEach(key => {\n const value = extraApi[key];\n Object.assign(fn, { [key]: value });\n });\n return fn as Behavior<P, R> & U;\n}\n\nexport function pickBehaviorCallbacks<R>(\n beforeContext: BehaviorContext<R>,\n successOrContext: SuccessFn<R> | BehaviorContext<R>,\n error?: ErrorFn\n) {\n let successFn: SuccessFn<R>;\n let errorFn: ErrorFn;\n if (successOrContext) {\n if (isFunction(successOrContext)) {\n successFn = successOrContext;\n errorFn = error;\n } else {\n successFn = successOrContext.success;\n errorFn = successOrContext.error;\n }\n } else {\n errorFn = error;\n }\n return {\n success: successFn || beforeContext?.success,\n error: errorFn || beforeContext?.error\n };\n}\n\nexport function handleBehaviorError(error: Error, errorFn: ErrorFn) {\n if (errorFn) {\n errorFn(error);\n } else {\n const defaultErrorHandler = getDefaultErrorHandler();\n defaultErrorHandler && defaultErrorHandler(error);\n }\n}\n","import { Observable } from 'rxjs';\nimport { finalize, tap } from 'rxjs/operators';\nimport { Behavior, BehaviorContext, createBehaviorFromFunction, handleBehaviorError, pickBehaviorCallbacks } from './behavior';\n\nimport { ErrorFn, ExtractObservableValue, SuccessFn } from './types';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Signal, WritableSignal, computed, signal } from '@angular/core';\n\nexport interface AsyncBehavior<R> {\n loadingDone: Signal<boolean>;\n loading: Signal<boolean>;\n state: Signal<'pending' | 'loading' | 'success' | 'error'>;\n error?: Signal<Error>;\n value?: Signal<R>;\n execute(success?: SuccessFn<R>, error?: ErrorFn): void;\n execute(context: BehaviorContext<R>): void;\n execute(successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): void;\n}\n\nclass AsyncBehaviorImpl<T, A extends (...args: any) => Observable<T>> implements AsyncBehavior<T> {\n loading: WritableSignal<boolean> = signal(false);\n\n loadingDone: Signal<boolean> = computed(() => !this.loading());\n\n value: WritableSignal<T> = signal(null);\n\n state: WritableSignal<'pending' | 'loading' | 'success' | 'error'> = signal('pending');\n\n error?: WritableSignal<Error> = signal(null);\n\n executeParams: Parameters<A>;\n\n takeUntilDestroyed = takeUntilDestroyed();\n\n constructor(private action: A, private context: BehaviorContext<T>) {}\n\n execute(success?: SuccessFn<T>, error?: ErrorFn): void;\n execute(context: BehaviorContext<T>): void;\n execute(successOrContext: SuccessFn<T> | BehaviorContext<T>, error?: ErrorFn): void {\n this.setLoadingState(true);\n this.state.set('loading');\n const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);\n try {\n return this.action\n .apply(undefined, this.executeParams)\n .pipe(\n this.takeUntilDestroyed,\n finalize(() => {\n this.setLoadingState(false);\n }),\n tap(value => {\n this.value.set(value as T);\n this.state.set('success');\n this.setLoadingState(false);\n })\n )\n .subscribe({\n next: callbacks.success,\n error: error => {\n this.state.set('error');\n this.error.set(error);\n handleBehaviorError(error, callbacks.error);\n }\n });\n } catch (error) {\n this.state.set('error');\n this.error.set(error);\n this.setLoadingState(false);\n handleBehaviorError(error, callbacks.error);\n }\n }\n\n setLoadingState(loading: boolean) {\n this.loading.set(loading);\n }\n}\n\nexport function useAsync<A extends (...args: any) => Observable<any> = (...args: any) => Observable<any>>(\n action: A,\n context: BehaviorContext<ExtractObservableValue<ReturnType<A>>> = {}\n) {\n const behavior = new AsyncBehaviorImpl(action, context);\n\n const fn = function (...params: Parameters<A>) {\n fn['executeParams'] = params;\n return fn;\n };\n return createBehaviorFromFunction(fn, {\n context: context,\n action: action,\n takeUntilDestroyed: behavior.takeUntilDestroyed,\n execute: behavior.execute.bind(fn),\n setLoadingState: behavior.setLoadingState.bind(fn),\n loadingDone: behavior.loadingDone,\n loading: behavior.loading,\n state: behavior.state,\n error: behavior.error,\n value: behavior.value\n }) as unknown as Behavior<Parameters<A>, AsyncBehavior<ExtractObservableValue<ReturnType<A>>>> &\n AsyncBehavior<ExtractObservableValue<ReturnType<A>>>;\n}\n","import { Signal, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\nimport { finalize, tap } from 'rxjs/operators';\nimport { Behavior, BehaviorContext, createBehaviorFromFunction, handleBehaviorError, pickBehaviorCallbacks } from './behavior';\nimport { ErrorFn, ExtractObservableValue, SuccessFn } from './types';\n\ninterface ActionBehavior<R> {\n saving: Signal<boolean>;\n\n execute(success?: SuccessFn<R>, error?: ErrorFn): void;\n execute(context: BehaviorContext<R>): void;\n execute(successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): void;\n}\n\nclass ActionBehaviorImpl<R, A extends (...args: any) => Observable<R>> implements ActionBehavior<R> {\n saving = signal(false);\n\n executeParams: Parameters<A>;\n\n takeUntilDestroyed = takeUntilDestroyed();\n\n constructor(private action: A, private context: BehaviorContext<R>) {}\n\n execute(success?: SuccessFn<R>, error?: ErrorFn): void;\n execute(context: BehaviorContext<R>): void;\n execute(successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): void {\n if (this.saving()) {\n return;\n }\n this.saving.set(true);\n const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);\n try {\n return this.action\n .apply(undefined, this.executeParams)\n .pipe(\n this.takeUntilDestroyed,\n finalize(() => {\n this.saving.set(false);\n this.executeParams = undefined;\n }),\n tap(value => {\n this.saving.set(false);\n this.executeParams = undefined;\n })\n )\n .subscribe({\n next: callbacks?.success,\n error: (error: Error) => {\n this.saving.set(false);\n handleBehaviorError(error, callbacks.error);\n }\n });\n } catch (error) {\n this.saving.set(false);\n handleBehaviorError(error, callbacks.error);\n }\n }\n}\n\nexport function useAction<A extends (...args: any) => Observable<any> = (...args: any) => Observable<any>>(\n action: A,\n context: BehaviorContext<ExtractObservableValue<ReturnType<A>>> = {}\n) {\n const behavior = new ActionBehaviorImpl(action, context);\n\n const fn = function (...params: Parameters<A>) {\n fn['executeParams'] = params;\n return fn;\n };\n return createBehaviorFromFunction(fn, {\n context: context,\n action: action,\n takeUntilDestroyed: behavior.takeUntilDestroyed,\n execute: behavior.execute.bind(fn),\n saving: behavior.saving\n }) as unknown as Behavior<Parameters<A>, ActionBehavior<ExtractObservableValue<ReturnType<A>>>> &\n ActionBehavior<ExtractObservableValue<ReturnType<A>>>;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tethys/cdk",
3
- "version": "16.0.5",
3
+ "version": "16.1.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^16.0.0",
6
6
  "@angular/core": "^16.0.0",