index.js.map (25916B)
1 { 2 "version": 3, 3 "sources": ["../src/index.tsx", "../node_modules/pretty-bytes/index.js", "../src/hooks/use-interval.tsx"], 4 "sourcesContent": ["import {\n Action,\n ActionPanel,\n clearSearchBar,\n closeMainWindow,\n Color,\n confirmAlert,\n getPreferenceValues,\n Icon,\n List,\n open,\n popToRoot,\n showToast,\n Toast,\n} from \"@raycast/api\";\nimport { exec } from \"child_process\";\nimport prettyBytes from \"pretty-bytes\";\nimport { useEffect, useState } from \"react\";\nimport useInterval from \"./hooks/use-interval\";\nimport { Process } from \"./types\";\n\nexport default function ProcessList() {\n const [fetchResult, setFetchResult] = useState<Process[]>([]);\n const [state, setState] = useState<Process[]>([]);\n const [query, setQuery] = useState<string>(\"\");\n\n const preferences = getPreferenceValues<Preferences>();\n const shouldIncludePaths = preferences.shouldSearchInPaths;\n const shouldIncludePid = preferences.shouldSearchInPid;\n const shouldPrioritizeAppsWhenFiltering = preferences.shouldPrioritizeAppsWhenFiltering;\n const shouldShowPID = preferences.shouldShowPID;\n const shouldShowPath = preferences.shouldShowPath;\n const refreshDuration = +preferences.refreshDuration;\n const closeWindowAfterKill = preferences.closeWindowAfterKill;\n const clearSearchBarAfterKill = preferences.clearSearchBarAfterKill;\n const goToRootAfterKill = preferences.goToRootAfterKill;\n const [sortBy, setSortBy] = useState<\"cpu\" | \"memory\">(preferences.sortByMem ? \"memory\" : \"cpu\");\n const [aggregateApps, setAggregateApps] = useState<boolean>(preferences.aggregateApps);\n\n const fetchProcesses = () => {\n exec(`ps -eo pid,ppid,pcpu,rss,comm`, (err, stdout) => {\n if (err != null) {\n return;\n }\n\n const processes = stdout\n .split(\"\\n\")\n .map((line) => {\n const defaultValue = [\"\", \"\", \"\", \"\", \"\", \"\"];\n const regex = /(\\d+)\\s+(\\d+)\\s+(\\d+[.|,]\\d+)\\s+(\\d+)\\s+(.*)/;\n const [, id, pid, cpu, mem, path] = line.match(regex) ?? defaultValue;\n const processName = path.match(/[^/]*[^/]*$/i)?.[0] ?? \"\";\n const isPrefPane = path.includes(\".prefPane\");\n const isApp = path.includes(\".app/\");\n\n return {\n id: parseInt(id),\n pid: parseInt(pid),\n cpu: parseFloat(cpu),\n mem: parseInt(mem),\n type: isPrefPane ? \"prefPane\" : isApp ? \"app\" : \"binary\",\n path,\n processName,\n } as Process;\n })\n .filter((process) => process.processName !== \"\");\n\n setFetchResult(processes);\n });\n };\n\n useInterval(fetchProcesses, refreshDuration);\n useEffect(() => {\n let processes = fetchResult;\n if (aggregateApps) {\n processes = aggregate(processes);\n }\n processes.sort((a, b) => {\n if (sortBy === \"memory\") {\n return a.mem > b.mem ? -1 : 1;\n } else {\n return a.cpu > b.cpu ? -1 : 1;\n }\n });\n setState(processes);\n }, [fetchResult, sortBy, aggregateApps]);\n\n const fileIcon = (process: Process) => {\n if (process.type === \"prefPane\") {\n return {\n fileIcon: process.path?.replace(/(.+\\.prefPane)(.+)/, \"$1\") ?? \"\",\n };\n }\n\n if (process.type === \"app\" || process.type === \"aggregatedApp\") {\n return { fileIcon: process.path?.replace(/(.+\\.app)(.+)/, \"$1\") ?? \"\" };\n }\n\n return \"/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ExecutableBinaryIcon.icns\";\n };\n\n const killProcess = async (process: Process, force: boolean = false) => {\n const processName = process.processName === \"-\" ? `process ${process.id}?` : process.processName;\n if (\n !(await confirmAlert({\n title: `${force ? \"Force \" : \"\"}Kill ${processName}?`,\n rememberUserChoice: true,\n }))\n ) {\n showToast({\n title: `Cancelled Killing ${processName}`,\n style: Toast.Style.Failure,\n });\n return;\n }\n exec(`zsh -c '${force ? \"sudo \" : \"\"}kill -9 ${process.id}'`, (error) => {\n if (error) {\n if (force) {\n confirmAlert({\n title: `Failed Killing ${processName}`,\n message:\n \"Please ensure that touch id/password prompt is enabled for sudo: https://dev.to/siddhantkcode/enable-touch-id-authentication-for-sudo-on-macos-sonoma-14x-4d28\",\n primaryAction: {\n title: \"Open Link\",\n onAction: () =>\n open(\"https://dev.to/siddhantkcode/enable-touch-id-authentication-for-sudo-on-macos-sonoma-14x-4d28\"),\n },\n });\n } else {\n showToast({\n title: `Failed Killing ${processName}`,\n style: Toast.Style.Failure,\n });\n }\n return;\n }\n showToast({\n title: `Killed ${processName}`,\n style: Toast.Style.Success,\n });\n });\n setFetchResult(state.filter((p) => p.id !== process.id));\n if (closeWindowAfterKill) {\n closeMainWindow();\n }\n if (goToRootAfterKill) {\n popToRoot({ clearSearchBar: clearSearchBarAfterKill });\n }\n if (clearSearchBarAfterKill) {\n clearSearchBar({ forceScrollToTop: true });\n }\n };\n\n const subtitleString = (process: Process) => {\n const subtitles = [];\n if (process.type === \"aggregatedApp\" && process.appName != undefined) {\n subtitles.push(process.appName);\n }\n if (shouldShowPID) {\n subtitles.push(process.id.toString());\n }\n if (shouldShowPath) {\n subtitles.push(process.path);\n }\n return subtitles.join(\" - \");\n };\n\n const aggregate = (processes: Process[]): Process[] => {\n const result = Array<Process>();\n type ProcessNode = {\n process: Process | undefined;\n childNodes: ProcessNode[];\n };\n const appMap = new Map<number, ProcessNode>();\n appMap.set(1, { process: { id: 1 } as Process, childNodes: [] });\n const originalAppIds = Array<number>();\n processes.forEach((process) => {\n if (process.type === \"app\") {\n originalAppIds.push(process.id);\n let node = appMap.get(process.id);\n if (node == undefined) {\n node = { process, childNodes: [] } as ProcessNode;\n appMap.set(process.id, node);\n } else {\n node.process = process;\n }\n let knownRootNode = appMap.get(process.pid);\n if (knownRootNode == undefined) {\n knownRootNode = {\n process: undefined,\n childNodes: [node],\n } as ProcessNode;\n appMap.set(process.pid, knownRootNode);\n } else {\n if (knownRootNode.process == undefined) {\n knownRootNode.childNodes.push(node);\n } else {\n let nextNode;\n while (\n knownRootNode?.process != undefined &&\n knownRootNode.process.pid !== 1 &&\n (nextNode = appMap.get(knownRootNode.process.pid)) != undefined\n ) {\n knownRootNode = nextNode;\n }\n knownRootNode?.childNodes.push(node);\n }\n }\n // move childNodes to parent\n if (knownRootNode.process?.id !== 1) {\n knownRootNode.childNodes = knownRootNode.childNodes.concat(node.childNodes);\n node.childNodes = [];\n }\n } else {\n result.push(process);\n }\n });\n const rootApps = appMap.get(1)?.childNodes;\n let afterAppIds = Array<number>();\n rootApps?.forEach((rootApp) => {\n if (rootApp.process == undefined) {\n return;\n }\n afterAppIds.push(rootApp.process.id);\n const childIds: number[] = rootApp.childNodes\n .map((node) => node.process?.id)\n .filter((item): item is number => item != undefined);\n afterAppIds = afterAppIds.concat(childIds);\n result.push({\n id: rootApp.process.id,\n pid: rootApp.process.pid,\n cpu:\n (rootApp.childNodes?.reduce((acc, cur) => {\n return acc + (cur.process?.cpu ?? 0);\n }, 0) ?? 0) + rootApp.process.cpu,\n mem:\n (rootApp.childNodes?.reduce((acc, cur) => {\n return acc + (cur.process?.mem ?? 0);\n }, 0) ?? 0) + rootApp.process.mem,\n type: \"aggregatedApp\",\n path: rootApp.process.path,\n processName: rootApp.process.processName,\n appName: rootApp.process.path.match(/(?<=\\/)[^/]+(?=\\.app\\/)/)?.[0],\n } as Process);\n });\n return result;\n };\n\n const processCount = state.length;\n\n return (\n <List\n isLoading={state.length === 0}\n searchBarPlaceholder=\"Filter by name\"\n onSearchTextChange={(query) => setQuery(query)}\n searchBarAccessory={\n <List.Dropdown tooltip=\"Filter\" storeValue onChange={(newValue) => setSortBy(newValue as \"cpu\" | \"memory\")}>\n <List.Dropdown.Section title=\"Sort By\">\n <List.Dropdown.Item title=\"CPU Usage\" value=\"cpu\" />\n <List.Dropdown.Item title=\"Memory Usage\" value=\"memory\" />\n </List.Dropdown.Section>\n </List.Dropdown>\n }\n >\n <List.Section title=\"Processes\" subtitle={`${processCount} running`}>\n {state\n .filter((process) => {\n if (query === \"\") {\n return true;\n }\n const nameMatches = process.processName.toLowerCase().includes(query.toLowerCase());\n const pathMatches =\n shouldIncludePaths &&\n process.path.toLowerCase().match(new RegExp(`.+${query}.*\\\\.[app|framework|prefpane]`, \"ig\")) != null;\n const pidMatches = shouldIncludePid && process.id.toString().includes(query);\n const appNameMatches =\n process.type === \"aggregatedApp\" && process.appName?.toLowerCase().includes(query.toLowerCase());\n\n return nameMatches || pathMatches || pidMatches || appNameMatches;\n })\n .sort((a, b) => {\n // If this flag is true, we bring apps to the top, but only if we have a query.\n if (shouldPrioritizeAppsWhenFiltering) {\n const appTypes = [\"app\", \"aggregatedApp\"];\n if (appTypes.includes(a.type) && !appTypes.includes(b.type)) {\n return -1;\n } else if (!appTypes.includes(a.type) && appTypes.includes(b.type)) {\n return 1;\n }\n }\n\n // Otherwise, we leave the order as is.\n return 0;\n })\n .map((process, index) => {\n const icon = fileIcon(process);\n return (\n <List.Item\n key={index}\n title={process.processName}\n subtitle={subtitleString(process)}\n icon={icon}\n accessories={[\n {\n text: `${process.cpu.toFixed(2)}%`,\n icon: { source: \"cpu.svg\", tintColor: Color.PrimaryText },\n tooltip: \"% CPU\",\n },\n {\n text: prettyBytes(process.mem * 1024),\n icon: {\n source: \"memorychip.svg\",\n tintColor: Color.PrimaryText,\n },\n tooltip: \"Memory\",\n },\n ]}\n actions={\n <ActionPanel>\n <Action title=\"Kill\" icon={Icon.XMarkCircle} onAction={() => killProcess(process)} />\n <Action title=\"Force Kill\" icon={Icon.XMarkCircle} onAction={() => killProcess(process, true)} />\n {process.path == null ? null : <Action.CopyToClipboard title=\"Copy Path\" content={process.path} />}\n <Action\n title=\"Reload\"\n icon={Icon.ArrowClockwise}\n shortcut={{ key: \"r\", modifiers: [\"cmd\"] }}\n onAction={() => fetchProcesses()}\n />\n <Action\n title={`${aggregateApps ? \"Disable\" : \"Enable\"} Aggregating Apps`}\n icon={Icon.AppWindow}\n shortcut={{ key: \"tab\", modifiers: [\"shift\"] }}\n onAction={() => {\n setAggregateApps(!aggregateApps);\n showToast({\n title: `${aggregateApps ? \"Disabled\" : \"Enabled\"} aggregating apps`,\n });\n }}\n />\n </ActionPanel>\n }\n />\n );\n })}\n </List.Section>\n </List>\n );\n}\n", "const BYTE_UNITS = [\n\t'B',\n\t'kB',\n\t'MB',\n\t'GB',\n\t'TB',\n\t'PB',\n\t'EB',\n\t'ZB',\n\t'YB',\n];\n\nconst BIBYTE_UNITS = [\n\t'B',\n\t'KiB',\n\t'MiB',\n\t'GiB',\n\t'TiB',\n\t'PiB',\n\t'EiB',\n\t'ZiB',\n\t'YiB',\n];\n\nconst BIT_UNITS = [\n\t'b',\n\t'kbit',\n\t'Mbit',\n\t'Gbit',\n\t'Tbit',\n\t'Pbit',\n\t'Ebit',\n\t'Zbit',\n\t'Ybit',\n];\n\nconst BIBIT_UNITS = [\n\t'b',\n\t'kibit',\n\t'Mibit',\n\t'Gibit',\n\t'Tibit',\n\t'Pibit',\n\t'Eibit',\n\t'Zibit',\n\t'Yibit',\n];\n\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/\nconst toLocaleString = (number, locale, options) => {\n\tlet result = number;\n\tif (typeof locale === 'string' || Array.isArray(locale)) {\n\t\tresult = number.toLocaleString(locale, options);\n\t} else if (locale === true || options !== undefined) {\n\t\tresult = number.toLocaleString(undefined, options);\n\t}\n\n\treturn result;\n};\n\nexport default function prettyBytes(number, options) {\n\tif (!Number.isFinite(number)) {\n\t\tthrow new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n\t}\n\n\toptions = {\n\t\tbits: false,\n\t\tbinary: false,\n\t\tspace: true,\n\t\t...options,\n\t};\n\n\tconst UNITS = options.bits\n\t\t? (options.binary ? BIBIT_UNITS : BIT_UNITS)\n\t\t: (options.binary ? BIBYTE_UNITS : BYTE_UNITS);\n\n\tconst separator = options.space ? ' ' : '';\n\n\tif (options.signed && number === 0) {\n\t\treturn ` 0${separator}${UNITS[0]}`;\n\t}\n\n\tconst isNegative = number < 0;\n\tconst prefix = isNegative ? '-' : (options.signed ? '+' : '');\n\n\tif (isNegative) {\n\t\tnumber = -number;\n\t}\n\n\tlet localeOptions;\n\n\tif (options.minimumFractionDigits !== undefined) {\n\t\tlocaleOptions = {minimumFractionDigits: options.minimumFractionDigits};\n\t}\n\n\tif (options.maximumFractionDigits !== undefined) {\n\t\tlocaleOptions = {maximumFractionDigits: options.maximumFractionDigits, ...localeOptions};\n\t}\n\n\tif (number < 1) {\n\t\tconst numberString = toLocaleString(number, options.locale, localeOptions);\n\t\treturn prefix + numberString + separator + UNITS[0];\n\t}\n\n\tconst exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1);\n\tnumber /= (options.binary ? 1024 : 1000) ** exponent;\n\n\tif (!localeOptions) {\n\t\tnumber = number.toPrecision(3);\n\t}\n\n\tconst numberString = toLocaleString(Number(number), options.locale, localeOptions);\n\n\tconst unit = UNITS[exponent];\n\n\treturn prefix + numberString + separator + unit;\n}\n", "import { useEffect, useRef } from \"react\";\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\nexport function useInterval(callback: () => void, delay: number | null) {\n const savedCallback = useRef(noop);\n\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n savedCallback.current();\n const refreshEnabled = (delay ?? 0) > 0;\n if (refreshEnabled) {\n const interval = Math.max(delay ?? 0, 1000);\n const id = setInterval(() => savedCallback.current(), interval);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n\nexport default useInterval;\n"], 5 "mappings": "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", 6 "names": ["index_exports", "__export", "ProcessList", "__toCommonJS", "import_api", "import_child_process", "BYTE_UNITS", "BIBYTE_UNITS", "BIT_UNITS", "BIBIT_UNITS", "toLocaleString", "number", "locale", "options", "result", "prettyBytes", "UNITS", "separator", "isNegative", "prefix", "localeOptions", "numberString", "exponent", "unit", "import_react", "import_react", "noop", "useInterval", "callback", "delay", "savedCallback", "interval", "id", "use_interval_default", "import_jsx_runtime", "ProcessList", "fetchResult", "setFetchResult", "state", "setState", "query", "setQuery", "preferences", "shouldIncludePaths", "shouldIncludePid", "shouldPrioritizeAppsWhenFiltering", "shouldShowPID", "shouldShowPath", "refreshDuration", "closeWindowAfterKill", "clearSearchBarAfterKill", "goToRootAfterKill", "sortBy", "setSortBy", "aggregateApps", "setAggregateApps", "fetchProcesses", "err", "stdout", "processes", "line", "defaultValue", "regex", "id", "pid", "cpu", "mem", "path", "processName", "isPrefPane", "isApp", "process", "use_interval_default", "aggregate", "a", "b", "fileIcon", "killProcess", "force", "error", "p", "subtitleString", "subtitles", "result", "appMap", "originalAppIds", "node", "knownRootNode", "nextNode", "rootApps", "afterAppIds", "rootApp", "childIds", "item", "acc", "cur", "processCount", "newValue", "nameMatches", "pathMatches", "pidMatches", "appNameMatches", "appTypes", "index", "icon", "prettyBytes"] 7 }