@tethys/cdk 15.0.0-next.4 → 15.0.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.
@@ -0,0 +1,11 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Behavior, BehaviorContext } from './behavior';
3
+ import { ErrorFn, ExtractObservableValue, SuccessFn } from './types';
4
+ interface ActionBehavior<R> {
5
+ saving: boolean;
6
+ execute(success?: SuccessFn<R>, error?: ErrorFn): void;
7
+ execute(context: BehaviorContext<R>): void;
8
+ execute(successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): void;
9
+ }
10
+ export declare function useAction<A extends (...args: any) => Observable<any> = (...args: any) => Observable<any>>(action: A, context?: BehaviorContext<ExtractObservableValue<ReturnType<A>>>): Behavior<Parameters<A>, ActionBehavior<ExtractObservableValue<ReturnType<A>>>> & ActionBehavior<ExtractObservableValue<ReturnType<A>>>;
11
+ export {};
@@ -0,0 +1,14 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Behavior, BehaviorContext } from './behavior';
3
+ import { ErrorFn, ExtractObservableValue, SuccessFn } from './types';
4
+ export interface AsyncBehavior<R> {
5
+ loadingDone: boolean;
6
+ loading: boolean;
7
+ state: 'pending' | 'loading' | 'success' | 'error';
8
+ error?: Error;
9
+ value?: R;
10
+ execute(success?: SuccessFn<R>, error?: ErrorFn): void;
11
+ execute(context: BehaviorContext<R>): void;
12
+ execute(successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): void;
13
+ }
14
+ export declare function useAsync<A extends (...args: any) => Observable<any> = (...args: any) => Observable<any>>(action: A, context?: BehaviorContext<ExtractObservableValue<ReturnType<A>>>): Behavior<Parameters<A>, AsyncBehavior<ExtractObservableValue<ReturnType<A>>>> & AsyncBehavior<ExtractObservableValue<ReturnType<A>>>;
@@ -0,0 +1,17 @@
1
+ import { ErrorFn, SuccessFn } from './types';
2
+ declare const BEHAVIOR: unique symbol;
3
+ export type Behavior<P extends Array<any>, R> = (...args: P) => R & {
4
+ [BEHAVIOR]: true;
5
+ };
6
+ export interface BehaviorContext<R> {
7
+ success?: SuccessFn<R>;
8
+ error?: ErrorFn;
9
+ }
10
+ export declare function createBehaviorFromFunction<P extends any[], R>(fn: () => R): Behavior<P, R>;
11
+ export declare function createBehaviorFromFunction<P extends any[], R, U extends Record<string, unknown>>(fn: () => R, extraApi: U): Behavior<P, R> & U;
12
+ export declare function pickBehaviorCallbacks<R>(beforeContext: BehaviorContext<R>, successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): {
13
+ success: SuccessFn<R>;
14
+ error: ErrorFn;
15
+ };
16
+ export declare function handleBehaviorError(error: Error, errorFn: ErrorFn): void;
17
+ export {};
@@ -1,4 +1,4 @@
1
1
  export * from './run-in-zone';
2
- export * from './use-async';
3
- export * from './use-action';
2
+ export * from './async-behavior';
3
+ export * from './action-behavior';
4
4
  export * from './error-handler';
@@ -1,2 +1,5 @@
1
1
  import { Observable } from 'rxjs';
2
2
  export type ExtractObservableValue<T> = T extends Observable<infer V> ? V : T;
3
+ export type ParametersWithAppend<Fn extends (...args: any[]) => any, NextArg> = Fn extends (...args: infer PrevArg) => any ? [...PrevArg, NextArg] : never;
4
+ export type SuccessFn<R> = (result: R) => void;
5
+ export type ErrorFn = (error: Error) => void;
@@ -0,0 +1,52 @@
1
+ import { finalize, tap } from 'rxjs/operators';
2
+ import { createBehaviorFromFunction, handleBehaviorError, pickBehaviorCallbacks } from './behavior';
3
+ class ActionBehaviorImpl {
4
+ constructor(action, context) {
5
+ this.action = action;
6
+ this.context = context;
7
+ this.saving = false;
8
+ }
9
+ execute(successOrContext, error) {
10
+ if (this.saving) {
11
+ return;
12
+ }
13
+ this.saving = true;
14
+ const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);
15
+ try {
16
+ return this.action
17
+ .apply(undefined, this.executeParams)
18
+ .pipe(finalize(() => {
19
+ this.saving = false;
20
+ this.executeParams = undefined;
21
+ }), tap(value => {
22
+ this.saving = false;
23
+ this.executeParams = undefined;
24
+ }))
25
+ .subscribe({
26
+ next: callbacks?.success,
27
+ error: (error) => {
28
+ this.saving = false;
29
+ handleBehaviorError(error, callbacks.error);
30
+ }
31
+ });
32
+ }
33
+ catch (error) {
34
+ this.saving = false;
35
+ handleBehaviorError(error, callbacks.error);
36
+ }
37
+ }
38
+ }
39
+ export function useAction(action, context = {}) {
40
+ const behavior = new ActionBehaviorImpl(action, context);
41
+ const fn = function (...params) {
42
+ fn['executeParams'] = params;
43
+ return fn;
44
+ };
45
+ return createBehaviorFromFunction(fn, {
46
+ context: context,
47
+ action: action,
48
+ execute: behavior.execute,
49
+ saving: behavior.saving
50
+ });
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJlaGF2aW9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY2RrL2JlaGF2aW9ycy9hY3Rpb24tYmVoYXZpb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFjLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQTZCLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBWS9ILE1BQU0sa0JBQWtCO0lBSXBCLFlBQW9CLE1BQVMsRUFBVSxPQUEyQjtRQUE5QyxXQUFNLEdBQU4sTUFBTSxDQUFHO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFIbEUsV0FBTSxHQUFHLEtBQUssQ0FBQztJQUdzRCxDQUFDO0lBSXRFLE9BQU8sQ0FBQyxnQkFBbUQsRUFBRSxLQUFlO1FBQ3hFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0UsSUFBSTtZQUNBLE9BQU8sSUFBSSxDQUFDLE1BQU07aUJBQ2IsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO2lCQUNwQyxJQUFJLENBQ0QsUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7WUFDbkMsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FDTDtpQkFDQSxTQUFTLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPO2dCQUN4QixLQUFLLEVBQUUsQ0FBQyxLQUFZLEVBQUUsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLG1CQUFtQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7YUFDSixDQUFDLENBQUM7U0FDVjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7Q0FDSjtBQUVELE1BQU0sVUFBVSxTQUFTLENBQ3JCLE1BQVMsRUFDVCxVQUFrRSxFQUFFO0lBRXBFLE1BQU0sUUFBUSxHQUFHLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXpELE1BQU0sRUFBRSxHQUFHLFVBQVMsR0FBRyxNQUFxQjtRQUN4QyxFQUFFLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzdCLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBQ0YsT0FBUSwwQkFBMEIsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsT0FBTyxFQUFFLE9BQU87UUFDaEIsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87UUFDekIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0tBQzFCLENBQ3dELENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3IsIEJlaGF2aW9yQ29udGV4dCwgY3JlYXRlQmVoYXZpb3JGcm9tRnVuY3Rpb24sIGhhbmRsZUJlaGF2aW9yRXJyb3IsIHBpY2tCZWhhdmlvckNhbGxiYWNrcyB9IGZyb20gJy4vYmVoYXZpb3InO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEVycm9ySGFuZGxlciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBFcnJvckZuLCBFeHRyYWN0T2JzZXJ2YWJsZVZhbHVlLCBTdWNjZXNzRm4gfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIEFjdGlvbkJlaGF2aW9yPFI+IHtcbiAgICBzYXZpbmc6IGJvb2xlYW47XG5cbiAgICBleGVjdXRlKHN1Y2Nlc3M/OiBTdWNjZXNzRm48Uj4sIGVycm9yPzogRXJyb3JGbik6IHZvaWQ7XG4gICAgZXhlY3V0ZShjb250ZXh0OiBCZWhhdmlvckNvbnRleHQ8Uj4pOiB2b2lkO1xuICAgIGV4ZWN1dGUoc3VjY2Vzc09yQ29udGV4dDogU3VjY2Vzc0ZuPFI+IHwgQmVoYXZpb3JDb250ZXh0PFI+LCBlcnJvcj86IEVycm9yRm4pOiB2b2lkO1xufVxuXG5jbGFzcyBBY3Rpb25CZWhhdmlvckltcGw8UiwgQSBleHRlbmRzICguLi5hcmdzOiBhbnkpID0+IE9ic2VydmFibGU8Uj4+IGltcGxlbWVudHMgQWN0aW9uQmVoYXZpb3I8Uj4ge1xuICAgIHNhdmluZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBleGVjdXRlUGFyYW1zOiBQYXJhbWV0ZXJzPEE+O1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9uOiBBLCBwcml2YXRlIGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxSPikge31cblxuICAgIGV4ZWN1dGUoc3VjY2Vzcz86IFN1Y2Nlc3NGbjxSPiwgZXJyb3I/OiBFcnJvckZuKTogdm9pZDtcbiAgICBleGVjdXRlKGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxSPik6IHZvaWQ7XG4gICAgZXhlY3V0ZShzdWNjZXNzT3JDb250ZXh0OiBTdWNjZXNzRm48Uj4gfCBCZWhhdmlvckNvbnRleHQ8Uj4sIGVycm9yPzogRXJyb3JGbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zYXZpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNhdmluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHBpY2tCZWhhdmlvckNhbGxiYWNrcyh0aGlzLmNvbnRleHQsIHN1Y2Nlc3NPckNvbnRleHQsIGVycm9yKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGlvblxuICAgICAgICAgICAgICAgIC5hcHBseSh1bmRlZmluZWQsIHRoaXMuZXhlY3V0ZVBhcmFtcylcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVBhcmFtcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlUGFyYW1zID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogY2FsbGJhY2tzPy5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJlaGF2aW9yRXJyb3IoZXJyb3IsIGNhbGxiYWNrcy5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBoYW5kbGVCZWhhdmlvckVycm9yKGVycm9yLCBjYWxsYmFja3MuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQWN0aW9uPEEgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4gPSAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4+KFxuICAgIGFjdGlvbjogQSxcbiAgICBjb250ZXh0OiBCZWhhdmlvckNvbnRleHQ8RXh0cmFjdE9ic2VydmFibGVWYWx1ZTxSZXR1cm5UeXBlPEE+Pj4gPSB7fVxuKSB7XG4gICAgY29uc3QgYmVoYXZpb3IgPSBuZXcgQWN0aW9uQmVoYXZpb3JJbXBsKGFjdGlvbiwgY29udGV4dCk7XG5cbiAgICBjb25zdCBmbiA9IGZ1bmN0aW9uKC4uLnBhcmFtczogUGFyYW1ldGVyczxBPikge1xuICAgICAgICBmblsnZXhlY3V0ZVBhcmFtcyddID0gcGFyYW1zO1xuICAgICAgICByZXR1cm4gZm47XG4gICAgfTtcbiAgICByZXR1cm4gKGNyZWF0ZUJlaGF2aW9yRnJvbUZ1bmN0aW9uKGZuLCB7XG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBleGVjdXRlOiBiZWhhdmlvci5leGVjdXRlLFxuICAgICAgICBzYXZpbmc6IGJlaGF2aW9yLnNhdmluZ1xuICAgIH0pIGFzIHVua25vd24pIGFzIEJlaGF2aW9yPFBhcmFtZXRlcnM8QT4sIEFjdGlvbkJlaGF2aW9yPEV4dHJhY3RPYnNlcnZhYmxlVmFsdWU8UmV0dXJuVHlwZTxBPj4+PiAmXG4gICAgICAgIEFjdGlvbkJlaGF2aW9yPEV4dHJhY3RPYnNlcnZhYmxlVmFsdWU8UmV0dXJuVHlwZTxBPj4+O1xufVxuIl19
@@ -0,0 +1,64 @@
1
+ import { finalize, tap } from 'rxjs/operators';
2
+ import { createBehaviorFromFunction, handleBehaviorError, pickBehaviorCallbacks } from './behavior';
3
+ class AsyncBehaviorImpl {
4
+ constructor(action, context) {
5
+ this.action = action;
6
+ this.context = context;
7
+ this.loadingDone = true;
8
+ this.loading = false;
9
+ this.state = 'pending';
10
+ }
11
+ execute(successOrContext, error) {
12
+ this.setLoadingState(true);
13
+ this.state = 'loading';
14
+ const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);
15
+ try {
16
+ return this.action
17
+ .apply(undefined, this.executeParams)
18
+ .pipe(finalize(() => {
19
+ this.setLoadingState(false);
20
+ }), tap(value => {
21
+ this.value = value;
22
+ this.state = 'success';
23
+ this.setLoadingState(false);
24
+ }))
25
+ .subscribe({
26
+ next: callbacks.success,
27
+ error: error => {
28
+ this.state = 'error';
29
+ this.error = error;
30
+ handleBehaviorError(error, callbacks.error);
31
+ }
32
+ });
33
+ }
34
+ catch (error) {
35
+ this.state = 'error';
36
+ this.error = error;
37
+ this.setLoadingState(false);
38
+ handleBehaviorError(error, callbacks.error);
39
+ }
40
+ }
41
+ setLoadingState(loading) {
42
+ this.loading = loading;
43
+ this.loadingDone = !loading;
44
+ }
45
+ }
46
+ export function useAsync(action, context = {}) {
47
+ const behavior = new AsyncBehaviorImpl(action, context);
48
+ const fn = function (...params) {
49
+ fn['executeParams'] = params;
50
+ return fn;
51
+ };
52
+ return createBehaviorFromFunction(fn, {
53
+ context: context,
54
+ action: action,
55
+ execute: behavior.execute,
56
+ setLoadingState: behavior.setLoadingState,
57
+ loadingDone: behavior.loadingDone,
58
+ loading: behavior.loading,
59
+ state: behavior.state,
60
+ error: behavior.error,
61
+ value: behavior.value
62
+ });
63
+ }
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtYmVoYXZpb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvYmVoYXZpb3JzL2FzeW5jLWJlaGF2aW9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUE2QiwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQWUvSCxNQUFNLGlCQUFpQjtJQWFuQixZQUFvQixNQUFTLEVBQVUsT0FBMkI7UUFBOUMsV0FBTSxHQUFOLE1BQU0sQ0FBRztRQUFVLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBWmxFLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFJaEIsVUFBSyxHQUFnRCxTQUFTLENBQUM7SUFNTSxDQUFDO0lBSXRFLE9BQU8sQ0FBQyxnQkFBbUQsRUFBRSxLQUFlO1FBQ3hFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDdkIsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRSxJQUFJO1lBQ0EsT0FBTyxJQUFJLENBQUMsTUFBTTtpQkFDYixLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUM7aUJBQ3BDLElBQUksQ0FDRCxRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNSLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBVSxDQUFDO2dCQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FDTDtpQkFDQSxTQUFTLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO29CQUNuQixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO2FBQ0osQ0FBQyxDQUFDO1NBQ1Y7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBZ0I7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUNoQyxDQUFDO0NBQ0o7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFTLEVBQ1QsVUFBa0UsRUFBRTtJQUVwRSxNQUFNLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV4RCxNQUFNLEVBQUUsR0FBRyxVQUFTLEdBQUcsTUFBcUI7UUFDeEMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUM3QixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUMsQ0FBQztJQUNGLE9BQVEsMEJBQTBCLENBQUMsRUFBRSxFQUFFO1FBQ25DLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1FBQ3pCLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZTtRQUN6QyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7UUFDakMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1FBQ3pCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztRQUNyQixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7UUFDckIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO0tBQ3hCLENBQ3VELENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgdGFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3IsIEJlaGF2aW9yQ29udGV4dCwgY3JlYXRlQmVoYXZpb3JGcm9tRnVuY3Rpb24sIGhhbmRsZUJlaGF2aW9yRXJyb3IsIHBpY2tCZWhhdmlvckNhbGxiYWNrcyB9IGZyb20gJy4vYmVoYXZpb3InO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEVycm9ySGFuZGxlciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBFcnJvckZuLCBFeHRyYWN0T2JzZXJ2YWJsZVZhbHVlLCBTdWNjZXNzRm4gfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBBc3luY0JlaGF2aW9yPFI+IHtcbiAgICBsb2FkaW5nRG9uZTogYm9vbGVhbjtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgIHN0YXRlOiAncGVuZGluZycgfCAnbG9hZGluZycgfCAnc3VjY2VzcycgfCAnZXJyb3InO1xuICAgIGVycm9yPzogRXJyb3I7XG4gICAgdmFsdWU/OiBSO1xuICAgIGV4ZWN1dGUoc3VjY2Vzcz86IFN1Y2Nlc3NGbjxSPiwgZXJyb3I/OiBFcnJvckZuKTogdm9pZDtcbiAgICBleGVjdXRlKGNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxSPik6IHZvaWQ7XG4gICAgZXhlY3V0ZShzdWNjZXNzT3JDb250ZXh0OiBTdWNjZXNzRm48Uj4gfCBCZWhhdmlvckNvbnRleHQ8Uj4sIGVycm9yPzogRXJyb3JGbik6IHZvaWQ7XG59XG5cbmNsYXNzIEFzeW5jQmVoYXZpb3JJbXBsPFQsIEEgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPFQ+PiBpbXBsZW1lbnRzIEFzeW5jQmVoYXZpb3I8VD4ge1xuICAgIGxvYWRpbmdEb25lID0gdHJ1ZTtcblxuICAgIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIHZhbHVlOiBUO1xuXG4gICAgc3RhdGU6ICdwZW5kaW5nJyB8ICdsb2FkaW5nJyB8ICdzdWNjZXNzJyB8ICdlcnJvcicgPSAncGVuZGluZyc7XG5cbiAgICBlcnJvcj86IEVycm9yO1xuXG4gICAgcHJpdmF0ZSBleGVjdXRlUGFyYW1zOiBQYXJhbWV0ZXJzPEE+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhY3Rpb246IEEsIHByaXZhdGUgY29udGV4dDogQmVoYXZpb3JDb250ZXh0PFQ+KSB7fVxuXG4gICAgZXhlY3V0ZShzdWNjZXNzPzogU3VjY2Vzc0ZuPFQ+LCBlcnJvcj86IEVycm9yRm4pOiB2b2lkO1xuICAgIGV4ZWN1dGUoY29udGV4dDogQmVoYXZpb3JDb250ZXh0PFQ+KTogdm9pZDtcbiAgICBleGVjdXRlKHN1Y2Nlc3NPckNvbnRleHQ6IFN1Y2Nlc3NGbjxUPiB8IEJlaGF2aW9yQ29udGV4dDxUPiwgZXJyb3I/OiBFcnJvckZuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKHRydWUpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2xvYWRpbmcnO1xuICAgICAgICBjb25zdCBjYWxsYmFja3MgPSBwaWNrQmVoYXZpb3JDYWxsYmFja3ModGhpcy5jb250ZXh0LCBzdWNjZXNzT3JDb250ZXh0LCBlcnJvcik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25cbiAgICAgICAgICAgICAgICAuYXBwbHkodW5kZWZpbmVkLCB0aGlzLmV4ZWN1dGVQYXJhbXMpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUgYXMgVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRpbmdTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBjYWxsYmFja3Muc3VjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQmVoYXZpb3JFcnJvcihlcnJvciwgY2FsbGJhY2tzLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB0aGlzLnNldExvYWRpbmdTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICBoYW5kbGVCZWhhdmlvckVycm9yKGVycm9yLCBjYWxsYmFja3MuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0TG9hZGluZ1N0YXRlKGxvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gbG9hZGluZztcbiAgICAgICAgdGhpcy5sb2FkaW5nRG9uZSA9ICFsb2FkaW5nO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUFzeW5jPEEgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4gPSAoLi4uYXJnczogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4+KFxuICAgIGFjdGlvbjogQSxcbiAgICBjb250ZXh0OiBCZWhhdmlvckNvbnRleHQ8RXh0cmFjdE9ic2VydmFibGVWYWx1ZTxSZXR1cm5UeXBlPEE+Pj4gPSB7fVxuKSB7XG4gICAgY29uc3QgYmVoYXZpb3IgPSBuZXcgQXN5bmNCZWhhdmlvckltcGwoYWN0aW9uLCBjb250ZXh0KTtcblxuICAgIGNvbnN0IGZuID0gZnVuY3Rpb24oLi4ucGFyYW1zOiBQYXJhbWV0ZXJzPEE+KSB7XG4gICAgICAgIGZuWydleGVjdXRlUGFyYW1zJ10gPSBwYXJhbXM7XG4gICAgICAgIHJldHVybiBmbjtcbiAgICB9O1xuICAgIHJldHVybiAoY3JlYXRlQmVoYXZpb3JGcm9tRnVuY3Rpb24oZm4sIHtcbiAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGV4ZWN1dGU6IGJlaGF2aW9yLmV4ZWN1dGUsXG4gICAgICAgIHNldExvYWRpbmdTdGF0ZTogYmVoYXZpb3Iuc2V0TG9hZGluZ1N0YXRlLFxuICAgICAgICBsb2FkaW5nRG9uZTogYmVoYXZpb3IubG9hZGluZ0RvbmUsXG4gICAgICAgIGxvYWRpbmc6IGJlaGF2aW9yLmxvYWRpbmcsXG4gICAgICAgIHN0YXRlOiBiZWhhdmlvci5zdGF0ZSxcbiAgICAgICAgZXJyb3I6IGJlaGF2aW9yLmVycm9yLFxuICAgICAgICB2YWx1ZTogYmVoYXZpb3IudmFsdWVcbiAgICB9KSBhcyB1bmtub3duKSBhcyBCZWhhdmlvcjxQYXJhbWV0ZXJzPEE+LCBBc3luY0JlaGF2aW9yPEV4dHJhY3RPYnNlcnZhYmxlVmFsdWU8UmV0dXJuVHlwZTxBPj4+PiAmXG4gICAgICAgIEFzeW5jQmVoYXZpb3I8RXh0cmFjdE9ic2VydmFibGVWYWx1ZTxSZXR1cm5UeXBlPEE+Pj47XG59XG4iXX0=
@@ -0,0 +1,42 @@
1
+ import { isFunction } from '@tethys/cdk/is';
2
+ import { getDefaultErrorHandler } from './error-handler';
3
+ const BEHAVIOR = Symbol('BEHAVIOR');
4
+ export function createBehaviorFromFunction(fn, extraApi = {}) {
5
+ fn[BEHAVIOR] = true;
6
+ Object.keys(extraApi).forEach(key => {
7
+ const value = extraApi[key];
8
+ Object.assign(fn, { [key]: isFunction(value) ? value.bind(fn) : value });
9
+ });
10
+ return fn;
11
+ }
12
+ export function pickBehaviorCallbacks(beforeContext, successOrContext, error) {
13
+ let successFn;
14
+ let errorFn;
15
+ if (successOrContext) {
16
+ if (isFunction(successOrContext)) {
17
+ successFn = successOrContext;
18
+ errorFn = error;
19
+ }
20
+ else {
21
+ successFn = successOrContext.success;
22
+ errorFn = successOrContext.error;
23
+ }
24
+ }
25
+ else {
26
+ errorFn = error;
27
+ }
28
+ return {
29
+ success: successFn || beforeContext?.success,
30
+ error: errorFn || beforeContext?.error
31
+ };
32
+ }
33
+ export function handleBehaviorError(error, errorFn) {
34
+ if (errorFn) {
35
+ errorFn(error);
36
+ }
37
+ else {
38
+ const defaultErrorHandler = getDefaultErrorHandler();
39
+ defaultErrorHandler && defaultErrorHandler(error);
40
+ }
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoYXZpb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvYmVoYXZpb3JzL2JlaGF2aW9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFrQnBDLE1BQU0sVUFBVSwwQkFBMEIsQ0FDdEMsRUFBVyxFQUNYLFdBQWMsRUFBTztJQUVwQixFQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxFQUF3QixDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLGFBQWlDLEVBQ2pDLGdCQUFtRCxFQUNuRCxLQUFlO0lBRWYsSUFBSSxTQUF1QixDQUFDO0lBQzVCLElBQUksT0FBZ0IsQ0FBQztJQUNyQixJQUFJLGdCQUFnQixFQUFFO1FBQ2xCLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDOUIsU0FBUyxHQUFHLGdCQUFnQixDQUFDO1lBQzdCLE9BQU8sR0FBRyxLQUFLLENBQUM7U0FDbkI7YUFBTTtZQUNILFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDckMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztTQUNwQztLQUNKO1NBQU07UUFDSCxPQUFPLEdBQUcsS0FBSyxDQUFDO0tBQ25CO0lBQ0QsT0FBTztRQUNILE9BQU8sRUFBRSxTQUFTLElBQUksYUFBYSxFQUFFLE9BQU87UUFDNUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxhQUFhLEVBQUUsS0FBSztLQUN6QyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFZLEVBQUUsT0FBZ0I7SUFDOUQsSUFBSSxPQUFPLEVBQUU7UUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbEI7U0FBTTtRQUNILE1BQU0sbUJBQW1CLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztRQUNyRCxtQkFBbUIsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNyRDtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQHRldGh5cy9jZGsvaXMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEVycm9ySGFuZGxlciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBFcnJvckZuLCBTdWNjZXNzRm4gfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQkVIQVZJT1IgPSBTeW1ib2woJ0JFSEFWSU9SJyk7XG5cbmV4cG9ydCB0eXBlIEJlaGF2aW9yPFAgZXh0ZW5kcyBBcnJheTxhbnk+LCBSPiA9IChcbiAgICAuLi5hcmdzOiBQXG4pID0+IFIgJiB7XG4gICAgW0JFSEFWSU9SXTogdHJ1ZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmVoYXZpb3JDb250ZXh0PFI+IHtcbiAgICBzdWNjZXNzPzogU3VjY2Vzc0ZuPFI+O1xuICAgIGVycm9yPzogRXJyb3JGbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJlaGF2aW9yRnJvbUZ1bmN0aW9uPFAgZXh0ZW5kcyBhbnlbXSwgUj4oZm46ICgpID0+IFIpOiBCZWhhdmlvcjxQLCBSPjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCZWhhdmlvckZyb21GdW5jdGlvbjxQIGV4dGVuZHMgYW55W10sIFIsIFUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgZm46ICgpID0+IFIsXG4gICAgZXh0cmFBcGk6IFVcbik6IEJlaGF2aW9yPFAsIFI+ICYgVTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCZWhhdmlvckZyb21GdW5jdGlvbjxQIGV4dGVuZHMgYW55W10sIFIsIFUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9PihcbiAgICBmbjogKCkgPT4gUixcbiAgICBleHRyYUFwaTogVSA9IHt9IGFzIFVcbik6IEJlaGF2aW9yPFAsIFI+ICYgVSB7XG4gICAgKGZuIGFzIGFueSlbQkVIQVZJT1JdID0gdHJ1ZTtcbiAgICBPYmplY3Qua2V5cyhleHRyYUFwaSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV4dHJhQXBpW2tleV07XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZm4sIHsgW2tleV06IGlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuYmluZChmbikgOiB2YWx1ZSB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZm4gYXMgQmVoYXZpb3I8UCwgUj4gJiBVO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGlja0JlaGF2aW9yQ2FsbGJhY2tzPFI+KFxuICAgIGJlZm9yZUNvbnRleHQ6IEJlaGF2aW9yQ29udGV4dDxSPixcbiAgICBzdWNjZXNzT3JDb250ZXh0OiBTdWNjZXNzRm48Uj4gfCBCZWhhdmlvckNvbnRleHQ8Uj4sXG4gICAgZXJyb3I/OiBFcnJvckZuXG4pIHtcbiAgICBsZXQgc3VjY2Vzc0ZuOiBTdWNjZXNzRm48Uj47XG4gICAgbGV0IGVycm9yRm46IEVycm9yRm47XG4gICAgaWYgKHN1Y2Nlc3NPckNvbnRleHQpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oc3VjY2Vzc09yQ29udGV4dCkpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NGbiA9IHN1Y2Nlc3NPckNvbnRleHQ7XG4gICAgICAgICAgICBlcnJvckZuID0gZXJyb3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWNjZXNzRm4gPSBzdWNjZXNzT3JDb250ZXh0LnN1Y2Nlc3M7XG4gICAgICAgICAgICBlcnJvckZuID0gc3VjY2Vzc09yQ29udGV4dC5lcnJvcjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yRm4gPSBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2Vzczogc3VjY2Vzc0ZuIHx8IGJlZm9yZUNvbnRleHQ/LnN1Y2Nlc3MsXG4gICAgICAgIGVycm9yOiBlcnJvckZuIHx8IGJlZm9yZUNvbnRleHQ/LmVycm9yXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUJlaGF2aW9yRXJyb3IoZXJyb3I6IEVycm9yLCBlcnJvckZuOiBFcnJvckZuKSB7XG4gICAgaWYgKGVycm9yRm4pIHtcbiAgICAgICAgZXJyb3JGbihlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEVycm9ySGFuZGxlciA9IGdldERlZmF1bHRFcnJvckhhbmRsZXIoKTtcbiAgICAgICAgZGVmYXVsdEVycm9ySGFuZGxlciAmJiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycm9yKTtcbiAgICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  export * from './run-in-zone';
2
- export * from './use-async';
3
- export * from './use-action';
2
+ export * from './async-behavior';
3
+ export * from './action-behavior';
4
4
  export * from './error-handler';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvYmVoYXZpb3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3J1bi1pbi16b25lJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlLWFzeW5jJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlLWFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9yLWhhbmRsZXInO1xuIl19
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvYmVoYXZpb3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ydW4taW4tem9uZSc7XG5leHBvcnQgKiBmcm9tICcuL2FzeW5jLWJlaGF2aW9yJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9uLWJlaGF2aW9yJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3ItaGFuZGxlcic7XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvYmVoYXZpb3JzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIEV4dHJhY3RPYnNlcnZhYmxlVmFsdWU8VD4gPSBUIGV4dGVuZHMgT2JzZXJ2YWJsZTxpbmZlciBWPiA/IFYgOiBUO1xuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvYmVoYXZpb3JzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIEV4dHJhY3RPYnNlcnZhYmxlVmFsdWU8VD4gPSBUIGV4dGVuZHMgT2JzZXJ2YWJsZTxpbmZlciBWPiA/IFYgOiBUO1xuXG5leHBvcnQgdHlwZSBQYXJhbWV0ZXJzV2l0aEFwcGVuZDxGbiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBOZXh0QXJnPiA9IEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIFByZXZBcmcpID0+IGFueVxuICAgID8gWy4uLlByZXZBcmcsIE5leHRBcmddXG4gICAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgU3VjY2Vzc0ZuPFI+ID0gKHJlc3VsdDogUikgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIEVycm9yRm4gPSAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuIl19
@@ -13,9 +13,9 @@ export class HostRenderer extends AbstractElementRenderer {
13
13
  return this.elementRef.nativeElement;
14
14
  }
15
15
  }
16
- HostRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: HostRenderer, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
17
- HostRenderer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: HostRenderer });
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: HostRenderer, decorators: [{
16
+ HostRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: HostRenderer, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
17
+ HostRenderer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: HostRenderer });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: HostRenderer, decorators: [{
19
19
  type: Injectable
20
20
  }] });
21
21
  export function useHostRenderer() {
@@ -11,9 +11,9 @@ export class ThyClickDispatcher extends ThyEventDispatcher {
11
11
  return this.subscribe(auditTimeInMs);
12
12
  }
13
13
  }
14
- ThyClickDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyClickDispatcher, deps: [{ token: DOCUMENT }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
15
- ThyClickDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyClickDispatcher, providedIn: 'root' });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyClickDispatcher, decorators: [{
14
+ ThyClickDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyClickDispatcher, deps: [{ token: DOCUMENT }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
15
+ ThyClickDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyClickDispatcher, providedIn: 'root' });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyClickDispatcher, decorators: [{
17
17
  type: Injectable,
18
18
  args: [{
19
19
  providedIn: 'root'
@@ -51,9 +51,9 @@ export class ThyEventDispatcher {
51
51
  this._event$.complete();
52
52
  }
53
53
  }
54
- ThyEventDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyEventDispatcher, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
55
- ThyEventDispatcher.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.2", type: ThyEventDispatcher, ngImport: i0 });
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyEventDispatcher, decorators: [{
54
+ ThyEventDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyEventDispatcher, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
55
+ ThyEventDispatcher.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ThyEventDispatcher, ngImport: i0 });
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyEventDispatcher, decorators: [{
57
57
  type: Directive
58
58
  }], ctorParameters: function () { return [{ type: Document }, { type: i0.NgZone }, { type: undefined }]; } });
59
59
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Nkay9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDOztBQUU3RCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUcvQixNQUFNLE9BQWdCLGtCQUFrQjtJQU81QixrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQzFELE9BQU8sU0FBUyxDQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQVEsRUFBRSxFQUFFO2dCQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHFCQUFxQjtRQUN6QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNsQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsWUFBc0IsUUFBa0IsRUFBWSxNQUFjLEVBQVUsU0FBaUI7UUFBdkUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFZLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFRO1FBekJyRix3QkFBbUIsR0FBaUIsSUFBSSxDQUFDO1FBRXpDLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBSyxDQUFDO1FBRTNCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztJQXFCaUUsQ0FBQztJQUV2RixTQUFTLENBQUMsZ0JBQXdCLGtCQUFrQjtRQUMxRCxPQUFPLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzdCO1lBQ0Qsa0VBQWtFO1lBQ2xFLGdFQUFnRTtZQUNoRSxNQUFNLFlBQVksR0FDZCxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTNILElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLE9BQU8sR0FBRyxFQUFFO2dCQUNSLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBRTFCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2lCQUNoQztZQUNMLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7OytHQXJEaUIsa0JBQWtCO21HQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEdkMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBhdWRpdFRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IERpcmVjdGl2ZSwgTmdab25lLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuY29uc3QgREVGQVVMVF9FVkVOVF9USU1FID0gMTAwO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUaHlFdmVudERpc3BhdGNoZXI8VCA9IEV2ZW50PiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBfZ2xvYmFsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBfZXZlbnQkID0gbmV3IFN1YmplY3Q8VD4oKTtcblxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbkNvdW50ID0gMDtcblxuICAgIHByaXZhdGUgX2FkZEdsb2JhbExpc3RlbmVyKCkge1xuICAgICAgICB0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24gPSB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUV2ZW50PFQ+KHRoaXMuZG9jdW1lbnQsIHRoaXMuZXZlbnROYW1lKS5zdWJzY3JpYmUoKGV2ZW50OiBUKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnQkLm5leHQoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlbW92ZUdsb2JhbExpc3RlbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZ2xvYmFsU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb247XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGRvY3VtZW50OiBEb2N1bWVudCwgcHJvdGVjdGVkIG5nWm9uZTogTmdab25lLCBwcml2YXRlIGV2ZW50TmFtZTogc3RyaW5nKSB7fVxuXG4gICAgcHJvdGVjdGVkIHN1YnNjcmliZShhdWRpdFRpbWVJbk1zOiBudW1iZXIgPSBERUZBVUxUX0VWRU5UX1RJTUUpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkR2xvYmFsTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgMG1zIGRlbGF5LCB1c2UgYW4gb2JzZXJ2YWJsZSB3aXRob3V0IGF1ZGl0VGltZVxuICAgICAgICAgICAgLy8gc2luY2UgaXQgZG9lcyBhZGQgYSBwZXJjZXB0aWJsZSBkZWxheSBpbiBwcm9jZXNzaW5nIG92ZXJoZWFkLlxuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID1cbiAgICAgICAgICAgICAgICBhdWRpdFRpbWVJbk1zID4gMCA/IHRoaXMuX2V2ZW50JC5waXBlKGF1ZGl0VGltZShhdWRpdFRpbWVJbk1zKSkuc3Vic2NyaWJlKG9ic2VydmVyKSA6IHRoaXMuX2V2ZW50JC5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25Db3VudCsrO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25Db3VudC0tO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb25Db3VudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLl9ldmVudCQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iXX0=
@@ -18,9 +18,9 @@ export class ThyKeyboardDispatcher extends ThyEventDispatcher {
18
18
  return this.subscribe(auditTimeInMs);
19
19
  }
20
20
  }
21
- ThyKeyboardDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyKeyboardDispatcher, deps: [{ token: DOCUMENT }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
22
- ThyKeyboardDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyKeyboardDispatcher, providedIn: 'root' });
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyKeyboardDispatcher, decorators: [{
21
+ ThyKeyboardDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyKeyboardDispatcher, deps: [{ token: DOCUMENT }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
22
+ ThyKeyboardDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyKeyboardDispatcher, providedIn: 'root' });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyKeyboardDispatcher, decorators: [{
24
24
  type: Injectable,
25
25
  args: [{
26
26
  providedIn: 'root'
@@ -52,9 +52,9 @@ export class ThyHotkeyDispatcher extends ThyEventDispatcher {
52
52
  }).pipe(runInZone(this.ngZone));
53
53
  }
54
54
  }
55
- ThyHotkeyDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyHotkeyDispatcher, deps: [{ token: DOCUMENT }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
56
- ThyHotkeyDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyHotkeyDispatcher, providedIn: 'root' });
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyHotkeyDispatcher, decorators: [{
55
+ ThyHotkeyDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyHotkeyDispatcher, deps: [{ token: DOCUMENT }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
56
+ ThyHotkeyDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyHotkeyDispatcher, providedIn: 'root' });
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyHotkeyDispatcher, decorators: [{
58
58
  type: Injectable,
59
59
  args: [{ providedIn: 'root' }]
60
60
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
@@ -38,9 +38,9 @@ export class ThyHotkeyDirective {
38
38
  }
39
39
  }
40
40
  }
41
- ThyHotkeyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyHotkeyDirective, deps: [{ token: DOCUMENT }, { token: i1.ThyHotkeyDispatcher }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
42
- ThyHotkeyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.2", type: ThyHotkeyDirective, selector: "[thyHotkey]", inputs: { thyHotkey: "thyHotkey", thyHotkeyScope: "thyHotkeyScope" }, outputs: { thyHotkeyListener: "thyHotkeyListener" }, ngImport: i0 });
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyHotkeyDirective, decorators: [{
41
+ ThyHotkeyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyHotkeyDirective, deps: [{ token: DOCUMENT }, { token: i1.ThyHotkeyDispatcher }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
42
+ ThyHotkeyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ThyHotkeyDirective, selector: "[thyHotkey]", inputs: { thyHotkey: "thyHotkey", thyHotkeyScope: "thyHotkeyScope" }, outputs: { thyHotkeyListener: "thyHotkeyListener" }, ngImport: i0 });
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyHotkeyDirective, decorators: [{
44
44
  type: Directive,
45
45
  args: [{ selector: '[thyHotkey]' }]
46
46
  }], ctorParameters: function () { return [{ type: Document, decorators: [{
@@ -3,10 +3,10 @@ import { ThyHotkeyDirective } from './hotkey.directive';
3
3
  import * as i0 from "@angular/core";
4
4
  export class ThyHotkeyModule {
5
5
  }
6
- ThyHotkeyModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyHotkeyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
- ThyHotkeyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.2", ngImport: i0, type: ThyHotkeyModule, declarations: [ThyHotkeyDirective], exports: [ThyHotkeyDirective] });
8
- ThyHotkeyModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyHotkeyModule });
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: ThyHotkeyModule, decorators: [{
6
+ ThyHotkeyModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyHotkeyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
+ ThyHotkeyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ThyHotkeyModule, declarations: [ThyHotkeyDirective], exports: [ThyHotkeyDirective] });
8
+ ThyHotkeyModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyHotkeyModule });
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyHotkeyModule, decorators: [{
10
10
  type: NgModule,
11
11
  args: [{
12
12
  imports: [],
@@ -1,5 +1,6 @@
1
1
  import { Observable } from 'rxjs';
2
- import { finalize, catchError, tap } from 'rxjs/operators';
2
+ import { finalize, tap } from 'rxjs/operators';
3
+ import { isFunction } from '@tethys/cdk/is';
3
4
 
4
5
  function runInZone(zone) {
5
6
  return source => {
@@ -24,86 +25,156 @@ function getDefaultErrorHandler() {
24
25
  return _defaultErrorHandler;
25
26
  }
26
27
 
27
- class AsyncBehavior {
28
- constructor(action) {
28
+ const BEHAVIOR = Symbol('BEHAVIOR');
29
+ function createBehaviorFromFunction(fn, extraApi = {}) {
30
+ fn[BEHAVIOR] = true;
31
+ Object.keys(extraApi).forEach(key => {
32
+ const value = extraApi[key];
33
+ Object.assign(fn, { [key]: isFunction(value) ? value.bind(fn) : value });
34
+ });
35
+ return fn;
36
+ }
37
+ function pickBehaviorCallbacks(beforeContext, successOrContext, error) {
38
+ let successFn;
39
+ let errorFn;
40
+ if (successOrContext) {
41
+ if (isFunction(successOrContext)) {
42
+ successFn = successOrContext;
43
+ errorFn = error;
44
+ }
45
+ else {
46
+ successFn = successOrContext.success;
47
+ errorFn = successOrContext.error;
48
+ }
49
+ }
50
+ else {
51
+ errorFn = error;
52
+ }
53
+ return {
54
+ success: successFn || (beforeContext === null || beforeContext === void 0 ? void 0 : beforeContext.success),
55
+ error: errorFn || (beforeContext === null || beforeContext === void 0 ? void 0 : beforeContext.error)
56
+ };
57
+ }
58
+ function handleBehaviorError(error, errorFn) {
59
+ if (errorFn) {
60
+ errorFn(error);
61
+ }
62
+ else {
63
+ const defaultErrorHandler = getDefaultErrorHandler();
64
+ defaultErrorHandler && defaultErrorHandler(error);
65
+ }
66
+ }
67
+
68
+ class AsyncBehaviorImpl {
69
+ constructor(action, context) {
29
70
  this.action = action;
30
- this.loadingDone = false;
71
+ this.context = context;
72
+ this.loadingDone = true;
73
+ this.loading = false;
31
74
  this.state = 'pending';
32
75
  }
33
- execute(...params) {
34
- this.loadingDone = false;
76
+ execute(successOrContext, error) {
77
+ this.setLoadingState(true);
35
78
  this.state = 'loading';
36
- return this.action.apply(undefined, params).pipe(finalize(() => {
37
- this.loadingDone = true;
38
- }), catchError(error => {
79
+ const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);
80
+ try {
81
+ return this.action
82
+ .apply(undefined, this.executeParams)
83
+ .pipe(finalize(() => {
84
+ this.setLoadingState(false);
85
+ }), tap(value => {
86
+ this.value = value;
87
+ this.state = 'success';
88
+ this.setLoadingState(false);
89
+ }))
90
+ .subscribe({
91
+ next: callbacks.success,
92
+ error: error => {
93
+ this.state = 'error';
94
+ this.error = error;
95
+ handleBehaviorError(error, callbacks.error);
96
+ }
97
+ });
98
+ }
99
+ catch (error) {
39
100
  this.state = 'error';
40
101
  this.error = error;
41
- const defaultErrorHandler = getDefaultErrorHandler();
42
- defaultErrorHandler && defaultErrorHandler(error);
43
- throw error;
44
- }), tap(value => {
45
- this.value = value;
46
- this.state = 'success';
47
- }));
102
+ this.setLoadingState(false);
103
+ handleBehaviorError(error, callbacks.error);
104
+ }
105
+ }
106
+ setLoadingState(loading) {
107
+ this.loading = loading;
108
+ this.loadingDone = !loading;
48
109
  }
49
110
  }
50
- function useAsync(action) {
51
- return new AsyncBehavior(action);
111
+ function useAsync(action, context = {}) {
112
+ const behavior = new AsyncBehaviorImpl(action, context);
113
+ const fn = function (...params) {
114
+ fn['executeParams'] = params;
115
+ return fn;
116
+ };
117
+ return createBehaviorFromFunction(fn, {
118
+ context: context,
119
+ action: action,
120
+ execute: behavior.execute,
121
+ setLoadingState: behavior.setLoadingState,
122
+ loadingDone: behavior.loadingDone,
123
+ loading: behavior.loading,
124
+ state: behavior.state,
125
+ error: behavior.error,
126
+ value: behavior.value
127
+ });
52
128
  }
53
129
 
54
- class ActionBehavior {
130
+ class ActionBehaviorImpl {
55
131
  constructor(action, context) {
56
132
  this.action = action;
57
133
  this.context = context;
58
134
  this.saving = false;
59
135
  }
60
- execute(...params) {
61
- var _a;
136
+ execute(successOrContext, error) {
62
137
  if (this.saving) {
63
138
  return;
64
139
  }
65
140
  this.saving = true;
141
+ const callbacks = pickBehaviorCallbacks(this.context, successOrContext, error);
66
142
  try {
67
143
  return this.action
68
- .apply(null, params)
144
+ .apply(undefined, this.executeParams)
69
145
  .pipe(finalize(() => {
70
146
  this.saving = false;
147
+ this.executeParams = undefined;
71
148
  }), tap(value => {
72
149
  this.saving = false;
150
+ this.executeParams = undefined;
73
151
  }))
74
152
  .subscribe({
75
- next: (_a = this.context) === null || _a === void 0 ? void 0 : _a.success,
153
+ next: callbacks === null || callbacks === void 0 ? void 0 : callbacks.success,
76
154
  error: (error) => {
77
155
  this.saving = false;
78
- this.handleError(error);
156
+ handleBehaviorError(error, callbacks.error);
79
157
  }
80
158
  });
81
159
  }
82
160
  catch (error) {
83
161
  this.saving = false;
84
- this.handleError(error);
85
- }
86
- }
87
- success(successFn) {
88
- this.context.success = successFn;
89
- return this;
90
- }
91
- error(errorFn) {
92
- this.context.error = errorFn;
93
- return this;
94
- }
95
- handleError(error) {
96
- const defaultErrorHandler = getDefaultErrorHandler();
97
- if (this.context.error) {
98
- this.context.error(error);
99
- }
100
- else if (defaultErrorHandler) {
101
- defaultErrorHandler(error);
162
+ handleBehaviorError(error, callbacks.error);
102
163
  }
103
164
  }
104
165
  }
105
166
  function useAction(action, context = {}) {
106
- return new ActionBehavior(action, context);
167
+ const behavior = new ActionBehaviorImpl(action, context);
168
+ const fn = function (...params) {
169
+ fn['executeParams'] = params;
170
+ return fn;
171
+ };
172
+ return createBehaviorFromFunction(fn, {
173
+ context: context,
174
+ action: action,
175
+ execute: behavior.execute,
176
+ saving: behavior.saving
177
+ });
107
178
  }
108
179
 
109
180
  /**