install-module-linked-compat 0.1.0 → 0.2.0

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.
Files changed (98) hide show
  1. package/README.md +2 -0
  2. package/bin/cli.js +2 -2
  3. package/dist/cjs/cli.js +7 -7
  4. package/dist/cjs/cli.js.map +1 -1
  5. package/dist/cjs/compat.d.cts +15 -1
  6. package/dist/cjs/compat.d.ts +15 -1
  7. package/dist/cjs/compat.js +141 -6
  8. package/dist/cjs/compat.js.map +1 -1
  9. package/dist/cjs/index.d.cts +5 -5
  10. package/dist/cjs/index.d.ts +5 -5
  11. package/dist/cjs/index.js +70 -17
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/workers/spawn.d.cts +3 -0
  14. package/dist/cjs/workers/spawn.d.ts +3 -0
  15. package/dist/cjs/workers/spawn.js +24 -0
  16. package/dist/cjs/workers/spawn.js.map +1 -0
  17. package/dist/esm/cli.js +6 -6
  18. package/dist/esm/cli.js.map +1 -1
  19. package/dist/esm/compat.d.ts +15 -1
  20. package/dist/esm/compat.js +66 -2
  21. package/dist/esm/compat.js.map +1 -1
  22. package/dist/esm/index.d.ts +5 -5
  23. package/dist/esm/index.js +21 -10
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/esm/workers/spawn.d.ts +3 -0
  26. package/dist/esm/workers/spawn.js +6 -0
  27. package/dist/esm/workers/spawn.js.map +1 -0
  28. package/package.json +5 -6
  29. package/dist/cjs/constants.d.cts +0 -1
  30. package/dist/cjs/constants.d.ts +0 -1
  31. package/dist/cjs/constants.js +0 -19
  32. package/dist/cjs/constants.js.map +0 -1
  33. package/dist/cjs/lib/cache.d.cts +0 -2
  34. package/dist/cjs/lib/cache.d.ts +0 -2
  35. package/dist/cjs/lib/cache.js +0 -182
  36. package/dist/cjs/lib/cache.js.map +0 -1
  37. package/dist/cjs/lib/clear.d.cts +0 -2
  38. package/dist/cjs/lib/clear.d.ts +0 -2
  39. package/dist/cjs/lib/clear.js +0 -17
  40. package/dist/cjs/lib/clear.js.map +0 -1
  41. package/dist/cjs/lib/getSpecifier.d.cts +0 -2
  42. package/dist/cjs/lib/getSpecifier.d.ts +0 -2
  43. package/dist/cjs/lib/getSpecifier.js +0 -34
  44. package/dist/cjs/lib/getSpecifier.js.map +0 -1
  45. package/dist/cjs/lib/install.d.cts +0 -2
  46. package/dist/cjs/lib/install.d.ts +0 -2
  47. package/dist/cjs/lib/install.js +0 -69
  48. package/dist/cjs/lib/install.js.map +0 -1
  49. package/dist/cjs/lib/parseInstallString.d.cts +0 -4
  50. package/dist/cjs/lib/parseInstallString.d.ts +0 -4
  51. package/dist/cjs/lib/parseInstallString.js +0 -51
  52. package/dist/cjs/lib/parseInstallString.js.map +0 -1
  53. package/dist/cjs/lib/renameWithFallback.d.cts +0 -1
  54. package/dist/cjs/lib/renameWithFallback.d.ts +0 -1
  55. package/dist/cjs/lib/renameWithFallback.js +0 -32
  56. package/dist/cjs/lib/renameWithFallback.js.map +0 -1
  57. package/dist/cjs/types.d.cts +0 -9
  58. package/dist/cjs/types.d.ts +0 -9
  59. package/dist/cjs/types.js +0 -5
  60. package/dist/cjs/types.js.map +0 -1
  61. package/dist/cjs/workers/async.d.cts +0 -2
  62. package/dist/cjs/workers/async.d.ts +0 -2
  63. package/dist/cjs/workers/async.js +0 -108
  64. package/dist/cjs/workers/async.js.map +0 -1
  65. package/dist/cjs/workers/sync.d.cts +0 -1
  66. package/dist/cjs/workers/sync.d.ts +0 -1
  67. package/dist/cjs/workers/sync.js +0 -30
  68. package/dist/cjs/workers/sync.js.map +0 -1
  69. package/dist/esm/constants.d.ts +0 -1
  70. package/dist/esm/constants.js +0 -3
  71. package/dist/esm/constants.js.map +0 -1
  72. package/dist/esm/lib/cache.d.ts +0 -2
  73. package/dist/esm/lib/cache.js +0 -93
  74. package/dist/esm/lib/cache.js.map +0 -1
  75. package/dist/esm/lib/clear.d.ts +0 -2
  76. package/dist/esm/lib/clear.js +0 -6
  77. package/dist/esm/lib/clear.js.map +0 -1
  78. package/dist/esm/lib/getSpecifier.d.ts +0 -2
  79. package/dist/esm/lib/getSpecifier.js +0 -18
  80. package/dist/esm/lib/getSpecifier.js.map +0 -1
  81. package/dist/esm/lib/install.d.ts +0 -2
  82. package/dist/esm/lib/install.js +0 -23
  83. package/dist/esm/lib/install.js.map +0 -1
  84. package/dist/esm/lib/parseInstallString.d.ts +0 -4
  85. package/dist/esm/lib/parseInstallString.js +0 -14
  86. package/dist/esm/lib/parseInstallString.js.map +0 -1
  87. package/dist/esm/lib/renameWithFallback.d.ts +0 -1
  88. package/dist/esm/lib/renameWithFallback.js +0 -16
  89. package/dist/esm/lib/renameWithFallback.js.map +0 -1
  90. package/dist/esm/types.d.ts +0 -9
  91. package/dist/esm/types.js +0 -1
  92. package/dist/esm/types.js.map +0 -1
  93. package/dist/esm/workers/async.d.ts +0 -2
  94. package/dist/esm/workers/async.js +0 -50
  95. package/dist/esm/workers/async.js.map +0 -1
  96. package/dist/esm/workers/sync.d.ts +0 -1
  97. package/dist/esm/workers/sync.js +0 -14
  98. package/dist/esm/workers/sync.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/install-module-linked-compat/src/types.ts"],"sourcesContent":["export interface CleanOptions {\n slient?: boolean;\n}\n\nexport type GetScopedSpecifiedCallback = (err?: Error | null, installSpecifier?: string) => void;\nexport type EnsureCachedCallback = (err?: Error | null, cachedAt?: string) => void;\nexport type InstallCallback = (err?: Error | null, installedAt?: string) => void;\n\nexport interface InstallOptions {\n cachePath?: string;\n}\n"],"names":[],"mappings":"AAQA,WAEC"}
@@ -1,2 +0,0 @@
1
- import type { InstallCallback, InstallOptions } from '../types.js';
2
- export default function installModule(installString: string, nodeModulesPath: string, options: InstallOptions, callback: InstallCallback): void;
@@ -1,50 +0,0 @@
1
- var _process_env_OSTYPE;
2
- import fs from 'fs';
3
- import { safeRm } from 'fs-remove-compat';
4
- import mkdirp from 'mkdirp-classic';
5
- import path from 'path';
6
- import Queue from 'queue-cb';
7
- import tempSuffix from 'temp-suffix';
8
- import { DEFAULT_CACHE_PATH } from '../constants.js';
9
- import cache from '../lib/cache.js';
10
- import parseInstallString from '../lib/parseInstallString.js';
11
- const isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test((_process_env_OSTYPE = process.env.OSTYPE) !== null && _process_env_OSTYPE !== void 0 ? _process_env_OSTYPE : '');
12
- const symlinkType = isWindows ? 'junction' : 'dir';
13
- export default function installModule(installString, nodeModulesPath, options, callback) {
14
- const cachePath = options.cachePath || DEFAULT_CACHE_PATH;
15
- const { name } = parseInstallString(installString);
16
- const dest = path.join(nodeModulesPath, ...name.split('/'));
17
- fs.stat(dest, (err)=>{
18
- if (!err) return callback(undefined, dest); // already installed
19
- cache(installString, cachePath, (err, cachedAt)=>{
20
- if (err) {
21
- console.log(`Could not install: ${installString}. Message: ${err.message}`);
22
- return callback(err);
23
- }
24
- // Use temp symlink + atomic rename to avoid cross-process race conditions
25
- const tempDest = tempSuffix(dest);
26
- const queue = new Queue(1);
27
- queue.defer((cb)=>mkdirp(path.dirname(dest), (err)=>cb(err)));
28
- // biome-ignore lint/style/noNonNullAssertion: cache always sets cachedAt when err is null
29
- queue.defer((cb)=>fs.symlink(cachedAt, tempDest, symlinkType, (err)=>cb(err)));
30
- queue.defer((cb)=>{
31
- fs.rename(tempDest, dest, (err)=>{
32
- var _err_code;
33
- // If rename fails because dest exists, another process won - that's ok
34
- if (err && [
35
- 'EEXIST',
36
- 'ENOTEMPTY',
37
- 'EPERM'
38
- ].indexOf((_err_code = err.code) !== null && _err_code !== void 0 ? _err_code : '') >= 0) {
39
- safeRm(tempDest, ()=>cb());
40
- return;
41
- }
42
- cb(err);
43
- });
44
- });
45
- queue.await((err)=>{
46
- err ? safeRm(tempDest, ()=>callback(err)) : callback(undefined, dest);
47
- });
48
- });
49
- });
50
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/install-module-linked-compat/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(undefined, 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((cb) => mkdirp(path.dirname(dest), (err) => cb(err)));\n // biome-ignore lint/style/noNonNullAssertion: cache always sets cachedAt when err is null\n queue.defer((cb) => fs.symlink(cachedAt!, tempDest, symlinkType, (err) => cb(err)));\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 err ? safeRm(tempDest, () => callback(err)) : callback(undefined, dest);\n });\n });\n });\n}\n"],"names":["process","fs","safeRm","mkdirp","path","Queue","tempSuffix","DEFAULT_CACHE_PATH","cache","parseInstallString","isWindows","platform","test","env","OSTYPE","symlinkType","installModule","installString","nodeModulesPath","options","callback","cachePath","name","dest","join","split","stat","err","undefined","cachedAt","console","log","message","tempDest","queue","defer","cb","dirname","symlink","rename","indexOf","code","await"],"mappings":"IAUyEA;AAVzE,OAAOC,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,YAAYV,QAAQW,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,EAACZ,sBAAAA,QAAQa,GAAG,CAACC,MAAM,cAAlBd,iCAAAA,sBAAsB;AAC/F,MAAMe,cAAcL,YAAY,aAAa;AAI7C,eAAe,SAASM,cAAcC,aAAqB,EAAEC,eAAuB,EAAEC,OAAuB,EAAEC,QAAyB;IACtI,MAAMC,YAAYF,QAAQE,SAAS,IAAId;IACvC,MAAM,EAAEe,IAAI,EAAE,GAAGb,mBAAmBQ;IACpC,MAAMM,OAAOnB,KAAKoB,IAAI,CAACN,oBAAoBI,KAAKG,KAAK,CAAC;IAEtDxB,GAAGyB,IAAI,CAACH,MAAM,CAACI;QACb,IAAI,CAACA,KAAK,OAAOP,SAASQ,WAAWL,OAAO,oBAAoB;QAEhEf,MAAMS,eAAeI,WAAW,CAACM,KAAKE;YACpC,IAAIF,KAAK;gBACPG,QAAQC,GAAG,CAAC,CAAC,mBAAmB,EAAEd,cAAc,WAAW,EAAEU,IAAIK,OAAO,EAAE;gBAC1E,OAAOZ,SAASO;YAClB;YAEA,0EAA0E;YAC1E,MAAMM,WAAW3B,WAAWiB;YAC5B,MAAMW,QAAQ,IAAI7B,MAAM;YACxB6B,MAAMC,KAAK,CAAC,CAACC,KAAOjC,OAAOC,KAAKiC,OAAO,CAACd,OAAO,CAACI,MAAQS,GAAGT;YAC3D,0FAA0F;YAC1FO,MAAMC,KAAK,CAAC,CAACC,KAAOnC,GAAGqC,OAAO,CAACT,UAAWI,UAAUlB,aAAa,CAACY,MAAQS,GAAGT;YAC7EO,MAAMC,KAAK,CAAC,CAACC;gBACXnC,GAAGsC,MAAM,CAACN,UAAUV,MAAM,CAACI;wBAE2BA;oBADpD,uEAAuE;oBACvE,IAAIA,OAAO;wBAAC;wBAAU;wBAAa;qBAAQ,CAACa,OAAO,EAACb,YAAAA,IAAIc,IAAI,cAARd,uBAAAA,YAAY,OAAO,GAAG;wBACxEzB,OAAO+B,UAAU,IAAMG;wBACvB;oBACF;oBACAA,GAAGT;gBACL;YACF;YACAO,MAAMQ,KAAK,CAAC,CAACf;gBACXA,MAAMzB,OAAO+B,UAAU,IAAMb,SAASO,QAAQP,SAASQ,WAAWL;YACpE;QACF;IACF;AACF"}
@@ -1 +0,0 @@
1
- export default function installModuleSync(installString: string, nodeModulesPath: string, options?: object): string | undefined;
@@ -1,14 +0,0 @@
1
- import Module from 'module';
2
- import path from 'path';
3
- import url from 'url';
4
- const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
5
- const __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));
6
- // Worker MUST always load from dist/cjs/ for old Node compatibility (works from both cjs and esm)
7
- const workerPath = path.join(__dirname, '..', '..', 'cjs', 'workers', 'async.js');
8
- let functionExec = null; // break dependencies
9
- export default function installModuleSync(installString, nodeModulesPath, options) {
10
- if (!functionExec) functionExec = _require('function-exec-sync');
11
- return functionExec === null || functionExec === void 0 ? void 0 : functionExec({
12
- callbacks: true
13
- }, workerPath, installString, nodeModulesPath, options);
14
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/install-module-linked-compat/src/workers/sync.ts"],"sourcesContent":["import Module from 'module';\nimport path from 'path';\nimport url from 'url';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\n// Worker MUST always load from dist/cjs/ for old Node compatibility (works from both cjs and esm)\nconst workerPath = path.join(__dirname, '..', '..', 'cjs', 'workers', 'async.js');\n\nlet functionExec: ((opts: object, ...args: unknown[]) => unknown) | null = null; // break dependencies\nexport default function installModuleSync(installString: string, nodeModulesPath: string, options?: object): string | undefined {\n if (!functionExec) functionExec = _require('function-exec-sync');\n return functionExec?.({ callbacks: true }, workerPath, installString, nodeModulesPath, options) as string | undefined;\n}\n"],"names":["Module","path","url","_require","require","createRequire","__dirname","dirname","__filename","fileURLToPath","workerPath","join","functionExec","installModuleSync","installString","nodeModulesPath","options","callbacks"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAC5B,OAAOC,UAAU,OAAO;AACxB,OAAOC,SAAS,MAAM;AAEtB,MAAMC,WAAW,OAAOC,YAAY,cAAcJ,OAAOK,aAAa,CAAC,YAAYH,GAAG,IAAIE;AAC1F,MAAME,YAAYL,KAAKM,OAAO,CAAC,OAAOC,eAAe,cAAcA,aAAaN,IAAIO,aAAa,CAAC,YAAYP,GAAG;AAEjH,kGAAkG;AAClG,MAAMQ,aAAaT,KAAKU,IAAI,CAACL,WAAW,MAAM,MAAM,OAAO,WAAW;AAEtE,IAAIM,eAAuE,MAAM,qBAAqB;AACtG,eAAe,SAASC,kBAAkBC,aAAqB,EAAEC,eAAuB,EAAEC,OAAgB;IACxG,IAAI,CAACJ,cAAcA,eAAeT,SAAS;IAC3C,OAAOS,yBAAAA,mCAAAA,aAAe;QAAEK,WAAW;IAAK,GAAGP,YAAYI,eAAeC,iBAAiBC;AACzF"}