307 lines
9.1 KiB
JavaScript
307 lines
9.1 KiB
JavaScript
![]() |
'use strict';
|
||
|
|
||
|
var node_child_process = require('node:child_process');
|
||
|
var path = require('node:path');
|
||
|
var node_url = require('node:url');
|
||
|
var spawn = require('cross-spawn');
|
||
|
var picocolors = require('picocolors');
|
||
|
var node_module = require('node:module');
|
||
|
var fs = require('node:fs');
|
||
|
var isGlob = require('is-glob');
|
||
|
|
||
|
var __async = (__this, __arguments, generator) => {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
var fulfilled = (value) => {
|
||
|
try {
|
||
|
step(generator.next(value));
|
||
|
} catch (e) {
|
||
|
reject(e);
|
||
|
}
|
||
|
};
|
||
|
var rejected = (value) => {
|
||
|
try {
|
||
|
step(generator.throw(value));
|
||
|
} catch (e) {
|
||
|
reject(e);
|
||
|
}
|
||
|
};
|
||
|
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
||
|
step((generator = generator.apply(__this, __arguments)).next());
|
||
|
});
|
||
|
};
|
||
|
const import_meta$1 = {};
|
||
|
const OSX_CHROME = "google chrome";
|
||
|
function getBrowserEnv() {
|
||
|
const value = process.env.BROWSER;
|
||
|
const args = process.env.BROWSER_ARGS ? process.env.BROWSER_ARGS.split(" ") : [];
|
||
|
let action;
|
||
|
if (!value) {
|
||
|
action = 1 /* BROWSER */;
|
||
|
} else if (value.toLowerCase().endsWith(".js")) {
|
||
|
action = 2 /* SCRIPT */;
|
||
|
} else if (value.toLowerCase() === "none") {
|
||
|
action = 0 /* NONE */;
|
||
|
} else {
|
||
|
action = 1 /* BROWSER */;
|
||
|
}
|
||
|
return { action, value, args };
|
||
|
}
|
||
|
function executeNodeScript(scriptPath, url) {
|
||
|
const extraArgs = process.argv.slice(2);
|
||
|
const child = spawn(process.execPath, [scriptPath, ...extraArgs, url], {
|
||
|
stdio: "inherit"
|
||
|
});
|
||
|
child.on("close", (code) => {
|
||
|
if (code !== 0) {
|
||
|
console.log();
|
||
|
console.log(
|
||
|
picocolors.red(
|
||
|
"The script specified as BROWSER environment variable failed."
|
||
|
)
|
||
|
);
|
||
|
console.log(`${picocolors.cyan(scriptPath)} exited with code ${code}`);
|
||
|
console.log();
|
||
|
}
|
||
|
});
|
||
|
return true;
|
||
|
}
|
||
|
function startBrowserProcess(browser, url, args) {
|
||
|
return __async(this, null, function* () {
|
||
|
const shouldTryOpenChromiumWithAppleScript = process.platform === "darwin" && (typeof browser !== "string" || browser === OSX_CHROME);
|
||
|
if (shouldTryOpenChromiumWithAppleScript) {
|
||
|
const supportedChromiumBrowsers = [
|
||
|
"Google Chrome Canary",
|
||
|
"Google Chrome",
|
||
|
"Microsoft Edge",
|
||
|
"Brave Browser",
|
||
|
"Vivaldi",
|
||
|
"Chromium"
|
||
|
];
|
||
|
const _dirname = typeof __dirname === "undefined" ? path.dirname(node_url.fileURLToPath(import_meta$1.url)) : __dirname;
|
||
|
for (const chromiumBrowser of supportedChromiumBrowsers) {
|
||
|
try {
|
||
|
node_child_process.execSync('ps cax | grep "' + chromiumBrowser + '"');
|
||
|
node_child_process.execSync(
|
||
|
'osascript ../openChrome.applescript "' + // lgtm [js/shell-command-constructed-from-input]
|
||
|
encodeURI(url) + '" "' + chromiumBrowser + '"',
|
||
|
{
|
||
|
cwd: _dirname,
|
||
|
stdio: "ignore"
|
||
|
}
|
||
|
);
|
||
|
return true;
|
||
|
} catch (e) {
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (process.platform === "darwin" && browser === "open") {
|
||
|
browser = void 0;
|
||
|
}
|
||
|
try {
|
||
|
const open = (yield import('open')).default;
|
||
|
open(url, {
|
||
|
app: browser ? {
|
||
|
name: browser,
|
||
|
arguments: args
|
||
|
} : void 0,
|
||
|
wait: false
|
||
|
}).catch(() => {
|
||
|
});
|
||
|
return true;
|
||
|
} catch (e) {
|
||
|
return false;
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
function openBrowser(url) {
|
||
|
return __async(this, null, function* () {
|
||
|
const { action, value, args } = getBrowserEnv();
|
||
|
switch (action) {
|
||
|
case 0 /* NONE */: {
|
||
|
return false;
|
||
|
}
|
||
|
case 2 /* SCRIPT */: {
|
||
|
return executeNodeScript(value, url);
|
||
|
}
|
||
|
case 1 /* BROWSER */: {
|
||
|
return startBrowserProcess(value, url, args);
|
||
|
}
|
||
|
default: {
|
||
|
throw new Error("Not implemented.");
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
const import_meta = {};
|
||
|
var _a$1;
|
||
|
const DEV = "development";
|
||
|
const PROD = "production";
|
||
|
const NODE_ENV = (_a$1 = process.env.NODE_ENV) != null ? _a$1 : DEV;
|
||
|
const __DEV__ = NODE_ENV === DEV;
|
||
|
const __PROD__ = NODE_ENV === PROD;
|
||
|
const NODE_MODULES_REG = /[/\\]node_modules[/\\]/;
|
||
|
const CWD = process.cwd();
|
||
|
const cjsRequire = typeof require === "undefined" ? node_module.createRequire(import_meta.url) : require;
|
||
|
const EXTENSIONS = [".ts", ".tsx", ...Object.keys(cjsRequire.extensions)];
|
||
|
const SCRIPT_RUNNERS = {
|
||
|
npm: "npx",
|
||
|
pnpm: "pnpm",
|
||
|
yarn: "yarn"
|
||
|
};
|
||
|
const SCRIPT_EXECUTORS = {
|
||
|
npm: "npx",
|
||
|
pnpm: "pnpx",
|
||
|
// same as 'pnpm dlx'
|
||
|
yarn: "yarn dlx"
|
||
|
};
|
||
|
|
||
|
const tryPkg = (pkg) => {
|
||
|
try {
|
||
|
return cjsRequire.resolve(pkg);
|
||
|
} catch (e) {
|
||
|
}
|
||
|
};
|
||
|
const tryRequirePkg = (pkg) => {
|
||
|
try {
|
||
|
return cjsRequire(pkg);
|
||
|
} catch (e) {
|
||
|
}
|
||
|
};
|
||
|
const isPkgAvailable = (pkg) => !!tryPkg(pkg);
|
||
|
const isTsAvailable = isPkgAvailable("typescript");
|
||
|
const isAngularAvailable = isPkgAvailable("@angular/core/package.json");
|
||
|
const isMdxAvailable = isPkgAvailable("@mdx-js/mdx/package.json") || isPkgAvailable("@mdx-js/react/package.json");
|
||
|
const isReactAvailable = isPkgAvailable("react");
|
||
|
const isSvelteAvailable = isPkgAvailable("svelte");
|
||
|
const isVueAvailable = isPkgAvailable("vue");
|
||
|
const tryFile = (filePath, includeDir = false) => {
|
||
|
if (typeof filePath === "string") {
|
||
|
return fs.existsSync(filePath) && (includeDir || fs.statSync(filePath).isFile()) ? filePath : "";
|
||
|
}
|
||
|
for (const file of filePath != null ? filePath : []) {
|
||
|
if (tryFile(file, includeDir)) {
|
||
|
return file;
|
||
|
}
|
||
|
}
|
||
|
return "";
|
||
|
};
|
||
|
const tryExtensions = (filepath, extensions = EXTENSIONS) => {
|
||
|
const ext = [...extensions, ""].find((ext2) => tryFile(filepath + ext2));
|
||
|
return ext == null ? "" : filepath + ext;
|
||
|
};
|
||
|
const tryGlob = (paths, options = {}) => {
|
||
|
const {
|
||
|
absolute = true,
|
||
|
baseDir = CWD,
|
||
|
ignore = ["**/node_modules/**"]
|
||
|
} = typeof options === "string" ? { baseDir: options } : options;
|
||
|
return paths.reduce(
|
||
|
(acc, pkg) => [
|
||
|
...acc,
|
||
|
...isGlob(pkg) ? tryRequirePkg("fast-glob").sync(pkg, {
|
||
|
cwd: baseDir,
|
||
|
ignore,
|
||
|
onlyFiles: false
|
||
|
}).map((file) => absolute ? path.resolve(baseDir, file) : file) : [tryFile(path.resolve(baseDir, pkg), true)]
|
||
|
].filter(Boolean),
|
||
|
[]
|
||
|
);
|
||
|
};
|
||
|
const identify = (_) => !!_;
|
||
|
const findUp = (searchEntry, searchFile = "package.json") => {
|
||
|
console.assert(path.isAbsolute(searchEntry));
|
||
|
if (!tryFile(searchEntry, true) || searchEntry !== CWD && !searchEntry.startsWith(CWD + path.sep)) {
|
||
|
return "";
|
||
|
}
|
||
|
searchEntry = path.resolve(
|
||
|
fs.statSync(searchEntry).isDirectory() ? searchEntry : path.resolve(searchEntry, "..")
|
||
|
);
|
||
|
do {
|
||
|
const searched = tryFile(path.resolve(searchEntry, searchFile));
|
||
|
if (searched) {
|
||
|
return searched;
|
||
|
}
|
||
|
searchEntry = path.resolve(searchEntry, "..");
|
||
|
} while (searchEntry === CWD || searchEntry.startsWith(CWD + path.sep));
|
||
|
return "";
|
||
|
};
|
||
|
const arrayify = (...args) => args.reduce((arr, curr) => {
|
||
|
arr.push(...Array.isArray(curr) ? curr : curr == null ? [] : [curr]);
|
||
|
return arr;
|
||
|
}, []);
|
||
|
const getPackageManager = () => {
|
||
|
const execPath = process.env.npm_execpath;
|
||
|
if (!execPath) {
|
||
|
return;
|
||
|
}
|
||
|
if (/\byarn\b/.test(execPath)) {
|
||
|
return "yarn";
|
||
|
}
|
||
|
if (/\bpnpm\b/.test(execPath)) {
|
||
|
return "pnpm";
|
||
|
}
|
||
|
if (/\bnpm\b/.test(execPath)) {
|
||
|
return "npm";
|
||
|
}
|
||
|
console.warn("unknown package manager:", execPath);
|
||
|
};
|
||
|
const getScriptRunner = () => {
|
||
|
const pm = getPackageManager();
|
||
|
if (!pm) {
|
||
|
return;
|
||
|
}
|
||
|
return SCRIPT_RUNNERS[pm];
|
||
|
};
|
||
|
const getScriptExecutor = () => {
|
||
|
const pm = getPackageManager();
|
||
|
if (!pm) {
|
||
|
return;
|
||
|
}
|
||
|
return SCRIPT_EXECUTORS[pm];
|
||
|
};
|
||
|
|
||
|
var _a, _b, _c, _d;
|
||
|
const pkg = (_a = tryRequirePkg(path.resolve("package.json"))) != null ? _a : {};
|
||
|
const lernaConfig = (_b = tryRequirePkg(path.resolve("lerna.json"))) != null ? _b : {};
|
||
|
const pkgsPath = (_d = (_c = lernaConfig.packages) != null ? _c : pkg.workspaces) != null ? _d : [];
|
||
|
const isMonorepo = Array.isArray(pkgsPath) && pkgsPath.length > 0;
|
||
|
const monorepoPkgs = isMonorepo ? tryGlob(
|
||
|
pkgsPath.map(
|
||
|
(pkg2) => pkg2.endsWith("/package.json") ? pkg2 : `${pkg2}/package.json`
|
||
|
)
|
||
|
) : [];
|
||
|
|
||
|
exports.CWD = CWD;
|
||
|
exports.DEV = DEV;
|
||
|
exports.EXTENSIONS = EXTENSIONS;
|
||
|
exports.NODE_ENV = NODE_ENV;
|
||
|
exports.NODE_MODULES_REG = NODE_MODULES_REG;
|
||
|
exports.PROD = PROD;
|
||
|
exports.SCRIPT_EXECUTORS = SCRIPT_EXECUTORS;
|
||
|
exports.SCRIPT_RUNNERS = SCRIPT_RUNNERS;
|
||
|
exports.__DEV__ = __DEV__;
|
||
|
exports.__PROD__ = __PROD__;
|
||
|
exports.arrayify = arrayify;
|
||
|
exports.cjsRequire = cjsRequire;
|
||
|
exports.findUp = findUp;
|
||
|
exports.getPackageManager = getPackageManager;
|
||
|
exports.getScriptExecutor = getScriptExecutor;
|
||
|
exports.getScriptRunner = getScriptRunner;
|
||
|
exports.identify = identify;
|
||
|
exports.isAngularAvailable = isAngularAvailable;
|
||
|
exports.isMdxAvailable = isMdxAvailable;
|
||
|
exports.isMonorepo = isMonorepo;
|
||
|
exports.isPkgAvailable = isPkgAvailable;
|
||
|
exports.isReactAvailable = isReactAvailable;
|
||
|
exports.isSvelteAvailable = isSvelteAvailable;
|
||
|
exports.isTsAvailable = isTsAvailable;
|
||
|
exports.isVueAvailable = isVueAvailable;
|
||
|
exports.monorepoPkgs = monorepoPkgs;
|
||
|
exports.openBrowser = openBrowser;
|
||
|
exports.tryExtensions = tryExtensions;
|
||
|
exports.tryFile = tryFile;
|
||
|
exports.tryGlob = tryGlob;
|
||
|
exports.tryPkg = tryPkg;
|
||
|
exports.tryRequirePkg = tryRequirePkg;
|