spawn-term 1.1.7 → 2.0.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.
- package/dist/cjs/components/App.js +110 -9
- package/dist/cjs/components/App.js.map +1 -1
- package/dist/cjs/components/CompactProcessLine.js +153 -0
- package/dist/cjs/components/CompactProcessLine.js.map +1 -0
- package/dist/cjs/components/Divider.js +24 -0
- package/dist/cjs/components/Divider.js.map +1 -0
- package/dist/cjs/components/ErrorDetailModal.js +115 -0
- package/dist/cjs/components/ErrorDetailModal.js.map +1 -0
- package/dist/cjs/components/ErrorListModal.js +135 -0
- package/dist/cjs/components/ErrorListModal.js.map +1 -0
- package/dist/cjs/components/StatusBar.js +104 -0
- package/dist/cjs/components/StatusBar.js.map +1 -0
- package/dist/cjs/createApp.js +30 -33
- package/dist/cjs/createApp.js.map +1 -1
- package/dist/cjs/lib/figures.js +1 -1
- package/dist/cjs/lib/figures.js.map +1 -1
- package/dist/cjs/src/components/App.d.ts +1 -5
- package/dist/cjs/src/components/CompactProcessLine.d.ts +6 -0
- package/dist/cjs/src/components/Divider.d.ts +2 -0
- package/dist/cjs/src/components/ErrorDetailModal.d.ts +8 -0
- package/dist/cjs/src/components/ErrorListModal.d.ts +8 -0
- package/dist/cjs/src/components/StatusBar.d.ts +8 -0
- package/dist/cjs/src/createApp.d.ts +4 -5
- package/dist/cjs/src/state/processStore.d.ts +38 -0
- package/dist/cjs/state/processStore.js +241 -0
- package/dist/cjs/state/processStore.js.map +1 -0
- package/dist/cjs/worker.js +70 -108
- package/dist/cjs/worker.js.map +1 -1
- package/dist/esm/components/App.js +108 -8
- package/dist/esm/components/App.js.map +1 -1
- package/dist/esm/components/CompactProcessLine.js +134 -0
- package/dist/esm/components/CompactProcessLine.js.map +1 -0
- package/dist/esm/components/Divider.js +13 -0
- package/dist/esm/components/Divider.js.map +1 -0
- package/dist/esm/components/ErrorDetailModal.js +99 -0
- package/dist/esm/components/ErrorDetailModal.js.map +1 -0
- package/dist/esm/components/ErrorListModal.js +116 -0
- package/dist/esm/components/ErrorListModal.js.map +1 -0
- package/dist/esm/components/StatusBar.js +87 -0
- package/dist/esm/components/StatusBar.js.map +1 -0
- package/dist/esm/createApp.js +31 -32
- package/dist/esm/createApp.js.map +1 -1
- package/dist/esm/src/components/App.d.ts +1 -5
- package/dist/esm/src/components/CompactProcessLine.d.ts +6 -0
- package/dist/esm/src/components/Divider.d.ts +2 -0
- package/dist/esm/src/components/ErrorDetailModal.d.ts +8 -0
- package/dist/esm/src/components/ErrorListModal.d.ts +8 -0
- package/dist/esm/src/components/StatusBar.d.ts +8 -0
- package/dist/esm/src/createApp.d.ts +4 -5
- package/dist/esm/src/state/processStore.d.ts +38 -0
- package/dist/esm/state/processStore.js +149 -0
- package/dist/esm/state/processStore.js.map +1 -0
- package/dist/esm/worker.js +59 -91
- package/dist/esm/worker.js.map +1 -1
- package/package.json +1 -2
- package/dist/cjs/src/state/Store.d.ts +0 -11
- package/dist/cjs/state/Store.js +0 -40
- package/dist/cjs/state/Store.js.map +0 -1
- package/dist/esm/src/state/Store.d.ts +0 -11
- package/dist/esm/state/Store.js +0 -19
- package/dist/esm/state/Store.js.map +0 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return _default;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _jsxruntime = require("react/jsx-runtime");
|
|
12
|
+
var _ink = require("ink");
|
|
13
|
+
var _react = require("react");
|
|
14
|
+
var _figurests = /*#__PURE__*/ _interop_require_default(require("../lib/figures.js"));
|
|
15
|
+
var _Spinnerts = /*#__PURE__*/ _interop_require_default(require("./Spinner.js"));
|
|
16
|
+
function _define_property(obj, key, value) {
|
|
17
|
+
if (key in obj) {
|
|
18
|
+
Object.defineProperty(obj, key, {
|
|
19
|
+
value: value,
|
|
20
|
+
enumerable: true,
|
|
21
|
+
configurable: true,
|
|
22
|
+
writable: true
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
obj[key] = value;
|
|
26
|
+
}
|
|
27
|
+
return obj;
|
|
28
|
+
}
|
|
29
|
+
function _interop_require_default(obj) {
|
|
30
|
+
return obj && obj.__esModule ? obj : {
|
|
31
|
+
default: obj
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function _object_spread(target) {
|
|
35
|
+
for(var i = 1; i < arguments.length; i++){
|
|
36
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
37
|
+
var ownKeys = Object.keys(source);
|
|
38
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
39
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
40
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
ownKeys.forEach(function(key) {
|
|
44
|
+
_define_property(target, key, source[key]);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return target;
|
|
48
|
+
}
|
|
49
|
+
// From: https://github.com/sindresorhus/cli-spinners/blob/00de8fbeee16fa49502fa4f687449f70f2c8ca2c/spinners.json#L2
|
|
50
|
+
var SPINNER = {
|
|
51
|
+
interval: 80,
|
|
52
|
+
frames: [
|
|
53
|
+
'⠋',
|
|
54
|
+
'⠙',
|
|
55
|
+
'⠹',
|
|
56
|
+
'⠸',
|
|
57
|
+
'⠼',
|
|
58
|
+
'⠴',
|
|
59
|
+
'⠦',
|
|
60
|
+
'⠧',
|
|
61
|
+
'⠇',
|
|
62
|
+
'⠏'
|
|
63
|
+
]
|
|
64
|
+
};
|
|
65
|
+
var _default = /*#__PURE__*/ (0, _react.memo)(function StatusBar(param) {
|
|
66
|
+
var running = param.running, done = param.done, errors = param.errors, errorLines = param.errorLines;
|
|
67
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_ink.Box, {
|
|
68
|
+
justifyContent: "space-between",
|
|
69
|
+
children: [
|
|
70
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Box, {
|
|
71
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_ink.Text, {
|
|
72
|
+
children: [
|
|
73
|
+
running > 0 ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_Spinnerts.default, _object_spread({}, SPINNER)) : /*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Text, {
|
|
74
|
+
color: "green",
|
|
75
|
+
children: _figurests.default.tick
|
|
76
|
+
}),
|
|
77
|
+
" Running: ".concat(running, " "),
|
|
78
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Text, {
|
|
79
|
+
color: "green",
|
|
80
|
+
children: _figurests.default.tick
|
|
81
|
+
}),
|
|
82
|
+
" Done: ".concat(done, " "),
|
|
83
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Text, {
|
|
84
|
+
color: "red",
|
|
85
|
+
children: _figurests.default.cross
|
|
86
|
+
}),
|
|
87
|
+
" Errors: ".concat(errors),
|
|
88
|
+
errorLines > 0 && /*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Text, {
|
|
89
|
+
dimColor: true,
|
|
90
|
+
children: " (".concat(errorLines, " lines)")
|
|
91
|
+
})
|
|
92
|
+
]
|
|
93
|
+
})
|
|
94
|
+
}),
|
|
95
|
+
errors > 0 && /*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Box, {
|
|
96
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Text, {
|
|
97
|
+
dimColor: true,
|
|
98
|
+
children: "[e]rrors"
|
|
99
|
+
})
|
|
100
|
+
})
|
|
101
|
+
]
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/StatusBar.tsx"],"sourcesContent":["import { Box, Text } from 'ink';\nimport { memo } from 'react';\nimport figures from '../lib/figures.ts';\nimport Spinner from './Spinner.ts';\n\n// From: https://github.com/sindresorhus/cli-spinners/blob/00de8fbeee16fa49502fa4f687449f70f2c8ca2c/spinners.json#L2\nconst SPINNER = {\n interval: 80,\n frames: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],\n};\n\ntype Props = {\n running: number;\n done: number;\n errors: number;\n errorLines: number;\n};\n\nexport default memo(function StatusBar({ running, done, errors, errorLines }: Props) {\n return (\n <Box justifyContent=\"space-between\">\n <Box>\n <Text>\n {running > 0 ? <Spinner {...SPINNER} /> : <Text color=\"green\">{figures.tick}</Text>}\n {` Running: ${running} `}\n <Text color=\"green\">{figures.tick}</Text>\n {` Done: ${done} `}\n <Text color=\"red\">{figures.cross}</Text>\n {` Errors: ${errors}`}\n {errorLines > 0 && <Text dimColor>{` (${errorLines} lines)`}</Text>}\n </Text>\n </Box>\n {errors > 0 && (\n <Box>\n <Text dimColor>[e]rrors</Text>\n </Box>\n )}\n </Box>\n );\n});\n"],"names":["SPINNER","interval","frames","memo","StatusBar","running","done","errors","errorLines","Box","justifyContent","Text","Spinner","color","figures","tick","cross","dimColor"],"mappings":";;;;+BAkBA;;;eAAA;;;;mBAlB0B;qBACL;gEACD;gEACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEpB,oHAAoH;AACpH,IAAMA,UAAU;IACdC,UAAU;IACVC,QAAQ;QAAC;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;KAAI;AAC5D;IASA,yBAAeC,IAAAA,WAAI,EAAC,SAASC,UAAU,KAA4C;QAA1CC,UAAF,MAAEA,SAASC,OAAX,MAAWA,MAAMC,SAAjB,MAAiBA,QAAQC,aAAzB,MAAyBA;IAC9D,qBACE,sBAACC,QAAG;QAACC,gBAAe;;0BAClB,qBAACD,QAAG;0BACF,cAAA,sBAACE,SAAI;;wBACFN,UAAU,kBAAI,qBAACO,kBAAO,qBAAKZ,0BAAc,qBAACW,SAAI;4BAACE,OAAM;sCAASC,kBAAO,CAACC,IAAI;;wBACzE,aAAoB,OAARV,SAAQ;sCACtB,qBAACM,SAAI;4BAACE,OAAM;sCAASC,kBAAO,CAACC,IAAI;;wBAC/B,UAAc,OAALT,MAAK;sCAChB,qBAACK,SAAI;4BAACE,OAAM;sCAAOC,kBAAO,CAACE,KAAK;;wBAC9B,YAAkB,OAAPT;wBACZC,aAAa,mBAAK,qBAACG,SAAI;4BAACM,QAAQ;sCAAE,AAAC,KAAe,OAAXT,YAAW;;;;;YAGtDD,SAAS,mBACR,qBAACE,QAAG;0BACF,cAAA,qBAACE,SAAI;oBAACM,QAAQ;8BAAC;;;;;AAKzB"}
|
package/dist/cjs/createApp.js
CHANGED
|
@@ -10,52 +10,49 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
var _jsxruntime = require("react/jsx-runtime");
|
|
12
12
|
var _ink = require("ink");
|
|
13
|
-
var _lodashthrottle = /*#__PURE__*/ _interop_require_default(require("lodash.throttle"));
|
|
14
13
|
var _Appts = /*#__PURE__*/ _interop_require_default(require("./components/App.js"));
|
|
15
|
-
var
|
|
14
|
+
var _processStorets = require("./state/processStore.js");
|
|
16
15
|
function _interop_require_default(obj) {
|
|
17
16
|
return obj && obj.__esModule ? obj : {
|
|
18
17
|
default: obj
|
|
19
18
|
};
|
|
20
19
|
}
|
|
21
|
-
var THROTTLE = 100;
|
|
22
20
|
function createApp() {
|
|
23
21
|
var refCount = 0;
|
|
24
|
-
var store = null;
|
|
25
22
|
var inkApp = null;
|
|
26
|
-
var previousData = null;
|
|
27
|
-
var rerender = (0, _lodashthrottle.default)(function() {
|
|
28
|
-
if (!inkApp || !store) return;
|
|
29
|
-
if (store.data() === previousData) return;
|
|
30
|
-
previousData = store.data();
|
|
31
|
-
inkApp.rerender(/*#__PURE__*/ (0, _jsxruntime.jsx)(_Appts.default, {
|
|
32
|
-
store: store
|
|
33
|
-
}));
|
|
34
|
-
}, THROTTLE, {
|
|
35
|
-
leading: false
|
|
36
|
-
});
|
|
37
23
|
return {
|
|
38
|
-
retain: function retain(
|
|
39
|
-
if (++refCount > 1) return
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
store: store
|
|
44
|
-
}));
|
|
45
|
-
fn(store);
|
|
24
|
+
retain: function retain() {
|
|
25
|
+
if (++refCount > 1) return _processStorets.processStore;
|
|
26
|
+
// Render once - React handles all subsequent updates via useSyncExternalStore
|
|
27
|
+
inkApp = (0, _ink.render)(/*#__PURE__*/ (0, _jsxruntime.jsx)(_Appts.default, {}));
|
|
28
|
+
return _processStorets.processStore;
|
|
46
29
|
},
|
|
47
|
-
release: function release(
|
|
48
|
-
if (--refCount > 0)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
30
|
+
release: function release(callback) {
|
|
31
|
+
if (--refCount > 0) {
|
|
32
|
+
callback();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (!inkApp) throw new Error('Expecting inkApp');
|
|
36
|
+
// Defer signalExit to allow React's reconciliation to complete fully
|
|
37
|
+
// Using setImmediate ensures we run after I/O callbacks and microtasks,
|
|
38
|
+
// preventing the Static component from outputting the last item twice
|
|
39
|
+
// (the second notify() from signalExit can race with Static's useLayoutEffect)
|
|
40
|
+
setImmediate(function() {
|
|
41
|
+
_processStorets.processStore.signalExit(function() {
|
|
42
|
+
_processStorets.processStore.reset();
|
|
43
|
+
process.stdout.write('\x1b[?25h'); // show cursor
|
|
44
|
+
callback();
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
// Wait for Ink to finish, then call the callback
|
|
52
48
|
inkApp.waitUntilExit().then(function() {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
var cb = _processStorets.processStore.getExitCallback();
|
|
50
|
+
cb === null || cb === void 0 ? void 0 : cb();
|
|
51
|
+
}).catch(function() {
|
|
52
|
+
var cb = _processStorets.processStore.getExitCallback();
|
|
53
|
+
cb === null || cb === void 0 ? void 0 : cb();
|
|
54
|
+
});
|
|
56
55
|
inkApp = null;
|
|
57
|
-
store = null;
|
|
58
|
-
process.stdout.write('\x1b[?25h'); // show cursor
|
|
59
56
|
}
|
|
60
57
|
};
|
|
61
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/createApp.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/createApp.tsx"],"sourcesContent":["import { render } from 'ink';\nimport App from './components/App.ts';\nimport { type ProcessStore, processStore } from './state/processStore.ts';\n\nexport type ReleaseCallback = () => void;\n\nexport default function createApp() {\n let refCount = 0;\n let inkApp: ReturnType<typeof render> | null = null;\n\n return {\n retain(): ProcessStore {\n if (++refCount > 1) return processStore;\n\n // Render once - React handles all subsequent updates via useSyncExternalStore\n inkApp = render(<App />);\n return processStore;\n },\n\n release(callback: ReleaseCallback): void {\n if (--refCount > 0) {\n callback();\n return;\n }\n if (!inkApp) throw new Error('Expecting inkApp');\n\n // Defer signalExit to allow React's reconciliation to complete fully\n // Using setImmediate ensures we run after I/O callbacks and microtasks,\n // preventing the Static component from outputting the last item twice\n // (the second notify() from signalExit can race with Static's useLayoutEffect)\n setImmediate(() => {\n processStore.signalExit(() => {\n processStore.reset();\n process.stdout.write('\\x1b[?25h'); // show cursor\n callback();\n });\n });\n\n // Wait for Ink to finish, then call the callback\n inkApp\n .waitUntilExit()\n .then(() => {\n const cb = processStore.getExitCallback();\n cb?.();\n })\n .catch(() => {\n const cb = processStore.getExitCallback();\n cb?.();\n });\n\n inkApp = null;\n },\n };\n}\n"],"names":["createApp","refCount","inkApp","retain","processStore","render","App","release","callback","Error","setImmediate","signalExit","reset","process","stdout","write","waitUntilExit","then","cb","getExitCallback","catch"],"mappings":";;;;+BAMA;;;eAAwBA;;;;mBAND;4DACP;8BACgC;;;;;;AAIjC,SAASA;IACtB,IAAIC,WAAW;IACf,IAAIC,SAA2C;IAE/C,OAAO;QACLC,QAAAA,SAAAA;YACE,IAAI,EAAEF,WAAW,GAAG,OAAOG,4BAAY;YAEvC,8EAA8E;YAC9EF,SAASG,IAAAA,WAAM,gBAAC,qBAACC,cAAG;YACpB,OAAOF,4BAAY;QACrB;QAEAG,SAAAA,SAAAA,QAAQC,QAAyB;YAC/B,IAAI,EAAEP,WAAW,GAAG;gBAClBO;gBACA;YACF;YACA,IAAI,CAACN,QAAQ,MAAM,IAAIO,MAAM;YAE7B,qEAAqE;YACrE,wEAAwE;YACxE,sEAAsE;YACtE,+EAA+E;YAC/EC,aAAa;gBACXN,4BAAY,CAACO,UAAU,CAAC;oBACtBP,4BAAY,CAACQ,KAAK;oBAClBC,QAAQC,MAAM,CAACC,KAAK,CAAC,cAAc,cAAc;oBACjDP;gBACF;YACF;YAEA,iDAAiD;YACjDN,OACGc,aAAa,GACbC,IAAI,CAAC;gBACJ,IAAMC,KAAKd,4BAAY,CAACe,eAAe;gBACvCD,eAAAA,yBAAAA;YACF,GACCE,KAAK,CAAC;gBACL,IAAMF,KAAKd,4BAAY,CAACe,eAAe;gBACvCD,eAAAA,yBAAAA;YACF;YAEFhB,SAAS;QACX;IACF;AACF"}
|
package/dist/cjs/lib/figures.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// From: https://github.com/sindresorhus/is-unicode-supported
|
|
2
1
|
"use strict";
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
3
|
value: true
|
|
@@ -9,6 +8,7 @@ Object.defineProperty(exports, "default", {
|
|
|
9
8
|
return _default;
|
|
10
9
|
}
|
|
11
10
|
});
|
|
11
|
+
// From: https://github.com/sindresorhus/is-unicode-supported
|
|
12
12
|
function isUnicodeSupported() {
|
|
13
13
|
var env = process.env;
|
|
14
14
|
var TERM = env.TERM, TERM_PROGRAM = env.TERM_PROGRAM;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/figures.ts"],"sourcesContent":["// From: https://github.com/sindresorhus/is-unicode-supported\nfunction isUnicodeSupported() {\n const { env } = process;\n const { TERM, TERM_PROGRAM } = env;\n\n if (process.platform !== 'win32') {\n return TERM !== 'linux'; // Linux console (kernel)\n }\n\n return (\n Boolean(env.WT_SESSION) || // Windows Terminal\n Boolean(env.TERMINUS_SUBLIME) || // Terminus (<0.2.27)\n env.ConEmuTask === '{cmd::Cmder}' || // ConEmu and cmder\n TERM_PROGRAM === 'Terminus-Sublime' ||\n TERM_PROGRAM === 'vscode' ||\n TERM === 'xterm-256color' ||\n TERM === 'alacritty' ||\n TERM === 'rxvt-unicode' ||\n TERM === 'rxvt-unicode-256color' ||\n env.TERMINAL_EMULATOR === 'JetBrains-JediTerm'\n );\n}\n\n// From https://github.com/sindresorhus/figures\nconst symbols = {\n arrowRight: '→',\n tick: '✔',\n info: 'ℹ',\n warning: '⚠',\n cross: '✖',\n squareSmallFilled: '◼',\n pointer: '❯',\n};\n\nconst fallbackSymbols = {\n arrowRight: '→',\n tick: '√',\n info: 'i',\n warning: '‼',\n cross: '×',\n squareSmallFilled: '■',\n pointer: '>',\n};\n\nexport default isUnicodeSupported() ? symbols : fallbackSymbols;\n"],"names":["isUnicodeSupported","env","process","TERM","TERM_PROGRAM","platform","Boolean","WT_SESSION","TERMINUS_SUBLIME","ConEmuTask","TERMINAL_EMULATOR","symbols","arrowRight","tick","info","warning","cross","squareSmallFilled","pointer","fallbackSymbols"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/figures.ts"],"sourcesContent":["// From: https://github.com/sindresorhus/is-unicode-supported\nfunction isUnicodeSupported() {\n const { env } = process;\n const { TERM, TERM_PROGRAM } = env;\n\n if (process.platform !== 'win32') {\n return TERM !== 'linux'; // Linux console (kernel)\n }\n\n return (\n Boolean(env.WT_SESSION) || // Windows Terminal\n Boolean(env.TERMINUS_SUBLIME) || // Terminus (<0.2.27)\n env.ConEmuTask === '{cmd::Cmder}' || // ConEmu and cmder\n TERM_PROGRAM === 'Terminus-Sublime' ||\n TERM_PROGRAM === 'vscode' ||\n TERM === 'xterm-256color' ||\n TERM === 'alacritty' ||\n TERM === 'rxvt-unicode' ||\n TERM === 'rxvt-unicode-256color' ||\n env.TERMINAL_EMULATOR === 'JetBrains-JediTerm'\n );\n}\n\n// From https://github.com/sindresorhus/figures\nconst symbols = {\n arrowRight: '→',\n tick: '✔',\n info: 'ℹ',\n warning: '⚠',\n cross: '✖',\n squareSmallFilled: '◼',\n pointer: '❯',\n};\n\nconst fallbackSymbols = {\n arrowRight: '→',\n tick: '√',\n info: 'i',\n warning: '‼',\n cross: '×',\n squareSmallFilled: '■',\n pointer: '>',\n};\n\nexport default isUnicodeSupported() ? symbols : fallbackSymbols;\n"],"names":["isUnicodeSupported","env","process","TERM","TERM_PROGRAM","platform","Boolean","WT_SESSION","TERMINUS_SUBLIME","ConEmuTask","TERMINAL_EMULATOR","symbols","arrowRight","tick","info","warning","cross","squareSmallFilled","pointer","fallbackSymbols"],"mappings":";;;;+BA4CA;;;eAAA;;;AA5CA,6DAA6D;AAC7D,SAASA;IACP,IAAM,AAAEC,MAAQC,QAARD;IACR,IAAQE,OAAuBF,IAAvBE,MAAMC,eAAiBH,IAAjBG;IAEd,IAAIF,QAAQG,QAAQ,KAAK,SAAS;QAChC,OAAOF,SAAS,SAAS,yBAAyB;IACpD;IAEA,OACEG,QAAQL,IAAIM,UAAU,KAAK,mBAAmB;IAC9CD,QAAQL,IAAIO,gBAAgB,KAAK,qBAAqB;IACtDP,IAAIQ,UAAU,KAAK,kBAAkB,mBAAmB;IACxDL,iBAAiB,sBACjBA,iBAAiB,YACjBD,SAAS,oBACTA,SAAS,eACTA,SAAS,kBACTA,SAAS,2BACTF,IAAIS,iBAAiB,KAAK;AAE9B;AAEA,+CAA+C;AAC/C,IAAMC,UAAU;IACdC,YAAY;IACZC,MAAM;IACNC,MAAM;IACNC,SAAS;IACTC,OAAO;IACPC,mBAAmB;IACnBC,SAAS;AACX;AAEA,IAAMC,kBAAkB;IACtBP,YAAY;IACZC,MAAM;IACNC,MAAM;IACNC,SAAS;IACTC,OAAO;IACPC,mBAAmB;IACnBC,SAAS;AACX;IAEA,WAAelB,uBAAuBW,UAAUQ"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export type
|
|
3
|
-
export type ReleaseCallback = () => undefined;
|
|
1
|
+
import { type ProcessStore } from './state/processStore.js';
|
|
2
|
+
export type ReleaseCallback = () => void;
|
|
4
3
|
export default function createApp(): {
|
|
5
|
-
retain(
|
|
6
|
-
release(
|
|
4
|
+
retain(): ProcessStore;
|
|
5
|
+
release(callback: ReleaseCallback): void;
|
|
7
6
|
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ChildProcess, Line } from '../types.js';
|
|
2
|
+
type Listener = () => void;
|
|
3
|
+
type Mode = 'normal' | 'errorList' | 'errorDetail';
|
|
4
|
+
declare class ProcessStore {
|
|
5
|
+
private processes;
|
|
6
|
+
private completedIds;
|
|
7
|
+
private listeners;
|
|
8
|
+
private shouldExit;
|
|
9
|
+
private exitCallback;
|
|
10
|
+
private mode;
|
|
11
|
+
private selectedErrorIndex;
|
|
12
|
+
subscribe: (listener: Listener) => (() => void);
|
|
13
|
+
getSnapshot: () => ChildProcess[];
|
|
14
|
+
getRunningProcesses: () => ChildProcess[];
|
|
15
|
+
getCompletedProcesses: () => ChildProcess[];
|
|
16
|
+
getFailedProcesses: () => ChildProcess[];
|
|
17
|
+
getRunningCount: () => number;
|
|
18
|
+
getDoneCount: () => number;
|
|
19
|
+
getErrorCount: () => number;
|
|
20
|
+
getErrorLineCount: () => number;
|
|
21
|
+
getMode: () => Mode;
|
|
22
|
+
getSelectedErrorIndex: () => number;
|
|
23
|
+
addProcess(process: ChildProcess): void;
|
|
24
|
+
updateProcess(id: string, update: Partial<ChildProcess>): void;
|
|
25
|
+
appendLines(id: string, newLines: Line[]): void;
|
|
26
|
+
getProcess(id: string): ChildProcess | undefined;
|
|
27
|
+
setMode(mode: Mode): void;
|
|
28
|
+
selectNextError(): void;
|
|
29
|
+
selectPrevError(): void;
|
|
30
|
+
getSelectedError(): ChildProcess | undefined;
|
|
31
|
+
signalExit(callback: () => void): void;
|
|
32
|
+
getShouldExit: () => boolean;
|
|
33
|
+
getExitCallback: () => (() => void) | null;
|
|
34
|
+
reset(): void;
|
|
35
|
+
private notify;
|
|
36
|
+
}
|
|
37
|
+
export declare const processStore: ProcessStore;
|
|
38
|
+
export type { ProcessStore };
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "processStore", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return processStore;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _typests = require("../types.js");
|
|
12
|
+
function _array_like_to_array(arr, len) {
|
|
13
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
14
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
15
|
+
return arr2;
|
|
16
|
+
}
|
|
17
|
+
function _array_without_holes(arr) {
|
|
18
|
+
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
19
|
+
}
|
|
20
|
+
function _class_call_check(instance, Constructor) {
|
|
21
|
+
if (!(instance instanceof Constructor)) {
|
|
22
|
+
throw new TypeError("Cannot call a class as a function");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function _define_property(obj, key, value) {
|
|
26
|
+
if (key in obj) {
|
|
27
|
+
Object.defineProperty(obj, key, {
|
|
28
|
+
value: value,
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true
|
|
32
|
+
});
|
|
33
|
+
} else {
|
|
34
|
+
obj[key] = value;
|
|
35
|
+
}
|
|
36
|
+
return obj;
|
|
37
|
+
}
|
|
38
|
+
function _iterable_to_array(iter) {
|
|
39
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
40
|
+
}
|
|
41
|
+
function _non_iterable_spread() {
|
|
42
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
43
|
+
}
|
|
44
|
+
function _object_spread(target) {
|
|
45
|
+
for(var i = 1; i < arguments.length; i++){
|
|
46
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
47
|
+
var ownKeys = Object.keys(source);
|
|
48
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
49
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
50
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
ownKeys.forEach(function(key) {
|
|
54
|
+
_define_property(target, key, source[key]);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return target;
|
|
58
|
+
}
|
|
59
|
+
function _to_consumable_array(arr) {
|
|
60
|
+
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
61
|
+
}
|
|
62
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
63
|
+
if (!o) return;
|
|
64
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
65
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
66
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
67
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
68
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
69
|
+
}
|
|
70
|
+
var ProcessStore = /*#__PURE__*/ function() {
|
|
71
|
+
"use strict";
|
|
72
|
+
function ProcessStore() {
|
|
73
|
+
var _this = this;
|
|
74
|
+
_class_call_check(this, ProcessStore);
|
|
75
|
+
this.processes = [];
|
|
76
|
+
this.completedIds = []; // Track completion order
|
|
77
|
+
this.listeners = new Set();
|
|
78
|
+
this.shouldExit = false;
|
|
79
|
+
this.exitCallback = null;
|
|
80
|
+
// UI state
|
|
81
|
+
this.mode = 'normal';
|
|
82
|
+
this.selectedErrorIndex = 0;
|
|
83
|
+
// useSyncExternalStore API
|
|
84
|
+
this.subscribe = function(listener) {
|
|
85
|
+
_this.listeners.add(listener);
|
|
86
|
+
return function() {
|
|
87
|
+
return _this.listeners.delete(listener);
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
this.getSnapshot = function() {
|
|
91
|
+
return _this.processes;
|
|
92
|
+
};
|
|
93
|
+
// Filtered getters
|
|
94
|
+
this.getRunningProcesses = function() {
|
|
95
|
+
return _this.processes.filter(function(p) {
|
|
96
|
+
return p.state === 'running';
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
this.getCompletedProcesses = function() {
|
|
100
|
+
// Return in completion order
|
|
101
|
+
return _this.completedIds.map(function(id) {
|
|
102
|
+
return _this.processes.find(function(p) {
|
|
103
|
+
return p.id === id;
|
|
104
|
+
});
|
|
105
|
+
}).filter(function(p) {
|
|
106
|
+
return p !== undefined;
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
this.getFailedProcesses = function() {
|
|
110
|
+
return _this.processes.filter(function(p) {
|
|
111
|
+
return p.state === 'error';
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
// Counts
|
|
115
|
+
this.getRunningCount = function() {
|
|
116
|
+
return _this.processes.filter(function(p) {
|
|
117
|
+
return p.state === 'running';
|
|
118
|
+
}).length;
|
|
119
|
+
};
|
|
120
|
+
this.getDoneCount = function() {
|
|
121
|
+
return _this.processes.filter(function(p) {
|
|
122
|
+
return p.state !== 'running';
|
|
123
|
+
}).length;
|
|
124
|
+
};
|
|
125
|
+
this.getErrorCount = function() {
|
|
126
|
+
return _this.processes.filter(function(p) {
|
|
127
|
+
return p.state === 'error';
|
|
128
|
+
}).length;
|
|
129
|
+
};
|
|
130
|
+
this.getErrorLineCount = function() {
|
|
131
|
+
return _this.processes.filter(function(p) {
|
|
132
|
+
return p.state === 'error';
|
|
133
|
+
}).reduce(function(total, p) {
|
|
134
|
+
return total + p.lines.filter(function(l) {
|
|
135
|
+
return l.type === _typests.LineType.stderr;
|
|
136
|
+
}).length;
|
|
137
|
+
}, 0);
|
|
138
|
+
};
|
|
139
|
+
// UI state getters
|
|
140
|
+
this.getMode = function() {
|
|
141
|
+
return _this.mode;
|
|
142
|
+
};
|
|
143
|
+
this.getSelectedErrorIndex = function() {
|
|
144
|
+
return _this.selectedErrorIndex;
|
|
145
|
+
};
|
|
146
|
+
this.getShouldExit = function() {
|
|
147
|
+
return _this.shouldExit;
|
|
148
|
+
};
|
|
149
|
+
this.getExitCallback = function() {
|
|
150
|
+
return _this.exitCallback;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
var _proto = ProcessStore.prototype;
|
|
154
|
+
// Mutations - Ink handles render throttling at 30 FPS
|
|
155
|
+
_proto.addProcess = function addProcess(process) {
|
|
156
|
+
this.processes = _to_consumable_array(this.processes).concat([
|
|
157
|
+
process
|
|
158
|
+
]);
|
|
159
|
+
this.notify();
|
|
160
|
+
};
|
|
161
|
+
_proto.updateProcess = function updateProcess(id, update) {
|
|
162
|
+
var oldProcess = this.processes.find(function(p) {
|
|
163
|
+
return p.id === id;
|
|
164
|
+
});
|
|
165
|
+
var wasRunning = (oldProcess === null || oldProcess === void 0 ? void 0 : oldProcess.state) === 'running';
|
|
166
|
+
var isNowComplete = update.state && update.state !== 'running';
|
|
167
|
+
this.processes = this.processes.map(function(p) {
|
|
168
|
+
return p.id === id ? _object_spread({}, p, update) : p;
|
|
169
|
+
});
|
|
170
|
+
// Track completion order
|
|
171
|
+
if (wasRunning && isNowComplete && !this.completedIds.includes(id)) {
|
|
172
|
+
this.completedIds = _to_consumable_array(this.completedIds).concat([
|
|
173
|
+
id
|
|
174
|
+
]);
|
|
175
|
+
}
|
|
176
|
+
this.notify();
|
|
177
|
+
};
|
|
178
|
+
_proto.appendLines = function appendLines(id, newLines) {
|
|
179
|
+
var process = this.processes.find(function(p) {
|
|
180
|
+
return p.id === id;
|
|
181
|
+
});
|
|
182
|
+
if (process) {
|
|
183
|
+
this.updateProcess(id, {
|
|
184
|
+
lines: process.lines.concat(newLines)
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
_proto.getProcess = function getProcess(id) {
|
|
189
|
+
return this.processes.find(function(p) {
|
|
190
|
+
return p.id === id;
|
|
191
|
+
});
|
|
192
|
+
};
|
|
193
|
+
// UI state mutations
|
|
194
|
+
_proto.setMode = function setMode(mode) {
|
|
195
|
+
this.mode = mode;
|
|
196
|
+
if (mode === 'errorList') {
|
|
197
|
+
this.selectedErrorIndex = 0;
|
|
198
|
+
}
|
|
199
|
+
this.notify();
|
|
200
|
+
};
|
|
201
|
+
_proto.selectNextError = function selectNextError() {
|
|
202
|
+
var failed = this.getFailedProcesses();
|
|
203
|
+
if (failed.length > 0) {
|
|
204
|
+
this.selectedErrorIndex = (this.selectedErrorIndex + 1) % failed.length;
|
|
205
|
+
this.notify();
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
_proto.selectPrevError = function selectPrevError() {
|
|
209
|
+
var failed = this.getFailedProcesses();
|
|
210
|
+
if (failed.length > 0) {
|
|
211
|
+
this.selectedErrorIndex = (this.selectedErrorIndex - 1 + failed.length) % failed.length;
|
|
212
|
+
this.notify();
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
_proto.getSelectedError = function getSelectedError() {
|
|
216
|
+
var failed = this.getFailedProcesses();
|
|
217
|
+
return failed[this.selectedErrorIndex];
|
|
218
|
+
};
|
|
219
|
+
// Exit signaling
|
|
220
|
+
_proto.signalExit = function signalExit(callback) {
|
|
221
|
+
this.shouldExit = true;
|
|
222
|
+
this.exitCallback = callback;
|
|
223
|
+
this.notify();
|
|
224
|
+
};
|
|
225
|
+
_proto.reset = function reset() {
|
|
226
|
+
this.processes = [];
|
|
227
|
+
this.completedIds = [];
|
|
228
|
+
this.shouldExit = false;
|
|
229
|
+
this.exitCallback = null;
|
|
230
|
+
this.mode = 'normal';
|
|
231
|
+
this.selectedErrorIndex = 0;
|
|
232
|
+
};
|
|
233
|
+
_proto.notify = function notify() {
|
|
234
|
+
this.listeners.forEach(function(l) {
|
|
235
|
+
l();
|
|
236
|
+
});
|
|
237
|
+
};
|
|
238
|
+
return ProcessStore;
|
|
239
|
+
}();
|
|
240
|
+
var processStore = new ProcessStore();
|
|
241
|
+
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/state/processStore.ts"],"sourcesContent":["import type { ChildProcess, Line } from '../types.ts';\nimport { LineType } from '../types.ts';\n\ntype Listener = () => void;\ntype Mode = 'normal' | 'errorList' | 'errorDetail';\n\nclass ProcessStore {\n private processes: ChildProcess[] = [];\n private completedIds: string[] = []; // Track completion order\n private listeners = new Set<Listener>();\n private shouldExit = false;\n private exitCallback: (() => void) | null = null;\n\n // UI state\n private mode: Mode = 'normal';\n private selectedErrorIndex = 0;\n\n // useSyncExternalStore API\n subscribe = (listener: Listener): (() => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n getSnapshot = (): ChildProcess[] => this.processes;\n\n // Filtered getters\n getRunningProcesses = (): ChildProcess[] => {\n return this.processes.filter((p) => p.state === 'running');\n };\n\n getCompletedProcesses = (): ChildProcess[] => {\n // Return in completion order\n return this.completedIds.map((id) => this.processes.find((p) => p.id === id)).filter((p): p is ChildProcess => p !== undefined);\n };\n\n getFailedProcesses = (): ChildProcess[] => {\n return this.processes.filter((p) => p.state === 'error');\n };\n\n // Counts\n getRunningCount = (): number => this.processes.filter((p) => p.state === 'running').length;\n getDoneCount = (): number => this.processes.filter((p) => p.state !== 'running').length;\n getErrorCount = (): number => this.processes.filter((p) => p.state === 'error').length;\n getErrorLineCount = (): number => {\n return this.processes.filter((p) => p.state === 'error').reduce((total, p) => total + p.lines.filter((l) => l.type === LineType.stderr).length, 0);\n };\n\n // UI state getters\n getMode = (): Mode => this.mode;\n getSelectedErrorIndex = (): number => this.selectedErrorIndex;\n\n // Mutations - Ink handles render throttling at 30 FPS\n addProcess(process: ChildProcess): void {\n this.processes = [...this.processes, process];\n this.notify();\n }\n\n updateProcess(id: string, update: Partial<ChildProcess>): void {\n const oldProcess = this.processes.find((p) => p.id === id);\n const wasRunning = oldProcess?.state === 'running';\n const isNowComplete = update.state && update.state !== 'running';\n\n this.processes = this.processes.map((p) => (p.id === id ? { ...p, ...update } : p));\n\n // Track completion order\n if (wasRunning && isNowComplete && !this.completedIds.includes(id)) {\n this.completedIds = [...this.completedIds, id];\n }\n\n this.notify();\n }\n\n appendLines(id: string, newLines: Line[]): void {\n const process = this.processes.find((p) => p.id === id);\n if (process) {\n this.updateProcess(id, { lines: process.lines.concat(newLines) });\n }\n }\n\n getProcess(id: string): ChildProcess | undefined {\n return this.processes.find((p) => p.id === id);\n }\n\n // UI state mutations\n setMode(mode: Mode): void {\n this.mode = mode;\n if (mode === 'errorList') {\n this.selectedErrorIndex = 0;\n }\n this.notify();\n }\n\n selectNextError(): void {\n const failed = this.getFailedProcesses();\n if (failed.length > 0) {\n this.selectedErrorIndex = (this.selectedErrorIndex + 1) % failed.length;\n this.notify();\n }\n }\n\n selectPrevError(): void {\n const failed = this.getFailedProcesses();\n if (failed.length > 0) {\n this.selectedErrorIndex = (this.selectedErrorIndex - 1 + failed.length) % failed.length;\n this.notify();\n }\n }\n\n getSelectedError(): ChildProcess | undefined {\n const failed = this.getFailedProcesses();\n return failed[this.selectedErrorIndex];\n }\n\n // Exit signaling\n signalExit(callback: () => void): void {\n this.shouldExit = true;\n this.exitCallback = callback;\n this.notify();\n }\n\n getShouldExit = (): boolean => this.shouldExit;\n getExitCallback = (): (() => void) | null => this.exitCallback;\n\n reset(): void {\n this.processes = [];\n this.completedIds = [];\n this.shouldExit = false;\n this.exitCallback = null;\n this.mode = 'normal';\n this.selectedErrorIndex = 0;\n }\n\n private notify(): void {\n this.listeners.forEach((l) => {\n l();\n });\n }\n}\n\nexport const processStore = new ProcessStore();\nexport type { ProcessStore };\n"],"names":["processStore","ProcessStore","processes","completedIds","listeners","Set","shouldExit","exitCallback","mode","selectedErrorIndex","subscribe","listener","add","delete","getSnapshot","getRunningProcesses","filter","p","state","getCompletedProcesses","map","id","find","undefined","getFailedProcesses","getRunningCount","length","getDoneCount","getErrorCount","getErrorLineCount","reduce","total","lines","l","type","LineType","stderr","getMode","getSelectedErrorIndex","getShouldExit","getExitCallback","addProcess","process","notify","updateProcess","update","oldProcess","wasRunning","isNowComplete","includes","appendLines","newLines","concat","getProcess","setMode","selectNextError","failed","selectPrevError","getSelectedError","signalExit","callback","reset","forEach"],"mappings":"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"}
|