chore: initialize qiming workspace repository
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import path from "node:path";
|
||||
|
||||
export const SANDBOX_SAFE_ENV_KEYS = [
|
||||
"PATH",
|
||||
"Path",
|
||||
"SYSTEMROOT",
|
||||
"SystemRoot",
|
||||
"WINDIR",
|
||||
"windir",
|
||||
"SYSTEMDRIVE",
|
||||
"SystemDrive",
|
||||
"COMSPEC",
|
||||
"ComSpec",
|
||||
"PATHEXT",
|
||||
"PATHExt",
|
||||
"TEMP",
|
||||
"TMP",
|
||||
"USERPROFILE",
|
||||
"HOME",
|
||||
"LOCALAPPDATA",
|
||||
"APPDATA",
|
||||
"COMPUTERNAME",
|
||||
"USERNAME",
|
||||
"OS",
|
||||
"PROCESSOR_ARCHITECTURE",
|
||||
"LANG",
|
||||
"TZ",
|
||||
];
|
||||
|
||||
export function isWithinRoot(candidate, root) {
|
||||
const rel = path.relative(root, candidate);
|
||||
return rel === "" || (!rel.startsWith("..") && !path.isAbsolute(rel));
|
||||
}
|
||||
|
||||
export function resolveSandboxWorkingDirectory(
|
||||
requestedCwd,
|
||||
sandboxMode,
|
||||
writableRoots,
|
||||
) {
|
||||
const resolvedCwd = path.resolve(requestedCwd);
|
||||
if (sandboxMode !== "workspace-write") {
|
||||
return resolvedCwd;
|
||||
}
|
||||
|
||||
const roots = writableRoots.map((root) => path.resolve(root));
|
||||
if (roots.length === 0) {
|
||||
return resolvedCwd;
|
||||
}
|
||||
|
||||
if (roots.some((root) => isWithinRoot(resolvedCwd, root))) {
|
||||
return resolvedCwd;
|
||||
}
|
||||
|
||||
return roots[0];
|
||||
}
|
||||
|
||||
export function buildSandboxHelperEnv(baseEnv, sandboxPath) {
|
||||
const env = {};
|
||||
for (const key of SANDBOX_SAFE_ENV_KEYS) {
|
||||
const value = baseEnv[key];
|
||||
if (value !== undefined && value !== null) {
|
||||
env[key] = String(value);
|
||||
}
|
||||
}
|
||||
|
||||
if (sandboxPath) {
|
||||
env.PATH = sandboxPath + ";" + (env.PATH || "");
|
||||
}
|
||||
|
||||
// Avoid inheriting electron-specific execution mode.
|
||||
delete env.ELECTRON_RUN_AS_NODE;
|
||||
return env;
|
||||
}
|
||||
Reference in New Issue
Block a user