@socketsecurity/lib
Version:
Core utilities and infrastructure for Socket.dev security tools
340 lines (339 loc) • 11.7 kB
JavaScript
;
/* Socket Lib - Built with esbuild */
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var debug_exports = {};
__export(debug_exports, {
debug: () => debug,
debugCache: () => debugCache,
debugCacheNs: () => debugCacheNs,
debugDir: () => debugDir,
debugDirNs: () => debugDirNs,
debugLog: () => debugLog,
debugLogNs: () => debugLogNs,
debugNs: () => debugNs,
debuglog: () => debuglog,
debugtime: () => debugtime,
isDebug: () => isDebug,
isDebugNs: () => isDebugNs
});
module.exports = __toCommonJS(debug_exports);
var import_process = require("./constants/process");
var import_debug = require("./env/debug");
var import_socket = require("./env/socket");
var import_is_unicode_supported = __toESM(require("./external/@socketregistry/is-unicode-supported"));
var import_debug2 = __toESM(require("./external/debug"));
var import_logger = require("./logger");
var import_objects = require("./objects");
var import_strings = require("./strings");
const logger = (0, import_logger.getDefaultLogger)();
const ReflectApply = Reflect.apply;
const debugByNamespace = /* @__PURE__ */ new Map();
// @__NO_SIDE_EFFECTS__
function getDebugJsInstance(namespace) {
let inst = debugByNamespace.get(namespace);
if (inst) {
return inst;
}
if (!(0, import_debug.getDebug)() && (0, import_socket.getSocketDebug)() && (namespace === "error" || namespace === "notice")) {
import_debug2.default.enable(namespace);
}
inst = (0, import_debug2.default)(namespace);
inst.log = customLog;
debugByNamespace.set(namespace, inst);
return inst;
}
let _util;
// @__NO_SIDE_EFFECTS__
function getUtil() {
if (_util === void 0) {
_util = require("node:util");
}
return _util;
}
// @__NO_SIDE_EFFECTS__
function getCallerInfo(stackOffset = 3) {
let name = "";
const captureStackTrace = Error.captureStackTrace;
if (typeof captureStackTrace === "function") {
const obj = {};
captureStackTrace(obj, getCallerInfo);
const stack = obj.stack;
if (typeof stack === "string") {
let lineCount = 0;
let lineStart = 0;
for (let i = 0, { length } = stack; i < length; i += 1) {
if (stack[i] === "\n") {
lineCount += 1;
if (lineCount < stackOffset) {
lineStart = i + 1;
} else {
const line = stack.slice(lineStart, i).trimStart();
const match = /(?<=^at\s+).*?(?=\s+\(|$)/.exec(line)?.[0];
if (match) {
name = match.replace(/^(?:async|bound|get|new|set)\s+/, "");
if (name.startsWith("Object.")) {
const afterDot = name.slice(
7
/*'Object.'.length*/
);
if (!(0, import_objects.hasOwn)(Object, afterDot)) {
name = afterDot;
}
}
}
break;
}
}
}
}
}
return name;
}
// @__NO_SIDE_EFFECTS__
function customLog(...args) {
const util = /* @__PURE__ */ getUtil();
const inspectOpts = import_debug2.default.inspectOpts ? {
...import_debug2.default.inspectOpts,
showHidden: import_debug2.default.inspectOpts.showHidden === null ? void 0 : import_debug2.default.inspectOpts.showHidden,
depth: import_debug2.default.inspectOpts.depth === null || typeof import_debug2.default.inspectOpts.depth === "boolean" ? void 0 : import_debug2.default.inspectOpts.depth
} : {};
ReflectApply(logger.info, logger, [
util.formatWithOptions(inspectOpts, ...args)
]);
}
// @__NO_SIDE_EFFECTS__
function extractOptions(namespaces) {
return namespaces !== null && typeof namespaces === "object" ? { __proto__: null, ...namespaces } : { __proto__: null, namespaces };
}
// @__NO_SIDE_EFFECTS__
function isEnabled(namespaces) {
if (!(0, import_socket.getSocketDebug)()) {
return false;
}
if (typeof namespaces !== "string" || !namespaces || namespaces === "*") {
return true;
}
const split = namespaces.trim().replace(/\s+/g, ",").split(",").filter(Boolean);
const names = [];
const skips = [];
for (const ns of split) {
if (ns.startsWith("-")) {
skips.push(ns.slice(1));
} else {
names.push(ns);
}
}
if (names.length && !names.some((ns) => (/* @__PURE__ */ getDebugJsInstance(ns)).enabled)) {
return false;
}
return skips.every((ns) => !(/* @__PURE__ */ getDebugJsInstance(ns)).enabled);
}
function debugDirNs(namespacesOrOpts, obj, inspectOpts) {
const options = /* @__PURE__ */ extractOptions(namespacesOrOpts);
const { namespaces } = options;
if (!/* @__PURE__ */ isEnabled(namespaces)) {
return;
}
const callerName = /* @__PURE__ */ getCallerInfo(4) || "anonymous";
if (pointingTriangle === void 0) {
const supported = (0, import_is_unicode_supported.default)();
pointingTriangle = supported ? "\u25B8" : ">";
}
let opts = inspectOpts;
if (opts === void 0) {
const debugOpts = import_debug2.default.inspectOpts;
if (debugOpts) {
opts = {
...debugOpts,
showHidden: debugOpts.showHidden === null ? void 0 : debugOpts.showHidden,
depth: debugOpts.depth === null || typeof debugOpts.depth === "boolean" ? null : debugOpts.depth
};
}
}
const spinnerInstance = options.spinner || (0, import_process.getSpinner)();
const wasSpinning = spinnerInstance?.isSpinning;
spinnerInstance?.stop();
logger.info(`[DEBUG] ${callerName} ${pointingTriangle} object inspection:`);
logger.dir(obj, inspectOpts);
if (wasSpinning) {
spinnerInstance?.start();
}
}
let pointingTriangle;
function debugNs(namespacesOrOpts, ...args) {
const options = /* @__PURE__ */ extractOptions(namespacesOrOpts);
const { namespaces } = options;
if (!/* @__PURE__ */ isEnabled(namespaces)) {
return;
}
const name = /* @__PURE__ */ getCallerInfo(4) || "anonymous";
if (pointingTriangle === void 0) {
const supported = (0, import_is_unicode_supported.default)();
pointingTriangle = supported ? "\u25B8" : ">";
}
const text = args.at(0);
const logArgs = typeof text === "string" ? [
(0, import_strings.applyLinePrefix)(
`${name ? `${name} ${pointingTriangle} ` : ""}${text}`,
{ prefix: "[DEBUG] " }
),
...args.slice(1)
] : args;
const spinnerInstance = options.spinner || (0, import_process.getSpinner)();
const wasSpinning = spinnerInstance?.isSpinning;
spinnerInstance?.stop();
ReflectApply(logger.info, logger, logArgs);
if (wasSpinning) {
spinnerInstance?.start();
}
}
function debugLogNs(namespacesOrOpts, ...args) {
const options = /* @__PURE__ */ extractOptions(namespacesOrOpts);
const { namespaces } = options;
if (!/* @__PURE__ */ isEnabled(namespaces)) {
return;
}
const callerName = /* @__PURE__ */ getCallerInfo(4) || "anonymous";
if (pointingTriangle === void 0) {
const supported = (0, import_is_unicode_supported.default)();
pointingTriangle = supported ? "\u25B8" : ">";
}
const text = args.at(0);
const logArgs = typeof text === "string" ? [
(0, import_strings.applyLinePrefix)(
`${callerName ? `${callerName} ${pointingTriangle} ` : ""}${text}`,
{ prefix: "[DEBUG] " }
),
...args.slice(1)
] : [`[DEBUG] ${callerName} ${pointingTriangle}`, ...args];
const spinnerInstance = options.spinner || (0, import_process.getSpinner)();
const wasSpinning = spinnerInstance?.isSpinning;
spinnerInstance?.stop();
ReflectApply(logger.info, logger, logArgs);
if (wasSpinning) {
spinnerInstance?.start();
}
}
function debugCacheNs(namespacesOrOpts, operation, key, meta) {
const options = /* @__PURE__ */ extractOptions(namespacesOrOpts);
const { namespaces } = options;
if (!/* @__PURE__ */ isEnabled(namespaces)) {
return;
}
const callerName = /* @__PURE__ */ getCallerInfo(4) || "cache";
if (pointingTriangle === void 0) {
const supported = (0, import_is_unicode_supported.default)();
pointingTriangle = supported ? "\u25B8" : ">";
}
const prefix = `[CACHE] ${callerName} ${pointingTriangle} ${operation}: ${key}`;
const logArgs = meta !== void 0 ? [prefix, meta] : [prefix];
const spinnerInstance = options.spinner || (0, import_process.getSpinner)();
const wasSpinning = spinnerInstance?.isSpinning;
spinnerInstance?.stop();
ReflectApply(logger.info, logger, logArgs);
if (wasSpinning) {
spinnerInstance?.start();
}
}
// @__NO_SIDE_EFFECTS__
function debugCache(operation, key, meta) {
if (!(0, import_socket.getSocketDebug)()) {
return;
}
const callerName = /* @__PURE__ */ getCallerInfo(3) || "cache";
if (pointingTriangle === void 0) {
const supported = (0, import_is_unicode_supported.default)();
pointingTriangle = supported ? "\u25B8" : ">";
}
const prefix = `[CACHE] ${callerName} ${pointingTriangle} ${operation}: ${key}`;
const args = meta !== void 0 ? [prefix, meta] : [prefix];
console.log(...args);
}
// @__NO_SIDE_EFFECTS__
function isDebugNs(namespaces) {
return !!(0, import_socket.getSocketDebug)() && /* @__PURE__ */ isEnabled(namespaces);
}
function debug(...args) {
debugNs("*", ...args);
}
function debugDir(obj, inspectOpts) {
debugDirNs("*", obj, inspectOpts);
}
function debugLog(...args) {
debugLogNs("*", ...args);
}
// @__NO_SIDE_EFFECTS__
function isDebug() {
return !!(0, import_socket.getSocketDebug)();
}
// @__NO_SIDE_EFFECTS__
function debuglog(section) {
const util = /* @__PURE__ */ getUtil();
return util.debuglog(section);
}
// @__NO_SIDE_EFFECTS__
function debugtime(label) {
const util = /* @__PURE__ */ getUtil();
let startTime;
const impl = () => {
if (startTime === void 0) {
startTime = Date.now();
} else {
const duration = Date.now() - startTime;
util.debuglog("time")(`${label}: ${duration}ms`);
startTime = void 0;
}
};
impl.start = () => {
startTime = Date.now();
};
impl.end = () => {
if (startTime !== void 0) {
const duration = Date.now() - startTime;
util.debuglog("time")(`${label}: ${duration}ms`);
startTime = void 0;
}
};
return impl;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
debug,
debugCache,
debugCacheNs,
debugDir,
debugDirNs,
debugLog,
debugLogNs,
debugNs,
debuglog,
debugtime,
isDebug,
isDebugNs
});