@socketsecurity/lib 3.0.1 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/abort.js +60 -1
- package/dist/abort.js.map +2 -2
- package/dist/agent.js +289 -1
- package/dist/agent.js.map +2 -2
- package/dist/ansi.js +60 -1
- package/dist/ansi.js.map +2 -2
- package/dist/argv/flags.js +282 -1
- package/dist/argv/flags.js.map +2 -2
- package/dist/argv/parse.js +171 -1
- package/dist/argv/parse.js.map +2 -2
- package/dist/arrays.js +85 -1
- package/dist/arrays.js.map +2 -2
- package/dist/bin.js +419 -5
- package/dist/bin.js.map +2 -2
- package/dist/cacache.js +139 -1
- package/dist/cacache.js.map +2 -2
- package/dist/cache-with-ttl.js +223 -1
- package/dist/cache-with-ttl.js.map +2 -2
- package/dist/constants/agents.js +126 -1
- package/dist/constants/agents.js.map +2 -2
- package/dist/constants/core.d.ts +1 -1
- package/dist/constants/core.js +57 -2
- package/dist/constants/core.js.map +3 -3
- package/dist/constants/encoding.js +48 -1
- package/dist/constants/encoding.js.map +2 -2
- package/dist/constants/github.js +30 -1
- package/dist/constants/github.js.map +2 -2
- package/dist/constants/licenses.js +66 -1
- package/dist/constants/licenses.js.map +2 -2
- package/dist/constants/node.js +185 -1
- package/dist/constants/node.js.map +2 -2
- package/dist/constants/packages.js +128 -1
- package/dist/constants/packages.js.map +2 -2
- package/dist/constants/paths.js +150 -1
- package/dist/constants/paths.js.map +2 -2
- package/dist/constants/platform.js +41 -1
- package/dist/constants/platform.js.map +2 -2
- package/dist/constants/process.js +52 -1
- package/dist/constants/process.js.map +2 -2
- package/dist/constants/socket.js +102 -1
- package/dist/constants/socket.js.map +2 -2
- package/dist/constants/testing.js +36 -1
- package/dist/constants/testing.js.map +2 -2
- package/dist/constants/time.js +39 -1
- package/dist/constants/time.js.map +2 -2
- package/dist/constants/typescript.js +54 -1
- package/dist/constants/typescript.js.map +2 -2
- package/dist/cover/code.js +135 -1
- package/dist/cover/code.js.map +2 -2
- package/dist/cover/formatters.js +101 -11
- package/dist/cover/formatters.js.map +2 -2
- package/dist/cover/type.js +63 -1
- package/dist/cover/type.js.map +2 -2
- package/dist/cover/types.js +15 -1
- package/dist/cover/types.js.map +2 -2
- package/dist/debug.js +337 -2
- package/dist/debug.js.map +2 -2
- package/dist/dlx-binary.js +408 -7
- package/dist/dlx-binary.js.map +2 -2
- package/dist/dlx-package.js +278 -7
- package/dist/dlx-package.js.map +2 -2
- package/dist/dlx.js +214 -7
- package/dist/dlx.js.map +3 -3
- package/dist/effects/pulse-frames.js +64 -1
- package/dist/effects/pulse-frames.js.map +2 -2
- package/dist/effects/text-shimmer.js +174 -1
- package/dist/effects/text-shimmer.js.map +2 -2
- package/dist/effects/types.js +15 -1
- package/dist/effects/types.js.map +2 -2
- package/dist/effects/ultra.js +61 -1
- package/dist/effects/ultra.js.map +2 -2
- package/dist/env/ci.js +31 -1
- package/dist/env/ci.js.map +2 -2
- package/dist/env/debug.js +30 -1
- package/dist/env/debug.js.map +2 -2
- package/dist/env/github.js +65 -1
- package/dist/env/github.js.map +2 -2
- package/dist/env/helpers.js +47 -1
- package/dist/env/helpers.js.map +2 -2
- package/dist/env/home.js +30 -1
- package/dist/env/home.js.map +2 -2
- package/dist/env/locale.js +40 -1
- package/dist/env/locale.js.map +2 -2
- package/dist/env/node-auth-token.js +30 -1
- package/dist/env/node-auth-token.js.map +2 -2
- package/dist/env/node-env.js +30 -1
- package/dist/env/node-env.js.map +2 -2
- package/dist/env/npm.js +50 -1
- package/dist/env/npm.js.map +2 -2
- package/dist/env/package-manager.js +73 -1
- package/dist/env/package-manager.js.map +2 -2
- package/dist/env/path.js +30 -1
- package/dist/env/path.js.map +2 -2
- package/dist/env/pre-commit.js +31 -1
- package/dist/env/pre-commit.js.map +2 -2
- package/dist/env/rewire.js +72 -1
- package/dist/env/rewire.js.map +2 -2
- package/dist/env/shell.js +30 -1
- package/dist/env/shell.js.map +2 -2
- package/dist/env/socket-cli-shadow.js +51 -1
- package/dist/env/socket-cli-shadow.js.map +2 -2
- package/dist/env/socket-cli.js +86 -1
- package/dist/env/socket-cli.js.map +2 -2
- package/dist/env/socket.js +101 -1
- package/dist/env/socket.js.map +2 -2
- package/dist/env/temp-dir.js +40 -1
- package/dist/env/temp-dir.js.map +2 -2
- package/dist/env/term.js +30 -1
- package/dist/env/term.js.map +2 -2
- package/dist/env/test.js +43 -1
- package/dist/env/test.js.map +2 -2
- package/dist/env/windows.js +45 -1
- package/dist/env/windows.js.map +2 -2
- package/dist/env/xdg.js +40 -1
- package/dist/env/xdg.js.map +2 -2
- package/dist/env.js +170 -1
- package/dist/env.js.map +2 -2
- package/dist/fs.js +670 -7
- package/dist/fs.js.map +2 -2
- package/dist/functions.js +68 -1
- package/dist/functions.js.map +2 -2
- package/dist/git.js +329 -2
- package/dist/git.js.map +2 -2
- package/dist/github.js +202 -1
- package/dist/github.js.map +2 -2
- package/dist/globs.js +149 -1
- package/dist/globs.js.map +3 -3
- package/dist/http-request.js +335 -3
- package/dist/http-request.js.map +2 -2
- package/dist/index.js +69 -1
- package/dist/index.js.map +2 -2
- package/dist/ipc.js +244 -1
- package/dist/ipc.js.map +2 -2
- package/dist/json.js +73 -1
- package/dist/json.js.map +2 -2
- package/dist/links/index.js +60 -1
- package/dist/links/index.js.map +2 -2
- package/dist/logger.js +1384 -1
- package/dist/logger.js.map +2 -2
- package/dist/maintained-node-versions.js +35 -1
- package/dist/maintained-node-versions.js.map +2 -2
- package/dist/memoization.js +210 -1
- package/dist/memoization.js.map +2 -2
- package/dist/objects.js +311 -1
- package/dist/objects.js.map +2 -2
- package/dist/packages/editable.js +356 -9
- package/dist/packages/editable.js.map +2 -2
- package/dist/packages/exports.js +162 -1
- package/dist/packages/exports.js.map +2 -2
- package/dist/packages/isolation.js +187 -1
- package/dist/packages/isolation.js.map +2 -2
- package/dist/packages/licenses.js +214 -1
- package/dist/packages/licenses.js.map +2 -2
- package/dist/packages/manifest.js +190 -1
- package/dist/packages/manifest.js.map +2 -2
- package/dist/packages/normalize.js +132 -1
- package/dist/packages/normalize.js.map +2 -2
- package/dist/packages/operations.js +320 -1
- package/dist/packages/operations.js.map +2 -2
- package/dist/packages/paths.js +53 -1
- package/dist/packages/paths.js.map +2 -2
- package/dist/packages/provenance.js +178 -1
- package/dist/packages/provenance.js.map +2 -2
- package/dist/packages/specs.js +83 -1
- package/dist/packages/specs.js.map +2 -2
- package/dist/packages/validation.js +51 -1
- package/dist/packages/validation.js.map +2 -2
- package/dist/packages.js +129 -1
- package/dist/packages.js.map +2 -2
- package/dist/path.js +446 -1
- package/dist/path.js.map +2 -2
- package/dist/paths/rewire.js +79 -1
- package/dist/paths/rewire.js.map +2 -2
- package/dist/paths.js +190 -1
- package/dist/paths.js.map +2 -2
- package/dist/performance.js +216 -15
- package/dist/performance.js.map +2 -2
- package/dist/process-lock.js +287 -8
- package/dist/process-lock.js.map +2 -2
- package/dist/promise-queue.js +109 -1
- package/dist/promise-queue.js.map +2 -2
- package/dist/promises.js +267 -1
- package/dist/promises.js.map +2 -2
- package/dist/prompts/index.js +45 -1
- package/dist/prompts/index.js.map +2 -2
- package/dist/prompts.js +58 -1
- package/dist/prompts.js.map +2 -2
- package/dist/regexps.js +30 -1
- package/dist/regexps.js.map +2 -2
- package/dist/sea.js +44 -1
- package/dist/sea.js.map +2 -2
- package/dist/shadow.js +58 -1
- package/dist/shadow.js.map +2 -2
- package/dist/signal-exit.js +248 -1
- package/dist/signal-exit.js.map +3 -3
- package/dist/sorts.js +94 -1
- package/dist/sorts.js.map +3 -3
- package/dist/spawn.js +200 -1
- package/dist/spawn.js.map +2 -2
- package/dist/spinner.js +961 -1
- package/dist/spinner.js.map +2 -2
- package/dist/ssri.js +71 -1
- package/dist/ssri.js.map +2 -2
- package/dist/stdio/clear.js +82 -1
- package/dist/stdio/clear.js.map +2 -2
- package/dist/stdio/divider.js +89 -3
- package/dist/stdio/divider.js.map +2 -2
- package/dist/stdio/footer.js +94 -2
- package/dist/stdio/footer.js.map +2 -2
- package/dist/stdio/header.js +100 -2
- package/dist/stdio/header.js.map +2 -2
- package/dist/stdio/mask.js +207 -5
- package/dist/stdio/mask.js.map +2 -2
- package/dist/stdio/progress.js +209 -2
- package/dist/stdio/progress.js.map +2 -2
- package/dist/stdio/prompts.js +88 -1
- package/dist/stdio/prompts.js.map +2 -2
- package/dist/stdio/stderr.js +89 -2
- package/dist/stdio/stderr.js.map +2 -2
- package/dist/stdio/stdout.js +103 -2
- package/dist/stdio/stdout.js.map +2 -2
- package/dist/streams.js +78 -1
- package/dist/streams.js.map +2 -2
- package/dist/strings.js +251 -3
- package/dist/strings.js.map +2 -2
- package/dist/suppress-warnings.js +98 -1
- package/dist/suppress-warnings.js.map +2 -2
- package/dist/tables.js +128 -3
- package/dist/tables.js.map +2 -2
- package/dist/temporary-executor.js +53 -1
- package/dist/temporary-executor.js.map +2 -2
- package/dist/themes/context.js +71 -1
- package/dist/themes/context.js.map +2 -2
- package/dist/themes/index.js +57 -1
- package/dist/themes/index.js.map +2 -2
- package/dist/themes/themes.js +195 -1
- package/dist/themes/themes.js.map +2 -2
- package/dist/themes/types.js +15 -1
- package/dist/themes/types.js.map +2 -2
- package/dist/themes/utils.js +116 -1
- package/dist/themes/utils.js.map +2 -2
- package/dist/types.js +59 -1
- package/dist/types.js.map +2 -2
- package/dist/url.js +142 -1
- package/dist/url.js.map +2 -2
- package/dist/utils/get-ipc.js +58 -1
- package/dist/utils/get-ipc.js.map +2 -2
- package/dist/validation/json-parser.js +127 -1
- package/dist/validation/json-parser.js.map +2 -2
- package/dist/validation/types.js +15 -1
- package/dist/validation/types.js.map +2 -2
- package/dist/versions.js +154 -1
- package/dist/versions.js.map +2 -2
- package/dist/words.js +50 -1
- package/dist/words.js.map +2 -2
- package/dist/zod.js +27 -1
- package/dist/zod.js.map +2 -2
- package/package.json +1 -1
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/suppress-warnings.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @fileoverview Utilities to suppress specific process warnings.\n */\n\nconst { apply: ReflectApply } = Reflect\n\n// Store the original emitWarning function to avoid repeat wrapping.\nlet originalEmitWarning: typeof process.emitWarning | undefined\n\n// Track which warning types are currently suppressed.\nconst suppressedWarnings = new Set<string>()\n\n/**\n * Internal function to set up warning suppression.\n * Only wraps process.emitWarning once, regardless of how many times it's called.\n */\nfunction setupSuppression(): void {\n // Only wrap once - store the original on first call.\n if (!originalEmitWarning) {\n originalEmitWarning = process.emitWarning\n process.emitWarning = (warning: string | Error, ...args: any[]) => {\n // Check both string warnings and warning objects.\n if (typeof warning === 'string') {\n // Check if any suppressed warning type matches.\n for (const suppressedType of suppressedWarnings) {\n if (warning.includes(suppressedType)) {\n return\n }\n }\n } else if (warning && typeof warning === 'object') {\n const warningObj = warning as { name?: string }\n if (warningObj.name && suppressedWarnings.has(warningObj.name)) {\n return\n }\n }\n // Not suppressed - call the original function.\n return ReflectApply(\n originalEmitWarning as typeof process.emitWarning,\n process,\n [warning, ...args],\n )\n }\n }\n}\n\n/**\n * Suppress MaxListenersExceededWarning messages.\n * This is useful in tests or scripts where multiple listeners are expected.\n *\n * @example\n * import { suppressMaxListenersWarning } from '@socketsecurity/lib/suppress-warnings'\n *\n * suppressMaxListenersWarning()\n */\nexport function suppressMaxListenersWarning(): void {\n suppressedWarnings.add('MaxListenersExceededWarning')\n setupSuppression()\n}\n\n/**\n * Suppress all process warnings of a specific type.\n *\n * @param warningType - The warning type to suppress (e.g., 'DeprecationWarning', 'ExperimentalWarning')\n *\n * @example\n * import { suppressWarningType } from '@socketsecurity/lib/suppress-warnings'\n *\n * suppressWarningType('ExperimentalWarning')\n */\nexport function suppressWarningType(warningType: string): void {\n suppressedWarnings.add(warningType)\n setupSuppression()\n}\n\n/**\n * Set max listeners on an EventTarget (like AbortSignal) to avoid TypeError.\n *\n * By manually setting `kMaxEventTargetListeners` on the target we avoid:\n * TypeError [ERR_INVALID_ARG_TYPE]: The \"emitter\" argument must be an\n * instance of EventEmitter or EventTarget. Received an instance of\n * AbortSignal\n *\n * in some patch releases of Node 18-23 when calling events.getMaxListeners().\n * See https://github.com/nodejs/node/pull/56807.\n *\n * Instead of calling events.setMaxListeners(n, target) we set the symbol\n * property directly to avoid depending on 'node:events' module.\n *\n * @param target - The EventTarget or AbortSignal to configure\n * @param maxListeners - Maximum number of listeners (defaults to 10, the Node.js default)\n *\n * @example\n * import { setMaxEventTargetListeners } from '@socketsecurity/lib/suppress-warnings'\n *\n * const controller = new AbortController()\n * setMaxEventTargetListeners(controller.signal)\n */\nexport function setMaxEventTargetListeners(\n target: EventTarget | AbortSignal | undefined,\n maxListeners: number = 10,\n): void {\n if (!target) {\n return\n }\n const symbols = Object.getOwnPropertySymbols(target)\n const kMaxEventTargetListeners = symbols.find(\n s => s.description === 'events.maxEventTargetListeners',\n )\n if (kMaxEventTargetListeners) {\n // The default events.defaultMaxListeners value is 10.\n // https://nodejs.org/api/events.html#eventsdefaultmaxlisteners\n ;(target as any)[kMaxEventTargetListeners] = maxListeners\n }\n}\n\n/**\n * Restore the original process.emitWarning function.\n * Call this to re-enable all warnings after suppressing them.\n */\nexport function restoreWarnings(): void {\n if (originalEmitWarning) {\n process.emitWarning = originalEmitWarning\n originalEmitWarning = undefined\n suppressedWarnings.clear()\n }\n}\n\n/**\n * Suppress warnings temporarily within a callback.\n *\n * @param warningType - The warning type to suppress\n * @param callback - Function to execute with warnings suppressed\n * @returns The result of the callback\n *\n * @example\n * import { withSuppressedWarnings } from '@socketsecurity/lib/suppress-warnings'\n *\n * const result = await withSuppressedWarnings('ExperimentalWarning', async () => {\n * // Code that triggers experimental warnings\n * return someValue\n * })\n */\nexport async function withSuppressedWarnings<T>(\n warningType: string,\n callback: () => T | Promise<T>,\n): Promise<T> {\n const original = process.emitWarning\n suppressWarningType(warningType)\n try {\n return await callback()\n } finally {\n process.emitWarning = original\n }\n}\n"],
|
|
5
|
-
"mappings": ";
|
|
6
|
-
"names": [
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,MAAM,EAAE,OAAO,aAAa,IAAI;AAGhC,IAAI;AAGJ,MAAM,qBAAqB,oBAAI,IAAY;AAM3C,SAAS,mBAAyB;AAEhC,MAAI,CAAC,qBAAqB;AACxB,0BAAsB,QAAQ;AAC9B,YAAQ,cAAc,CAAC,YAA4B,SAAgB;AAEjE,UAAI,OAAO,YAAY,UAAU;AAE/B,mBAAW,kBAAkB,oBAAoB;AAC/C,cAAI,QAAQ,SAAS,cAAc,GAAG;AACpC;AAAA,UACF;AAAA,QACF;AAAA,MACF,WAAW,WAAW,OAAO,YAAY,UAAU;AACjD,cAAM,aAAa;AACnB,YAAI,WAAW,QAAQ,mBAAmB,IAAI,WAAW,IAAI,GAAG;AAC9D;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,CAAC,SAAS,GAAG,IAAI;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACF;AAWO,SAAS,8BAAoC;AAClD,qBAAmB,IAAI,6BAA6B;AACpD,mBAAiB;AACnB;AAYO,SAAS,oBAAoB,aAA2B;AAC7D,qBAAmB,IAAI,WAAW;AAClC,mBAAiB;AACnB;AAyBO,SAAS,2BACd,QACA,eAAuB,IACjB;AACN,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AACA,QAAM,UAAU,OAAO,sBAAsB,MAAM;AACnD,QAAM,2BAA2B,QAAQ;AAAA,IACvC,OAAK,EAAE,gBAAgB;AAAA,EACzB;AACA,MAAI,0BAA0B;AAG5B;AAAC,IAAC,OAAe,wBAAwB,IAAI;AAAA,EAC/C;AACF;AAMO,SAAS,kBAAwB;AACtC,MAAI,qBAAqB;AACvB,YAAQ,cAAc;AACtB,0BAAsB;AACtB,uBAAmB,MAAM;AAAA,EAC3B;AACF;AAiBA,eAAsB,uBACpB,aACA,UACY;AACZ,QAAM,WAAW,QAAQ;AACzB,sBAAoB,WAAW;AAC/B,MAAI;AACF,WAAO,MAAM,SAAS;AAAA,EACxB,UAAE;AACA,YAAQ,cAAc;AAAA,EACxB;AACF;",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
package/dist/tables.js
CHANGED
|
@@ -1,5 +1,130 @@
|
|
|
1
1
|
/* Socket Lib - Built with esbuild */
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var tables_exports = {};
|
|
30
|
+
__export(tables_exports, {
|
|
31
|
+
formatSimpleTable: () => formatSimpleTable,
|
|
32
|
+
formatTable: () => formatTable
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(tables_exports);
|
|
35
|
+
var import_yoctocolors_cjs = __toESM(require("./external/yoctocolors-cjs"));
|
|
36
|
+
var import_strings = require("./strings");
|
|
37
|
+
function displayWidth(text) {
|
|
38
|
+
return (0, import_strings.stripAnsi)(text).length;
|
|
39
|
+
}
|
|
40
|
+
function padText(text, width, align = "left") {
|
|
41
|
+
const stripped = (0, import_strings.stripAnsi)(text);
|
|
42
|
+
const textWidth = stripped.length;
|
|
43
|
+
const padding = Math.max(0, width - textWidth);
|
|
44
|
+
switch (align) {
|
|
45
|
+
case "right":
|
|
46
|
+
return " ".repeat(padding) + text;
|
|
47
|
+
case "center": {
|
|
48
|
+
const leftPad = Math.floor(padding / 2);
|
|
49
|
+
const rightPad = padding - leftPad;
|
|
50
|
+
return " ".repeat(leftPad) + text + " ".repeat(rightPad);
|
|
51
|
+
}
|
|
52
|
+
default:
|
|
53
|
+
return text + " ".repeat(padding);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function formatTable(data, columns) {
|
|
57
|
+
if (data.length === 0) {
|
|
58
|
+
return "(no data)";
|
|
59
|
+
}
|
|
60
|
+
const widths = columns.map((col) => {
|
|
61
|
+
const headerWidth = displayWidth(col.header);
|
|
62
|
+
const maxDataWidth = Math.max(
|
|
63
|
+
...data.map((row) => displayWidth(String(row[col.key] ?? "")))
|
|
64
|
+
);
|
|
65
|
+
return col.width ?? Math.max(headerWidth, maxDataWidth);
|
|
66
|
+
});
|
|
67
|
+
const lines = [];
|
|
68
|
+
const topBorder = `\u250C\u2500${widths.map((w) => "\u2500".repeat(w)).join("\u2500\u252C\u2500")}\u2500\u2510`;
|
|
69
|
+
lines.push(import_yoctocolors_cjs.default.dim(topBorder));
|
|
70
|
+
const headerCells = columns.map((col, i) => {
|
|
71
|
+
const text = import_yoctocolors_cjs.default.bold(col.header);
|
|
72
|
+
return padText(text, widths[i], col.align);
|
|
73
|
+
});
|
|
74
|
+
lines.push(
|
|
75
|
+
import_yoctocolors_cjs.default.dim("\u2502 ") + headerCells.join(import_yoctocolors_cjs.default.dim(" \u2502 ")) + import_yoctocolors_cjs.default.dim(" \u2502")
|
|
76
|
+
);
|
|
77
|
+
const headerSep = `\u251C\u2500${widths.map((w) => "\u2500".repeat(w)).join("\u2500\u253C\u2500")}\u2500\u2524`;
|
|
78
|
+
lines.push(import_yoctocolors_cjs.default.dim(headerSep));
|
|
79
|
+
for (const row of data) {
|
|
80
|
+
const cells = columns.map((col, i) => {
|
|
81
|
+
let value = String(row[col.key] ?? "");
|
|
82
|
+
if (col.color) {
|
|
83
|
+
value = col.color(value);
|
|
84
|
+
}
|
|
85
|
+
return padText(value, widths[i], col.align);
|
|
86
|
+
});
|
|
87
|
+
lines.push(
|
|
88
|
+
import_yoctocolors_cjs.default.dim("\u2502 ") + cells.join(import_yoctocolors_cjs.default.dim(" \u2502 ")) + import_yoctocolors_cjs.default.dim(" \u2502")
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
const bottomBorder = `\u2514\u2500${widths.map((w) => "\u2500".repeat(w)).join("\u2500\u2534\u2500")}\u2500\u2518`;
|
|
92
|
+
lines.push(import_yoctocolors_cjs.default.dim(bottomBorder));
|
|
93
|
+
return lines.join("\n");
|
|
94
|
+
}
|
|
95
|
+
function formatSimpleTable(data, columns) {
|
|
96
|
+
if (data.length === 0) {
|
|
97
|
+
return "(no data)";
|
|
98
|
+
}
|
|
99
|
+
const widths = columns.map((col) => {
|
|
100
|
+
const headerWidth = displayWidth(col.header);
|
|
101
|
+
const maxDataWidth = Math.max(
|
|
102
|
+
...data.map((row) => displayWidth(String(row[col.key] ?? "")))
|
|
103
|
+
);
|
|
104
|
+
return col.width ?? Math.max(headerWidth, maxDataWidth);
|
|
105
|
+
});
|
|
106
|
+
const lines = [];
|
|
107
|
+
const headerCells = columns.map(
|
|
108
|
+
(col, i) => padText(import_yoctocolors_cjs.default.bold(col.header), widths[i], col.align)
|
|
109
|
+
);
|
|
110
|
+
lines.push(headerCells.join(" "));
|
|
111
|
+
const separators = widths.map((w) => import_yoctocolors_cjs.default.dim("\u2500".repeat(w)));
|
|
112
|
+
lines.push(separators.join(" "));
|
|
113
|
+
for (const row of data) {
|
|
114
|
+
const cells = columns.map((col, i) => {
|
|
115
|
+
let value = String(row[col.key] ?? "");
|
|
116
|
+
if (col.color) {
|
|
117
|
+
value = col.color(value);
|
|
118
|
+
}
|
|
119
|
+
return padText(value, widths[i], col.align);
|
|
120
|
+
});
|
|
121
|
+
lines.push(cells.join(" "));
|
|
122
|
+
}
|
|
123
|
+
return lines.join("\n");
|
|
124
|
+
}
|
|
125
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
126
|
+
0 && (module.exports = {
|
|
127
|
+
formatSimpleTable,
|
|
128
|
+
formatTable
|
|
129
|
+
});
|
|
5
130
|
//# sourceMappingURL=tables.js.map
|
package/dist/tables.js.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/tables.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @fileoverview Table formatting utilities for CLI applications.\n * Provides ASCII table rendering with borders, alignment, and colors.\n */\n\nimport colors from './external/yoctocolors-cjs'\nimport { stripAnsi } from './strings'\n\nexport type ColumnAlignment = 'left' | 'right' | 'center'\n\n/**\n * Table column configuration.\n */\nexport type TableColumn = {\n key: string\n header: string\n align?: ColumnAlignment | undefined\n width?: number | undefined\n color?: ((value: string) => string) | undefined\n}\n\n/**\n * Calculate display width accounting for ANSI codes.\n */\nfunction displayWidth(text: string): number {\n return stripAnsi(text).length\n}\n\n/**\n * Pad text to specified width with alignment.\n */\nfunction padText(\n text: string,\n width: number,\n align: ColumnAlignment = 'left',\n): string {\n const stripped = stripAnsi(text)\n const textWidth = stripped.length\n const padding = Math.max(0, width - textWidth)\n\n switch (align) {\n case 'right':\n return ' '.repeat(padding) + text\n case 'center': {\n const leftPad = Math.floor(padding / 2)\n const rightPad = padding - leftPad\n return ' '.repeat(leftPad) + text + ' '.repeat(rightPad)\n }\n default:\n return text + ' '.repeat(padding)\n }\n}\n\n/**\n * Format data as an ASCII table with borders.\n *\n * @param data - Array of data objects\n * @param columns - Column configuration\n * @returns Formatted table string\n *\n * @example\n * import { formatTable } from '@socketsecurity/lib/tables'\n * import colors from 'yoctocolors-cjs'\n *\n * const data = [\n * { name: 'lodash', version: '4.17.21', issues: 0 },\n * { name: 'react', version: '18.2.0', issues: 2 },\n * ]\n * const columns = [\n * { key: 'name', header: 'Package' },\n * { key: 'version', header: 'Version', align: 'center' },\n * { key: 'issues', header: 'Issues', align: 'right', color: (v) => v === '0' ? colors.green(v) : colors.red(v) },\n * ]\n * console.log(formatTable(data, columns))\n * // Output:\n * // \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * // \u2502 Package \u2502 Version \u2502 Issues \u2502\n * // \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n * // \u2502 lodash \u2502 4.17.21 \u2502 0 \u2502\n * // \u2502 react \u2502 18.2.0 \u2502 2 \u2502\n * // \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n */\nexport function formatTable(\n data: Array<Record<string, unknown>>,\n columns: TableColumn[],\n): string {\n if (data.length === 0) {\n return '(no data)'\n }\n\n // Calculate column widths\n const widths = columns.map(col => {\n const headerWidth = displayWidth(col.header)\n const maxDataWidth = Math.max(\n ...data.map(row => displayWidth(String(row[col.key] ?? ''))),\n )\n return col.width ?? Math.max(headerWidth, maxDataWidth)\n })\n\n const lines: string[] = []\n\n // Top border\n const topBorder = `\u250C\u2500${widths.map(w => '\u2500'.repeat(w)).join('\u2500\u252C\u2500')}\u2500\u2510`\n lines.push(colors.dim(topBorder))\n\n // Header row\n const headerCells = columns.map((col, i) => {\n const text = colors.bold(col.header)\n return padText(text, widths[i] as number, col.align)\n })\n lines.push(\n colors.dim('\u2502 ') + headerCells.join(colors.dim(' \u2502 ')) + colors.dim(' \u2502'),\n )\n\n // Header separator\n const headerSep = `\u251C\u2500${widths.map(w => '\u2500'.repeat(w)).join('\u2500\u253C\u2500')}\u2500\u2524`\n lines.push(colors.dim(headerSep))\n\n // Data rows\n for (const row of data) {\n const cells = columns.map((col, i) => {\n let value = String(row[col.key] ?? '')\n if (col.color) {\n value = col.color(value)\n }\n return padText(value, widths[i] as number, col.align)\n })\n lines.push(\n colors.dim('\u2502 ') + cells.join(colors.dim(' \u2502 ')) + colors.dim(' \u2502'),\n )\n }\n\n // Bottom border\n const bottomBorder = `\u2514\u2500${widths.map(w => '\u2500'.repeat(w)).join('\u2500\u2534\u2500')}\u2500\u2518`\n lines.push(colors.dim(bottomBorder))\n\n return lines.join('\\n')\n}\n\n/**\n * Format data as a simple table without borders.\n * Lighter weight alternative to formatTable().\n *\n * @param data - Array of data objects\n * @param columns - Column configuration\n * @returns Formatted table string\n *\n * @example\n * import { formatSimpleTable } from '@socketsecurity/lib/tables'\n * import colors from 'yoctocolors-cjs'\n *\n * const data = [\n * { name: 'lodash', version: '4.17.21' },\n * { name: 'react', version: '18.2.0' },\n * ]\n * const columns = [\n * { key: 'name', header: 'Package' },\n * { key: 'version', header: 'Version' },\n * ]\n * console.log(formatSimpleTable(data, columns))\n * // Output:\n * // Package Version\n * // \u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * // lodash 4.17.21\n * // react 18.2.0\n */\nexport function formatSimpleTable(\n data: Array<Record<string, unknown>>,\n columns: TableColumn[],\n): string {\n if (data.length === 0) {\n return '(no data)'\n }\n\n // Calculate column widths\n const widths = columns.map(col => {\n const headerWidth = displayWidth(col.header)\n const maxDataWidth = Math.max(\n ...data.map(row => displayWidth(String(row[col.key] ?? ''))),\n )\n return col.width ?? Math.max(headerWidth, maxDataWidth)\n })\n\n const lines: string[] = []\n\n // Header row\n const headerCells = columns.map((col, i) =>\n padText(colors.bold(col.header), widths[i] as number, col.align),\n )\n lines.push(headerCells.join(' '))\n\n // Header separator\n const separators = widths.map(w => colors.dim('\u2500'.repeat(w)))\n lines.push(separators.join(' '))\n\n // Data rows\n for (const row of data) {\n const cells = columns.map((col, i) => {\n let value = String(row[col.key] ?? '')\n if (col.color) {\n value = col.color(value)\n }\n return padText(value, widths[i] as number, col.align)\n })\n lines.push(cells.join(' '))\n }\n\n return lines.join('\\n')\n}\n"],
|
|
5
|
-
"mappings": ";
|
|
6
|
-
"names": ["
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,6BAAmB;AACnB,qBAA0B;AAkB1B,SAAS,aAAa,MAAsB;AAC1C,aAAO,0BAAU,IAAI,EAAE;AACzB;AAKA,SAAS,QACP,MACA,OACA,QAAyB,QACjB;AACR,QAAM,eAAW,0BAAU,IAAI;AAC/B,QAAM,YAAY,SAAS;AAC3B,QAAM,UAAU,KAAK,IAAI,GAAG,QAAQ,SAAS;AAE7C,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO,IAAI,OAAO,OAAO,IAAI;AAAA,IAC/B,KAAK,UAAU;AACb,YAAM,UAAU,KAAK,MAAM,UAAU,CAAC;AACtC,YAAM,WAAW,UAAU;AAC3B,aAAO,IAAI,OAAO,OAAO,IAAI,OAAO,IAAI,OAAO,QAAQ;AAAA,IACzD;AAAA,IACA;AACE,aAAO,OAAO,IAAI,OAAO,OAAO;AAAA,EACpC;AACF;AA+BO,SAAS,YACd,MACA,SACQ;AACR,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO;AAAA,EACT;AAGA,QAAM,SAAS,QAAQ,IAAI,SAAO;AAChC,UAAM,cAAc,aAAa,IAAI,MAAM;AAC3C,UAAM,eAAe,KAAK;AAAA,MACxB,GAAG,KAAK,IAAI,SAAO,aAAa,OAAO,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC;AAAA,IAC7D;AACA,WAAO,IAAI,SAAS,KAAK,IAAI,aAAa,YAAY;AAAA,EACxD,CAAC;AAED,QAAM,QAAkB,CAAC;AAGzB,QAAM,YAAY,eAAK,OAAO,IAAI,OAAK,SAAI,OAAO,CAAC,CAAC,EAAE,KAAK,oBAAK,CAAC;AACjE,QAAM,KAAK,uBAAAA,QAAO,IAAI,SAAS,CAAC;AAGhC,QAAM,cAAc,QAAQ,IAAI,CAAC,KAAK,MAAM;AAC1C,UAAM,OAAO,uBAAAA,QAAO,KAAK,IAAI,MAAM;AACnC,WAAO,QAAQ,MAAM,OAAO,CAAC,GAAa,IAAI,KAAK;AAAA,EACrD,CAAC;AACD,QAAM;AAAA,IACJ,uBAAAA,QAAO,IAAI,SAAI,IAAI,YAAY,KAAK,uBAAAA,QAAO,IAAI,UAAK,CAAC,IAAI,uBAAAA,QAAO,IAAI,SAAI;AAAA,EAC1E;AAGA,QAAM,YAAY,eAAK,OAAO,IAAI,OAAK,SAAI,OAAO,CAAC,CAAC,EAAE,KAAK,oBAAK,CAAC;AACjE,QAAM,KAAK,uBAAAA,QAAO,IAAI,SAAS,CAAC;AAGhC,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,QAAQ,IAAI,CAAC,KAAK,MAAM;AACpC,UAAI,QAAQ,OAAO,IAAI,IAAI,GAAG,KAAK,EAAE;AACrC,UAAI,IAAI,OAAO;AACb,gBAAQ,IAAI,MAAM,KAAK;AAAA,MACzB;AACA,aAAO,QAAQ,OAAO,OAAO,CAAC,GAAa,IAAI,KAAK;AAAA,IACtD,CAAC;AACD,UAAM;AAAA,MACJ,uBAAAA,QAAO,IAAI,SAAI,IAAI,MAAM,KAAK,uBAAAA,QAAO,IAAI,UAAK,CAAC,IAAI,uBAAAA,QAAO,IAAI,SAAI;AAAA,IACpE;AAAA,EACF;AAGA,QAAM,eAAe,eAAK,OAAO,IAAI,OAAK,SAAI,OAAO,CAAC,CAAC,EAAE,KAAK,oBAAK,CAAC;AACpE,QAAM,KAAK,uBAAAA,QAAO,IAAI,YAAY,CAAC;AAEnC,SAAO,MAAM,KAAK,IAAI;AACxB;AA6BO,SAAS,kBACd,MACA,SACQ;AACR,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO;AAAA,EACT;AAGA,QAAM,SAAS,QAAQ,IAAI,SAAO;AAChC,UAAM,cAAc,aAAa,IAAI,MAAM;AAC3C,UAAM,eAAe,KAAK;AAAA,MACxB,GAAG,KAAK,IAAI,SAAO,aAAa,OAAO,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC;AAAA,IAC7D;AACA,WAAO,IAAI,SAAS,KAAK,IAAI,aAAa,YAAY;AAAA,EACxD,CAAC;AAED,QAAM,QAAkB,CAAC;AAGzB,QAAM,cAAc,QAAQ;AAAA,IAAI,CAAC,KAAK,MACpC,QAAQ,uBAAAA,QAAO,KAAK,IAAI,MAAM,GAAG,OAAO,CAAC,GAAa,IAAI,KAAK;AAAA,EACjE;AACA,QAAM,KAAK,YAAY,KAAK,IAAI,CAAC;AAGjC,QAAM,aAAa,OAAO,IAAI,OAAK,uBAAAA,QAAO,IAAI,SAAI,OAAO,CAAC,CAAC,CAAC;AAC5D,QAAM,KAAK,WAAW,KAAK,IAAI,CAAC;AAGhC,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,QAAQ,IAAI,CAAC,KAAK,MAAM;AACpC,UAAI,QAAQ,OAAO,IAAI,IAAI,GAAG,KAAK,EAAE;AACrC,UAAI,IAAI,OAAO;AACb,gBAAQ,IAAI,MAAM,KAAK;AAAA,MACzB;AACA,aAAO,QAAQ,OAAO,OAAO,CAAC,GAAa,IAAI,KAAK;AAAA,IACtD,CAAC;AACD,UAAM,KAAK,MAAM,KAAK,IAAI,CAAC;AAAA,EAC7B;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;",
|
|
6
|
+
"names": ["colors"]
|
|
7
7
|
}
|
|
@@ -1,3 +1,55 @@
|
|
|
1
1
|
/* Socket Lib - Built with esbuild */
|
|
2
|
-
var
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var temporary_executor_exports = {};
|
|
20
|
+
__export(temporary_executor_exports, {
|
|
21
|
+
isRunningInTemporaryExecutor: () => isRunningInTemporaryExecutor
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(temporary_executor_exports);
|
|
24
|
+
var import_platform = require("#constants/platform");
|
|
25
|
+
var import_path = require("./path");
|
|
26
|
+
function isRunningInTemporaryExecutor(cwd = process.cwd()) {
|
|
27
|
+
const userAgent = process.env["npm_config_user_agent"];
|
|
28
|
+
if (userAgent?.includes("exec") || userAgent?.includes("npx") || userAgent?.includes("dlx")) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
const normalizedCwd = (0, import_path.normalizePath)(cwd);
|
|
32
|
+
const npmCache = process.env["npm_config_cache"];
|
|
33
|
+
if (npmCache && normalizedCwd.includes((0, import_path.normalizePath)(npmCache))) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
const tempPatterns = [
|
|
37
|
+
// npm's npx cache directory
|
|
38
|
+
"_npx",
|
|
39
|
+
// pnpm dlx temporary store
|
|
40
|
+
".pnpm-store",
|
|
41
|
+
// Common dlx directory prefix
|
|
42
|
+
"dlx-",
|
|
43
|
+
// Yarn Berry PnP virtual packages.
|
|
44
|
+
".yarn/$$"
|
|
45
|
+
];
|
|
46
|
+
if (import_platform.WIN32) {
|
|
47
|
+
tempPatterns.push("AppData/Local/Temp/xfs-");
|
|
48
|
+
}
|
|
49
|
+
return tempPatterns.some((pattern) => normalizedCwd.includes(pattern));
|
|
50
|
+
}
|
|
51
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
52
|
+
0 && (module.exports = {
|
|
53
|
+
isRunningInTemporaryExecutor
|
|
54
|
+
});
|
|
3
55
|
//# sourceMappingURL=temporary-executor.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/temporary-executor.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @fileoverview Temporary package executor detection utilities for Socket ecosystem.\n * Identifies and handles temporary execution contexts such as npx, pnpm dlx, and yarn dlx.\n */\n\nimport { WIN32 } from '#constants/platform'\nimport { normalizePath } from './path'\n\n/**\n * Detects if the current process is running in a temporary package execution context\n * such as npm exec, npx, pnpm dlx, or yarn dlx.\n *\n * When package managers run commands via exec/npx/dlx, they execute in temporary directories\n * that are cleaned up after execution. Creating persistent shadows or modifying PATH\n * in these contexts can break subsequent package manager commands.\n */\nexport function isRunningInTemporaryExecutor(cwd = process.cwd()): boolean {\n // Check environment variable for exec/npx/dlx indicators.\n const userAgent = process.env['npm_config_user_agent']\n if (\n userAgent?.includes('exec') ||\n userAgent?.includes('npx') ||\n userAgent?.includes('dlx')\n ) {\n return true\n }\n\n // Normalize the cwd path for consistent checking across platforms.\n const normalizedCwd = normalizePath(cwd)\n\n // Check if running from npm's npx cache.\n const npmCache = process.env['npm_config_cache']\n if (npmCache && normalizedCwd.includes(normalizePath(npmCache))) {\n return true\n }\n\n // Check common temporary execution path patterns.\n const tempPatterns = [\n // npm's npx cache directory\n '_npx',\n // pnpm dlx temporary store\n '.pnpm-store',\n // Common dlx directory prefix\n 'dlx-',\n // Yarn Berry PnP virtual packages.\n '.yarn/$$',\n ]\n\n // Yarn on Windows uses AppData/Local/Temp/xfs- pattern.\n if (WIN32) {\n tempPatterns.push('AppData/Local/Temp/xfs-')\n }\n\n return tempPatterns.some(pattern => normalizedCwd.includes(pattern))\n}\n"],
|
|
5
|
-
"mappings": ";
|
|
6
|
-
"names": [
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,sBAAsB;AACtB,kBAA8B;AAUvB,SAAS,6BAA6B,MAAM,QAAQ,IAAI,GAAY;AAEzE,QAAM,YAAY,QAAQ,IAAI,uBAAuB;AACrD,MACE,WAAW,SAAS,MAAM,KAC1B,WAAW,SAAS,KAAK,KACzB,WAAW,SAAS,KAAK,GACzB;AACA,WAAO;AAAA,EACT;AAGA,QAAM,oBAAgB,2BAAc,GAAG;AAGvC,QAAM,WAAW,QAAQ,IAAI,kBAAkB;AAC/C,MAAI,YAAY,cAAc,aAAS,2BAAc,QAAQ,CAAC,GAAG;AAC/D,WAAO;AAAA,EACT;AAGA,QAAM,eAAe;AAAA;AAAA,IAEnB;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,EACF;AAGA,MAAI,uBAAO;AACT,iBAAa,KAAK,yBAAyB;AAAA,EAC7C;AAEA,SAAO,aAAa,KAAK,aAAW,cAAc,SAAS,OAAO,CAAC;AACrE;",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
package/dist/themes/context.js
CHANGED
|
@@ -1,3 +1,73 @@
|
|
|
1
1
|
/* Socket Lib - Built with esbuild */
|
|
2
|
-
var
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var context_exports = {};
|
|
20
|
+
__export(context_exports, {
|
|
21
|
+
getTheme: () => getTheme,
|
|
22
|
+
onThemeChange: () => onThemeChange,
|
|
23
|
+
setTheme: () => setTheme,
|
|
24
|
+
withTheme: () => withTheme,
|
|
25
|
+
withThemeSync: () => withThemeSync
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(context_exports);
|
|
28
|
+
var import_node_async_hooks = require("node:async_hooks");
|
|
29
|
+
var import_themes = require("./themes");
|
|
30
|
+
const themeStorage = new import_node_async_hooks.AsyncLocalStorage();
|
|
31
|
+
let fallbackTheme = import_themes.SOCKET_THEME;
|
|
32
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
33
|
+
function setTheme(theme) {
|
|
34
|
+
fallbackTheme = typeof theme === "string" ? import_themes.THEMES[theme] : theme;
|
|
35
|
+
emitThemeChange(fallbackTheme);
|
|
36
|
+
}
|
|
37
|
+
function getTheme() {
|
|
38
|
+
return themeStorage.getStore() ?? fallbackTheme;
|
|
39
|
+
}
|
|
40
|
+
async function withTheme(theme, fn) {
|
|
41
|
+
const resolvedTheme = typeof theme === "string" ? import_themes.THEMES[theme] : theme;
|
|
42
|
+
return await themeStorage.run(resolvedTheme, async () => {
|
|
43
|
+
emitThemeChange(resolvedTheme);
|
|
44
|
+
return await fn();
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function withThemeSync(theme, fn) {
|
|
48
|
+
const resolvedTheme = typeof theme === "string" ? import_themes.THEMES[theme] : theme;
|
|
49
|
+
return themeStorage.run(resolvedTheme, () => {
|
|
50
|
+
emitThemeChange(resolvedTheme);
|
|
51
|
+
return fn();
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function onThemeChange(listener) {
|
|
55
|
+
listeners.add(listener);
|
|
56
|
+
return () => {
|
|
57
|
+
listeners.delete(listener);
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function emitThemeChange(theme) {
|
|
61
|
+
for (const listener of listeners) {
|
|
62
|
+
listener(theme);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
66
|
+
0 && (module.exports = {
|
|
67
|
+
getTheme,
|
|
68
|
+
onThemeChange,
|
|
69
|
+
setTheme,
|
|
70
|
+
withTheme,
|
|
71
|
+
withThemeSync
|
|
72
|
+
});
|
|
3
73
|
//# sourceMappingURL=context.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/themes/context.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @fileoverview Elegant theme context management.\n * Async-aware theming with automatic context isolation via AsyncLocalStorage.\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks'\n\nimport type { Theme } from './types'\nimport { SOCKET_THEME, THEMES, type ThemeName } from './themes'\n\n/**\n * Theme change event listener signature.\n */\nexport type ThemeChangeListener = (theme: Theme) => void\n\n/**\n * AsyncLocalStorage for theme context isolation.\n */\nconst themeStorage = new AsyncLocalStorage<Theme>()\n\n/**\n * Fallback theme for global context.\n */\nlet fallbackTheme: Theme = SOCKET_THEME\n\n/**\n * Registered theme change listeners.\n */\nconst listeners: Set<ThemeChangeListener> = new Set()\n\n/**\n * Set the global fallback theme.\n *\n * @param theme - Theme name or object\n *\n * @example\n * ```ts\n * setTheme('socket-firewall')\n * ```\n */\nexport function setTheme(theme: Theme | ThemeName): void {\n fallbackTheme = typeof theme === 'string' ? THEMES[theme] : theme\n emitThemeChange(fallbackTheme)\n}\n\n/**\n * Get the active theme from context.\n *\n * @returns Current theme\n *\n * @example\n * ```ts\n * const theme = getTheme()\n * console.log(theme.displayName)\n * ```\n */\nexport function getTheme(): Theme {\n return themeStorage.getStore() ?? fallbackTheme\n}\n\n/**\n * Execute async operation with scoped theme.\n * Theme automatically restored on completion.\n *\n * @template T - Return type\n * @param theme - Scoped theme\n * @param fn - Async operation\n * @returns Operation result\n *\n * @example\n * ```ts\n * await withTheme('ultra', async () => {\n * // Operations use Ultra theme\n * })\n * ```\n */\nexport async function withTheme<T>(\n theme: Theme | ThemeName,\n fn: () => Promise<T>,\n): Promise<T> {\n const resolvedTheme = typeof theme === 'string' ? THEMES[theme] : theme\n return await themeStorage.run(resolvedTheme, async () => {\n emitThemeChange(resolvedTheme)\n return await fn()\n })\n}\n\n/**\n * Execute sync operation with scoped theme.\n * Theme automatically restored on completion.\n *\n * @template T - Return type\n * @param theme - Scoped theme\n * @param fn - Sync operation\n * @returns Operation result\n *\n * @example\n * ```ts\n * const result = withThemeSync('coana', () => {\n * return processData()\n * })\n * ```\n */\nexport function withThemeSync<T>(theme: Theme | ThemeName, fn: () => T): T {\n const resolvedTheme = typeof theme === 'string' ? THEMES[theme] : theme\n return themeStorage.run(resolvedTheme, () => {\n emitThemeChange(resolvedTheme)\n return fn()\n })\n}\n\n/**\n * Subscribe to theme change events.\n *\n * @param listener - Change handler\n * @returns Unsubscribe function\n *\n * @example\n * ```ts\n * const unsubscribe = onThemeChange((theme) => {\n * console.log('Theme:', theme.displayName)\n * })\n *\n * // Cleanup\n * unsubscribe()\n * ```\n */\nexport function onThemeChange(listener: ThemeChangeListener): () => void {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\n/**\n * Emit theme change event to listeners.\n * @private\n */\nfunction emitThemeChange(theme: Theme): void {\n for (const listener of listeners) {\n listener(theme)\n }\n}\n"],
|
|
5
|
-
"mappings": ";
|
|
6
|
-
"names": [
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,8BAAkC;AAGlC,oBAAqD;AAUrD,MAAM,eAAe,IAAI,0CAAyB;AAKlD,IAAI,gBAAuB;AAK3B,MAAM,YAAsC,oBAAI,IAAI;AAY7C,SAAS,SAAS,OAAgC;AACvD,kBAAgB,OAAO,UAAU,WAAW,qBAAO,KAAK,IAAI;AAC5D,kBAAgB,aAAa;AAC/B;AAaO,SAAS,WAAkB;AAChC,SAAO,aAAa,SAAS,KAAK;AACpC;AAkBA,eAAsB,UACpB,OACA,IACY;AACZ,QAAM,gBAAgB,OAAO,UAAU,WAAW,qBAAO,KAAK,IAAI;AAClE,SAAO,MAAM,aAAa,IAAI,eAAe,YAAY;AACvD,oBAAgB,aAAa;AAC7B,WAAO,MAAM,GAAG;AAAA,EAClB,CAAC;AACH;AAkBO,SAAS,cAAiB,OAA0B,IAAgB;AACzE,QAAM,gBAAgB,OAAO,UAAU,WAAW,qBAAO,KAAK,IAAI;AAClE,SAAO,aAAa,IAAI,eAAe,MAAM;AAC3C,oBAAgB,aAAa;AAC7B,WAAO,GAAG;AAAA,EACZ,CAAC;AACH;AAkBO,SAAS,cAAc,UAA2C;AACvE,YAAU,IAAI,QAAQ;AACtB,SAAO,MAAM;AACX,cAAU,OAAO,QAAQ;AAAA,EAC3B;AACF;AAMA,SAAS,gBAAgB,OAAoB;AAC3C,aAAW,YAAY,WAAW;AAChC,aAAS,KAAK;AAAA,EAChB;AACF;",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
package/dist/themes/index.js
CHANGED
|
@@ -1,3 +1,59 @@
|
|
|
1
1
|
/* Socket Lib - Built with esbuild */
|
|
2
|
-
var
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var themes_exports = {};
|
|
20
|
+
__export(themes_exports, {
|
|
21
|
+
BRICK_THEME: () => import_themes.BRICK_THEME,
|
|
22
|
+
LUSH_THEME: () => import_themes.LUSH_THEME,
|
|
23
|
+
SOCKET_THEME: () => import_themes.SOCKET_THEME,
|
|
24
|
+
SUNSET_THEME: () => import_themes.SUNSET_THEME,
|
|
25
|
+
THEMES: () => import_themes.THEMES,
|
|
26
|
+
ULTRA_THEME: () => import_themes.ULTRA_THEME,
|
|
27
|
+
createTheme: () => import_utils.createTheme,
|
|
28
|
+
extendTheme: () => import_utils.extendTheme,
|
|
29
|
+
getTheme: () => import_context.getTheme,
|
|
30
|
+
onThemeChange: () => import_context.onThemeChange,
|
|
31
|
+
resolveColor: () => import_utils.resolveColor,
|
|
32
|
+
resolveShimmerColor: () => import_utils.resolveShimmerColor,
|
|
33
|
+
setTheme: () => import_context.setTheme,
|
|
34
|
+
withTheme: () => import_context.withTheme,
|
|
35
|
+
withThemeSync: () => import_context.withThemeSync
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(themes_exports);
|
|
38
|
+
var import_themes = require("./themes");
|
|
39
|
+
var import_context = require("./context");
|
|
40
|
+
var import_utils = require("./utils");
|
|
41
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
42
|
+
0 && (module.exports = {
|
|
43
|
+
BRICK_THEME,
|
|
44
|
+
LUSH_THEME,
|
|
45
|
+
SOCKET_THEME,
|
|
46
|
+
SUNSET_THEME,
|
|
47
|
+
THEMES,
|
|
48
|
+
ULTRA_THEME,
|
|
49
|
+
createTheme,
|
|
50
|
+
extendTheme,
|
|
51
|
+
getTheme,
|
|
52
|
+
onThemeChange,
|
|
53
|
+
resolveColor,
|
|
54
|
+
resolveShimmerColor,
|
|
55
|
+
setTheme,
|
|
56
|
+
withTheme,
|
|
57
|
+
withThemeSync
|
|
58
|
+
});
|
|
3
59
|
//# sourceMappingURL=index.js.map
|
package/dist/themes/index.js.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/themes/index.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @fileoverview Elegant theming system for Socket libraries.\n * Unified visual language across spinners, loggers, prompts, and links.\n *\n * @example\n * ```ts\n * import { setTheme, THEMES } from '@socketsecurity/lib/themes'\n *\n * // Set global theme\n * setTheme('brick')\n * ```\n *\n * @example\n * ```ts\n * import { withTheme } from '@socketsecurity/lib/themes'\n *\n * // Scoped theme context\n * await withTheme('ultra', async () => {\n * // All operations inherit Ultra theme\n * })\n * ```\n *\n * @example\n * ```ts\n * import { createTheme } from '@socketsecurity/lib/themes'\n *\n * // Custom theme creation\n * const myTheme = createTheme({\n * name: 'custom',\n * displayName: 'Custom Theme',\n * colors: {\n * primary: [255, 100, 200],\n * success: 'greenBright',\n * error: 'redBright',\n * warning: 'yellowBright',\n * info: 'blueBright',\n * step: 'cyanBright',\n * text: 'white',\n * textDim: 'gray',\n * link: 'cyanBright',\n * prompt: 'primary'\n * }\n * })\n * ```\n */\n\n// Type system\nexport type {\n ColorReference,\n Theme,\n ThemeColors,\n ThemeEffects,\n ThemeMeta,\n} from './types'\n\n// Curated themes\nexport {\n BRICK_THEME,\n LUSH_THEME,\n SOCKET_THEME,\n SUNSET_THEME,\n THEMES,\n ULTRA_THEME,\n type ThemeName,\n} from './themes'\n\n// Context management\nexport {\n getTheme,\n onThemeChange,\n setTheme,\n withTheme,\n withThemeSync,\n type ThemeChangeListener,\n} from './context'\n\n// Composition utilities\nexport {\n createTheme,\n extendTheme,\n resolveColor,\n resolveShimmerColor,\n} from './utils'\n"],
|
|
5
|
-
"mappings": ";
|
|
6
|
-
"names": [
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwDA,oBAQO;AAGP,qBAOO;AAGP,mBAKO;",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|