SYMBOL INDEX (63 symbols across 12 files) FILE: bin/external/nano-spawn.ts class SubprocessError (line 10) | class SubprocessError extends Error { constant EXE_MEMO (line 19) | const EXE_MEMO: Record> = {} function spawn (line 67) | async function spawn( FILE: bin/external/speed-highlight.ts method exec (line 393) | exec(n) { function F (line 839) | async function F(n, t, p) { FILE: bin/external/strip-json-comments.ts function stripJsonComments (line 18) | function stripJsonComments(jsonString: string) { FILE: bin/external/yocto-spinner.ts method start (line 69) | start(t: string) { method success (line 79) | success(t: string) { FILE: bin/index.ts function walkLocal (line 256) | async function walkLocal(dir: string, rel: string) { function walkDir (line 467) | async function walkDir(dir: string, rel: string) { FILE: bin/utils/clone-action.ts function cleanupAndExit (line 12) | function cleanupAndExit() { type CloneResult (line 30) | type CloneResult = { FILE: bin/utils/interactive-picker.ts constant EXT_TO_LANG (line 7) | const EXT_TO_LANG: Record = { function detectLang (line 58) | function detectLang(filename: string): string { type TreeEntry (line 68) | type TreeEntry = { function truncateAnsi (line 77) | function truncateAnsi(s: string, maxWidth: number): string { type TreeNode (line 94) | type TreeNode = { function buildTree (line 106) | function buildTree(entries: TreeEntry[]): TreeNode[] { type FlatItem (line 199) | type FlatItem = { function flatten (line 205) | function flatten(roots: TreeNode[]): FlatItem[] { function setSelected (line 224) | function setSelected(node: TreeNode, value: boolean) { function resolveSymlinkPath (line 231) | function resolveSymlinkPath(symlinkPath: string, linkTarget: string): st... function findNodeByPath (line 244) | function findNodeByPath(roots: TreeNode[], targetPath: string): TreeNode... function updateParentSelection (line 255) | function updateParentSelection(roots: TreeNode[]) { function collectSelected (line 267) | function collectSelected(nodes: TreeNode[]): string[] { function countSelected (line 297) | function countSelected(nodes: TreeNode[]): { function interactivePicker (line 332) | function interactivePicker( FILE: bin/utils/parse-time-string.ts function parseTimeString (line 1) | function parseTimeString(timeString: string | number): number { FILE: bin/utils/transform-url.ts type Host (line 3) | type Host = "github.com" | "gitlab.com" | "bitbucket.org" | "codeberg.org" constant PREFIXES (line 5) | const PREFIXES: { prefix: string; host: Host }[] = [ function configFromUrl (line 17) | async function configFromUrl( FILE: bin/utils/update-notifier.ts constant CACHE_DIR (line 8) | const CACHE_DIR = path.join(os.homedir(), ".cache", "gitpick") constant CACHE_FILE (line 9) | const CACHE_FILE = path.join(CACHE_DIR, "update-check.json") constant CHECK_INTERVAL (line 10) | const CHECK_INTERVAL = 24 * 60 * 60 * 1000 // 24 hours type UpdateCache (line 12) | type UpdateCache = { function readCache (line 17) | function readCache(): UpdateCache | null { function writeCache (line 25) | function writeCache(cache: UpdateCache) { function fetchLatestVersion (line 32) | function fetchLatestVersion(): Promise { function isNewer (line 61) | function isNewer(latest: string, current: string): boolean { function notifyUpdate (line 72) | function notifyUpdate(currentVersion: string, silent: boolean) { function scheduleUpdateCheck (line 86) | function scheduleUpdateCheck() { FILE: tests/cli.test.ts constant CLI (line 15) | const CLI = ["node", resolve("dist/index.mjs")] constant ARTIFACTS (line 16) | const ARTIFACTS = ".test-artifacts" function stripAnsi (line 20) | function stripAnsi(s: string) { function run (line 25) | async function run(args: string[], cwd?: string) { function parseLine (line 38) | function parseLine(output: string) { function tree (line 46) | function tree(dir: string, prefix = ""): string { function getTree (line 66) | function getTree(dir: string) { constant TREE_REPO_MAIN (line 74) | const TREE_REPO_MAIN = [ constant TREE_REPO_DEV (line 85) | const TREE_REPO_DEV = [ constant TREE_FOLDER (line 97) | const TREE_FOLDER = ["├── deep", "│ └── file.txt", "└── nested.txt"].j... constant TREE_FOLDER_DEEP (line 98) | const TREE_FOLDER_DEEP = "└── file.txt" constant TREE_BLOB_FILE (line 99) | const TREE_BLOB_FILE = "└── file.txt" constant TREE_BLOB_NESTED (line 100) | const TREE_BLOB_NESTED = "└── nested.txt" constant TREE_BLOB_README (line 101) | const TREE_BLOB_README = "└── README.md" constant TREE_GITLAB_REPO (line 103) | const TREE_GITLAB_REPO = [ constant TREE_GITLAB_PUBLIC (line 111) | const TREE_GITLAB_PUBLIC = ["├── index.html", "└── style.css"].join("\n") function target (line 116) | function target() { function cloneAndExpect (line 122) | async function cloneAndExpect( function dryRun (line 157) | async function dryRun(args: string[], expected: string) { function noPrefixClone (line 707) | async function noPrefixClone(args: string[], expectedOutput: string, exp... function parseTreeOutput (line 1210) | function parseTreeOutput(output: string) { FILE: tests/tree.mjs function tree (line 4) | function tree(dir, prefix = "") {