58 lines
2.3 KiB
JavaScript
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;
|