Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

install-module-linked

Package Overview
Dependencies
Maintainers
1
Versions
139
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

install-module-linked - npm Package Compare versions

Comparing version
1.4.1
to
1.4.2
+1
-1
dist/cjs/workers/async.js

@@ -64,3 +64,3 @@ "use strict";

console.log("Could not install: ".concat(installString, ". Message: ").concat(err.message));
return callback();
return callback(err);
}

@@ -67,0 +67,0 @@ // Use temp symlink + atomic rename to avoid cross-process race conditions

@@ -1,1 +0,1 @@

{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/install-module-linked/src/workers/async.ts"],"sourcesContent":["import fs from 'fs';\nimport { safeRm } from 'fs-remove-compat';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport tempSuffix from 'temp-suffix';\nimport { DEFAULT_CACHE_PATH } from '../constants.ts';\nimport cache from '../lib/cache.ts';\nimport parseInstallString from '../lib/parseInstallString.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\nconst symlinkType = isWindows ? 'junction' : 'dir';\n\nimport type { InstallCallback, InstallOptions } from '../types.ts';\n\nexport default function installModule(installString: string, nodeModulesPath: string, options: InstallOptions, callback: InstallCallback): void {\n const cachePath = options.cachePath || DEFAULT_CACHE_PATH;\n const { name } = parseInstallString(installString);\n const dest = path.join(nodeModulesPath, ...name.split('/'));\n\n fs.stat(dest, (err) => {\n if (!err) return callback(null, dest); // already installed\n\n cache(installString, cachePath, (err, cachedAt) => {\n if (err) {\n console.log(`Could not install: ${installString}. Message: ${err.message}`);\n return callback();\n }\n\n // Use temp symlink + atomic rename to avoid cross-process race conditions\n const tempDest = tempSuffix(dest);\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, path.dirname(dest)));\n queue.defer(fs.symlink.bind(null, cachedAt, tempDest, symlinkType));\n queue.defer((cb) => {\n fs.rename(tempDest, dest, (err) => {\n // If rename fails because dest exists, another process won - that's ok\n if (err && ['EEXIST', 'ENOTEMPTY', 'EPERM'].indexOf(err.code) >= 0) {\n safeRm(tempDest, () => cb());\n return;\n }\n cb(err);\n });\n });\n queue.await((err) => {\n if (err) {\n safeRm(tempDest, () => callback(err));\n return;\n }\n callback(null, dest);\n });\n });\n });\n}\n"],"names":["installModule","isWindows","process","platform","test","env","OSTYPE","symlinkType","installString","nodeModulesPath","options","callback","path","cachePath","DEFAULT_CACHE_PATH","name","parseInstallString","dest","join","split","fs","stat","err","cache","cachedAt","console","log","message","tempDest","tempSuffix","queue","Queue","defer","mkdirp","bind","dirname","symlink","cb","rename","indexOf","code","safeRm","await"],"mappings":";;;;+BAeA;;;eAAwBA;;;yDAfT;8BACQ;oEACJ;2DACF;8DACC;iEACK;2BACY;8DACjB;2EACa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/B,IAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAC3F,IAAMC,cAAcN,YAAY,aAAa;AAI9B,SAASD,cAAcQ,aAAqB,EAAEC,eAAuB,EAAEC,OAAuB,EAAEC,QAAyB;QAGzHC;IAFb,IAAMC,YAAYH,QAAQG,SAAS,IAAIC,+BAAkB;IACzD,IAAM,AAAEC,OAASC,IAAAA,6BAAkB,EAACR,eAA5BO;IACR,IAAME,OAAOL,CAAAA,SAAAA,aAAI,EAACM,IAAI,OAATN,QAAAA;QAAUH;KAAoC,CAA9CG,OAA2B,qBAAGG,KAAKI,KAAK,CAAC;IAEtDC,WAAE,CAACC,IAAI,CAACJ,MAAM,SAACK;QACb,IAAI,CAACA,KAAK,OAAOX,SAAS,MAAMM,OAAO,oBAAoB;QAE3DM,IAAAA,gBAAK,EAACf,eAAeK,WAAW,SAACS,KAAKE;YACpC,IAAIF,KAAK;gBACPG,QAAQC,GAAG,CAAC,AAAC,sBAAgDJ,OAA3Bd,eAAc,eAAyB,OAAZc,IAAIK,OAAO;gBACxE,OAAOhB;YACT;YAEA,0EAA0E;YAC1E,IAAMiB,WAAWC,IAAAA,mBAAU,EAACZ;YAC5B,IAAMa,QAAQ,IAAIC,gBAAK,CAAC;YACxBD,MAAME,KAAK,CAACC,sBAAM,CAACC,IAAI,CAAC,MAAMtB,aAAI,CAACuB,OAAO,CAAClB;YAC3Ca,MAAME,KAAK,CAACZ,WAAE,CAACgB,OAAO,CAACF,IAAI,CAAC,MAAMV,UAAUI,UAAUrB;YACtDuB,MAAME,KAAK,CAAC,SAACK;gBACXjB,WAAE,CAACkB,MAAM,CAACV,UAAUX,MAAM,SAACK;oBACzB,uEAAuE;oBACvE,IAAIA,OAAO;wBAAC;wBAAU;wBAAa;qBAAQ,CAACiB,OAAO,CAACjB,IAAIkB,IAAI,KAAK,GAAG;wBAClEC,IAAAA,sBAAM,EAACb,UAAU;mCAAMS;;wBACvB;oBACF;oBACAA,GAAGf;gBACL;YACF;YACAQ,MAAMY,KAAK,CAAC,SAACpB;gBACX,IAAIA,KAAK;oBACPmB,IAAAA,sBAAM,EAACb,UAAU;+BAAMjB,SAASW;;oBAChC;gBACF;gBACAX,SAAS,MAAMM;YACjB;QACF;IACF;AACF"}
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/install-module-linked/src/workers/async.ts"],"sourcesContent":["import fs from 'fs';\nimport { safeRm } from 'fs-remove-compat';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport tempSuffix from 'temp-suffix';\nimport { DEFAULT_CACHE_PATH } from '../constants.ts';\nimport cache from '../lib/cache.ts';\nimport parseInstallString from '../lib/parseInstallString.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\nconst symlinkType = isWindows ? 'junction' : 'dir';\n\nimport type { InstallCallback, InstallOptions } from '../types.ts';\n\nexport default function installModule(installString: string, nodeModulesPath: string, options: InstallOptions, callback: InstallCallback): void {\n const cachePath = options.cachePath || DEFAULT_CACHE_PATH;\n const { name } = parseInstallString(installString);\n const dest = path.join(nodeModulesPath, ...name.split('/'));\n\n fs.stat(dest, (err) => {\n if (!err) return callback(null, dest); // already installed\n\n cache(installString, cachePath, (err, cachedAt) => {\n if (err) {\n console.log(`Could not install: ${installString}. Message: ${err.message}`);\n return callback(err);\n }\n\n // Use temp symlink + atomic rename to avoid cross-process race conditions\n const tempDest = tempSuffix(dest);\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, path.dirname(dest)));\n queue.defer(fs.symlink.bind(null, cachedAt, tempDest, symlinkType));\n queue.defer((cb) => {\n fs.rename(tempDest, dest, (err) => {\n // If rename fails because dest exists, another process won - that's ok\n if (err && ['EEXIST', 'ENOTEMPTY', 'EPERM'].indexOf(err.code) >= 0) {\n safeRm(tempDest, () => cb());\n return;\n }\n cb(err);\n });\n });\n queue.await((err) => {\n if (err) {\n safeRm(tempDest, () => callback(err));\n return;\n }\n callback(null, dest);\n });\n });\n });\n}\n"],"names":["installModule","isWindows","process","platform","test","env","OSTYPE","symlinkType","installString","nodeModulesPath","options","callback","path","cachePath","DEFAULT_CACHE_PATH","name","parseInstallString","dest","join","split","fs","stat","err","cache","cachedAt","console","log","message","tempDest","tempSuffix","queue","Queue","defer","mkdirp","bind","dirname","symlink","cb","rename","indexOf","code","safeRm","await"],"mappings":";;;;+BAeA;;;eAAwBA;;;yDAfT;8BACQ;oEACJ;2DACF;8DACC;iEACK;2BACY;8DACjB;2EACa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/B,IAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAC3F,IAAMC,cAAcN,YAAY,aAAa;AAI9B,SAASD,cAAcQ,aAAqB,EAAEC,eAAuB,EAAEC,OAAuB,EAAEC,QAAyB;QAGzHC;IAFb,IAAMC,YAAYH,QAAQG,SAAS,IAAIC,+BAAkB;IACzD,IAAM,AAAEC,OAASC,IAAAA,6BAAkB,EAACR,eAA5BO;IACR,IAAME,OAAOL,CAAAA,SAAAA,aAAI,EAACM,IAAI,OAATN,QAAAA;QAAUH;KAAoC,CAA9CG,OAA2B,qBAAGG,KAAKI,KAAK,CAAC;IAEtDC,WAAE,CAACC,IAAI,CAACJ,MAAM,SAACK;QACb,IAAI,CAACA,KAAK,OAAOX,SAAS,MAAMM,OAAO,oBAAoB;QAE3DM,IAAAA,gBAAK,EAACf,eAAeK,WAAW,SAACS,KAAKE;YACpC,IAAIF,KAAK;gBACPG,QAAQC,GAAG,CAAC,AAAC,sBAAgDJ,OAA3Bd,eAAc,eAAyB,OAAZc,IAAIK,OAAO;gBACxE,OAAOhB,SAASW;YAClB;YAEA,0EAA0E;YAC1E,IAAMM,WAAWC,IAAAA,mBAAU,EAACZ;YAC5B,IAAMa,QAAQ,IAAIC,gBAAK,CAAC;YACxBD,MAAME,KAAK,CAACC,sBAAM,CAACC,IAAI,CAAC,MAAMtB,aAAI,CAACuB,OAAO,CAAClB;YAC3Ca,MAAME,KAAK,CAACZ,WAAE,CAACgB,OAAO,CAACF,IAAI,CAAC,MAAMV,UAAUI,UAAUrB;YACtDuB,MAAME,KAAK,CAAC,SAACK;gBACXjB,WAAE,CAACkB,MAAM,CAACV,UAAUX,MAAM,SAACK;oBACzB,uEAAuE;oBACvE,IAAIA,OAAO;wBAAC;wBAAU;wBAAa;qBAAQ,CAACiB,OAAO,CAACjB,IAAIkB,IAAI,KAAK,GAAG;wBAClEC,IAAAA,sBAAM,EAACb,UAAU;mCAAMS;;wBACvB;oBACF;oBACAA,GAAGf;gBACL;YACF;YACAQ,MAAMY,KAAK,CAAC,SAACpB;gBACX,IAAIA,KAAK;oBACPmB,IAAAA,sBAAM,EAACb,UAAU;+BAAMjB,SAASW;;oBAChC;gBACF;gBACAX,SAAS,MAAMM;YACjB;QACF;IACF;AACF"}

@@ -21,3 +21,3 @@ import fs from 'fs';

console.log(`Could not install: ${installString}. Message: ${err.message}`);
return callback();
return callback(err);
}

@@ -24,0 +24,0 @@ // Use temp symlink + atomic rename to avoid cross-process race conditions

@@ -1,1 +0,1 @@

{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/install-module-linked/src/workers/async.ts"],"sourcesContent":["import fs from 'fs';\nimport { safeRm } from 'fs-remove-compat';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport tempSuffix from 'temp-suffix';\nimport { DEFAULT_CACHE_PATH } from '../constants.ts';\nimport cache from '../lib/cache.ts';\nimport parseInstallString from '../lib/parseInstallString.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\nconst symlinkType = isWindows ? 'junction' : 'dir';\n\nimport type { InstallCallback, InstallOptions } from '../types.ts';\n\nexport default function installModule(installString: string, nodeModulesPath: string, options: InstallOptions, callback: InstallCallback): void {\n const cachePath = options.cachePath || DEFAULT_CACHE_PATH;\n const { name } = parseInstallString(installString);\n const dest = path.join(nodeModulesPath, ...name.split('/'));\n\n fs.stat(dest, (err) => {\n if (!err) return callback(null, dest); // already installed\n\n cache(installString, cachePath, (err, cachedAt) => {\n if (err) {\n console.log(`Could not install: ${installString}. Message: ${err.message}`);\n return callback();\n }\n\n // Use temp symlink + atomic rename to avoid cross-process race conditions\n const tempDest = tempSuffix(dest);\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, path.dirname(dest)));\n queue.defer(fs.symlink.bind(null, cachedAt, tempDest, symlinkType));\n queue.defer((cb) => {\n fs.rename(tempDest, dest, (err) => {\n // If rename fails because dest exists, another process won - that's ok\n if (err && ['EEXIST', 'ENOTEMPTY', 'EPERM'].indexOf(err.code) >= 0) {\n safeRm(tempDest, () => cb());\n return;\n }\n cb(err);\n });\n });\n queue.await((err) => {\n if (err) {\n safeRm(tempDest, () => callback(err));\n return;\n }\n callback(null, dest);\n });\n });\n });\n}\n"],"names":["fs","safeRm","mkdirp","path","Queue","tempSuffix","DEFAULT_CACHE_PATH","cache","parseInstallString","isWindows","process","platform","test","env","OSTYPE","symlinkType","installModule","installString","nodeModulesPath","options","callback","cachePath","name","dest","join","split","stat","err","cachedAt","console","log","message","tempDest","queue","defer","bind","dirname","symlink","cb","rename","indexOf","code","await"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,OAAOC,YAAY,iBAAiB;AACpC,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAC7B,OAAOC,gBAAgB,cAAc;AACrC,SAASC,kBAAkB,QAAQ,kBAAkB;AACrD,OAAOC,WAAW,kBAAkB;AACpC,OAAOC,wBAAwB,+BAA+B;AAE9D,MAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAC3F,MAAMC,cAAcN,YAAY,aAAa;AAI7C,eAAe,SAASO,cAAcC,aAAqB,EAAEC,eAAuB,EAAEC,OAAuB,EAAEC,QAAyB;IACtI,MAAMC,YAAYF,QAAQE,SAAS,IAAIf;IACvC,MAAM,EAAEgB,IAAI,EAAE,GAAGd,mBAAmBS;IACpC,MAAMM,OAAOpB,KAAKqB,IAAI,CAACN,oBAAoBI,KAAKG,KAAK,CAAC;IAEtDzB,GAAG0B,IAAI,CAACH,MAAM,CAACI;QACb,IAAI,CAACA,KAAK,OAAOP,SAAS,MAAMG,OAAO,oBAAoB;QAE3DhB,MAAMU,eAAeI,WAAW,CAACM,KAAKC;YACpC,IAAID,KAAK;gBACPE,QAAQC,GAAG,CAAC,CAAC,mBAAmB,EAAEb,cAAc,WAAW,EAAEU,IAAII,OAAO,EAAE;gBAC1E,OAAOX;YACT;YAEA,0EAA0E;YAC1E,MAAMY,WAAW3B,WAAWkB;YAC5B,MAAMU,QAAQ,IAAI7B,MAAM;YACxB6B,MAAMC,KAAK,CAAChC,OAAOiC,IAAI,CAAC,MAAMhC,KAAKiC,OAAO,CAACb;YAC3CU,MAAMC,KAAK,CAAClC,GAAGqC,OAAO,CAACF,IAAI,CAAC,MAAMP,UAAUI,UAAUjB;YACtDkB,MAAMC,KAAK,CAAC,CAACI;gBACXtC,GAAGuC,MAAM,CAACP,UAAUT,MAAM,CAACI;oBACzB,uEAAuE;oBACvE,IAAIA,OAAO;wBAAC;wBAAU;wBAAa;qBAAQ,CAACa,OAAO,CAACb,IAAIc,IAAI,KAAK,GAAG;wBAClExC,OAAO+B,UAAU,IAAMM;wBACvB;oBACF;oBACAA,GAAGX;gBACL;YACF;YACAM,MAAMS,KAAK,CAAC,CAACf;gBACX,IAAIA,KAAK;oBACP1B,OAAO+B,UAAU,IAAMZ,SAASO;oBAChC;gBACF;gBACAP,SAAS,MAAMG;YACjB;QACF;IACF;AACF"}
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/install-module-linked/src/workers/async.ts"],"sourcesContent":["import fs from 'fs';\nimport { safeRm } from 'fs-remove-compat';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport tempSuffix from 'temp-suffix';\nimport { DEFAULT_CACHE_PATH } from '../constants.ts';\nimport cache from '../lib/cache.ts';\nimport parseInstallString from '../lib/parseInstallString.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\nconst symlinkType = isWindows ? 'junction' : 'dir';\n\nimport type { InstallCallback, InstallOptions } from '../types.ts';\n\nexport default function installModule(installString: string, nodeModulesPath: string, options: InstallOptions, callback: InstallCallback): void {\n const cachePath = options.cachePath || DEFAULT_CACHE_PATH;\n const { name } = parseInstallString(installString);\n const dest = path.join(nodeModulesPath, ...name.split('/'));\n\n fs.stat(dest, (err) => {\n if (!err) return callback(null, dest); // already installed\n\n cache(installString, cachePath, (err, cachedAt) => {\n if (err) {\n console.log(`Could not install: ${installString}. Message: ${err.message}`);\n return callback(err);\n }\n\n // Use temp symlink + atomic rename to avoid cross-process race conditions\n const tempDest = tempSuffix(dest);\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, path.dirname(dest)));\n queue.defer(fs.symlink.bind(null, cachedAt, tempDest, symlinkType));\n queue.defer((cb) => {\n fs.rename(tempDest, dest, (err) => {\n // If rename fails because dest exists, another process won - that's ok\n if (err && ['EEXIST', 'ENOTEMPTY', 'EPERM'].indexOf(err.code) >= 0) {\n safeRm(tempDest, () => cb());\n return;\n }\n cb(err);\n });\n });\n queue.await((err) => {\n if (err) {\n safeRm(tempDest, () => callback(err));\n return;\n }\n callback(null, dest);\n });\n });\n });\n}\n"],"names":["fs","safeRm","mkdirp","path","Queue","tempSuffix","DEFAULT_CACHE_PATH","cache","parseInstallString","isWindows","process","platform","test","env","OSTYPE","symlinkType","installModule","installString","nodeModulesPath","options","callback","cachePath","name","dest","join","split","stat","err","cachedAt","console","log","message","tempDest","queue","defer","bind","dirname","symlink","cb","rename","indexOf","code","await"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,OAAOC,YAAY,iBAAiB;AACpC,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAC7B,OAAOC,gBAAgB,cAAc;AACrC,SAASC,kBAAkB,QAAQ,kBAAkB;AACrD,OAAOC,WAAW,kBAAkB;AACpC,OAAOC,wBAAwB,+BAA+B;AAE9D,MAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAC3F,MAAMC,cAAcN,YAAY,aAAa;AAI7C,eAAe,SAASO,cAAcC,aAAqB,EAAEC,eAAuB,EAAEC,OAAuB,EAAEC,QAAyB;IACtI,MAAMC,YAAYF,QAAQE,SAAS,IAAIf;IACvC,MAAM,EAAEgB,IAAI,EAAE,GAAGd,mBAAmBS;IACpC,MAAMM,OAAOpB,KAAKqB,IAAI,CAACN,oBAAoBI,KAAKG,KAAK,CAAC;IAEtDzB,GAAG0B,IAAI,CAACH,MAAM,CAACI;QACb,IAAI,CAACA,KAAK,OAAOP,SAAS,MAAMG,OAAO,oBAAoB;QAE3DhB,MAAMU,eAAeI,WAAW,CAACM,KAAKC;YACpC,IAAID,KAAK;gBACPE,QAAQC,GAAG,CAAC,CAAC,mBAAmB,EAAEb,cAAc,WAAW,EAAEU,IAAII,OAAO,EAAE;gBAC1E,OAAOX,SAASO;YAClB;YAEA,0EAA0E;YAC1E,MAAMK,WAAW3B,WAAWkB;YAC5B,MAAMU,QAAQ,IAAI7B,MAAM;YACxB6B,MAAMC,KAAK,CAAChC,OAAOiC,IAAI,CAAC,MAAMhC,KAAKiC,OAAO,CAACb;YAC3CU,MAAMC,KAAK,CAAClC,GAAGqC,OAAO,CAACF,IAAI,CAAC,MAAMP,UAAUI,UAAUjB;YACtDkB,MAAMC,KAAK,CAAC,CAACI;gBACXtC,GAAGuC,MAAM,CAACP,UAAUT,MAAM,CAACI;oBACzB,uEAAuE;oBACvE,IAAIA,OAAO;wBAAC;wBAAU;wBAAa;qBAAQ,CAACa,OAAO,CAACb,IAAIc,IAAI,KAAK,GAAG;wBAClExC,OAAO+B,UAAU,IAAMM;wBACvB;oBACF;oBACAA,GAAGX;gBACL;YACF;YACAM,MAAMS,KAAK,CAAC,CAACf;gBACX,IAAIA,KAAK;oBACP1B,OAAO+B,UAAU,IAAMZ,SAASO;oBAChC;gBACF;gBACAP,SAAS,MAAMG;YACjB;QACF;IACF;AACF"}
{
"name": "install-module-linked",
"version": "1.4.1",
"version": "1.4.2",
"description": "Installs and symlinks a module into node_modules",

@@ -54,3 +54,3 @@ "keywords": [

"cross-spawn-cb": "^2.0.0",
"exit-compat": "^1.0.3",
"exit-compat": "^1.0.0",
"fs-remove-compat": "^1.0.0",

@@ -57,0 +57,0 @@ "get-file-compat": "^2.0.0",