{"version":3,"file":"utils/data/remote.mjs","sources":["../../../src/utils/data/remote.ts"],"sourcesContent":["import { Manifest, SDK } from '@rsdoctor/types';\nimport { Manifest as ManifestShared } from '@rsdoctor/utils/common';\nimport { get } from 'es-toolkit/compat';\nimport { BaseDataLoader } from './base';\nimport { fetchShardingFile } from '../request';\n\nexport class RemoteDataLoader extends BaseDataLoader {\n  public isLocal() {\n    return false;\n  }\n\n  public async loadData<T extends Manifest.RsdoctorManifestMappingKeys>(\n    key: T,\n  ): Promise<Manifest.InferManifestDataValue<T>>;\n\n  public async loadData(key: string): Promise<unknown> {\n    return this.limit(key, async () => {\n      const [scope, ...rest] = this.getKeys(key);\n      const data = this.getData(\n        scope as keyof Manifest.RsdoctorManifestData,\n        'cloudData',\n      );\n\n      if (!data) return;\n\n      let res = data;\n\n      // sharding files\n      if (ManifestShared.isShardingData(res)) {\n        // only cache by the root key in data\n        if (!this.shardingDataMap.has(scope)) {\n          const task = ManifestShared.fetchShardingData(\n            res,\n            fetchShardingFile,\n          ).catch((err) => {\n            this.log(`loadData error: `, res, key);\n            throw err;\n          });\n          this.shardingDataMap.set(scope, task);\n        }\n\n        res = await this.shardingDataMap.get(scope);\n      }\n\n      return rest.length > 0 ? get(res, this.joinKeys(rest)) : res;\n    });\n  }\n\n  public async loadAPI<\n    T extends SDK.ServerAPI.API,\n    B extends\n      SDK.ServerAPI.InferRequestBodyType<T> = SDK.ServerAPI.InferRequestBodyType<T>,\n    R extends\n      SDK.ServerAPI.InferResponseType<T> = SDK.ServerAPI.InferResponseType<T>,\n  >(...args: B extends void ? [api: T] : [api: T, body: B]): Promise<R> {\n    const [api, body] = args;\n    // request limitation key\n    const key = body ? `${api}_${JSON.stringify(body)}` : `${api}`;\n\n    return this.limit(key, async () => {\n      return this.loader.loadAPI(...args) as R;\n    });\n  }\n\n  public dispose() {\n    super.dispose();\n  }\n\n  public onDataUpdate() {}\n\n  public removeOnDataUpdate() {}\n}\n"],"names":["RemoteDataLoader","BaseDataLoader","key","scope","rest","data","res","ManifestShared","task","fetchShardingFile","err","get","args","api","body","JSON"],"mappings":";;;;AAMO,MAAMA,yBAAyBC;IAC7B,UAAU;QACf,OAAO;IACT;IAMA,MAAa,SAASC,GAAW,EAAoB;QACnD,OAAO,IAAI,CAAC,KAAK,CAACA,KAAK;YACrB,MAAM,CAACC,OAAO,GAAGC,KAAK,GAAG,IAAI,CAAC,OAAO,CAACF;YACtC,MAAMG,OAAO,IAAI,CAAC,OAAO,CACvBF,OACA;YAGF,IAAI,CAACE,MAAM;YAEX,IAAIC,MAAMD;YAGV,IAAIE,SAAAA,cAA6B,CAACD,MAAM;gBAEtC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACH,QAAQ;oBACpC,MAAMK,OAAOD,SAAAA,iBAAgC,CAC3CD,KACAG,mBACA,KAAK,CAAC,CAACC;wBACP,IAAI,CAAC,GAAG,CAAC,oBAAoBJ,KAAKJ;wBAClC,MAAMQ;oBACR;oBACA,IAAI,CAAC,eAAe,CAAC,GAAG,CAACP,OAAOK;gBAClC;gBAEAF,MAAM,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAACH;YACvC;YAEA,OAAOC,KAAK,MAAM,GAAG,IAAIO,IAAIL,KAAK,IAAI,CAAC,QAAQ,CAACF,SAASE;QAC3D;IACF;IAEA,MAAa,QAMX,GAAGM,IAAmD,EAAc;QACpE,MAAM,CAACC,KAAKC,KAAK,GAAGF;QAEpB,MAAMV,MAAMY,OAAO,GAAGD,IAAI,CAAC,EAAEE,KAAK,SAAS,CAACD,OAAO,GAAG,GAAGD,KAAK;QAE9D,OAAO,IAAI,CAAC,KAAK,CAACX,KAAK,UACd,IAAI,CAAC,MAAM,CAAC,OAAO,IAAIU;IAElC;IAEO,UAAU;QACf,KAAK,CAAC;IACR;IAEO,eAAe,CAAC;IAEhB,qBAAqB,CAAC;AAC/B"}