0.2.6 • Published 1 year ago

extra-aspect v0.2.6

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

extra-aspect

Install

npm install --save extra-aspect
# or
yarn add extra-aspect

Usage

import { aspect } from 'extra-aspect'

const fn = aspect(
  () => {
    console.log('called')
    return 'return'
  }
, {
    before: () => console.log('before')
  , returning: () => console.log('returning')
  }
)

console.log(fn())
// before
// called
// returning
// return

API

type IHooks<T> = {
  before?: Arrayable<() => unknown>
  returning?: Arrayable<(result: T) => unknown>
  throwing?: Arrayable<(err: unknown) => unknown>
  finally?: Arrayable<() => unknown>
}

type IAsyncHooks<T> = {
  before?: Arrayable<() => unknown | PromiseLike<unknown>>
  returning?: Arrayable<(result: T) => unknown | PromiseLike<unknown>>
  throwing?: Arrayable<(err: unknown) => unknown | PromiseLike<unknown>>
  finally?: Arrayable<() => unknown | PromiseLike<unknown>>
}

aspect

function aspect<T, Args extends any[]>(
  fn: (...args: Args) => T
, hooks: IHooks<T>
): (...args: Args) => T
function aspect<T, Args extends any[]>(
  hooks: IHooks<T>
, fn: (...args: Args) => T
): (...args: Args) => T

aspectAsync

function aspectAsync<T, Args extends any[]>(
  fn: (...args: Args) => PromiseLike<T>
, hooks: IAsyncHooks<T>
, concurrency: number = 1
): (...args: Args) => Promise<T>
function aspectAsync<T, Args extends any[]>(
  hooks: IAsyncHooks<T>
, fn: (...args: Args) => PromiseLike<T>
, concurrency: number = 1
): (...args: Args) => Promise<T>

compose

function compose<T>(...hooks: Array<IHooks<T>>): IHooks<T>
function compose<T>(...hooks: Array<IAsyncHooks<T>>): IAsyncHooks<T>
function compose<T>(...hooks: Array<IHooks<T> | IAsyncHooks<T>>): IAsyncHooks<T>
0.2.6

1 year ago

0.2.5

2 years ago

0.2.4

2 years ago

0.2.3

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.2.2

2 years ago

0.1.0

3 years ago