{"version":3,"file":"pages/Uploader/index.mjs","sources":["../../../src/pages/Uploader/index.tsx"],"sourcesContent":["import { InboxOutlined } from '@ant-design/icons';\nimport { Common } from '@rsdoctor/types';\nimport { message, Spin, Upload, UploadFile } from 'antd';\nimport React, { useState } from 'react';\nimport { readJSONByFileReader } from '../../utils';\nimport { isRspackStats } from '../../utils/stats';\nimport { handleRspackStats, handleRsdoctorManifest } from './utils';\n\nconst Component: React.FC = () => {\n  const [loading, setLoading] = useState(false);\n\n  // Main file upload processing function\n  const handleFileUpload = async (file: UploadFile) => {\n    if (!file) return;\n\n    setLoading(true);\n\n    try {\n      const json = await readJSONByFileReader<Common.PlainObject>(file);\n\n      if (!json || typeof json !== 'object') {\n        throw new Error('Invalid JSON format');\n      }\n\n      if (isRspackStats(json)) {\n        await handleRspackStats(json);\n      } else {\n        handleRsdoctorManifest(json);\n      }\n    } catch (err) {\n      const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n      message.error(`Upload failed: ${errorMessage}`);\n      console.error('Upload error:', err);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  return (\n    <Spin spinning={loading} tip=\"uploading...\">\n      <Upload.Dragger\n        multiple={false}\n        showUploadList={false}\n        accept=\".json\"\n        onChange={({ file }) => {\n          handleFileUpload(file);\n        }}\n        style={{ width: '100%' }}\n        beforeUpload={() => false}\n      >\n        <p className=\"ant-upload-drag-icon\">\n          <InboxOutlined />\n        </p>\n        <p className=\"ant-upload-text\">\n          Click or drag JSON file to this area to upload and analyze your\n          stats.json or rsdoctor's rsdoctor-data.json.\n        </p>\n        <p className=\"ant-upload-hint\">\n          The rsdoctor's rsdoctor-data.json is in brief mode, and use the file\n          type: ['json'].\n          <a\n            href=\"https://rsdoctor.rs/zh/config/options/output#mode-brief\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            Check the details.\n          </a>\n        </p>\n        <p className=\"ant-upload-hint\">\n          By default, Rsdoctor will emit the rsdoctor-data.json to the output\n          folder.\n        </p>\n      </Upload.Dragger>\n    </Spin>\n  );\n};\n\nexport const Page = Component;\nexport * from './constants';\n"],"names":["Component","loading","setLoading","useState","handleFileUpload","file","json","readJSONByFileReader","Error","isRspackStats","handleRspackStats","handleRsdoctorManifest","err","errorMessage","message","console","Spin","Upload","InboxOutlined","Page"],"mappings":";;;;;;;;AAQA,MAAMA,YAAsB;IAC1B,MAAM,CAACC,SAASC,WAAW,GAAGC,SAAS;IAGvC,MAAMC,mBAAmB,OAAOC;QAC9B,IAAI,CAACA,MAAM;QAEXH,WAAW;QAEX,IAAI;YACF,MAAMI,OAAO,MAAMC,qBAAyCF;YAE5D,IAAI,CAACC,QAAQ,AAAgB,YAAhB,OAAOA,MAClB,MAAM,IAAIE,MAAM;YAGlB,IAAIC,cAAcH,OAChB,MAAMI,kBAAkBJ;iBAExBK,uBAAuBL;QAE3B,EAAE,OAAOM,KAAK;YACZ,MAAMC,eAAeD,eAAeJ,QAAQI,IAAI,OAAO,GAAG;YAC1DE,QAAQ,KAAK,CAAC,CAAC,eAAe,EAAED,cAAc;YAC9CE,QAAQ,KAAK,CAAC,iBAAiBH;QACjC,SAAU;YACRV,WAAW;QACb;IACF;IAEA,OAAO,WAAP,GACE,IAACc,MAAIA;QAAC,UAAUf;QAAS,KAAI;kBAC3B,mBAACgB,OAAO,OAAO;YACb,UAAU;YACV,gBAAgB;YAChB,QAAO;YACP,UAAU,CAAC,EAAEZ,IAAI,EAAE;gBACjBD,iBAAiBC;YACnB;YACA,OAAO;gBAAE,OAAO;YAAO;YACvB,cAAc,IAAM;;8BAEpB,IAAC;oBAAE,WAAU;8BACX,kBAACa,eAAaA,CAAAA;;8BAEhB,IAAC;oBAAE,WAAU;8BAAkB;;8BAI/B,KAAC;oBAAE,WAAU;;wBAAkB;sCAG7B,IAAC;4BACC,MAAK;4BACL,QAAO;4BACP,KAAI;sCACL;;;;8BAIH,IAAC;oBAAE,WAAU;8BAAkB;;;;;AAOvC;AAEO,MAAMC,OAAOnB"}