{"version":3,"file":"utils/data/index.mjs","sources":["../../../src/utils/data/index.ts"],"sourcesContent":["import { Constants, Manifest } from '@rsdoctor/types';\nimport { useEffect, useState } from 'react';\nimport { LocalServerDataLoader } from './local';\nimport { RemoteDataLoader } from './remote';\nimport { BaseDataLoader } from './base';\nimport { getAPILoaderModeFromStorage } from '../storage';\nimport { APILoaderMode4Dev } from '../../constants';\nimport { BriefDataLoader } from './brief';\n\nconst loaderTask = new WeakMap<\n  Manifest.RsdoctorManifestWithShardingFiles,\n  Promise<BaseDataLoader>\n>();\n\nasync function createDataLoader(\n  manifest: Manifest.RsdoctorManifestWithShardingFiles,\n) {\n  try {\n    if (process.env.NODE_ENV === 'development') {\n      const mode = getAPILoaderModeFromStorage();\n      console.log(`[development]-${mode}`);\n      if (mode === APILoaderMode4Dev.Local)\n        return new LocalServerDataLoader(manifest);\n      if (mode === APILoaderMode4Dev.Remote)\n        return new RemoteDataLoader(manifest);\n    }\n\n    // local server exists\n    if (manifest.__LOCAL__SERVER__) {\n      console.log(`[LocalServerDataLoader]`);\n      return new LocalServerDataLoader(manifest);\n    }\n  } catch {\n    console.log('[DataLoader] fallback to RemoteDataLoader');\n  }\n\n  return new RemoteDataLoader(manifest);\n}\n\nexport function useDataLoader(\n  manifest: Manifest.RsdoctorManifestWithShardingFiles | void,\n) {\n  const [loader, setLoader] = useState<BaseDataLoader | void>(undefined);\n\n  useEffect(() => {\n    if (window[Constants.WINDOW_RSDOCTOR_TAG]) {\n      console.log('[brief mode]');\n      const loader = new BriefDataLoader({ data: [] } as any);\n      setLoader(loader);\n    }\n  }, []);\n\n  useEffect(() => {\n    if (!manifest) return;\n\n    if (!loaderTask.has(manifest)) {\n      const promise = createDataLoader(manifest);\n      loaderTask.set(manifest, promise);\n    }\n\n    const task = loaderTask.get(manifest)!;\n    task.then((loader) => {\n      setLoader(loader);\n    });\n  }, [manifest]);\n\n  return {\n    loader,\n  };\n}\n"],"names":["loaderTask","WeakMap","createDataLoader","manifest","process","mode","getAPILoaderModeFromStorage","console","APILoaderMode4Dev","LocalServerDataLoader","RemoteDataLoader","useDataLoader","loader","setLoader","useState","undefined","useEffect","window","Constants","BriefDataLoader","promise","task"],"mappings":";;;;;;;AASA,MAAMA,aAAa,IAAIC;AAKvB,eAAeC,iBACbC,QAAoD;IAEpD,IAAI;QACF,IAAIC,AAAyB,kBAAzBA,QAAQ,GAAG,CAAC,QAAQ,EAAoB;YAC1C,MAAMC,OAAOC;YACbC,QAAQ,GAAG,CAAC,CAAC,cAAc,EAAEF,MAAM;YACnC,IAAIA,SAASG,kBAAkB,KAAK,EAClC,OAAO,IAAIC,sBAAsBN;YACnC,IAAIE,SAASG,kBAAkB,MAAM,EACnC,OAAO,IAAIE,iBAAiBP;QAChC;QAGA,IAAIA,SAAS,iBAAiB,EAAE;YAC9BI,QAAQ,GAAG,CAAC;YACZ,OAAO,IAAIE,sBAAsBN;QACnC;IACF,EAAE,OAAM;QACNI,QAAQ,GAAG,CAAC;IACd;IAEA,OAAO,IAAIG,iBAAiBP;AAC9B;AAEO,SAASQ,cACdR,QAA2D;IAE3D,MAAM,CAACS,QAAQC,UAAU,GAAGC,SAAgCC;IAE5DC,UAAU;QACR,IAAIC,MAAM,CAACC,UAAU,mBAAmB,CAAC,EAAE;YACzCX,QAAQ,GAAG,CAAC;YACZ,MAAMK,SAAS,IAAIO,gBAAgB;gBAAE,MAAM,EAAE;YAAC;YAC9CN,UAAUD;QACZ;IACF,GAAG,EAAE;IAELI,UAAU;QACR,IAAI,CAACb,UAAU;QAEf,IAAI,CAACH,WAAW,GAAG,CAACG,WAAW;YAC7B,MAAMiB,UAAUlB,iBAAiBC;YACjCH,WAAW,GAAG,CAACG,UAAUiB;QAC3B;QAEA,MAAMC,OAAOrB,WAAW,GAAG,CAACG;QAC5BkB,KAAK,IAAI,CAAC,CAACT;YACTC,UAAUD;QACZ;IACF,GAAG;QAACT;KAAS;IAEb,OAAO;QACLS;IACF;AACF"}