@socketsecurity/lib
Version:
Core utilities and infrastructure for Socket.dev security tools
221 lines (220 loc) • 7 kB
JavaScript
;
/* Socket Lib - Built with esbuild */
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var dlx_exports = {};
__export(dlx_exports, {
clearDlx: () => clearDlx,
clearDlxSync: () => clearDlxSync,
dlxDirExists: () => dlxDirExists,
dlxDirExistsAsync: () => dlxDirExistsAsync,
ensureDlxDir: () => ensureDlxDir,
ensureDlxDirSync: () => ensureDlxDirSync,
generateCacheKey: () => generateCacheKey,
getDlxInstalledPackageDir: () => getDlxInstalledPackageDir,
getDlxPackageDir: () => getDlxPackageDir,
getDlxPackageJsonPath: () => getDlxPackageJsonPath,
getDlxPackageNodeModulesDir: () => getDlxPackageNodeModulesDir,
isDlxPackageInstalled: () => isDlxPackageInstalled,
isDlxPackageInstalledAsync: () => isDlxPackageInstalledAsync,
isInSocketDlx: () => isInSocketDlx,
listDlxPackages: () => listDlxPackages,
listDlxPackagesAsync: () => listDlxPackagesAsync,
removeDlxPackage: () => removeDlxPackage,
removeDlxPackageSync: () => removeDlxPackageSync
});
module.exports = __toCommonJS(dlx_exports);
var import_crypto = require("crypto");
var import_fs = require("./fs");
var import_path = require("./path");
var import_paths = require("./paths");
var import_promises = require("./promises");
let _fs;
// @__NO_SIDE_EFFECTS__
function getFs() {
if (_fs === void 0) {
_fs = require("node:fs");
}
return _fs;
}
function generateCacheKey(spec) {
return (0, import_crypto.createHash)("sha512").update(spec).digest("hex").substring(0, 16);
}
let _path;
// @__NO_SIDE_EFFECTS__
function getPath() {
if (_path === void 0) {
_path = require("node:path");
}
return _path;
}
async function clearDlx() {
const packages = await listDlxPackagesAsync();
await (0, import_promises.pEach)(packages, (pkg) => removeDlxPackage(pkg));
}
function clearDlxSync() {
const packages = listDlxPackages();
for (const pkg of packages) {
removeDlxPackageSync(pkg);
}
}
function dlxDirExists() {
const fs = /* @__PURE__ */ getFs();
return fs.existsSync((0, import_paths.getSocketDlxDir)());
}
async function dlxDirExistsAsync() {
const fs = /* @__PURE__ */ getFs();
try {
await fs.promises.access((0, import_paths.getSocketDlxDir)());
return true;
} catch {
return false;
}
}
async function ensureDlxDir() {
await (0, import_fs.safeMkdir)((0, import_paths.getSocketDlxDir)());
}
function ensureDlxDirSync() {
(0, import_fs.safeMkdirSync)((0, import_paths.getSocketDlxDir)());
}
function getDlxInstalledPackageDir(packageName) {
const path = /* @__PURE__ */ getPath();
return (0, import_path.normalizePath)(
path.join(getDlxPackageNodeModulesDir(packageName), packageName)
);
}
function getDlxPackageDir(packageName) {
const path = /* @__PURE__ */ getPath();
return (0, import_path.normalizePath)(path.join((0, import_paths.getSocketDlxDir)(), packageName));
}
function getDlxPackageJsonPath(packageName) {
const path = /* @__PURE__ */ getPath();
return (0, import_path.normalizePath)(
path.join(getDlxInstalledPackageDir(packageName), "package.json")
);
}
function getDlxPackageNodeModulesDir(packageName) {
const path = /* @__PURE__ */ getPath();
return (0, import_path.normalizePath)(path.join(getDlxPackageDir(packageName), "node_modules"));
}
function isInSocketDlx(filePath) {
if (!filePath) {
return false;
}
const path = /* @__PURE__ */ getPath();
const dlxDir = (0, import_paths.getSocketDlxDir)();
const absolutePath = (0, import_path.normalizePath)(path.resolve(filePath));
return absolutePath.startsWith(`${dlxDir}/`);
}
function isDlxPackageInstalled(packageName) {
const fs = /* @__PURE__ */ getFs();
return fs.existsSync(getDlxInstalledPackageDir(packageName));
}
async function isDlxPackageInstalledAsync(packageName) {
const fs = /* @__PURE__ */ getFs();
try {
await fs.promises.access(getDlxInstalledPackageDir(packageName));
return true;
} catch {
return false;
}
}
function listDlxPackages() {
try {
return (0, import_fs.readDirNamesSync)((0, import_paths.getSocketDlxDir)(), { sort: true });
} catch {
return [];
}
}
async function listDlxPackagesAsync() {
const fs = /* @__PURE__ */ getFs();
try {
const entries = await fs.promises.readdir((0, import_paths.getSocketDlxDir)(), {
withFileTypes: true
});
return entries.filter((e) => e.isDirectory()).map((e) => e.name).sort();
} catch {
return [];
}
}
async function removeDlxPackage(packageName) {
const packageDir = getDlxPackageDir(packageName);
try {
await (0, import_fs.safeDelete)(packageDir, { recursive: true, force: true });
} catch (e) {
throw new Error(`Failed to remove DLX package "${packageName}"`, {
cause: e
});
}
}
function removeDlxPackageSync(packageName) {
const fs = /* @__PURE__ */ getFs();
const packageDir = getDlxPackageDir(packageName);
try {
fs.rmSync(packageDir, { recursive: true, force: true });
} catch (e) {
const code = e.code;
if (code === "EACCES" || code === "EPERM") {
throw new Error(
`Permission denied removing DLX package "${packageName}"
Directory: ${packageDir}
To resolve:
1. Check file/directory permissions
2. Close any programs using files in this directory
3. Try running with elevated privileges if necessary
4. Manually remove: rm -rf "${packageDir}"`,
{ cause: e }
);
}
if (code === "EROFS") {
throw new Error(
`Cannot remove DLX package "${packageName}" from read-only filesystem
Directory: ${packageDir}
The filesystem is mounted read-only.`,
{ cause: e }
);
}
throw new Error(
`Failed to remove DLX package "${packageName}"
Directory: ${packageDir}
Check permissions and ensure no programs are using this directory.`,
{ cause: e }
);
}
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
clearDlx,
clearDlxSync,
dlxDirExists,
dlxDirExistsAsync,
ensureDlxDir,
ensureDlxDirSync,
generateCacheKey,
getDlxInstalledPackageDir,
getDlxPackageDir,
getDlxPackageJsonPath,
getDlxPackageNodeModulesDir,
isDlxPackageInstalled,
isDlxPackageInstalledAsync,
isInSocketDlx,
listDlxPackages,
listDlxPackagesAsync,
removeDlxPackage,
removeDlxPackageSync
});