{"version":3,"sources":["../../src/cache/fileCache.ts"],"names":["FileCache","BaseCache","input","register","source","fullPath","fromProvider","provider","fs","promises","writeFile","serialize","getProvider","exists","stat","then","r","isFile","catch","serialized","readFile","target","snapshot","Serializer","deserialize","Target","getFactory","ref","instance","fromSnapshot","TypeError","SlidingCache","size","Infinity","ttl","reload","Cache","getInstance","clear","save","set","key","value","get","finally","has","delete","result","createSnapshot","loadSnapshot","Object","assign"],"mappings":"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","file":"fileCache.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BaseCache } from \"@/cache/base.js\";\nimport fs from \"node:fs\";\nimport { SlidingCache } from \"@/cache/slidingCache.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { Serializer } from \"@/serializer/serializer.js\";\nimport { SerializableClass } from \"@/internals/serializable.js\";\n\ninterface Input {\n  fullPath: string;\n}\n\nexport class FileCache<T> extends BaseCache<T> {\n  constructor(protected readonly input: Input) {\n    super();\n  }\n\n  static {\n    this.register();\n  }\n\n  get source() {\n    return this.input.fullPath;\n  }\n\n  static async fromProvider<A>(provider: BaseCache<A>, input: Input) {\n    await fs.promises.writeFile(input.fullPath, await provider.serialize());\n    return new FileCache<A>(input);\n  }\n\n  @Cache()\n  protected async getProvider(): Promise<BaseCache<T>> {\n    const exists = await fs.promises\n      .stat(this.input.fullPath)\n      .then((r) => r.isFile())\n      .catch(() => false);\n\n    if (exists) {\n      const serialized = await fs.promises.readFile(this.input.fullPath, \"utf8\");\n      const { target, snapshot } = await Serializer.deserialize<any>(serialized);\n      const Target = Serializer.getFactory(target).ref as SerializableClass<BaseCache<T>>;\n      const instance = await Target.fromSnapshot(snapshot);\n      if (!(instance instanceof BaseCache)) {\n        throw new TypeError(\"Provided file does not serialize any instance of BaseCache class.\");\n      }\n      return instance;\n    } else {\n      return new SlidingCache({\n        size: Infinity,\n        ttl: Infinity,\n      });\n    }\n  }\n\n  async reload() {\n    // @ts-expect-error protected property\n    Cache.getInstance(this, \"getProvider\").clear();\n    void (await this.getProvider());\n  }\n\n  protected async save() {\n    const provider = await this.getProvider();\n    return await fs.promises.writeFile(this.input.fullPath, await provider.serialize());\n  }\n\n  async size() {\n    const provider = await this.getProvider();\n    return provider.size();\n  }\n\n  async set(key: string, value: T) {\n    const provider = await this.getProvider();\n    await provider.set(key, value);\n    void provider.get(key).finally(() => {\n      void this.save();\n    });\n  }\n\n  async get(key: string) {\n    const provider = await this.getProvider();\n    return await provider.get(key);\n  }\n\n  async has(key: string) {\n    const provider = await this.getProvider();\n    return await provider.has(key);\n  }\n\n  async delete(key: string) {\n    const provider = await this.getProvider();\n    const result = await provider.delete(key);\n    await this.save();\n    return result;\n  }\n\n  async clear() {\n    const provider = await this.getProvider();\n    await provider.clear();\n    await this.save();\n  }\n\n  async createSnapshot() {\n    return {\n      input: { fullPath: this.input.fullPath },\n      provider: await this.getProvider(),\n    };\n  }\n\n  loadSnapshot(snapshot: Awaited<ReturnType<typeof this.createSnapshot>>): void {\n    Object.assign(this, snapshot);\n  }\n}\n"]}