Files
story-studio/remotion/node_modules/@remotion/studio-server/dist/open-directory-in-finder.js
2026-02-21 10:33:18 +01:00

58 lines
2.3 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.openDirectoryInFinder = void 0;
const node_child_process_1 = require("node:child_process");
const node_os_1 = require("node:os");
const node_path_1 = __importDefault(require("node:path"));
const no_react_1 = require("remotion/no-react");
const openDirectoryInFinder = (dirToOpen, allowedDirectory) => {
const resolved = node_path_1.default.resolve(allowedDirectory, dirToOpen);
const relativeToProcessCwd = node_path_1.default.relative(allowedDirectory, resolved);
if (relativeToProcessCwd.startsWith('..')) {
throw new Error(`Not allowed to open ${relativeToProcessCwd}`);
}
if ((0, node_os_1.platform)() === 'win32') {
const proc = (0, node_child_process_1.spawn)('explorer.exe', ['/select,', resolved]);
return new Promise((resolve, reject) => {
proc.on('exit', (code) => {
// explorer.exe returns 1 even on success
if (code === 0 || code === 1) {
resolve();
}
else {
reject(new Error(`explorer.exe exited with code ${code}`));
}
});
proc.on('error', (err) => {
proc.kill();
reject(err);
});
});
}
const command = (0, node_os_1.platform)() === 'darwin' ? 'open' : 'xdg-open';
const p = (0, node_child_process_1.spawn)(command, [(0, node_os_1.platform)() === 'darwin' ? '-R' : null, dirToOpen].filter(no_react_1.NoReactInternals.truthy));
const stderrChunks = [];
p.stderr.on('data', (d) => stderrChunks.push(d));
return new Promise((resolve, reject) => {
p.on('exit', (code) => {
if (code === 0) {
resolve();
}
else {
const message = Buffer.concat(stderrChunks.map((buf) => Uint8Array.from(buf))).toString('utf8');
reject(new Error(message));
}
});
p.on('error', (err) => {
p.kill();
if (err) {
reject(err);
}
});
});
};
exports.openDirectoryInFinder = openDirectoryInFinder;