{"version":3,"file":"components/Plugins/webpack.mjs","sources":["../../../src/components/Plugins/webpack.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Table, Tooltip } from 'antd';\nimport { sumBy, uniq } from 'es-toolkit/compat';\nimport { SDK } from '@rsdoctor/types';\nimport { formatCosts } from '../../utils';\n\ninterface WebpackPluginsTableDataItem {\n  tapName: string;\n  hook: string;\n  key: string;\n  hookData: SDK.PluginHookData[];\n}\nexport interface WebpackPluginsDataTableProps {\n  dataSource: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetPluginData>;\n}\n\nexport function useWebpackPluginsDataSource(\n  plugin: SDK.PluginData,\n  selectedTapNames: string[],\n  selectedHooks: string[],\n) {\n  const tapNames = useMemo(\n    () =>\n      uniq(\n        Object.values(plugin)\n          .flat()\n          .map((e) => e.tapName),\n      ),\n    [plugin],\n  );\n\n  const hooks = useMemo(() => Object.keys(plugin), [plugin]);\n\n  const dataSource = useMemo(() => {\n    if (!tapNames.length) return [];\n\n    return tapNames.reduce((total, tapName) => {\n      if (selectedTapNames.length && !selectedTapNames.includes(tapName)) {\n        return total;\n      }\n\n      hooks.forEach((hook) => {\n        if (selectedHooks.length && !selectedHooks.includes(hook)) {\n          return;\n        }\n\n        const hookData = plugin[hook].filter((e) => e.tapName === tapName);\n        if (hookData.length === 0) return;\n        total.push({\n          tapName,\n          hook,\n          key: `${tapName}${hook}`,\n          hookData,\n        });\n      });\n\n      return total;\n    }, [] as WebpackPluginsTableDataItem[]);\n  }, [plugin, selectedTapNames, selectedHooks]);\n\n  return {\n    dataSource,\n    tapNames,\n    hooks,\n  };\n}\n\nexport const WebpackPluginsDataTable: React.FC<\n  WebpackPluginsDataTableProps\n> = ({ dataSource }) => {\n  return (\n    <Table\n      dataSource={dataSource}\n      rowKey={(v) => `${v.tapName}_${v.hook}`}\n      columns={[\n        {\n          title: `Plugin Tap Name`,\n          render: (_v, r) => r.tapName,\n        },\n        {\n          title: `Hook`,\n          render: (_v, r) => r.hook,\n        },\n        {\n          title: 'calls',\n          render: (_v, r) => (\n            <Tooltip\n              title={`\"${r.hook}\" has been called ${r.data.length} times by \"${r.tapName}\"`}\n            >\n              {r.data.length}\n            </Tooltip>\n          ),\n          sorter(a, b) {\n            return a.data.length - b.data.length;\n          },\n        },\n        {\n          title: 'duration(total)',\n          render: (_v, r) => formatCosts(sumBy(r.data, (e) => e.costs)),\n          sorter(a, b) {\n            return (\n              sumBy(a.data, (e) => e.costs) - sumBy(b.data, (e) => e.costs)\n            );\n          },\n          defaultSortOrder: 'descend',\n        },\n      ]}\n    />\n  );\n};\n"],"names":["useWebpackPluginsDataSource","plugin","selectedTapNames","selectedHooks","tapNames","useMemo","uniq","Object","e","hooks","dataSource","total","tapName","hook","hookData","WebpackPluginsDataTable","Table","v","_v","r","Tooltip","a","b","formatCosts","sumBy"],"mappings":";;;;;AAgBO,SAASA,4BACdC,MAAsB,EACtBC,gBAA0B,EAC1BC,aAAuB;IAEvB,MAAMC,WAAWC,QACf,IACEC,KACEC,OAAO,MAAM,CAACN,QACX,IAAI,GACJ,GAAG,CAAC,CAACO,IAAMA,EAAE,OAAO,IAE3B;QAACP;KAAO;IAGV,MAAMQ,QAAQJ,QAAQ,IAAME,OAAO,IAAI,CAACN,SAAS;QAACA;KAAO;IAEzD,MAAMS,aAAaL,QAAQ;QACzB,IAAI,CAACD,SAAS,MAAM,EAAE,OAAO,EAAE;QAE/B,OAAOA,SAAS,MAAM,CAAC,CAACO,OAAOC;YAC7B,IAAIV,iBAAiB,MAAM,IAAI,CAACA,iBAAiB,QAAQ,CAACU,UACxD,OAAOD;YAGTF,MAAM,OAAO,CAAC,CAACI;gBACb,IAAIV,cAAc,MAAM,IAAI,CAACA,cAAc,QAAQ,CAACU,OAClD;gBAGF,MAAMC,WAAWb,MAAM,CAACY,KAAK,CAAC,MAAM,CAAC,CAACL,IAAMA,EAAE,OAAO,KAAKI;gBAC1D,IAAIE,AAAoB,MAApBA,SAAS,MAAM,EAAQ;gBAC3BH,MAAM,IAAI,CAAC;oBACTC;oBACAC;oBACA,KAAK,GAAGD,UAAUC,MAAM;oBACxBC;gBACF;YACF;YAEA,OAAOH;QACT,GAAG,EAAE;IACP,GAAG;QAACV;QAAQC;QAAkBC;KAAc;IAE5C,OAAO;QACLO;QACAN;QACAK;IACF;AACF;AAEO,MAAMM,0BAET,CAAC,EAAEL,UAAU,EAAE,GACV,WAAP,GACE,IAACM,OAAKA;QACJ,YAAYN;QACZ,QAAQ,CAACO,IAAM,GAAGA,EAAE,OAAO,CAAC,CAAC,EAAEA,EAAE,IAAI,EAAE;QACvC,SAAS;YACP;gBACE,OAAO;gBACP,QAAQ,CAACC,IAAIC,IAAMA,EAAE,OAAO;YAC9B;YACA;gBACE,OAAO;gBACP,QAAQ,CAACD,IAAIC,IAAMA,EAAE,IAAI;YAC3B;YACA;gBACE,OAAO;gBACP,QAAQ,CAACD,IAAIC,IAAAA,WAAAA,GACX,IAACC,SAAOA;wBACN,OAAO,CAAC,CAAC,EAAED,EAAE,IAAI,CAAC,kBAAkB,EAAEA,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAEA,EAAE,OAAO,CAAC,CAAC,CAAC;kCAE5EA,EAAE,IAAI,CAAC,MAAM;;gBAGlB,QAAOE,CAAC,EAAEC,CAAC;oBACT,OAAOD,EAAE,IAAI,CAAC,MAAM,GAAGC,EAAE,IAAI,CAAC,MAAM;gBACtC;YACF;YACA;gBACE,OAAO;gBACP,QAAQ,CAACJ,IAAIC,IAAMI,YAAYC,MAAML,EAAE,IAAI,EAAE,CAACX,IAAMA,EAAE,KAAK;gBAC3D,QAAOa,CAAC,EAAEC,CAAC;oBACT,OACEE,MAAMH,EAAE,IAAI,EAAE,CAACb,IAAMA,EAAE,KAAK,IAAIgB,MAAMF,EAAE,IAAI,EAAE,CAACd,IAAMA,EAAE,KAAK;gBAEhE;gBACA,kBAAkB;YACpB;SACD"}