{"version":3,"file":"components/Loader/executions.mjs","sources":["../../../src/components/Loader/executions.tsx"],"sourcesContent":["import { ClockCircleTwoTone } from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport {\n  Col,\n  Divider,\n  Empty,\n  List,\n  Row,\n  Space,\n  Tabs,\n  Tag,\n  Timeline,\n  Tooltip,\n  Typography,\n} from 'antd';\nimport dayjs from 'dayjs';\nimport { PropsWithChildren, useCallback, useState } from 'react';\nimport InputIcon from 'src/common/svg/loader/input.svg';\nimport OutputIcon from 'src/common/svg/loader/output.svg';\nimport StepIcon from 'src/common/svg/loader/step.svg';\nimport { Size } from '../../constants';\nimport { beautifyPath, formatCosts, useTheme } from '../../utils';\nimport { CodeViewer, DiffViewer } from '../base';\nimport { Card } from '../Card';\nimport { CodeOpener } from '../Opener';\nimport { Title } from '../Title';\nimport { ServerAPIProvider } from '../Manifest';\nimport styles from './Analysis/style.module.scss';\nimport clsx from 'clsx';\n\ninterface LoaderExecutionsProps {\n  cwd: string;\n  data: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetLoaderFileDetails>;\n  index?: number;\n}\n\nconst LoaderPropsItem = ({\n  loader,\n  resource,\n  cwd,\n}: {\n  loader: Omit<SDK.LoaderTransformData, 'input' | 'result'> & {\n    costs: number;\n  };\n  resource: SDK.ResourceData;\n  cwd: string;\n}): React.JSX.Element => {\n  return (\n    <Card\n      title={'Loader Details'}\n      style={{ border: 'none' }}\n      extra={\n        <Tag icon={<ClockCircleTwoTone />} color=\"default\">\n          {dayjs(loader.startAt).format('YYYY-MM-DD HH:mm:ss')}\n        </Tag>\n      }\n    >\n      <Space direction=\"vertical\" style={{ width: '100%' }}>\n        {loader.isPitch ? <Typography.Text code>pitch</Typography.Text> : null}\n        <List size=\"large\" bordered>\n          <List.Item>\n            <Typography.Text strong>{'File Path'}</Typography.Text>\n            <div>{beautifyPath(resource.path, cwd)}</div>\n          </List.Item>\n          <List.Item>\n            <Typography.Text strong>{'Resource Path'}</Typography.Text>\n            <CodeOpener cwd={cwd} url={resource.path} loc=\"\" disabled />\n          </List.Item>\n          <List.Item>\n            <Typography.Text strong>{'Resource Query'}</Typography.Text>\n            <div>{resource.queryRaw || '-'}</div>\n          </List.Item>\n          <List.Item>\n            <Typography.Text strong>{'Duration'}</Typography.Text>\n            <div>{formatCosts(loader.costs)}</div>\n          </List.Item>\n          <List.Item>\n            <Typography.Text strong>{'Loader'}</Typography.Text>\n            <div>\n              <Typography.Text code>{loader.loader}</Typography.Text>\n            </div>\n          </List.Item>\n          <List.Item>\n            <Typography.Text strong>{'Loader Index'}</Typography.Text>\n            <div>{`${loader.loaderIndex}`}</div>\n          </List.Item>\n          <List.Item>\n            <Typography.Text strong>{'Loader Path'}</Typography.Text>\n            <CodeOpener cwd={cwd} url={loader.path} loc=\"\" disabled />\n          </List.Item>\n          <List.Item>\n            <div style={{ width: 180 }}>\n              <Typography.Text strong>{'Options'}</Typography.Text>\n            </div>\n            <Divider type=\"vertical\" />\n            <Typography.Paragraph\n              ellipsis={{\n                rows: 2,\n                expandable: true,\n                symbol: 'more',\n              }}\n              copyable\n            >\n              {JSON.stringify(loader.options || '-')}\n            </Typography.Paragraph>\n          </List.Item>\n        </List>\n      </Space>\n    </Card>\n  );\n};\n\n// Component to render Loader Details content with lazy-loaded code\nconst LoaderDetailsContent = ({\n  loader,\n  resource,\n  isLight,\n  codeData,\n}: {\n  loader: Omit<SDK.LoaderTransformData, 'input' | 'result'> & { costs: number };\n  resource: SDK.ResourceData;\n  isLight: boolean;\n  codeData: SDK.ServerAPI.InferResponseType<SDK.ServerAPI.API.GetLoaderFileInputAndOutput>;\n}): React.JSX.Element => {\n  const hasError = loader.errors && loader.errors.length;\n  const before = codeData?.input || '';\n  const loaderResult = codeData?.output || '';\n\n  return (\n    <div style={{ height: '100%' }}>\n      {hasError ? (\n        <Col span={24} style={{ height: '53%', minHeight: 400 }}>\n          <div\n            style={{\n              padding: Size.BasePadding,\n              borderTop: `1px solid ${isLight ? '#f0f0f0' : 'rgba(253, 253, 253, 0.12)'}`,\n              borderBottom: `1px solid ${isLight ? '#f0f0f0' : 'rgba(253, 253, 253, 0.12)'}`,\n            }}\n          >\n            <Title\n              text={`the error stack of [${loader.loader}] ${loader.isPitch ? 'pitch' : ''}`}\n            />\n          </div>\n          <div style={{ height: '90%' }}>\n            <CodeViewer code={loader.errors[0].message} lang=\"javascript\" />\n          </div>\n        </Col>\n      ) : (\n        <Col span={24} style={{ height: '53%', minHeight: 400 }}>\n          <div\n            style={{\n              display: 'flex',\n              alignItems: 'center',\n              padding: Size.BasePadding,\n              borderBottom: `1px solid ${isLight ? '#f0f0f0' : 'rgba(253, 253, 253, 0.12)'}`,\n            }}\n          >\n            <Title\n              text={\n                <>\n                  {`the result of [${loader.loader}] ${loader.isPitch ? 'pitch' : ''}`}\n                  {!loader.isPitch && (\n                    <span style={{ fontWeight: 400 }}>\n                      (\n                      <InputIcon\n                        style={{\n                          verticalAlign: 'middle',\n                          margin: '0 2px',\n                        }}\n                      />\n                      Input ⟷\n                      <OutputIcon\n                        style={{\n                          verticalAlign: 'middle',\n                          position: 'relative',\n                          top: -2,\n                        }}\n                      />\n                      Output)\n                    </span>\n                  )}\n                </>\n              }\n            />\n            <div style={{ flex: 1 }} />\n          </div>\n          {loader.isPitch ? (\n            loaderResult ? (\n              <div style={{ height: '90%' }}>\n                <CodeViewer\n                  isEmbed\n                  code={loaderResult}\n                  filePath={resource.path}\n                />\n              </div>\n            ) : (\n              <Empty\n                description={\n                  'No loader result. If you use the Brief Mode, there will not have loader results.'\n                }\n              />\n            )\n          ) : (\n            <div style={{ minHeight: '700px' }}>\n              <div style={{ height: '40rem', overflow: 'hidden' }}>\n                {!loaderResult && !before ? (\n                  <Empty\n                    description={\n                      'No loader result. If you use the Brief Mode, there will not have loader results.'\n                    }\n                  />\n                ) : (\n                  <DiffViewer\n                    isEmbed\n                    original={before}\n                    modified={loaderResult || ''}\n                    originalFilePath={resource.path}\n                    modifiedFilePath={resource.path}\n                  />\n                )}\n              </div>\n            </div>\n          )}\n        </Col>\n      )}\n    </div>\n  );\n};\n\nexport const LoaderExecutions = ({\n  data,\n  cwd,\n  index,\n}: PropsWithChildren<LoaderExecutionsProps>): React.JSX.Element => {\n  const { loaders, resource } = data;\n  const [currentIndex, setCurrentIndex] = useState(index || 0);\n  const { isLight } = useTheme();\n  const loader = loaders[currentIndex];\n  const leftSpan = 5;\n  const [activeKey, setActiveKey] = useState('loaderDetails');\n  const onChange = useCallback((key: string) => {\n    setActiveKey(key);\n  }, []);\n\n  return (\n    <Row className={styles.executions} style={{ height: '100%' }}>\n      <Col\n        span={leftSpan}\n        style={{\n          borderRight: `1px solid var(--color-border-secondary)`,\n          padding: Size.BasePadding,\n        }}\n      >\n        <Space direction=\"vertical\" style={{ width: '100%' }}>\n          <Title text=\"Executions\" />\n          <Timeline mode=\"left\" style={{ marginTop: Size.BasePadding }}>\n            {loaders.map((e, i, arr) => {\n              const { loader, isPitch } = e;\n              const costs = formatCosts(e.costs);\n              return (\n                <Timeline.Item\n                  dot={\n                    isPitch ? (\n                      <Tag style={{ marginLeft: 1, fontWeight: 500 }}>\n                        pitch\n                      </Tag>\n                    ) : (\n                      <ClockCircleTwoTone />\n                    )\n                  }\n                  style={{ paddingBottom: 10, textAlign: 'center' }}\n                  key={i}\n                >\n                  <Row align=\"middle\" justify=\"space-between\" gutter={[0, 10]}>\n                    <Col span={24} className={styles.timeline}>\n                      <Tooltip title={loader} trigger=\"hover\">\n                        <div\n                          className={clsx(\n                            styles.box,\n                            currentIndex === i && styles.selected,\n                          )}\n                          onClick={() => {\n                            setCurrentIndex(i);\n                          }}\n                          style={{ textAlign: 'left' }}\n                        >\n                          <div>\n                            <Typography.Text>\n                              {costs.match(/[0-9]*\\.?[0-9]+/g)?.[0]}\n                            </Typography.Text>\n                            {` `}\n                            <Typography.Text type=\"secondary\">\n                              {costs.match(/[a-zA-Z]+/g)}\n                            </Typography.Text>\n                          </div>\n                          <Typography.Text className={styles.loader}>\n                            {loader}\n                          </Typography.Text>\n                        </div>\n                      </Tooltip>\n                    </Col>\n                  </Row>\n                  {i === arr.length - 1 ? null : (\n                    <div style={{ paddingTop: 10 }}>\n                      <StepIcon />\n                    </div>\n                  )}\n                </Timeline.Item>\n              );\n            })}\n          </Timeline>\n        </Space>\n      </Col>\n      <Col span={24 - leftSpan} style={{ height: '100%' }}>\n        <Tabs\n          type=\"card\"\n          defaultActiveKey=\"loaderDetails\"\n          activeKey={activeKey}\n          items={[\n            {\n              label: 'Loader Props',\n              key: 'loaderProps',\n              children: (\n                <LoaderPropsItem\n                  loader={loader}\n                  resource={resource}\n                  cwd={cwd}\n                />\n              ),\n            },\n            {\n              label: 'Loader Details',\n              key: 'loaderDetails',\n              children:\n                activeKey === 'loaderDetails' ? (\n                  <ServerAPIProvider\n                    api={SDK.ServerAPI.API.GetLoaderFileInputAndOutput}\n                    body={{\n                      file: resource.path,\n                      loader: loader.loader,\n                      loaderIndex: loader.loaderIndex,\n                    }}\n                    showSkeleton={false}\n                  >\n                    {(codeData) => (\n                      <LoaderDetailsContent\n                        loader={loader}\n                        resource={resource}\n                        isLight={isLight}\n                        codeData={codeData}\n                      />\n                    )}\n                  </ServerAPIProvider>\n                ) : null,\n            },\n          ]}\n          onChange={onChange}\n        />\n      </Col>\n    </Row>\n  );\n};\n"],"names":["LoaderPropsItem","loader","resource","cwd","Card","Tag","ClockCircleTwoTone","dayjs","Space","Typography","List","beautifyPath","CodeOpener","formatCosts","Divider","JSON","LoaderDetailsContent","isLight","codeData","hasError","before","loaderResult","Col","Size","Title","CodeViewer","InputIcon","OutputIcon","Empty","DiffViewer","LoaderExecutions","data","index","loaders","currentIndex","setCurrentIndex","useState","useTheme","leftSpan","activeKey","setActiveKey","onChange","useCallback","key","Row","styles","Timeline","e","i","arr","isPitch","costs","Tooltip","clsx","StepIcon","Tabs","ServerAPIProvider","SDK"],"mappings":"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"}