mirror of
https://github.com/denoland/deno.git
synced 2024-12-24 16:19:12 -05:00
54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
#!/usr/bin/env node
|
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
|
|
|
// @ts-check
|
|
const path = require("path");
|
|
const child_process = require("child_process");
|
|
const os = require("os");
|
|
const fs = require("fs");
|
|
|
|
const exePath = path.join(
|
|
__dirname,
|
|
os.platform() === "win32" ? "deno.exe" : "deno",
|
|
);
|
|
|
|
if (!fs.existsSync(exePath)) {
|
|
try {
|
|
const resolvedExePath = require("./install_api.cjs").runInstall();
|
|
runDenoExe(resolvedExePath);
|
|
} catch (err) {
|
|
if (err !== undefined && typeof err.message === "string") {
|
|
console.error(err.message);
|
|
} else {
|
|
console.error(err);
|
|
}
|
|
process.exit(1);
|
|
}
|
|
} else {
|
|
runDenoExe(exePath);
|
|
}
|
|
|
|
/** @param exePath {string} */
|
|
function runDenoExe(exePath) {
|
|
const result = child_process.spawnSync(
|
|
exePath,
|
|
process.argv.slice(2),
|
|
{ stdio: "inherit" },
|
|
);
|
|
if (result.error) {
|
|
throw result.error;
|
|
}
|
|
|
|
throwIfNoExePath();
|
|
|
|
process.exitCode = result.status;
|
|
|
|
function throwIfNoExePath() {
|
|
if (!fs.existsSync(exePath)) {
|
|
throw new Error(
|
|
"Could not find exe at path '" + exePath +
|
|
"'. Maybe try running deno again.",
|
|
);
|
|
}
|
|
}
|
|
}
|