open-file-manager
Version:
Cross-platform utility to open a file or directory in the system's default file manager (Finder, Explorer, Nautilus, etc.)
1 lines • 9.83 kB
Source Map (JSON)
{"version":3,"sources":["../../package.json","../../bin/cli.ts","../../index.ts"],"sourcesContent":["{\n \"name\": \"open-file-manager\",\n \"description\": \"Cross-platform utility to open a file or directory in the system's default file manager (Finder, Explorer, Nautilus, etc.)\",\n \"version\": \"1.0.0\",\n \"license\": \"MIT\",\n \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n \"homepage\": \"https://github.com/jonschlinkert/open-file-manager\",\n \"repository\": \"jonschlinkert/open-file-manager\",\n \"bugs\": {\n \"url\": \"https://github.com/jonschlinkert/open-file-manager/issues\"\n },\n \"bin\": {\n \"open-file-manager\": \"dist/bin/cli.js\"\n },\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"eslint\": \"npx eslint --ext .ts .\",\n \"test\": \"ts-mocha -r esbuild-register 'test/*.test.ts' --exit\",\n \"tsup\": \"npm run clean && npx tsup\"\n },\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"files\": [\n \"dist\"\n ],\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"minimist\": \"^1.2.8\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.7.4\",\n \"@typescript-eslint/eslint-plugin\": \"^8.7.0\",\n \"@typescript-eslint/parser\": \"^8.7.0\",\n \"esbuild-register\": \"^3.5.0\",\n \"eslint\": \"^8.57.0\",\n \"gulp-format-md\": \"^2.0.0\",\n \"prettier\": \"^3.5.3\",\n \"ts-node\": \"^10.9.2\",\n \"tsconfig-paths\": \"^4.2.0\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.5.3\"\n },\n \"keywords\": [\n \"cli\",\n \"command-line\",\n \"cross-platform\",\n \"desktop\",\n \"dialog\",\n \"directory\",\n \"dmenu\",\n \"electron\",\n \"explorer\",\n \"file chooser\",\n \"file dialog\",\n \"file manager\",\n \"file picker\",\n \"file selection dialog\",\n \"file selection\",\n \"file system\",\n \"file-browser\",\n \"file-chooser\",\n \"file-dialog\",\n \"file-explorer\",\n \"file-manager\",\n \"file-picker\",\n \"file-selector\",\n \"file-system\",\n \"file\",\n \"files\",\n \"finder\",\n \"folder\",\n \"fzf\",\n \"gnome\",\n \"gui\",\n \"kde\",\n \"kdialog\",\n \"linux\",\n \"macos\",\n \"mate\",\n \"matedialog\",\n \"native-dialog\",\n \"nautilus\",\n \"open-file\",\n \"open\",\n \"powershell\",\n \"prompt\",\n \"qarma\",\n \"qt\",\n \"rofi\",\n \"select\",\n \"terminal\",\n \"utility\",\n \"windows-api\",\n \"windows-forms\",\n \"windows\",\n \"yad\",\n \"zenity\"\n ],\n \"verb\": {\n \"toc\": false,\n \"layout\": \"default\",\n \"tasks\": [\n \"readme\"\n ],\n \"plugins\": [\n \"gulp-format-md\"\n ],\n \"reflinks\": [\n \"verb\"\n ],\n \"related\": [\n \"open-file-manager-dialog\",\n \"open-finder-dialog\",\n \"open-linux-file-dialog\",\n \"open-windows-file-dialog\"\n ],\n \"lint\": {\n \"reflinks\": true\n }\n }\n}\n","#!/usr/bin/env node\n\nimport path from 'node:path';\nimport minimist from 'minimist';\nimport { openFileManager } from '../index.js';\n\nconst showHelp = () => {\n console.log(`\nopen-file-manager - Open a file or directory in your system's file manager\n\nUsage:\n open-file-manager [path] [options]\n\nArguments:\n path File or directory path to open (default: current directory)\n\nOptions:\n -h, --help Show this help message\n -v, --version Show version number\n\nExamples:\n open-file-manager # Open current directory\n open-file-manager /home/user # Open specific directory\n open-file-manager ./document.txt # Open file location\n open-file-manager ../ # Open parent directory\n`);\n};\n\nconst main = async () => {\n const argv = minimist(process.argv.slice(2), {\n alias: {\n f: 'file',\n h: 'help',\n v: 'version'\n }\n });\n\n if (argv.help) {\n showHelp();\n process.exit(0);\n }\n\n if (argv.version) {\n const pkg = await import('../package.json', { assert: { type: 'json' } });\n console.log(pkg.default.version);\n process.exit(0);\n }\n\n const file = argv.file || argv._[0] || '.';\n\n try {\n await openFileManager(path.resolve(process.cwd(), file));\n } catch (error) {\n console.error('Error:', error.message);\n process.exit(1);\n }\n};\n\nmain().catch(error => {\n console.error('Unexpected error:', error);\n process.exit(1);\n});\n","import path from 'node:path';\nimport util from 'node:util';\nimport cb from 'node:child_process';\n\nconst managers = ['xdg-open', 'nautilus', 'dolphin', 'thunar', 'pcmanfm', 'nemo'];\n\nexport const openFileManager = async (pathname = '.') => {\n const exec = util.promisify(cb.exec);\n const filepath = path.resolve(process.cwd(), pathname);\n let lastError;\n\n try {\n switch (process.platform) {\n case 'win32':\n return exec(`explorer /select \"${filepath}\"`);\n case 'darwin':\n return exec(`open -R \"${filepath}\"`);\n case 'linux':\n case 'freebsd':\n case 'openbsd':\n case 'sunos':\n // Try multiple file managers in order of preference\n for (const manager of managers) {\n try {\n // Check if the manager exists\n await exec(`which ${manager}`);\n\n // Try to open with the manager\n if (manager === 'xdg-open') {\n return exec(`${manager} \"${path.dirname(filepath)}\"`);\n }\n\n return exec(`${manager} \"${filepath}\"`);\n } catch (err) {\n lastError = err;\n continue;\n }\n }\n\n throw new Error(`No file manager found. Tried: ${managers.join(', ')}. Last error: ${lastError?.message}`);\n default:\n throw new Error(`Unsupported platform: ${process.platform}`);\n }\n } catch (error) {\n // Windows explorer returns exit code 1 when the file doesn't exist\n if (process.platform === 'win32' && error.code === 1) {\n // Try opening the parent directory\n const parentDir = path.dirname(filepath);\n return exec(`explorer \"${parentDir}\"`);\n }\n\n throw error;\n }\n};\n\nexport default openFileManager;\n"],"mappings":"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","names":["path","path"]}