{"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> | undefined;\n    let errorFn: ErrorFn | undefined;\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 | null>;\n    value?: Signal<R | null>;\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 | null> = signal(null);\n\n    state: WritableSignal<'pending' | 'loading' | 'success' | 'error'> = signal('pending');\n\n    error: WritableSignal<Error | null> = signal(null);\n\n    executeParams!: Parameters<A>;\n\n    takeUntilDestroyed = takeUntilDestroyed();\n\n    constructor(\n        private action: A,\n        private context: BehaviorContext<T>\n    ) {}\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            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                    value => {\n                        callbacks.success?.(value as T);\n                    },\n                    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 as Error);\n            this.setLoadingState(false);\n            handleBehaviorError(error as Error, callbacks.error);\n        }\n    }\n\n    setLoadingState(loading: boolean) {\n        this.loading.set(loading);\n    }\n}\n\nexport function asyncBehavior<A extends (...args: any) => Observable<any> = (...args: any) => Observable<any>>(\n    action: A,\n    context: BehaviorContext<ExtractObservableValue<ReturnType<A>>> = {}\n): Behavior<Parameters<A>, AsyncBehavior<ExtractObservableValue<ReturnType<A>>>> & AsyncBehavior<ExtractObservableValue<ReturnType<A>>> {\n    const behavior = new AsyncBehaviorImpl(action, context);\n\n    const fn = function (...params: Parameters<A>) {\n        (fn as any)['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 { Observable, throwError } from 'rxjs';\nimport { finalize, shareReplay, tap } from 'rxjs/operators';\nimport { Signal, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Behavior, BehaviorContext, createBehaviorFromFunction, handleBehaviorError, pickBehaviorCallbacks } from './behavior';\nimport { ErrorFn, ExtractObservableValue, SuccessFn } from './types';\n\nexport interface ActionBehavior<R> {\n    saving: Signal<boolean>;\n\n    execute(success?: SuccessFn<R>, error?: ErrorFn): Observable<R> | undefined;\n    execute(context: BehaviorContext<R>): Observable<R> | undefined;\n    execute(successOrContext: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): Observable<R> | undefined;\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(\n        private action: A,\n        private context: BehaviorContext<R>\n    ) {}\n\n    execute(success?: SuccessFn<R>, error?: ErrorFn): Observable<R> | undefined;\n    execute(context: BehaviorContext<R>): Observable<R> | undefined;\n    execute(successOrContext?: SuccessFn<R> | BehaviorContext<R>, error?: ErrorFn): Observable<R> | undefined {\n        if (this.saving()) {\n            return;\n        }\n        this.saving.set(true);\n        const callbacks = pickBehaviorCallbacks(this.context, successOrContext!, error);\n        try {\n            const result = this.action.apply(undefined, this.executeParams!).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                shareReplay(1)\n            );\n            (result as Observable<R>).subscribe({\n                next: callbacks?.success,\n                error: (error: Error) => {\n                    this.saving.set(false);\n                    handleBehaviorError(error, callbacks.error);\n                }\n            });\n            return result as Observable<R>;\n        } catch (error) {\n            this.saving.set(false);\n            handleBehaviorError(error as Error, callbacks.error);\n            return throwError(error);\n        }\n    }\n}\n\nexport function actionBehavior<A extends (...args: any) => Observable<any> = (...args: any) => Observable<any>>(\n    action: A,\n    context: BehaviorContext<ExtractObservableValue<ReturnType<A>>> = {}\n): Behavior<Parameters<A>, ActionBehavior<ExtractObservableValue<ReturnType<A>>>> & ActionBehavior<ExtractObservableValue<ReturnType<A>>> {\n    const behavior = new ActionBehaviorImpl(action, context);\n\n    const fn = function (...params: Parameters<A>) {\n        (fn as any)['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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"}