UNPKG

module-link-unlink

Version:

Link and unlink a module with saving and restoring the previous install

1 lines 3.45 kB
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/module-link-unlink/src/unlinkModule.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { unlink } from 'link-unlink';\nimport { Lock } from 'lock';\nimport Queue from 'queue-cb';\n\nconst lock = Lock();\n\nfunction unlinkBin(nodeModules, binName, callback) {\n const destBin = path.join(nodeModules, '.bin', binName);\n\n fs.stat(destBin, (err) => {\n if (!err) return unlink(destBin, callback);\n console.log(`bin not found: ${destBin}. Skipping`);\n callback();\n });\n}\n\nfunction worker(src, nodeModules, callback) {\n lock([src, nodeModules], (release) => {\n callback = release(callback);\n try {\n const pkg = JSON.parse(fs.readFileSync(path.join(src, 'package.json'), 'utf8'));\n const dest = path.join.apply(null, [nodeModules, ...pkg.name.split('/')]);\n\n const queue = new Queue(1);\n queue.defer(unlink.bind(null, dest));\n\n if (typeof pkg.bin === 'string')\n queue.defer(unlinkBin.bind(null, nodeModules, pkg.name)); // single bins\n else for (const binName in pkg.bin) queue.defer(unlinkBin.bind(null, nodeModules, binName)); // object of bins\n\n queue.await((err) => {\n err ? callback(err) : callback(null, dest);\n });\n } catch (err) {\n return callback(err);\n }\n });\n}\n\nimport type { UnlinkCallback } from './types';\n\nexport default function unlinkModule(src: string, nodeModules: string, callback?: undefined | UnlinkCallback): undefined | Promise<string> {\n if (typeof callback === 'function') return worker(src, nodeModules, callback) as undefined;\n return new Promise((resolve, reject) => worker(src, nodeModules, (err, restore?) => (err ? reject(err) : resolve(restore))));\n}\n"],"names":["unlinkModule","lock","Lock","unlinkBin","nodeModules","binName","callback","destBin","path","join","fs","stat","err","unlink","console","log","worker","src","release","pkg","JSON","parse","readFileSync","dest","apply","name","split","queue","Queue","defer","bind","bin","await","Promise","resolve","reject","restore"],"mappings":";;;;+BA2CA;;;eAAwBA;;;yDA3CT;2DACE;0BACM;oBACF;8DACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAElB,IAAMC,OAAOC,IAAAA,UAAI;AAEjB,SAASC,UAAUC,WAAW,EAAEC,OAAO,EAAEC,QAAQ;IAC/C,IAAMC,UAAUC,aAAI,CAACC,IAAI,CAACL,aAAa,QAAQC;IAE/CK,WAAE,CAACC,IAAI,CAACJ,SAAS,SAACK;QAChB,IAAI,CAACA,KAAK,OAAOC,IAAAA,kBAAM,EAACN,SAASD;QACjCQ,QAAQC,GAAG,CAAC,AAAC,kBAAyB,OAARR,SAAQ;QACtCD;IACF;AACF;AAEA,SAASU,OAAOC,GAAG,EAAEb,WAAW,EAAEE,QAAQ;IACxCL,KAAK;QAACgB;QAAKb;KAAY,EAAE,SAACc;QACxBZ,WAAWY,QAAQZ;QACnB,IAAI;YACF,IAAMa,MAAMC,KAAKC,KAAK,CAACX,WAAE,CAACY,YAAY,CAACd,aAAI,CAACC,IAAI,CAACQ,KAAK,iBAAiB;YACvE,IAAMM,OAAOf,aAAI,CAACC,IAAI,CAACe,KAAK,CAAC,MAAM;gBAACpB;aAAoC,CAArC,OAAc,qBAAGe,IAAIM,IAAI,CAACC,KAAK,CAAC;YAEnE,IAAMC,QAAQ,IAAIC,gBAAK,CAAC;YACxBD,MAAME,KAAK,CAAChB,kBAAM,CAACiB,IAAI,CAAC,MAAMP;YAE9B,IAAI,OAAOJ,IAAIY,GAAG,KAAK,UACrBJ,MAAME,KAAK,CAAC1B,UAAU2B,IAAI,CAAC,MAAM1B,aAAae,IAAIM,IAAI,IAAI,cAAc;iBACrE,IAAK,IAAMpB,WAAWc,IAAIY,GAAG,CAAEJ,MAAME,KAAK,CAAC1B,UAAU2B,IAAI,CAAC,MAAM1B,aAAaC,WAAW,iBAAiB;YAE9GsB,MAAMK,KAAK,CAAC,SAACpB;gBACXA,MAAMN,SAASM,OAAON,SAAS,MAAMiB;YACvC;QACF,EAAE,OAAOX,KAAK;YACZ,OAAON,SAASM;QAClB;IACF;AACF;AAIe,SAASZ,aAAaiB,GAAW,EAAEb,WAAmB,EAAEE,QAAqC;IAC1G,IAAI,OAAOA,aAAa,YAAY,OAAOU,OAAOC,KAAKb,aAAaE;IACpE,OAAO,IAAI2B,QAAQ,SAACC,SAASC;eAAWnB,OAAOC,KAAKb,aAAa,SAACQ,KAAKwB;mBAAcxB,MAAMuB,OAAOvB,OAAOsB,QAAQE;;;AACnH"}