{
  "version": 3,
  "sources": ["../src/reflector.ts", "../src/utility/utility.ts", "../src/setter.ts"],
  "sourcesContent": ["import 'reflect-metadata';\nimport {\n  AnyDecorators,\n  ArrayValue,\n  GenericMap,\n  Key,\n  MapValue,\n  StringDict,\n} from './def';\nimport { getClass } from './utility/utility';\n\nexport class Reflector<M extends StringDict, AM extends StringDict> {\n  get<K extends Key<GenericMap<M, AM>>>(\n    metadataKey: K,\n    instance: any,\n    key?: string | symbol,\n  ): MapValue<M, AM, K> {\n    const instanceClass = getClass(instance);\n    if (key) {\n      return Reflect.getMetadata(metadataKey, instanceClass, key);\n    } else {\n      return Reflect.getMetadata(metadataKey, instanceClass);\n    }\n  }\n\n  getArray<K extends Key<AM>>(\n    metadataKey: K,\n    instance: any,\n    key?: string | symbol,\n  ): ArrayValue<AM, K> {\n    return this.get(metadataKey, instance, key) || [];\n  }\n\n  getProperty<K extends Key<AM>, I = any>(\n    metadataKey: K,\n    instance: I,\n    key: keyof I & (string | symbol),\n    alternate?: any,\n  ): ArrayValue<AM, K> {\n    const valueFromClass = this.getArray(metadataKey, instance);\n    const valueFromAlternate = alternate\n      ? this.getArray(metadataKey, alternate)\n      : [];\n    const valueFromProperty = this.getArray(metadataKey, instance, key);\n    return [\n      ...valueFromClass,\n      ...valueFromAlternate,\n      ...valueFromProperty,\n    ] as ArrayValue<AM, K>;\n  }\n\n  getMetadataFromDecorator<K extends Key<GenericMap<M, AM>>>(\n    dec: AnyDecorators,\n    metadataKey: K,\n  ): MapValue<M, AM, K> {\n    const _dec = dec as PropertyDecorator;\n    class TempClass {}\n    const propertyKey =\n      '_temp_property_key_' + Math.random().toString(16).slice(2);\n    _dec(TempClass.prototype, propertyKey);\n    return this.get(metadataKey, TempClass, propertyKey);\n  }\n}\n", "export function isClass(target: any) {\n  if (typeof target !== 'function') {\n    return false;\n  }\n  const proto = target.constructor;\n  return proto === Function;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function getClass(target: any): Function {\n  return isClass(target) ? target : getClass(target.constructor);\n}\n", "import 'reflect-metadata';\nimport { AllDecorators, ArrayValueMap, GenericMap, Key, MergeKey, StringDict } from './def';\nimport { getClass } from './utility/utility';\n\nexport class MetadataSetter<M extends StringDict, AM extends StringDict> {\n  private getMetadataInDecorator<\n    K extends MergeKey<M, AM>,\n    GM extends Record<MergeKey<M, AM>, any> = GenericMap<M, AM>,\n  >(metaKey: K, target: any, key?: any): GM[K] {\n    if (key) {\n      return Reflect.getMetadata(metaKey, target, key);\n    } else {\n      return Reflect.getMetadata(metaKey, target);\n    }\n  }\n\n  private setMetadataInDecorator<\n    K extends MergeKey<M, AM>,\n    GM extends Record<MergeKey<M, AM>, any> = GenericMap<M, AM>,\n  >(metaKey: K, value: GM[K], target: any, key?: any) {\n    if (key) {\n      return Reflect.defineMetadata(metaKey, value, target, key);\n    } else {\n      return Reflect.defineMetadata(metaKey, value, target);\n    }\n  }\n\n  transform<\n    K extends MergeKey<M, AM>,\n    IK extends Key<AM>,\n    GM extends Record<MergeKey<M, AM>, any> = GenericMap<M, AM>,\n  >(\n    metadataKey: K,\n    metadataValueFun: (oldValue: GM[K]) => GM[K],\n    keysIndexMeta?: IK,\n  ): AllDecorators {\n    return (target, key?) => {\n      const targetClass = getClass(target);\n      const oldValue = this.getMetadataInDecorator<K, GM>(\n        metadataKey,\n        targetClass,\n        key,\n      );\n      const newValue = metadataValueFun(oldValue);\n      this.setMetadataInDecorator(metadataKey, newValue, targetClass, key);\n      if (keysIndexMeta) {\n        const keysDec = this.appendUnique<IK, any>(keysIndexMeta, key);\n        keysDec(targetClass);\n      }\n    };\n  }\n\n  set<K extends MergeKey<M, AM>, IK extends Key<AM>>(\n    metadataKey: K,\n    metadataValue: GenericMap<M, AM>[K],\n    keysIndexMeta?: IK,\n  ) {\n    return this.transform<K, IK>(\n      metadataKey,\n      () => metadataValue,\n      keysIndexMeta,\n    );\n  }\n\n  append<K extends Key<AM>, IK extends Key<AM>>(\n    metadataKey: K,\n    metadataValue: AM[K],\n    keysIndexMeta?: IK,\n  ) {\n    return this.transform<K, IK, ArrayValueMap<AM>>(\n      metadataKey,\n      (arr) => {\n        const newArr = arr || [];\n        newArr.push(metadataValue);\n        return newArr;\n      },\n      keysIndexMeta,\n    );\n  }\n\n  appendUnique<K extends Key<AM>, IK extends Key<AM>>(\n    metadataKey: K,\n    metadataValue: AM[K],\n    keysIndexMeta?: IK,\n  ) {\n    return this.transform<K, IK, ArrayValueMap<AM>>(\n      metadataKey,\n      (arr) => {\n        const newArr = arr || [];\n        if (newArr.includes(metadataValue)) {\n          return newArr;\n        }\n        newArr.push(metadataValue);\n        return newArr;\n      },\n      keysIndexMeta,\n    );\n  }\n\n  concat<K extends Key<AM>, IK extends Key<AM>>(\n    metadataKey: K,\n    metadataValue: ArrayValueMap<AM>[K],\n    keysIndexMeta?: IK,\n  ) {\n    return this.transform<K, IK, ArrayValueMap<AM>>(\n      metadataKey,\n      (arr) => (arr || []).concat(metadataValue),\n      keysIndexMeta,\n    );\n  }\n\n  param<K extends Key<AM>, IK extends Key<AM>>(\n    metadataKey: K,\n    metadataValue: AM[K],\n    keysIndexMeta?: IK,\n  ): ParameterDecorator {\n    return (obj, key, i) => {\n      const dec = this.transform<K, IK, ArrayValueMap<AM>>(\n        metadataKey,\n        (arr) => {\n          const newArr = arr || [];\n          newArr[i] = metadataValue;\n          return newArr;\n        },\n        keysIndexMeta,\n      );\n      dec(obj, key);\n    };\n  }\n}\n"],
  "mappings": ";AAAA,OAAO;;;ACAA,SAAS,QAAQ,QAAa;AACnC,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,OAAO;AACrB,SAAO,UAAU;AACnB;AAGO,SAAS,SAAS,QAAuB;AAC9C,SAAO,QAAQ,MAAM,IAAI,SAAS,SAAS,OAAO,WAAW;AAC/D;;;ADAO,IAAM,YAAN,MAA6D;AAAA,EAClE,IACE,aACA,UACA,KACoB;AACpB,UAAM,gBAAgB,SAAS,QAAQ;AACvC,QAAI,KAAK;AACP,aAAO,QAAQ,YAAY,aAAa,eAAe,GAAG;AAAA,IAC5D,OAAO;AACL,aAAO,QAAQ,YAAY,aAAa,aAAa;AAAA,IACvD;AAAA,EACF;AAAA,EAEA,SACE,aACA,UACA,KACmB;AACnB,WAAO,KAAK,IAAI,aAAa,UAAU,GAAG,KAAK,CAAC;AAAA,EAClD;AAAA,EAEA,YACE,aACA,UACA,KACA,WACmB;AACnB,UAAM,iBAAiB,KAAK,SAAS,aAAa,QAAQ;AAC1D,UAAM,qBAAqB,YACvB,KAAK,SAAS,aAAa,SAAS,IACpC,CAAC;AACL,UAAM,oBAAoB,KAAK,SAAS,aAAa,UAAU,GAAG;AAClE,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EAEA,yBACE,KACA,aACoB;AACpB,UAAM,OAAO;AAAA,IACb,MAAM,UAAU;AAAA,IAAC;AACjB,UAAM,cACJ,wBAAwB,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;AAC5D,SAAK,UAAU,WAAW,WAAW;AACrC,WAAO,KAAK,IAAI,aAAa,WAAW,WAAW;AAAA,EACrD;AACF;;;AE9DA,OAAO;AAIA,IAAM,iBAAN,MAAkE;AAAA,EAC/D,uBAGN,SAAY,QAAa,KAAkB;AAC3C,QAAI,KAAK;AACP,aAAO,QAAQ,YAAY,SAAS,QAAQ,GAAG;AAAA,IACjD,OAAO;AACL,aAAO,QAAQ,YAAY,SAAS,MAAM;AAAA,IAC5C;AAAA,EACF;AAAA,EAEQ,uBAGN,SAAY,OAAc,QAAa,KAAW;AAClD,QAAI,KAAK;AACP,aAAO,QAAQ,eAAe,SAAS,OAAO,QAAQ,GAAG;AAAA,IAC3D,OAAO;AACL,aAAO,QAAQ,eAAe,SAAS,OAAO,MAAM;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,UAKE,aACA,kBACA,eACe;AACf,WAAO,CAAC,QAAQ,QAAS;AACvB,YAAM,cAAc,SAAS,MAAM;AACnC,YAAM,WAAW,KAAK;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,WAAW,iBAAiB,QAAQ;AAC1C,WAAK,uBAAuB,aAAa,UAAU,aAAa,GAAG;AACnE,UAAI,eAAe;AACjB,cAAM,UAAU,KAAK,aAAsB,eAAe,GAAG;AAC7D,gBAAQ,WAAW;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IACE,aACA,eACA,eACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OACE,aACA,eACA,eACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,QAAQ;AACP,cAAM,SAAS,OAAO,CAAC;AACvB,eAAO,KAAK,aAAa;AACzB,eAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aACE,aACA,eACA,eACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,QAAQ;AACP,cAAM,SAAS,OAAO,CAAC;AACvB,YAAI,OAAO,SAAS,aAAa,GAAG;AAClC,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,aAAa;AACzB,eAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OACE,aACA,eACA,eACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SAAS,OAAO,CAAC,GAAG,OAAO,aAAa;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MACE,aACA,eACA,eACoB;AACpB,WAAO,CAAC,KAAK,KAAK,MAAM;AACtB,YAAM,MAAM,KAAK;AAAA,QACf;AAAA,QACA,CAAC,QAAQ;AACP,gBAAM,SAAS,OAAO,CAAC;AACvB,iBAAO,CAAC,IAAI;AACZ,iBAAO;AAAA,QACT;AAAA,QACA;AAAA,MACF;AACA,UAAI,KAAK,GAAG;AAAA,IACd;AAAA,EACF;AACF;",
  "names": []
}
