{"version":3,"file":"utils/hooks.mjs","sources":["../../src/utils/hooks.ts"],"sourcesContent":["import { Algorithm } from '@rsdoctor/utils/common';\nimport { Client, Manifest, Rule, SDK } from '@rsdoctor/types';\nimport { uniqBy, defaults, throttle } from 'es-toolkit/compat';\nimport {\n  useEffect,\n  useLayoutEffect,\n  useMemo,\n  useRef,\n  useState,\n  useCallback,\n  type SetStateAction,\n  type Dispatch,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport parse from 'url-parse';\nimport { theme } from 'antd';\n\nimport './i18n';\nimport { Language } from '../constants';\nimport { setLocaleToStorage } from './storage';\n\nconst route = Client.RsdoctorClientRoutes.RuleIndex;\nconst safeExternalProtocols = new Set(['http:', 'https:']);\n\nexport const useI18n: typeof useTranslation = () => {\n  const { i18n, ...rest } = useTranslation();\n\n  return {\n    ...rest,\n    i18n: {\n      ...i18n,\n      changeLanguage(lng, callback) {\n        return i18n.changeLanguage(lng, (error, t) => {\n          if (!error) {\n            setLocaleToStorage(lng as Language);\n          }\n          if (callback) {\n            callback(error, t);\n          }\n        });\n      },\n    },\n  };\n};\n\nexport function getSafeExternalUrl(link?: string) {\n  if (!link) return;\n\n  try {\n    const url = new URL(link);\n    return safeExternalProtocols.has(url.protocol) ? url.href : undefined;\n  } catch {\n    return;\n  }\n}\n\nexport function useRuleIndexNavigate(code: string, link?: string) {\n  const navigate = useNavigate();\n  const safeLink = getSafeExternalUrl(link);\n\n  return () => {\n    if (safeLink) {\n      window.open(safeLink, '_blank', 'noopener,noreferrer');\n      return;\n    }\n\n    navigate(\n      `${route}?${Rule.RsdoctorRuleClientConstant.UrlQueryForErrorCode}=${code}`,\n    );\n  };\n}\n\nexport function useUrlQuery() {\n  const search = useLocation().search || location.search;\n\n  return useMemo(() => parse(search, true).query, [search]);\n}\n\nexport function useLoading(defaultLoading = false) {\n  const [loading, setLoading] = useState<boolean>(defaultLoading);\n\n  return {\n    loading,\n    setLoading,\n    async withLoading(\n      func: (...args: unknown[]) => Promise<unknown> | unknown,\n    ) {\n      try {\n        setLoading(true);\n        await func();\n      } finally {\n        setLoading(false);\n      }\n    },\n  };\n}\n\nexport function useProjectRootByManifest(manifest: Manifest.RsdoctorManifest) {\n  return manifest.data.root;\n}\n\nexport function useHashByManifest(manifest: Manifest.RsdoctorManifest) {\n  return manifest.data.hash;\n}\n\nexport function useCloudManifestUrlByManifest(\n  manifest:\n    | Manifest.RsdoctorManifest\n    | Manifest.RsdoctorManifestWithShardingFiles\n    | void,\n) {\n  if (!manifest) return;\n}\n\nfunction ensurePlainObject<T extends object>(value: T, dfts: T): T {\n  if (value && typeof value === 'object') {\n    if (Array.isArray(value)) {\n      return dfts;\n    }\n    return defaults(value, dfts);\n  }\n\n  return dfts;\n}\n\nexport function useChunkGraphByManifest(manifest: Manifest.RsdoctorManifest) {\n  const prev = manifest.data.chunkGraph;\n  if (typeof prev === 'string') {\n    manifest.data.chunkGraph = JSON.parse(\n      Algorithm.decompressText(prev as string),\n    );\n  }\n\n  return ensurePlainObject(manifest.data.chunkGraph, {\n    assets: [],\n    chunks: [],\n    entrypoints: [],\n  });\n}\n\nexport function useConfigOutputFileNameByManifest(\n  manifest: Manifest.RsdoctorManifest,\n) {\n  if (\n    typeof manifest.data.configs?.[0]?.config?.output?.filename === 'string'\n  ) {\n    return manifest.data.configs?.[0]?.config?.output?.filename;\n  }\n  return '';\n}\n\nexport function useModuleGraphByManifest(manifest: Manifest.RsdoctorManifest) {\n  const prev = manifest.data.moduleGraph;\n  if (typeof prev === 'string') {\n    manifest.data.moduleGraph = JSON.parse(\n      Algorithm.decompressText(prev as string),\n    );\n  }\n\n  return ensurePlainObject(manifest.data.moduleGraph, {\n    dependencies: [],\n    modules: [],\n    moduleGraphModules: [],\n    exports: [],\n    sideEffects: [],\n    variables: [],\n  });\n}\n\nexport function useModuleGraph(moduleGraph: SDK.ModuleGraphData) {\n  const prev = moduleGraph;\n  if (typeof prev === 'string') {\n    moduleGraph = JSON.parse(Algorithm.decompressText(prev as string));\n  }\n\n  return ensurePlainObject(moduleGraph, {\n    dependencies: [],\n    modules: [],\n    moduleGraphModules: [],\n    exports: [],\n    sideEffects: [],\n    variables: [],\n  });\n}\n\nexport function usePackageGraphByManifest(manifest: Manifest.RsdoctorManifest) {\n  const prev = manifest.data.packageGraph;\n  if (typeof prev === 'string') {\n    manifest.data.packageGraph = JSON.parse(\n      Algorithm.decompressText(prev as string),\n    );\n  }\n  return ensurePlainObject(manifest.data.packageGraph, {\n    packages: [],\n    dependencies: [],\n  });\n}\n\nexport function useUniqModulesByManifest(manifest: Manifest.RsdoctorManifest) {\n  return uniqBy(useModuleGraphByManifest(manifest).modules, (e) => e.path);\n}\n\nexport function useUniqModules(modules: SDK.ModuleData[]) {\n  return uniqBy(modules, (e) => e.path);\n}\n\nexport function useErrorsByManifest(manifest: Manifest.RsdoctorManifest) {\n  const prev = manifest.data.errors;\n  if (typeof prev === 'string') {\n    manifest.data.errors = JSON.parse(Algorithm.decompressText(prev as string));\n  }\n  return manifest.data.errors || [];\n}\n\nexport function useBundleAlertsByManifest(manifest: Manifest.RsdoctorManifest) {\n  const errors = useErrorsByManifest(manifest);\n  return useBundleAlertsByErrors(errors);\n}\n\nexport function useDuplicatePackagesByManifest(\n  manifest: Manifest.RsdoctorManifest,\n): Rule.PackageRelationDiffRuleStoreData[] {\n  const alerts = useBundleAlertsByManifest(manifest);\n  return useDuplicatePackagesByErrors(alerts);\n}\n\nexport function useCompileAlertsByErrors(\n  errors: Manifest.RsdoctorManifestData['errors'],\n) {\n  if (Array.isArray(errors)) {\n    return errors.filter(\n      (e) =>\n        e.category === Rule.RuleMessageCategory.Compile &&\n        e.code !== Rule.RuleMessageCodeEnumerated.Overlay,\n    );\n  }\n  return [];\n}\n\nexport function useBundleAlertsByErrors(\n  errors: Manifest.RsdoctorManifestData['errors'],\n) {\n  if (Array.isArray(errors)) {\n    return errors.filter(\n      (e) =>\n        e.category === Rule.RuleMessageCategory.Bundle &&\n        e.code !== Rule.RuleMessageCodeEnumerated.Overlay,\n    );\n  }\n  return [];\n}\n\nexport function useDuplicatePackagesByErrors(\n  errors: Manifest.RsdoctorManifestData['errors'],\n) {\n  return useBundleAlertsByErrors(errors).filter(\n    (e) => e.code === Rule.RuleErrorMap.E1001.code,\n  ) as Rule.PackageRelationDiffRuleStoreData[];\n}\n\nexport function useWebpackConfigurationByConfigs(configs: SDK.ConfigData = []) {\n  if (Array.isArray(configs)) {\n    return configs.find((e) => e.name === 'webpack' || e.name === 'rspack');\n  }\n  return null;\n}\n\nexport function useDetectIfCloudIdeEnv() {\n  if (\n    window.location.protocol === 'https:' &&\n    window.location.href.indexOf('ide-proxy') > 0\n  ) {\n    return true;\n  }\n  return false;\n}\n\nexport function useWindowWidth() {\n  const [windowWidth, setWindowWidth] = useState(window.innerWidth);\n\n  useEffect(() => {\n    const handleResize = () => setWindowWidth(window.innerWidth);\n    window.addEventListener('resize', handleResize);\n    return () => {\n      window.removeEventListener('resize', handleResize);\n    };\n  }, []);\n\n  return windowWidth;\n}\n\nexport function useElementSize<T extends HTMLElement = HTMLDivElement>() {\n  const ref = useRef<T>(null);\n  const [width, setWidth_] = useState(0);\n  const [height, setHeight_] = useState(0);\n\n  useLayoutEffect(() => {\n    const $el = ref.current;\n    if (!$el) return;\n    const setWidth = (n: number) => setWidth_(Math.ceil(n));\n    const setHeight = (n: number) => setHeight_(Math.ceil(n));\n\n    const initialRect = $el.getBoundingClientRect();\n    setWidth(initialRect.width);\n    setHeight(initialRect.height);\n\n    const onResize = throttle((entries: ResizeObserverEntry[]) => {\n      const entry = entries[0];\n      if (!entry) return;\n\n      const borderBox = entry.borderBoxSize?.[0];\n\n      if (borderBox) {\n        setWidth(borderBox.inlineSize);\n        setHeight(borderBox.blockSize);\n      } else {\n        // fallback for dead browsers\n        setWidth(entry.contentRect.width);\n        setHeight(entry.contentRect.height);\n      }\n    }, 100);\n    const observer = new ResizeObserver(onResize);\n\n    observer.observe($el);\n\n    return () => {\n      observer.disconnect();\n      onResize.cancel();\n    };\n  }, []);\n\n  return [ref, { width, height }] as const;\n}\n\nexport function usePersistedState<T>(\n  baseKey: string,\n  initialValue: T | (() => T),\n): [T, Dispatch<SetStateAction<T>>] {\n  const NS = 'RSDOC:';\n\n  const key = NS + baseKey;\n  const [state, setState] = useState<T>(() => {\n    try {\n      const item = window.localStorage.getItem(key);\n      if (item !== null) {\n        return JSON.parse(item);\n      }\n\n      return typeof initialValue === 'function'\n        ? (initialValue as () => T)()\n        : initialValue;\n    } catch (error) {\n      console.warn(`Error reading localStorage key \"${key}\":`, error);\n      return typeof initialValue === 'function'\n        ? (initialValue as () => T)()\n        : initialValue;\n    }\n  });\n\n  const setPersistedState = useCallback(\n    (value: SetStateAction<T>) => {\n      try {\n        setState((prevState) => {\n          const nextState =\n            value instanceof Function\n              ? (value as (prevState: T) => T)(prevState)\n              : value;\n\n          window.localStorage.setItem(key, JSON.stringify(nextState));\n          return nextState;\n        });\n      } catch (error) {\n        console.warn(`Error setting localStorage key \"${key}\":`, error);\n      }\n    },\n    [key],\n  );\n\n  return [state, setPersistedState];\n}\n\nexport const useThemeToken = () => {\n  const { token } = theme.useToken();\n  return token;\n};\n"],"names":["route","Client","safeExternalProtocols","Set","useI18n","i18n","rest","useTranslation","lng","callback","error","t","setLocaleToStorage","getSafeExternalUrl","link","url","URL","undefined","useRuleIndexNavigate","code","navigate","useNavigate","safeLink","window","Rule","useUrlQuery","search","useLocation","location","useMemo","parse","useLoading","defaultLoading","loading","setLoading","useState","func","useProjectRootByManifest","manifest","useHashByManifest","useCloudManifestUrlByManifest","ensurePlainObject","value","dfts","Array","defaults","useChunkGraphByManifest","prev","JSON","Algorithm","useConfigOutputFileNameByManifest","useModuleGraphByManifest","useModuleGraph","moduleGraph","usePackageGraphByManifest","useUniqModulesByManifest","uniqBy","e","useUniqModules","modules","useErrorsByManifest","useBundleAlertsByManifest","errors","useBundleAlertsByErrors","useDuplicatePackagesByManifest","alerts","useDuplicatePackagesByErrors","useCompileAlertsByErrors","useWebpackConfigurationByConfigs","configs","useDetectIfCloudIdeEnv","useWindowWidth","windowWidth","setWindowWidth","useEffect","handleResize","useElementSize","ref","useRef","width","setWidth_","height","setHeight_","useLayoutEffect","$el","setWidth","n","Math","setHeight","initialRect","onResize","throttle","entries","entry","borderBox","observer","ResizeObserver","usePersistedState","baseKey","initialValue","NS","key","state","setState","item","console","setPersistedState","useCallback","prevState","nextState","Function","useThemeToken","token","theme"],"mappings":"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"}