UNPKG

open-file-manager

Version:

Cross-platform utility to open a file or directory in the system's default file manager (Finder, Explorer, Nautilus, etc.)

262 lines (254 loc) 7.86 kB
#!/usr/bin/env node "use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __commonJS = (cb2, mod) => function __require() { return mod || (0, cb2[__getOwnPropNames(cb2)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); // package.json var require_package = __commonJS({ "package.json"(exports2, module2) { module2.exports = { name: "open-file-manager", description: "Cross-platform utility to open a file or directory in the system's default file manager (Finder, Explorer, Nautilus, etc.)", version: "1.0.0", license: "MIT", author: "Jon Schlinkert (https://github.com/jonschlinkert)", homepage: "https://github.com/jonschlinkert/open-file-manager", repository: "jonschlinkert/open-file-manager", bugs: { url: "https://github.com/jonschlinkert/open-file-manager/issues" }, bin: { "open-file-manager": "dist/bin/cli.js" }, scripts: { clean: "rm -rf dist", eslint: "npx eslint --ext .ts .", test: "ts-mocha -r esbuild-register 'test/*.test.ts' --exit", tsup: "npm run clean && npx tsup" }, main: "dist/index.js", module: "dist/index.mjs", types: "dist/index.d.ts", files: [ "dist" ], exports: { ".": { import: "./dist/index.mjs", require: "./dist/index.js" } }, dependencies: { minimist: "^1.2.8" }, devDependencies: { "@types/node": "^22.7.4", "@typescript-eslint/eslint-plugin": "^8.7.0", "@typescript-eslint/parser": "^8.7.0", "esbuild-register": "^3.5.0", eslint: "^8.57.0", "gulp-format-md": "^2.0.0", prettier: "^3.5.3", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", tsup: "^8.3.0", typescript: "^5.5.3" }, keywords: [ "cli", "command-line", "cross-platform", "desktop", "dialog", "directory", "dmenu", "electron", "explorer", "file chooser", "file dialog", "file manager", "file picker", "file selection dialog", "file selection", "file system", "file-browser", "file-chooser", "file-dialog", "file-explorer", "file-manager", "file-picker", "file-selector", "file-system", "file", "files", "finder", "folder", "fzf", "gnome", "gui", "kde", "kdialog", "linux", "macos", "mate", "matedialog", "native-dialog", "nautilus", "open-file", "open", "powershell", "prompt", "qarma", "qt", "rofi", "select", "terminal", "utility", "windows-api", "windows-forms", "windows", "yad", "zenity" ], verb: { toc: false, layout: "default", tasks: [ "readme" ], plugins: [ "gulp-format-md" ], reflinks: [ "verb" ], related: [ "open-file-manager-dialog", "open-finder-dialog", "open-linux-file-dialog", "open-windows-file-dialog" ], lint: { reflinks: true } } }; } }); // bin/cli.ts var import_node_path2 = __toESM(require("path")); var import_minimist = __toESM(require("minimist")); // index.ts var import_node_path = __toESM(require("path")); var import_node_util = __toESM(require("util")); var import_node_child_process = __toESM(require("child_process")); var managers = ["xdg-open", "nautilus", "dolphin", "thunar", "pcmanfm", "nemo"]; var openFileManager = /* @__PURE__ */ __name(async (pathname = ".") => { const exec = import_node_util.default.promisify(import_node_child_process.default.exec); const filepath = import_node_path.default.resolve(process.cwd(), pathname); let lastError; try { switch (process.platform) { case "win32": return exec(`explorer /select "${filepath}"`); case "darwin": return exec(`open -R "${filepath}"`); case "linux": case "freebsd": case "openbsd": case "sunos": for (const manager of managers) { try { await exec(`which ${manager}`); if (manager === "xdg-open") { return exec(`${manager} "${import_node_path.default.dirname(filepath)}"`); } return exec(`${manager} "${filepath}"`); } catch (err) { lastError = err; continue; } } throw new Error(`No file manager found. Tried: ${managers.join(", ")}. Last error: ${lastError?.message}`); default: throw new Error(`Unsupported platform: ${process.platform}`); } } catch (error) { if (process.platform === "win32" && error.code === 1) { const parentDir = import_node_path.default.dirname(filepath); return exec(`explorer "${parentDir}"`); } throw error; } }, "openFileManager"); // bin/cli.ts var showHelp = /* @__PURE__ */ __name(() => { console.log(` open-file-manager - Open a file or directory in your system's file manager Usage: open-file-manager [path] [options] Arguments: path File or directory path to open (default: current directory) Options: -h, --help Show this help message -v, --version Show version number Examples: open-file-manager # Open current directory open-file-manager /home/user # Open specific directory open-file-manager ./document.txt # Open file location open-file-manager ../ # Open parent directory `); }, "showHelp"); var main = /* @__PURE__ */ __name(async () => { const argv = (0, import_minimist.default)(process.argv.slice(2), { alias: { f: "file", h: "help", v: "version" } }); if (argv.help) { showHelp(); process.exit(0); } if (argv.version) { const pkg = await Promise.resolve().then(() => __toESM(require_package())); console.log(pkg.default.version); process.exit(0); } const file = argv.file || argv._[0] || "."; try { await openFileManager(import_node_path2.default.resolve(process.cwd(), file)); } catch (error) { console.error("Error:", error.message); process.exit(1); } }, "main"); main().catch((error) => { console.error("Unexpected error:", error); process.exit(1); }); //# sourceMappingURL=cli.js.map