{"version":3,"sources":["../../src/cache/decoratorCache.ts"],"names":["state","container","WeakMap","extractDescriptor","descriptor","value","update","get","Error","Cache","name","getInstanceContext","target","ctx","instances","has","set","cache","Map","options","initQueue","_options","baseOptions","enabled","cacheKey","ObjectHashKeyFn","ttl","Infinity","enumerable","R","pickBy","isDefined","handler","obj","key","Object","hasOwn","constructor","Boolean","push","SingletonCacheKeyFn","groupContext","fn","wrapper","args","invokeOriginal","apply","inputHash","expiresAt","Date","now","result","data","defineProperty","init","self","task","getOwnPropertyDescriptor","prototype","assign","delete","getInstance","property","findDescriptor","TypeError","String","ctxByInstance","clear","keys","forEach","oldTTL","newTTL","undefined","values","diff","isEnabled","enable","disable","WeakRefKeyFn","_lookup","chunks","map","isObjectType","isFunction","createRandomHash","createHash","JSON","stringify","from","cb","join","hash","encoding","replacer","AbortSignal","unorderedArrays","unorderedObjects","unorderedSets","JSONCacheKeyFn","CacheFn","Function","create","instance","Proxy","_","prop","receiver","updateTTL","createSnapshot"],"mappings":"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","file":"decoratorCache.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AnyFn, TypedFn } from \"@/internals/types.js\";\nimport * as R from \"remeda\";\nimport hash from \"object-hash\";\nimport { createHash, createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { findDescriptor } from \"@/internals/helpers/prototype.js\";\n\ntype InputFn = AnyFn;\ntype TargetFn = AnyFn;\ntype Instance = NonNullable<any>;\n\ntype CacheKeyFn = (this: Instance, ...args: any[]) => string;\n\nexport interface CacheDecoratorOptions {\n  enabled: boolean;\n  ttl?: number;\n  cacheKey: CacheKeyFn;\n  enumerable?: boolean;\n}\n\ninterface CacheEntry {\n  expiresAt: number;\n  data: any;\n}\n\ninterface FnContext {\n  options: CacheDecoratorOptions;\n  cache: Map<string, CacheEntry>;\n}\n\ninterface GroupContext {\n  options: CacheDecoratorOptions;\n  instances: WeakMap<Instance, FnContext>;\n}\n\nexport interface CacheDecoratorInstance {\n  get(key?: string): CacheEntry | undefined;\n\n  clear(keys?: string[]): void;\n\n  isEnabled(): boolean;\n\n  enable(): void;\n\n  disable(): void;\n\n  update(data: Partial<CacheDecoratorOptions>): void;\n}\n\nconst state = {\n  container: new WeakMap<InputFn, GroupContext>(),\n  extractDescriptor(descriptor: PropertyDescriptor) {\n    // Method approach\n    if (descriptor.value != null) {\n      return {\n        value: descriptor.value as AnyFn,\n        update: (value: TargetFn) => {\n          descriptor.value = value;\n        },\n      };\n    }\n    // Accessor approach\n    if (descriptor.get != null) {\n      return {\n        value: descriptor.get as AnyFn,\n        update: (value: TargetFn) => {\n          descriptor.get = value;\n        },\n      };\n    }\n    throw new Error(`@${Cache.name} decorator must be either on a method or get accessor.`);\n  },\n  getInstanceContext<T extends NonNullable<unknown>>(target: T, ctx: GroupContext) {\n    if (!ctx.instances.has(target)) {\n      ctx.instances.set(target, {\n        cache: new Map(),\n        options: ctx.options,\n      });\n    }\n    return ctx.instances.get(target)!;\n  },\n} as const;\n\nconst initQueue = new WeakMap<Instance, { key: PropertyKey; enumerable: boolean }[]>();\n\nexport function Cache(_options?: Partial<CacheDecoratorOptions>) {\n  const baseOptions: Required<CacheDecoratorOptions> = {\n    enabled: true,\n    cacheKey: ObjectHashKeyFn,\n    ttl: Infinity,\n    enumerable: false,\n    ...R.pickBy(_options ?? {}, R.isDefined),\n  };\n\n  return function handler(\n    obj: NonNullable<object>,\n    key: string | symbol,\n    descriptor: PropertyDescriptor,\n  ) {\n    if (Object.hasOwn(obj, \"constructor\")) {\n      const constructor = obj.constructor;\n      if (!initQueue.has(constructor)) {\n        initQueue.set(constructor, []);\n      }\n\n      baseOptions.enumerable = Boolean(descriptor.get);\n      initQueue\n        .get(constructor)!\n        .push({ key, enumerable: _options?.enumerable ?? baseOptions.enumerable });\n    }\n\n    const target = state.extractDescriptor(descriptor);\n    if (descriptor.get && !_options?.cacheKey) {\n      baseOptions.cacheKey = SingletonCacheKeyFn;\n    }\n\n    const groupContext: GroupContext = { instances: new WeakMap(), options: baseOptions };\n\n    const fn = function wrapper(this: any, ...args: any[]) {\n      const invokeOriginal = () => target.value.apply(this, args);\n      const ctx = state.getInstanceContext(this, groupContext);\n      if (!ctx.options.enabled) {\n        return invokeOriginal();\n      }\n\n      const inputHash = ctx.options.cacheKey.apply(this, args);\n      if (\n        !ctx.cache.has(inputHash) ||\n        (ctx.cache.get(inputHash)?.expiresAt ?? Infinity) < Date.now() // is expired check\n      ) {\n        const result = invokeOriginal();\n        ctx.cache.set(inputHash, {\n          expiresAt: Date.now() + (ctx.options.ttl ?? Infinity),\n          data: result,\n        });\n      }\n      return ctx.cache.get(inputHash)!.data;\n    };\n    Object.defineProperty(fn, \"name\", {\n      get: () => target.value.name ?? \"anonymous\",\n    });\n\n    target.update(fn);\n    state.container.set(fn, groupContext);\n  };\n}\n\nCache.init = function init<T extends NonNullable<unknown>>(self: T) {\n  const task = initQueue.get(self.constructor) ?? [];\n  for (const { key, enumerable } of task) {\n    const descriptor = Object.getOwnPropertyDescriptor(self.constructor.prototype, key);\n    if (descriptor) {\n      Object.defineProperty(self, key, Object.assign(descriptor, { enumerable }));\n    }\n  }\n  initQueue.delete(self);\n};\n\nCache.getInstance = function getInstance<T extends NonNullable<unknown>>(\n  target: T,\n  property: keyof T,\n): CacheDecoratorInstance {\n  const descriptor = findDescriptor(target, property);\n  if (!descriptor) {\n    throw new TypeError(`No descriptor has been found for '${String(property)}'`);\n  }\n  const value = state.extractDescriptor(descriptor);\n  const ctxByInstance = state.container.get(value.value);\n  if (!ctxByInstance) {\n    throw new TypeError(`No cache instance is bounded to '${String(property)}'!`);\n  }\n\n  const ctx = state.getInstanceContext(target, ctxByInstance);\n  return {\n    get(key = \"\") {\n      return ctx.cache.get(key);\n    },\n    clear(keys?: string[]) {\n      if (keys) {\n        keys.forEach((key) => ctx.cache.delete(key));\n      } else {\n        ctx.cache.clear();\n      }\n    },\n    update(data: CacheDecoratorOptions) {\n      const oldTTL = ctx.options.ttl;\n      const newTTL = data.ttl;\n      if (oldTTL !== newTTL && newTTL !== undefined) {\n        for (const value of ctx.cache.values()) {\n          if (value.expiresAt === Infinity) {\n            value.expiresAt = Date.now() + newTTL;\n          } else {\n            const diff = newTTL - (oldTTL ?? 0);\n            value.expiresAt += diff;\n          }\n        }\n      }\n      Object.assign(ctx.options, data);\n    },\n    isEnabled() {\n      return ctx.options.enabled;\n    },\n    enable() {\n      ctx.options.enabled = true;\n    },\n    disable() {\n      ctx.options.enabled = false;\n    },\n  };\n};\n\nexport const WeakRefKeyFn = (() => {\n  const _lookup = new WeakMap();\n\n  const fn = (...args: any[]) => {\n    const chunks = args.map((value) => {\n      if (R.isObjectType(value) || R.isFunction(value)) {\n        if (!_lookup.has(value)) {\n          _lookup.set(value, createRandomHash(6));\n        }\n        return _lookup.get(value)!;\n      }\n      return value;\n    });\n    return createHash(JSON.stringify(chunks));\n  };\n  fn.from = <T>(cb: (self: T) => any[]) => {\n    return function (this: T) {\n      return cb(this).map(fn).join(\"#\");\n    };\n  };\n  return fn;\n})() satisfies CacheKeyFn;\n\nexport const ObjectHashKeyFn: CacheKeyFn = (...args: any[]) =>\n  hash(args, {\n    encoding: \"base64\",\n    replacer: (() => {\n      const _lookup = new WeakMap();\n      return (value: unknown) => {\n        if (value && value instanceof AbortSignal) {\n          // not supported by \"hash\" function\n          if (!_lookup.has(value)) {\n            _lookup.set(value, createRandomHash(6));\n          }\n          return _lookup.get(value)!;\n        }\n        return value;\n      };\n    })(),\n    unorderedArrays: false,\n    unorderedObjects: false,\n    unorderedSets: false,\n  });\nexport const JSONCacheKeyFn: CacheKeyFn = (...args: any[]) => JSON.stringify(args);\n// eslint-disable-next-line unused-imports/no-unused-vars\nexport const SingletonCacheKeyFn: CacheKeyFn = (...args: any[]) => \"\";\n\nexport class CacheFn<P extends any[], R> extends Function {\n  readonly name = CacheFn.name;\n\n  static create<A extends any[], B>(\n    fn: (...args: A) => B,\n    options?: Partial<CacheDecoratorOptions>,\n  ) {\n    const instance = new CacheFn(fn, options);\n    return instance as TypedFn<A, B> & CacheFn<A, B>;\n  }\n\n  constructor(\n    protected readonly fn: (...args: P) => R,\n    protected readonly options?: Partial<CacheDecoratorOptions>,\n  ) {\n    super();\n\n    Cache.getInstance(this, \"get\").update(options ?? {});\n    return new Proxy<typeof this>(this, {\n      apply(this: CacheFn<P, R>, target, _, args: any[]) {\n        return target.get(...(args as unknown as P));\n      },\n      get(target, prop: string | symbol, receiver: any) {\n        const value = target[prop as keyof typeof target];\n        if (value instanceof Function) {\n          return function (this: CacheFn<P, R>, ...args: P) {\n            return value.apply(this === receiver ? target : this, args);\n          };\n        }\n        return value;\n      },\n    }) as unknown as CacheFn<P, R> & typeof fn;\n  }\n\n  updateTTL(ttl: number) {\n    Cache.getInstance(this, \"get\").update({ ttl });\n  }\n\n  createSnapshot() {\n    return {\n      fn: this.fn,\n      options: this.options,\n    };\n  }\n\n  @Cache()\n  get(...args: P) {\n    return this.fn(...args);\n  }\n}\n"]}