{"version":3,"sources":["../src/utils/helper/reader.ts","../src/utils/config/config.ts","../src/utils/lib/git/git-status-map.ts","../src/utils/lib/git/clone.ts","../package.json","../src/utils/plugins/plugin.ts","../src/utils/constants/constants.ts","../src/utils/lib/git/format-git-status.ts","../src/utils/helper/renderer.ts","../src/utils/export/exporter.ts","../src/utils/helper/format.ts","../src/utils/lib/spinner/spinner.ts","../src/utils/helper/sleep.ts","../src/index.ts"],"names":["stats","fs","path","git","simpleGit","plugin","CliSpinner","result","outputText"],"mappings":"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","file":"index.mjs","sourcesContent":["import fs from \"fs\";\r\nimport path from \"path\";\r\nimport { FsMapEntry, FsMapOptions, FsMapStats, GitStatus } from \"../../types\";\r\n\r\nfunction shouldIncludeEntry(name: string, options: FsMapOptions): boolean {\r\n  const { include = [], exclude = [], showHidden = false } = options;\r\n\r\n  if (!showHidden && name.startsWith(\".\")) return false;\r\n\r\n  if (include.length > 0) {\r\n    // Only include what is explicitly included\r\n    return include.some((pattern) => name === pattern || name.startsWith(pattern));\r\n  }\r\n\r\n  if (exclude.length > 0) {\r\n    // Include everything except excluded\r\n    return !exclude.some((pattern) => name === pattern || name.startsWith(pattern));\r\n  }\r\n\r\n  return true; // fallback to including everything\r\n}\r\n\r\n\r\nasync function buildFsTree(\r\n  dir: string,\r\n  options: FsMapOptions = {},\r\n  gitStatusMap: Record<string, GitStatus> = {},\r\n  currentDepth = 0,\r\n  statsInfo: FsMapStats = { files: 0, folders: 0 },\r\n  transform?: (entry: FsMapEntry) => FsMapEntry\r\n): Promise<FsMapEntry | null> {\r\n  const stats = fs.statSync(dir);\r\n  const name = path.basename(dir);\r\n  const resolvedPath = path.resolve(dir);\r\n\r\n  if (!shouldIncludeEntry(name, options)) {\r\n    return null;\r\n  }\r\n\r\n  let entry: FsMapEntry = {\r\n    name,\r\n    path: dir,\r\n    isDirectory: stats.isDirectory(),\r\n    size: options.showSize ? stats.size : undefined,\r\n    modifiedAt: options.showDate ? stats.mtime : undefined,\r\n    gitStatus: gitStatusMap[resolvedPath] || \"clean\"\r\n  };\r\n\r\n  if (stats.isDirectory() && currentDepth < (options.depth ?? Infinity)) {\r\n    statsInfo.folders++;\r\n\r\n    const childNames = fs.readdirSync(dir);\r\n    const children: FsMapEntry[] = [];\r\n\r\n    for (const child of childNames) {\r\n      const childEntry = await buildFsTree(\r\n        path.join(dir, child),\r\n        options,\r\n        gitStatusMap,\r\n        currentDepth + 1,\r\n        statsInfo,\r\n        transform\r\n      );\r\n      if (childEntry) {\r\n        children.push(childEntry);\r\n      }\r\n    }\r\n\r\n    entry.children = children;\r\n\r\n    if (options.showSize) {\r\n      entry.size = children.reduce((sum, c) => sum + (c.size || 0), 0);\r\n    }\r\n  } else {\r\n    statsInfo.files++;\r\n  }\r\n\r\n  return transform ? transform(entry) : entry;\r\n}\r\n\r\nexport { buildFsTree };\r\n","import fs from \"fs\";\r\nimport path from \"path\";\r\nimport { FsMapConfig } from \"../../types\";\r\n\r\nconst CONFIG_FILES = [\r\n  \"fsmap.config.json\",\r\n  \".fsmaprc\",\r\n];\r\n\r\nexport function loadFsMapConfig(): Partial<FsMapConfig> {\r\n  for (const file of CONFIG_FILES) {\r\n    const filePath = path.resolve(process.cwd(), file);\r\n    if (fs.existsSync(filePath)) {\r\n      try {\r\n        const content = fs.readFileSync(filePath, \"utf-8\");\r\n        return JSON.parse(content);\r\n      } catch (e) {\r\n        console.warn(`⚠️ Failed to parse config file: ${file}`);\r\n      }\r\n    }\r\n  }\r\n\r\n  return {};\r\n}\r\n","import path from \"path\";\r\nimport { simpleGit } from \"simple-git\";\r\n\r\nexport async function getGitStatusMap(rootDir: string): Promise<Record<string, \"modified\" | \"untracked\" | \"ignored\">> {\r\n  try {\r\n    const git = simpleGit(rootDir);\r\n    const status = await git.status();\r\n    const ignored = await git.checkIgnore(\"*\");\r\n\r\n    const map: Record<string, \"modified\" | \"untracked\" | \"ignored\"> = {};\r\n    status.modified.forEach((f) => map[path.resolve(rootDir, f)] = \"modified\");\r\n    status.not_added.forEach((f) => map[path.resolve(rootDir, f)] = \"untracked\");\r\n    (ignored || []).forEach((f) => map[path.resolve(rootDir, f)] = \"ignored\");\r\n\r\n    return map;\r\n  } catch (err: any) {\r\n    if (err.message?.includes(\"not a git repository\")) {\r\n      console.warn(\"⚠️  Not a Git repository. Skipping Git status.\");\r\n      return {};\r\n    }\r\n    throw err;\r\n  }\r\n}\r\n\r\n","import path from \"path\";\r\nimport fs from \"fs\";\r\nimport os from \"os\";\r\nimport { simpleGit } from \"simple-git\";\r\n\r\nconst git = simpleGit();\r\n\r\nfunction cleanAllRepos(baseDir: string) {\r\n  if (fs.existsSync(baseDir)) {\r\n    fs.rmSync(baseDir, { recursive: true, force: true });\r\n    console.log(` Cleared previous cached repo from: ${baseDir}`);\r\n  }\r\n}\r\n\r\nexport async function cloneRepoToTemp(userRepo: string): Promise<string> {\r\n  const [user, repo] = userRepo.split(\"/\");\r\n  const baseDir = path.join(os.tmpdir(), \".fsmap\");\r\n  const repoDir = path.join(baseDir, `${user}-${repo}`);\r\n\r\n  // 🧠 If a different repo exists → clean and start over\r\n  const otherReposExist =\r\n    fs.existsSync(baseDir) &&\r\n    fs.readdirSync(baseDir).some((entry) => entry !== `${user}-${repo}`);\r\n\r\n  if (otherReposExist) {\r\n    cleanAllRepos(baseDir);\r\n  }\r\n\r\n  // ✅ If same repo exists, reuse it\r\n  if (fs.existsSync(repoDir)) {\r\n    console.log(` Reusing cached repo: ${repoDir}`);\r\n    return repoDir;\r\n  }\r\n\r\n  // ⬇️ Clone new repo\r\n  console.log(` Cloning fresh repo: https://github.com/${user}/${repo}`);\r\n  fs.mkdirSync(baseDir, { recursive: true });\r\n  await git.clone(`https://github.com/${user}/${repo}.git`, repoDir, [\"--depth\", \"1\"]);\r\n  console.log(` Repo cloned to: ${repoDir}`);\r\n\r\n  return repoDir;\r\n}\r\n","{\r\n  \"name\": \"fsmapkit\",\r\n  \"version\": \"1.0.1\",\r\n  \"description\": \"📁 CLI to visualize and export the file structure of any folder or GitHub repo\",\r\n  \"author\": \"Swasthik K <swasthk.work@gmail.com>\",\r\n  \"license\": \"MIT\",\r\n  \"bin\": {\r\n    \"fsmap\": \"./dist/index.js\"\r\n  },\r\n  \"main\": \"./dist/index.js\",\r\n  \"module\": \"./dist/index.mjs\",\r\n  \"types\": \"./dist/index.d.ts\",\r\n  \"keywords\": [\r\n    \"cli\",\r\n    \"folder-structure\",\r\n    \"directory-tree\",\r\n    \"filesystem\",\r\n    \"fsmap\",\r\n    \"markdown\",\r\n    \"json\",\r\n    \"visualize\",\r\n    \"tree\",\r\n    \"github\"\r\n  ],\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/SwasthK/fsmap\"\r\n  },\r\n  \"bugs\": {\r\n    \"url\": \"https://github.com/SwasthK/fsmap/issues\"\r\n  },\r\n  \"homepage\": \"https://github.com/SwasthK/fsmap#readme\",\r\n  \"scripts\": {\r\n    \"start\": \"ts-node src/index.ts\",\r\n    \"build\": \"tsup\",\r\n    \"build:watch\": \"tsup --watch\",\r\n    \"test\": \"vitest\",\r\n    \"knip\": \"knip\"\r\n  },\r\n  \"dependencies\": {\r\n    \"cli-spinner\": \"^0.2.10\",\r\n    \"commander\": \"^14.0.0\",\r\n    \"simple-git\": \"^3.27.0\"\r\n  },\r\n  \"devDependencies\": {\r\n    \"@types/cli-spinner\": \"^0.2.3\",\r\n    \"@types/commander\": \"^2.12.0\",\r\n    \"@types/node\": \"^22.15.21\",\r\n    \"ts-node\": \"^10.9.2\",\r\n    \"tsup\": \"^8.5.0\",\r\n    \"typescript\": \"^5.8.3\"\r\n  },\r\n  \"files\": [\r\n    \"dist\",\r\n    \"README.md\",\r\n    \"LICENSE\"\r\n  ]\r\n}\r\n","import fs from \"fs\";\r\nimport path from \"path\";\r\n\r\nexport function loadPlugin(): Partial<{\r\n  transform: (entry: any) => any;\r\n}> {\r\n  const configPaths = [\r\n    path.resolve(\"fsmap.config.js\"),\r\n    path.resolve(\"dist/fsmap.config.js\") // use built JS version if exists\r\n  ];\r\n\r\n  for (const configPath of configPaths) {\r\n    if (fs.existsSync(configPath)) {\r\n      try {\r\n        const plugin = require(configPath);\r\n        return plugin;\r\n      } catch (err) {\r\n        console.warn(\"❌ Failed to load plugin:\", configPath);\r\n        console.error(err);\r\n        return {};\r\n      }\r\n    }\r\n  }\r\n\r\n  return {};\r\n}\r\n","import { Command } from \"commander\";\r\nimport { loadPlugin } from \"../plugins/plugin\";\r\nimport { FsMapStats } from \"../../types\";\r\n\r\nconst program = new Command();\r\nconst plugin = loadPlugin();\r\nconst stats: FsMapStats = { files: 0, folders: 0 };\r\n\r\nexport {\r\n    program,\r\n    plugin,\r\n    stats,\r\n}","import { GitStatus } from \"../../../types\";\r\n\r\nfunction formatGitStatus(status: GitStatus): string {\r\n  switch (status) {\r\n    case \"modified\": return \"🟡 modified\";\r\n    case \"untracked\": return \"🟢 untracked\";\r\n    case \"ignored\": return \"🔵 ignored\";\r\n    default: return \"\";\r\n  }\r\n}\r\n\r\nexport { formatGitStatus }\r\n","import { formatGitStatus } from \"../lib/git/format-git-status\";\r\nimport { FsMapEntry } from \"../../types\";\r\n\r\nfunction renderTree(entry: FsMapEntry, prefix = \"\") {\r\n  const connector = prefix === \"\" ? \"\" : prefix.slice(0, -4) + \"└── \";\r\n  let line = connector + entry.name;\r\n\r\n  if (!entry.isDirectory) {\r\n    if (entry.size !== undefined) {\r\n      line += ` (${formatSize(entry.size)})`;\r\n    }\r\n\r\n    if (entry.modifiedAt) {\r\n      const date = entry.modifiedAt.toISOString().split(\"T\")[0];\r\n      line += ` [${date}]`;\r\n    }\r\n    if (entry.gitStatus && entry.gitStatus !== \"clean\") {\r\n      line += ` [${formatGitStatus(entry.gitStatus)}]`;\r\n    }\r\n\r\n  }\r\n\r\n  console.log(line);\r\n\r\n  if (entry.children && entry.children.length > 0) {\r\n    const lastIndex = entry.children.length - 1;\r\n    entry.children.forEach((child, i) => {\r\n      const isLast = i === lastIndex;\r\n      const newPrefix = prefix + (isLast ? \"    \" : \"│   \");\r\n      renderTree(child, newPrefix);\r\n    });\r\n  }\r\n}\r\n\r\nfunction formatSize(bytes: number): string {\r\n  if (bytes < 1024) return `${bytes} B`;\r\n  if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n  return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nexport { renderTree, formatSize }","\r\nimport { formatSize } from \"../helper/renderer\";\r\nimport { FsMapEntry } from \"../../types\";\r\n\r\nexport function exportAsJSON(tree: FsMapEntry): string {\r\n  console.log(\"Exporting as JSON\");\r\n  return JSON.stringify(tree, null, 2);\r\n}\r\n\r\nexport function exportAsMarkdown(tree: FsMapEntry, depth = 0): string {\r\n  if (!tree) return \"\"; // <-- protect against null accidentally passed in\r\n\r\n  const indent = \"  \".repeat(depth);\r\n  const sizeStr = tree.size ? ` (${formatSize(tree.size)})` : \"\";\r\n  const dateStr = tree.modifiedAt ? ` [${tree.modifiedAt.toISOString().split(\"T\")[0]}]` : \"\";\r\n  let line = `${indent}- ${tree.name}${sizeStr}${dateStr}`;\r\n\r\n  const children = tree.children?.filter(Boolean).map(child =>\r\n    exportAsMarkdown(child, depth + 1)\r\n  );\r\n\r\n  return [line, ...(children || [])].join(\"\\n\");\r\n}\r\n","import { exportAsJSON, exportAsMarkdown } from \"../export/exporter\";\r\n// import { spinner } from \"../lib/ora/ora\";\r\nimport { renderTree } from \"./renderer\";\r\n\r\nfunction format({ mergedOptions, tree, stats }: {\r\n    mergedOptions: any,\r\n    tree: any,\r\n    stats: any\r\n}): string {\r\n    let outputText: string;\r\n    switch (mergedOptions.outputFormat) {\r\n        case \"json\":\r\n            console.log(\"\\n\")\r\n            outputText = exportAsJSON(tree);\r\n            break;\r\n        case \"markdown\":\r\n            console.log(\"\\n\")\r\n            outputText = exportAsMarkdown(tree);\r\n            break;\r\n        case \"text\":\r\n        default:\r\n            console.log(\"\\n\")\r\n            renderTree(tree);\r\n            console.log(`\\n📦 Scanned ${stats.files} files and ${stats.folders} folders.`);\r\n            return \"\";\r\n    }\r\n    return outputText;\r\n}\r\n\r\nexport { format };","import { Spinner as CliSpinner } from \"cli-spinner\";\r\n\r\nconst spinner = new CliSpinner({\r\n    text: \" %s\",\r\n    stream: process.stdout,\r\n    \r\n});\r\n\r\nspinner.setSpinnerString(\"⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏\");\r\n\r\nexport function startSpinner() {\r\n    // spinner.setSpinnerTitle(` ${text} %s`);\r\n    spinner.start();\r\n}\r\n\r\nexport function stopSpinner(successMsg?: string) {\r\n    spinner.stop(true);\r\n    if (successMsg) console.log(successMsg);\r\n}\r\n\r\nexport function failSpinner(failureMsg?: string) {\r\n    spinner.stop(true);\r\n    if (failureMsg) console.error(failureMsg);\r\n}\r\n","function sleep(ms: number): Promise<void> {\r\n    return new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n\r\nexport { sleep };","#!/usr/bin/env node\r\n\r\nimport path from \"path\";\r\nimport fs from \"fs\";\r\nimport { buildFsTree } from \"./utils/helper/reader\";\r\nimport { loadFsMapConfig } from \"./utils/config/config\";\r\nimport { getGitStatusMap } from \"./utils/lib/git/git-status-map\";\r\nimport { FsMapEntry, FsMapStats } from \"./types\";\r\nimport { cloneRepoToTemp } from \"./utils/lib/git/clone\";\r\nimport pkg from \"../package.json\";\r\nimport { plugin, program, stats } from \"./utils/constants/constants\";\r\nimport { format } from \"./utils/helper/format\";\r\nimport { startSpinner, stopSpinner, failSpinner } from \"./utils/lib/spinner/spinner\";\r\nimport { sleep } from \"./utils/helper/sleep\";\r\n\r\n\r\nprogram\r\n    .name(\"fsmap\")\r\n    .description(\"🔍 Visualize the folder structure of any directory.\\n\\nNote: use -- before arguments when using npm run.\\nExample: npm run start -- . -d 2\")\r\n    .version(pkg.version, \"-v, --version\", \"Output the version number\")\r\n    .argument(\"[path]\", \"The directory to scan\", \".\")\r\n    .option(\"-d, --depth <number>\", \"Limit recursion depth\", parseInt)\r\n    .option(\"-e, --exclude <names>\", \"Comma-separated list of files/folders to exclude (e.g. node_modules,.git)\", (value) => value.split(\",\"))\r\n    .option(\"--show-size\", \"Display file sizes\")\r\n    .option(\"--show-date\", \"Display last modified dates\")\r\n    .option(\"--show-hidden\", \"Include hidden files and folders\")\r\n    .option(\"-o, --output-format <format>\", \"Choose output format: text (default), json, markdown, html\")\r\n    .option(\"--output-file <path>\", \"Write output to a file instead of console\")\r\n    .option(\"--show-git\", \"Display Git status for each file\")\r\n    .option(\"--dry-run\", \"Preview without writing output\")\r\n    .option(\"--repo <user/repo>\", \"Clone and scan a GitHub repo remotely\")\r\n    // .option(\r\n    //     \"-i, --include <names>\",\r\n    //     \"Comma-separated list of files/folders to include exclusively (e.g. src,lib)\",\r\n    //     (value) => value.split(\",\")\r\n    // )\r\n\r\n    .action((inputPath, options) => {\r\n        const run = async () => {\r\n\r\n            let tree: FsMapEntry;\r\n            let gitMap = {};\r\n\r\n            const resolvedPath = path.resolve(inputPath);\r\n            const defaultOptions = {\r\n                exclude: [\"node_modules\", \".git\", \".vscode\", \"dist\", \"build\", \"coverage\", \"tmp\", \"temp\"],\r\n                depth: 2,\r\n                outputFormat: \"text\",\r\n                showHidden: false,\r\n            };\r\n\r\n            const configFileOptions = loadFsMapConfig(); // from fsmap.config.json\r\n            const cliOptions = options; // from Commander\r\n\r\n            if (options.include && options.exclude) {\r\n                console.error(\"You cannot use both --include and --exclude at the same time.\");\r\n                process.exit(1);\r\n            }\r\n            // if (options.include) {\r\n            //     console.log(\"🔍 Using include mode. Only showing:\", options.include);\r\n            // } else if (options.exclude) {\r\n            //     console.log(\"🔍 Using exclude mode. Skipping:\", options.exclude);\r\n            // }\r\n\r\n            // if (configFileOptions.exclude && cliOptions.include) {\r\n            //     console.warn(\"⚠️  Ignoring 'exclude' from config because 'include' flag is active.\");\r\n            // }\r\n\r\n            const mergedOptions = {\r\n                ...defaultOptions,\r\n                ...configFileOptions,\r\n                ...cliOptions,\r\n            };\r\n\r\n            if (mergedOptions.include?.length) {\r\n                mergedOptions.exclude = [];\r\n            }\r\n\r\n            if (mergedOptions.exclude?.length) {\r\n                mergedOptions.include = [];\r\n            }\r\n\r\n            try {\r\n                // Handle remote repo\r\n                if (mergedOptions.repo) {\r\n\r\n                    startSpinner();\r\n                    const tmpDir = await cloneRepoToTemp(mergedOptions.repo);\r\n                    const result = await buildFsTree(tmpDir, mergedOptions, {}, 0, stats, plugin.transform);\r\n                    if (result === null) {\r\n                        failSpinner(\"❌ No valid file structure found.\");\r\n                        return;\r\n                    }\r\n                    tree = result;\r\n                    await sleep(1000);\r\n                    stopSpinner();\r\n\r\n                    if (mergedOptions.dryRun) {\r\n                        console.log();\r\n                        console.log(`✅ Dry run complete. Found ${stats.files} files and ${stats.folders} folders.`);\r\n                        return;\r\n                    }\r\n\r\n                    let outputText = format({ mergedOptions, tree, stats });\r\n                    if (!outputText) {\r\n\r\n                        return;\r\n                    }\r\n\r\n                    if (mergedOptions.outputFile) {\r\n                        fs.writeFileSync(mergedOptions.outputFile, outputText, \"utf-8\");\r\n                        console.log(`✅ Output written to ${path.resolve(mergedOptions.outputFile)}`);\r\n                    } else {\r\n                        console.log(outputText);\r\n                    }\r\n\r\n                    console.log(`\\n📦 Scanned ${stats.files} files and ${stats.folders} folders.`);\r\n\r\n                    return;\r\n                }\r\n\r\n                // Local directory scanning\r\n                if (mergedOptions.showGit) {\r\n\r\n                    gitMap = await getGitStatusMap(resolvedPath);\r\n                }\r\n\r\n                startSpinner();\r\n                const result = await buildFsTree(resolvedPath, mergedOptions, gitMap, 0, stats, plugin.transform);\r\n                if (result === null) {\r\n                    failSpinner(\"❌ No valid file structure found.\");\r\n                    return;\r\n                }\r\n                tree = result;\r\n                await sleep(1000)\r\n                stopSpinner();\r\n\r\n                if (mergedOptions.dryRun) {\r\n\r\n                    return;\r\n                }\r\n\r\n                let outputText = format({ mergedOptions, tree, stats });\r\n                if (!outputText) {\r\n\r\n                    return;\r\n                }\r\n\r\n\r\n\r\n                if (mergedOptions.outputFile) {\r\n                    fs.writeFileSync(mergedOptions.outputFile, outputText, \"utf-8\");\r\n                    ;\r\n                } else {\r\n\r\n\r\n                    console.log(outputText);\r\n                }\r\n                console.log(`\\n📦 Scanned ${stats.files} files and ${stats.folders} folders.`);\r\n            } catch (error) {\r\n                failSpinner(\"❌ An error occurred while scanning the directory.\");\r\n                console.error(\"\\n\", error instanceof Error ? error.message : error);\r\n            }\r\n\r\n        };\r\n\r\n        run();\r\n    });\r\n\r\nprogram.parse();"]}