UNPKG

@react-mvi/di

Version:

Dependency injection module for React MVI.

50 lines (42 loc) 1.38 kB
/** * @fileoverview インターセプタのためのデコレータを定義する * @author Taketoshi Aono */ import * as _ from 'lodash'; /** * 指定されたキーで設定用の配列を初期化する * @param target 対象のオブジェクト * @param key キー */ function initList(target: any, key: symbol) { if (!target[key]) { target[key] = []; } } /** * 指定された正規表現にマッチした、全てのメソッドをインターセプトするためのデコレータ * @param key インターセプトするためのマーク * @param regexp メソッドを指定するための正規表現 * @returns クラスデコレータ */ export function interceptAll(key: symbol, regexp: RegExp) { return <T extends Function>(target: T) => { initList(target.prototype, key); target.prototype[key].push(regexp); } } /** * メソッドをインターセプトするためのデコレータ * @param key インターセプトするためのマーク * @returns メソッドデコレータ */ export function intercept(key: symbol) { return (target: Object, propertyKey: string | symbol): void => { if (target[key] && _.isRegExp(target[key][0])) { throw new Error('Cannot intercept already annotated with @interceptAll'); } initList(target, key); target[key].push(propertyKey); return null; } }