spawn-term 3.3.1 → 3.3.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/dist/cjs/compat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/compat.ts"],"sourcesContent":["/**\n * Compatibility Layer for Node.js 0.8+\n * Local to this package - contains only needed functions.\n */\n\n/**\n * String.prototype.endsWith wrapper for Node.js 0.8+\n * - Uses native endsWith on Node 4.0+ / ES2015+\n * - Falls back to lastIndexOf on Node 0.8-3.x\n */\
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/compat.ts"],"sourcesContent":["/**\n * Compatibility Layer for Node.js 0.8+\n * Local to this package - contains only needed functions.\n */\n\n/**\n * String.prototype.endsWith wrapper for Node.js 0.8+\n * - Uses native endsWith on Node 4.0+ / ES2015+\n * - Falls back to lastIndexOf on Node 0.8-3.x\n */\nconst hasEndsWith = typeof String.prototype.endsWith === 'function';\n\nexport function stringEndsWith(str: string, search: string, position?: number): boolean {\n if (hasEndsWith) {\n return str.endsWith(search, position);\n }\n const len = position === undefined ? str.length : position;\n return str.lastIndexOf(search) === len - search.length;\n}\n\n/**\n * Array.prototype.find wrapper for Node.js 0.8+\n * - Uses native find on Node 4.0+ / ES2015+\n * - Falls back to loop on Node 0.8-3.x\n */\nconst hasArrayFind = typeof Array.prototype.find === 'function';\n\nexport function arrayFind<T>(arr: T[], predicate: (item: T, index: number, arr: T[]) => boolean): T | undefined {\n if (hasArrayFind) {\n return arr.find(predicate);\n }\n for (let i = 0; i < arr.length; i++) {\n if (predicate(arr[i], i, arr)) return arr[i];\n }\n return undefined;\n}\n"],"names":["arrayFind","stringEndsWith","hasEndsWith","String","prototype","endsWith","str","search","position","len","undefined","length","lastIndexOf","hasArrayFind","Array","find","arr","predicate","i"],"mappings":";;;;;;;;;;;QA2BgBA;eAAAA;;QAfAC;eAAAA;;;AAZhB;;;CAGC,GAED;;;;CAIC,GACD,IAAMC,cAAc,OAAOC,OAAOC,SAAS,CAACC,QAAQ,KAAK;AAElD,SAASJ,eAAeK,GAAW,EAAEC,MAAc,EAAEC,QAAiB;IAC3E,IAAIN,aAAa;QACf,OAAOI,IAAID,QAAQ,CAACE,QAAQC;IAC9B;IACA,IAAMC,MAAMD,aAAaE,YAAYJ,IAAIK,MAAM,GAAGH;IAClD,OAAOF,IAAIM,WAAW,CAACL,YAAYE,MAAMF,OAAOI,MAAM;AACxD;AAEA;;;;CAIC,GACD,IAAME,eAAe,OAAOC,MAAMV,SAAS,CAACW,IAAI,KAAK;AAE9C,SAASf,UAAagB,GAAQ,EAAEC,SAAwD;IAC7F,IAAIJ,cAAc;QAChB,OAAOG,IAAID,IAAI,CAACE;IAClB;IACA,IAAK,IAAIC,IAAI,GAAGA,IAAIF,IAAIL,MAAM,EAAEO,IAAK;QACnC,IAAID,UAAUD,GAAG,CAACE,EAAE,EAAEA,GAAGF,MAAM,OAAOA,GAAG,CAACE,EAAE;IAC9C;IACA,OAAOR;AACT"}
|
package/dist/cjs/lib/loadInk.js
CHANGED
|
@@ -16,6 +16,7 @@ _export(exports, {
|
|
|
16
16
|
return loadInk;
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
|
+
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
19
20
|
var _installmodulelinked = /*#__PURE__*/ _interop_require_default(require("install-module-linked"));
|
|
20
21
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
21
22
|
var _url = /*#__PURE__*/ _interop_require_default(require("url"));
|
|
@@ -41,14 +42,47 @@ function installDependency(name) {
|
|
|
41
42
|
});
|
|
42
43
|
});
|
|
43
44
|
}
|
|
45
|
+
function symlinkReactFromInk() {
|
|
46
|
+
return new Promise(function(resolve) {
|
|
47
|
+
// After ink is installed, symlink react to ink's react to avoid duplicate React instances
|
|
48
|
+
var inkPath = _fs.default.realpathSync(_path.default.join(nodeModules, 'ink'));
|
|
49
|
+
var inkReactPath = _path.default.join(inkPath, 'node_modules', 'react');
|
|
50
|
+
var reactPath = _path.default.join(nodeModules, 'react');
|
|
51
|
+
// Check if react already exists
|
|
52
|
+
try {
|
|
53
|
+
var stat = _fs.default.lstatSync(reactPath);
|
|
54
|
+
if (stat.isSymbolicLink()) {
|
|
55
|
+
// It's a symlink - check if it points to the right place
|
|
56
|
+
var existing = _fs.default.readlinkSync(reactPath);
|
|
57
|
+
if (existing === inkReactPath) {
|
|
58
|
+
return resolve(); // Already correct
|
|
59
|
+
}
|
|
60
|
+
// Wrong symlink, remove it
|
|
61
|
+
_fs.default.unlinkSync(reactPath);
|
|
62
|
+
} else {
|
|
63
|
+
// It's a real directory (e.g. from devDependencies) - leave it alone
|
|
64
|
+
return resolve();
|
|
65
|
+
}
|
|
66
|
+
} catch (e) {
|
|
67
|
+
// Doesn't exist, continue to create symlink
|
|
68
|
+
}
|
|
69
|
+
// Create symlink to ink's react
|
|
70
|
+
try {
|
|
71
|
+
_fs.default.symlinkSync(inkReactPath, reactPath);
|
|
72
|
+
} catch (e) {
|
|
73
|
+
// Ignore errors - react may have been installed another way
|
|
74
|
+
}
|
|
75
|
+
resolve();
|
|
76
|
+
});
|
|
77
|
+
}
|
|
44
78
|
function installInk() {
|
|
45
79
|
if (installed) return Promise.resolve();
|
|
46
80
|
if (installing) return installing;
|
|
47
|
-
// Install
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
81
|
+
// Install ink, then symlink react to ink's bundled react
|
|
82
|
+
// This ensures session.tsx and ink use the SAME React instance
|
|
83
|
+
installing = installDependency('ink').then(function() {
|
|
84
|
+
return symlinkReactFromInk();
|
|
85
|
+
}).then(function() {
|
|
52
86
|
installed = true;
|
|
53
87
|
}).catch(function(err) {
|
|
54
88
|
installing = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/loadInk.ts"],"sourcesContent":["import installModule from 'install-module-linked';\nimport path from 'path';\nimport url from 'url';\n\n// Get the node_modules directory relative to this file\nconst _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));\nconst nodeModules = path.join(_dirname, '..', '..', '..', 'node_modules');\n\nlet installed = false;\nlet installing: Promise<void> | null = null;\n\nfunction installDependency(name: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // install-module-linked will:\n // 1. Check if module exists locally or in ~/.iml cache\n // 2. If not, install to ~/.iml\n // 3. Create symlink in nodeModules pointing to ~/.iml/package\n installModule(name, nodeModules, {}, (err) => {\n if (err) return reject(err);\n resolve();\n });\n });\n}\n\nfunction installInk(): Promise<void> {\n if (installed) return Promise.resolve();\n if (installing) return installing;\n\n // Install
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/loadInk.ts"],"sourcesContent":["import fs from 'fs';\nimport installModule from 'install-module-linked';\nimport path from 'path';\nimport url from 'url';\n\n// Get the node_modules directory relative to this file\nconst _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));\nconst nodeModules = path.join(_dirname, '..', '..', '..', 'node_modules');\n\nlet installed = false;\nlet installing: Promise<void> | null = null;\n\nfunction installDependency(name: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // install-module-linked will:\n // 1. Check if module exists locally or in ~/.iml cache\n // 2. If not, install to ~/.iml\n // 3. Create symlink in nodeModules pointing to ~/.iml/package\n installModule(name, nodeModules, {}, (err) => {\n if (err) return reject(err);\n resolve();\n });\n });\n}\n\nfunction symlinkReactFromInk(): Promise<void> {\n return new Promise((resolve) => {\n // After ink is installed, symlink react to ink's react to avoid duplicate React instances\n const inkPath = fs.realpathSync(path.join(nodeModules, 'ink'));\n const inkReactPath = path.join(inkPath, 'node_modules', 'react');\n const reactPath = path.join(nodeModules, 'react');\n\n // Check if react already exists\n try {\n const stat = fs.lstatSync(reactPath);\n if (stat.isSymbolicLink()) {\n // It's a symlink - check if it points to the right place\n const existing = fs.readlinkSync(reactPath);\n if (existing === inkReactPath) {\n return resolve(); // Already correct\n }\n // Wrong symlink, remove it\n fs.unlinkSync(reactPath);\n } else {\n // It's a real directory (e.g. from devDependencies) - leave it alone\n return resolve();\n }\n } catch {\n // Doesn't exist, continue to create symlink\n }\n\n // Create symlink to ink's react\n try {\n fs.symlinkSync(inkReactPath, reactPath);\n } catch {\n // Ignore errors - react may have been installed another way\n }\n resolve();\n });\n}\n\nfunction installInk(): Promise<void> {\n if (installed) return Promise.resolve();\n if (installing) return installing;\n\n // Install ink, then symlink react to ink's bundled react\n // This ensures session.tsx and ink use the SAME React instance\n installing = installDependency('ink')\n .then(() => symlinkReactFromInk())\n .then(() => {\n installed = true;\n })\n .catch((err) => {\n installing = null;\n throw err;\n });\n\n return installing;\n}\n\nexport function loadInk(callback: (err: Error | null) => void): void {\n installInk()\n .then(() => callback(null))\n .catch((err) => callback(err));\n}\n\nexport function isInkInstalled(): boolean {\n return installed;\n}\n"],"names":["isInkInstalled","loadInk","_dirname","path","dirname","__dirname","url","fileURLToPath","nodeModules","join","installed","installing","installDependency","name","Promise","resolve","reject","installModule","err","symlinkReactFromInk","inkPath","fs","realpathSync","inkReactPath","reactPath","stat","lstatSync","isSymbolicLink","existing","readlinkSync","unlinkSync","symlinkSync","installInk","then","catch","callback"],"mappings":";;;;;;;;;;;QAsFgBA;eAAAA;;QANAC;eAAAA;;;yDAhFD;0EACW;2DACT;0DACD;;;;;;AAEhB,uDAAuD;AACvD,IAAMC,WAAWC,aAAI,CAACC,OAAO,CAAC,OAAOC,cAAc,cAAcA,YAAYC,YAAG,CAACC,aAAa,CAAC;AAC/F,IAAMC,cAAcL,aAAI,CAACM,IAAI,CAACP,UAAU,MAAM,MAAM,MAAM;AAE1D,IAAIQ,YAAY;AAChB,IAAIC,aAAmC;AAEvC,SAASC,kBAAkBC,IAAY;IACrC,OAAO,IAAIC,QAAQ,SAACC,SAASC;QAC3B,8BAA8B;QAC9B,uDAAuD;QACvD,+BAA+B;QAC/B,8DAA8D;QAC9DC,IAAAA,4BAAa,EAACJ,MAAML,aAAa,CAAC,GAAG,SAACU;YACpC,IAAIA,KAAK,OAAOF,OAAOE;YACvBH;QACF;IACF;AACF;AAEA,SAASI;IACP,OAAO,IAAIL,QAAQ,SAACC;QAClB,0FAA0F;QAC1F,IAAMK,UAAUC,WAAE,CAACC,YAAY,CAACnB,aAAI,CAACM,IAAI,CAACD,aAAa;QACvD,IAAMe,eAAepB,aAAI,CAACM,IAAI,CAACW,SAAS,gBAAgB;QACxD,IAAMI,YAAYrB,aAAI,CAACM,IAAI,CAACD,aAAa;QAEzC,gCAAgC;QAChC,IAAI;YACF,IAAMiB,OAAOJ,WAAE,CAACK,SAAS,CAACF;YAC1B,IAAIC,KAAKE,cAAc,IAAI;gBACzB,yDAAyD;gBACzD,IAAMC,WAAWP,WAAE,CAACQ,YAAY,CAACL;gBACjC,IAAII,aAAaL,cAAc;oBAC7B,OAAOR,WAAW,kBAAkB;gBACtC;gBACA,2BAA2B;gBAC3BM,WAAE,CAACS,UAAU,CAACN;YAChB,OAAO;gBACL,qEAAqE;gBACrE,OAAOT;YACT;QACF,EAAE,UAAM;QACN,4CAA4C;QAC9C;QAEA,gCAAgC;QAChC,IAAI;YACFM,WAAE,CAACU,WAAW,CAACR,cAAcC;QAC/B,EAAE,UAAM;QACN,4DAA4D;QAC9D;QACAT;IACF;AACF;AAEA,SAASiB;IACP,IAAItB,WAAW,OAAOI,QAAQC,OAAO;IACrC,IAAIJ,YAAY,OAAOA;IAEvB,yDAAyD;IACzD,+DAA+D;IAC/DA,aAAaC,kBAAkB,OAC5BqB,IAAI,CAAC;eAAMd;OACXc,IAAI,CAAC;QACJvB,YAAY;IACd,GACCwB,KAAK,CAAC,SAAChB;QACNP,aAAa;QACb,MAAMO;IACR;IAEF,OAAOP;AACT;AAEO,SAASV,QAAQkC,QAAqC;IAC3DH,aACGC,IAAI,CAAC;eAAME,SAAS;OACpBD,KAAK,CAAC,SAAChB;eAAQiB,SAASjB;;AAC7B;AAEO,SAASlB;IACd,OAAOU;AACT"}
|
package/dist/esm/compat.js
CHANGED
|
@@ -5,24 +5,24 @@
|
|
|
5
5
|
* String.prototype.endsWith wrapper for Node.js 0.8+
|
|
6
6
|
* - Uses native endsWith on Node 4.0+ / ES2015+
|
|
7
7
|
* - Falls back to lastIndexOf on Node 0.8-3.x
|
|
8
|
-
*/
|
|
8
|
+
*/ const hasEndsWith = typeof String.prototype.endsWith === 'function';
|
|
9
9
|
export function stringEndsWith(str, search, position) {
|
|
10
10
|
if (hasEndsWith) {
|
|
11
11
|
return str.endsWith(search, position);
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
const len = position === undefined ? str.length : position;
|
|
14
14
|
return str.lastIndexOf(search) === len - search.length;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Array.prototype.find wrapper for Node.js 0.8+
|
|
18
18
|
* - Uses native find on Node 4.0+ / ES2015+
|
|
19
19
|
* - Falls back to loop on Node 0.8-3.x
|
|
20
|
-
*/
|
|
20
|
+
*/ const hasArrayFind = typeof Array.prototype.find === 'function';
|
|
21
21
|
export function arrayFind(arr, predicate) {
|
|
22
22
|
if (hasArrayFind) {
|
|
23
23
|
return arr.find(predicate);
|
|
24
24
|
}
|
|
25
|
-
for(
|
|
25
|
+
for(let i = 0; i < arr.length; i++){
|
|
26
26
|
if (predicate(arr[i], i, arr)) return arr[i];
|
|
27
27
|
}
|
|
28
28
|
return undefined;
|
package/dist/esm/compat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/compat.ts"],"sourcesContent":["/**\n * Compatibility Layer for Node.js 0.8+\n * Local to this package - contains only needed functions.\n */\n\n/**\n * String.prototype.endsWith wrapper for Node.js 0.8+\n * - Uses native endsWith on Node 4.0+ / ES2015+\n * - Falls back to lastIndexOf on Node 0.8-3.x\n */\
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/compat.ts"],"sourcesContent":["/**\n * Compatibility Layer for Node.js 0.8+\n * Local to this package - contains only needed functions.\n */\n\n/**\n * String.prototype.endsWith wrapper for Node.js 0.8+\n * - Uses native endsWith on Node 4.0+ / ES2015+\n * - Falls back to lastIndexOf on Node 0.8-3.x\n */\nconst hasEndsWith = typeof String.prototype.endsWith === 'function';\n\nexport function stringEndsWith(str: string, search: string, position?: number): boolean {\n if (hasEndsWith) {\n return str.endsWith(search, position);\n }\n const len = position === undefined ? str.length : position;\n return str.lastIndexOf(search) === len - search.length;\n}\n\n/**\n * Array.prototype.find wrapper for Node.js 0.8+\n * - Uses native find on Node 4.0+ / ES2015+\n * - Falls back to loop on Node 0.8-3.x\n */\nconst hasArrayFind = typeof Array.prototype.find === 'function';\n\nexport function arrayFind<T>(arr: T[], predicate: (item: T, index: number, arr: T[]) => boolean): T | undefined {\n if (hasArrayFind) {\n return arr.find(predicate);\n }\n for (let i = 0; i < arr.length; i++) {\n if (predicate(arr[i], i, arr)) return arr[i];\n }\n return undefined;\n}\n"],"names":["hasEndsWith","String","prototype","endsWith","stringEndsWith","str","search","position","len","undefined","length","lastIndexOf","hasArrayFind","Array","find","arrayFind","arr","predicate","i"],"mappings":"AAAA;;;CAGC,GAED;;;;CAIC,GACD,MAAMA,cAAc,OAAOC,OAAOC,SAAS,CAACC,QAAQ,KAAK;AAEzD,OAAO,SAASC,eAAeC,GAAW,EAAEC,MAAc,EAAEC,QAAiB;IAC3E,IAAIP,aAAa;QACf,OAAOK,IAAIF,QAAQ,CAACG,QAAQC;IAC9B;IACA,MAAMC,MAAMD,aAAaE,YAAYJ,IAAIK,MAAM,GAAGH;IAClD,OAAOF,IAAIM,WAAW,CAACL,YAAYE,MAAMF,OAAOI,MAAM;AACxD;AAEA;;;;CAIC,GACD,MAAME,eAAe,OAAOC,MAAMX,SAAS,CAACY,IAAI,KAAK;AAErD,OAAO,SAASC,UAAaC,GAAQ,EAAEC,SAAwD;IAC7F,IAAIL,cAAc;QAChB,OAAOI,IAAIF,IAAI,CAACG;IAClB;IACA,IAAK,IAAIC,IAAI,GAAGA,IAAIF,IAAIN,MAAM,EAAEQ,IAAK;QACnC,IAAID,UAAUD,GAAG,CAACE,EAAE,EAAEA,GAAGF,MAAM,OAAOA,GAAG,CAACE,EAAE;IAC9C;IACA,OAAOT;AACT"}
|
package/dist/esm/lib/loadInk.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
1
2
|
import installModule from 'install-module-linked';
|
|
2
3
|
import path from 'path';
|
|
3
4
|
import url from 'url';
|
|
@@ -18,14 +19,45 @@ function installDependency(name) {
|
|
|
18
19
|
});
|
|
19
20
|
});
|
|
20
21
|
}
|
|
22
|
+
function symlinkReactFromInk() {
|
|
23
|
+
return new Promise((resolve)=>{
|
|
24
|
+
// After ink is installed, symlink react to ink's react to avoid duplicate React instances
|
|
25
|
+
const inkPath = fs.realpathSync(path.join(nodeModules, 'ink'));
|
|
26
|
+
const inkReactPath = path.join(inkPath, 'node_modules', 'react');
|
|
27
|
+
const reactPath = path.join(nodeModules, 'react');
|
|
28
|
+
// Check if react already exists
|
|
29
|
+
try {
|
|
30
|
+
const stat = fs.lstatSync(reactPath);
|
|
31
|
+
if (stat.isSymbolicLink()) {
|
|
32
|
+
// It's a symlink - check if it points to the right place
|
|
33
|
+
const existing = fs.readlinkSync(reactPath);
|
|
34
|
+
if (existing === inkReactPath) {
|
|
35
|
+
return resolve(); // Already correct
|
|
36
|
+
}
|
|
37
|
+
// Wrong symlink, remove it
|
|
38
|
+
fs.unlinkSync(reactPath);
|
|
39
|
+
} else {
|
|
40
|
+
// It's a real directory (e.g. from devDependencies) - leave it alone
|
|
41
|
+
return resolve();
|
|
42
|
+
}
|
|
43
|
+
} catch {
|
|
44
|
+
// Doesn't exist, continue to create symlink
|
|
45
|
+
}
|
|
46
|
+
// Create symlink to ink's react
|
|
47
|
+
try {
|
|
48
|
+
fs.symlinkSync(inkReactPath, reactPath);
|
|
49
|
+
} catch {
|
|
50
|
+
// Ignore errors - react may have been installed another way
|
|
51
|
+
}
|
|
52
|
+
resolve();
|
|
53
|
+
});
|
|
54
|
+
}
|
|
21
55
|
function installInk() {
|
|
22
56
|
if (installed) return Promise.resolve();
|
|
23
57
|
if (installing) return installing;
|
|
24
|
-
// Install
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
installDependency('react')
|
|
28
|
-
]).then(()=>{
|
|
58
|
+
// Install ink, then symlink react to ink's bundled react
|
|
59
|
+
// This ensures session.tsx and ink use the SAME React instance
|
|
60
|
+
installing = installDependency('ink').then(()=>symlinkReactFromInk()).then(()=>{
|
|
29
61
|
installed = true;
|
|
30
62
|
}).catch((err)=>{
|
|
31
63
|
installing = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/loadInk.ts"],"sourcesContent":["import installModule from 'install-module-linked';\nimport path from 'path';\nimport url from 'url';\n\n// Get the node_modules directory relative to this file\nconst _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));\nconst nodeModules = path.join(_dirname, '..', '..', '..', 'node_modules');\n\nlet installed = false;\nlet installing: Promise<void> | null = null;\n\nfunction installDependency(name: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // install-module-linked will:\n // 1. Check if module exists locally or in ~/.iml cache\n // 2. If not, install to ~/.iml\n // 3. Create symlink in nodeModules pointing to ~/.iml/package\n installModule(name, nodeModules, {}, (err) => {\n if (err) return reject(err);\n resolve();\n });\n });\n}\n\nfunction installInk(): Promise<void> {\n if (installed) return Promise.resolve();\n if (installing) return installing;\n\n // Install
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/loadInk.ts"],"sourcesContent":["import fs from 'fs';\nimport installModule from 'install-module-linked';\nimport path from 'path';\nimport url from 'url';\n\n// Get the node_modules directory relative to this file\nconst _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));\nconst nodeModules = path.join(_dirname, '..', '..', '..', 'node_modules');\n\nlet installed = false;\nlet installing: Promise<void> | null = null;\n\nfunction installDependency(name: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // install-module-linked will:\n // 1. Check if module exists locally or in ~/.iml cache\n // 2. If not, install to ~/.iml\n // 3. Create symlink in nodeModules pointing to ~/.iml/package\n installModule(name, nodeModules, {}, (err) => {\n if (err) return reject(err);\n resolve();\n });\n });\n}\n\nfunction symlinkReactFromInk(): Promise<void> {\n return new Promise((resolve) => {\n // After ink is installed, symlink react to ink's react to avoid duplicate React instances\n const inkPath = fs.realpathSync(path.join(nodeModules, 'ink'));\n const inkReactPath = path.join(inkPath, 'node_modules', 'react');\n const reactPath = path.join(nodeModules, 'react');\n\n // Check if react already exists\n try {\n const stat = fs.lstatSync(reactPath);\n if (stat.isSymbolicLink()) {\n // It's a symlink - check if it points to the right place\n const existing = fs.readlinkSync(reactPath);\n if (existing === inkReactPath) {\n return resolve(); // Already correct\n }\n // Wrong symlink, remove it\n fs.unlinkSync(reactPath);\n } else {\n // It's a real directory (e.g. from devDependencies) - leave it alone\n return resolve();\n }\n } catch {\n // Doesn't exist, continue to create symlink\n }\n\n // Create symlink to ink's react\n try {\n fs.symlinkSync(inkReactPath, reactPath);\n } catch {\n // Ignore errors - react may have been installed another way\n }\n resolve();\n });\n}\n\nfunction installInk(): Promise<void> {\n if (installed) return Promise.resolve();\n if (installing) return installing;\n\n // Install ink, then symlink react to ink's bundled react\n // This ensures session.tsx and ink use the SAME React instance\n installing = installDependency('ink')\n .then(() => symlinkReactFromInk())\n .then(() => {\n installed = true;\n })\n .catch((err) => {\n installing = null;\n throw err;\n });\n\n return installing;\n}\n\nexport function loadInk(callback: (err: Error | null) => void): void {\n installInk()\n .then(() => callback(null))\n .catch((err) => callback(err));\n}\n\nexport function isInkInstalled(): boolean {\n return installed;\n}\n"],"names":["fs","installModule","path","url","_dirname","dirname","__dirname","fileURLToPath","nodeModules","join","installed","installing","installDependency","name","Promise","resolve","reject","err","symlinkReactFromInk","inkPath","realpathSync","inkReactPath","reactPath","stat","lstatSync","isSymbolicLink","existing","readlinkSync","unlinkSync","symlinkSync","installInk","then","catch","loadInk","callback","isInkInstalled"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,mBAAmB,wBAAwB;AAClD,OAAOC,UAAU,OAAO;AACxB,OAAOC,SAAS,MAAM;AAEtB,uDAAuD;AACvD,MAAMC,WAAWF,KAAKG,OAAO,CAAC,OAAOC,cAAc,cAAcA,YAAYH,IAAII,aAAa,CAAC,YAAYJ,GAAG;AAC9G,MAAMK,cAAcN,KAAKO,IAAI,CAACL,UAAU,MAAM,MAAM,MAAM;AAE1D,IAAIM,YAAY;AAChB,IAAIC,aAAmC;AAEvC,SAASC,kBAAkBC,IAAY;IACrC,OAAO,IAAIC,QAAQ,CAACC,SAASC;QAC3B,8BAA8B;QAC9B,uDAAuD;QACvD,+BAA+B;QAC/B,8DAA8D;QAC9Df,cAAcY,MAAML,aAAa,CAAC,GAAG,CAACS;YACpC,IAAIA,KAAK,OAAOD,OAAOC;YACvBF;QACF;IACF;AACF;AAEA,SAASG;IACP,OAAO,IAAIJ,QAAQ,CAACC;QAClB,0FAA0F;QAC1F,MAAMI,UAAUnB,GAAGoB,YAAY,CAAClB,KAAKO,IAAI,CAACD,aAAa;QACvD,MAAMa,eAAenB,KAAKO,IAAI,CAACU,SAAS,gBAAgB;QACxD,MAAMG,YAAYpB,KAAKO,IAAI,CAACD,aAAa;QAEzC,gCAAgC;QAChC,IAAI;YACF,MAAMe,OAAOvB,GAAGwB,SAAS,CAACF;YAC1B,IAAIC,KAAKE,cAAc,IAAI;gBACzB,yDAAyD;gBACzD,MAAMC,WAAW1B,GAAG2B,YAAY,CAACL;gBACjC,IAAII,aAAaL,cAAc;oBAC7B,OAAON,WAAW,kBAAkB;gBACtC;gBACA,2BAA2B;gBAC3Bf,GAAG4B,UAAU,CAACN;YAChB,OAAO;gBACL,qEAAqE;gBACrE,OAAOP;YACT;QACF,EAAE,OAAM;QACN,4CAA4C;QAC9C;QAEA,gCAAgC;QAChC,IAAI;YACFf,GAAG6B,WAAW,CAACR,cAAcC;QAC/B,EAAE,OAAM;QACN,4DAA4D;QAC9D;QACAP;IACF;AACF;AAEA,SAASe;IACP,IAAIpB,WAAW,OAAOI,QAAQC,OAAO;IACrC,IAAIJ,YAAY,OAAOA;IAEvB,yDAAyD;IACzD,+DAA+D;IAC/DA,aAAaC,kBAAkB,OAC5BmB,IAAI,CAAC,IAAMb,uBACXa,IAAI,CAAC;QACJrB,YAAY;IACd,GACCsB,KAAK,CAAC,CAACf;QACNN,aAAa;QACb,MAAMM;IACR;IAEF,OAAON;AACT;AAEA,OAAO,SAASsB,QAAQC,QAAqC;IAC3DJ,aACGC,IAAI,CAAC,IAAMG,SAAS,OACpBF,KAAK,CAAC,CAACf,MAAQiB,SAASjB;AAC7B;AAEA,OAAO,SAASkB;IACd,OAAOzB;AACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spawn-term",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.3",
|
|
4
4
|
"description": "Formats spawn with for terminal grouping",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"spawn",
|
|
@@ -43,23 +43,23 @@
|
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@xterm/headless": "^5.5.0",
|
|
46
|
-
"cross-spawn-cb": "^2.4.
|
|
47
|
-
"install-module-linked": "^1.3.
|
|
46
|
+
"cross-spawn-cb": "^2.4.12",
|
|
47
|
+
"install-module-linked": "^1.3.13",
|
|
48
48
|
"on-one": "^1.0.8",
|
|
49
49
|
"queue-cb": "^1.6.1"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/mocha": "^10.0.10",
|
|
53
|
-
"@types/node": "^
|
|
53
|
+
"@types/node": "^25.0.1",
|
|
54
54
|
"@types/react": "^19.2.7",
|
|
55
55
|
"cr": "^0.1.0",
|
|
56
56
|
"ink": "^6.5.1",
|
|
57
57
|
"is-version": "^1.0.7",
|
|
58
|
-
"node-version-use": "^1.
|
|
58
|
+
"node-version-use": "^2.1.5",
|
|
59
59
|
"pinkie-promise": "^2.0.1",
|
|
60
|
-
"react": "^19.2.
|
|
61
|
-
"ts-dev-stack": "^1.21.
|
|
62
|
-
"tsds-config": "^0.2.
|
|
60
|
+
"react": "^19.2.3",
|
|
61
|
+
"ts-dev-stack": "^1.21.3",
|
|
62
|
+
"tsds-config": "^0.2.1"
|
|
63
63
|
},
|
|
64
64
|
"engines": {
|
|
65
65
|
"node": ">=0.8"
|