{"version":3,"file":"utils/data/base.mjs","sources":["../../../src/utils/data/base.ts"],"sourcesContent":["import { Common, Manifest, SDK } from '@rsdoctor/types';\nimport { Data } from '@rsdoctor/utils/common';\n\nexport abstract class BaseDataLoader implements Manifest.ManifestDataLoader {\n  protected pool = new Map<string, Promise<unknown>>();\n\n  protected loader: Data.APIDataLoader;\n\n  protected disposed = false;\n\n  protected shardingDataMap = new Map<\n    keyof Manifest.RsdoctorManifestData | string,\n    Promise<Manifest.RsdoctorManifestData[keyof Manifest.RsdoctorManifestData]>\n  >();\n\n  constructor(protected manifest: Manifest.RsdoctorManifestWithShardingFiles) {\n    this.loader = new Data.APIDataLoader(this);\n    console.log('[DataLoader] isLocal: ', this.isLocal());\n  }\n\n  protected get<T extends keyof Manifest.RsdoctorManifestWithShardingFiles>(\n    key: T,\n  ): void | Manifest.RsdoctorManifestWithShardingFiles[T] {\n    if (!this.manifest) return;\n    return this.manifest[key];\n  }\n\n  protected getData<T extends keyof Manifest.RsdoctorManifestData>(\n    key: T,\n    scope: 'data' | 'cloudData' = 'data',\n  ): void | Manifest.RsdoctorManifestWithShardingFiles['data'][T] {\n    const data = this.get(scope);\n    if (!data) return;\n    return data[key];\n  }\n\n  protected getKeys(key: string) {\n    return key.split('.');\n  }\n\n  protected joinKeys(keys: string[]) {\n    return keys.join('.');\n  }\n\n  public dispose() {\n    this.disposed = true;\n  }\n\n  public limit<T>(\n    key: string,\n    fn: Common.Function<unknown[], Promise<T>>,\n  ): Promise<T> {\n    if (this.pool.has(key)) {\n      return this.pool.get(key) as Promise<T>;\n    }\n    const res = fn().finally(() => this.pool.delete(key));\n    this.pool.set(key, res);\n    return res;\n  }\n\n  public log(...args: unknown[]) {\n    console.log(`[${this.constructor.name}]`, ...args);\n  }\n\n  public async loadManifest() {\n    return this.manifest;\n  }\n\n  abstract loadData<T extends string, P>(key: T): Promise<void | P>;\n\n  abstract loadData<T extends Manifest.RsdoctorManifestMappingKeys>(\n    key: T,\n  ): Promise<void | Manifest.InferManifestDataValue<T>>;\n\n  abstract isLocal(): boolean;\n\n  abstract 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\n  public abstract onDataUpdate<\n    T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n  >(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;\n\n  public abstract removeOnDataUpdate<\n    T extends SDK.ServerAPI.API | SDK.ServerAPI.APIExtends,\n  >(api: T, fn: (response: SDK.ServerAPI.SocketResponseType<T>) => void): void;\n}\n"],"names":["BaseDataLoader","key","scope","data","keys","fn","res","args","console","manifest","Map","Data"],"mappings":";;;;;;;;;;;AAGO,MAAeA;IAiBV,IACRC,GAAM,EACgD;QACtD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QACpB,OAAO,IAAI,CAAC,QAAQ,CAACA,IAAI;IAC3B;IAEU,QACRA,GAAM,EACNC,QAA8B,MAAM,EAC0B;QAC9D,MAAMC,OAAO,IAAI,CAAC,GAAG,CAACD;QACtB,IAAI,CAACC,MAAM;QACX,OAAOA,IAAI,CAACF,IAAI;IAClB;IAEU,QAAQA,GAAW,EAAE;QAC7B,OAAOA,IAAI,KAAK,CAAC;IACnB;IAEU,SAASG,IAAc,EAAE;QACjC,OAAOA,KAAK,IAAI,CAAC;IACnB;IAEO,UAAU;QACf,IAAI,CAAC,QAAQ,GAAG;IAClB;IAEO,MACLH,GAAW,EACXI,EAA0C,EAC9B;QACZ,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAACJ,MAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAACA;QAEvB,MAAMK,MAAMD,KAAK,OAAO,CAAC,IAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAACJ;QAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAACA,KAAKK;QACnB,OAAOA;IACT;IAEO,IAAI,GAAGC,IAAe,EAAE;QAC7BC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAKD;IAC/C;IAEA,MAAa,eAAe;QAC1B,OAAO,IAAI,CAAC,QAAQ;IACtB;IAnDA,YAAsBE,QAAoD,CAAE;;QAX5E,uBAAU,QAAV;QAEA,uBAAU,UAAV;QAEA,uBAAU,YAAV;QAEA,uBAAU,mBAAV;aAKsBA,QAAQ,GAARA;aAXZ,IAAI,GAAG,IAAIC;aAIX,QAAQ,GAAG;aAEX,eAAe,GAAG,IAAIA;QAM9B,IAAI,CAAC,MAAM,GAAG,IAAIC,KAAK,aAAa,CAAC,IAAI;QACzCH,QAAQ,GAAG,CAAC,0BAA0B,IAAI,CAAC,OAAO;IACpD;AAyEF"}