open-file-manager
Version:
Cross-platform utility to open a file or directory in the system's default file manager (Finder, Explorer, Nautilus, etc.)
261 lines (253 loc) • 7.57 kB
JavaScript
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"(exports, module) {
module.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
import path2 from "path";
import minimist from "minimist";
// index.ts
import path from "path";
import util from "util";
import cb from "child_process";
var managers = ["xdg-open", "nautilus", "dolphin", "thunar", "pcmanfm", "nemo"];
var openFileManager = /* @__PURE__ */ __name(async (pathname = ".") => {
const exec = util.promisify(cb.exec);
const filepath = path.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} "${path.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 = path.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 = minimist(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(path2.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.mjs.map