@shitiandmw/node-pty 1.1.0-agent.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/LICENSE +69 -0
- package/README.md +170 -0
- package/binding.gyp +111 -0
- package/deps/.editorconfig +2 -0
- package/deps/winpty/.drone.yml +17 -0
- package/deps/winpty/.gitattributes +19 -0
- package/deps/winpty/LICENSE +21 -0
- package/deps/winpty/Makefile +166 -0
- package/deps/winpty/README.md +151 -0
- package/deps/winpty/RELEASES.md +280 -0
- package/deps/winpty/VERSION.txt +1 -0
- package/deps/winpty/configure +167 -0
- package/deps/winpty/misc/BufferResizeTests.cc +90 -0
- package/deps/winpty/misc/ChangeScreenBuffer.cc +53 -0
- package/deps/winpty/misc/ClearConsole.cc +72 -0
- package/deps/winpty/misc/ConinMode.cc +117 -0
- package/deps/winpty/misc/ConinMode.ps1 +116 -0
- package/deps/winpty/misc/ConoutMode.cc +113 -0
- package/deps/winpty/misc/DebugClient.py +42 -0
- package/deps/winpty/misc/DebugServer.py +63 -0
- package/deps/winpty/misc/DumpLines.py +5 -0
- package/deps/winpty/misc/EnableExtendedFlags.txt +46 -0
- package/deps/winpty/misc/Font-Report-June2016/CP437-Consolas.txt +528 -0
- package/deps/winpty/misc/Font-Report-June2016/CP437-Lucida.txt +633 -0
- package/deps/winpty/misc/Font-Report-June2016/CP932.txt +630 -0
- package/deps/winpty/misc/Font-Report-June2016/CP936.txt +630 -0
- package/deps/winpty/misc/Font-Report-June2016/CP949.txt +630 -0
- package/deps/winpty/misc/Font-Report-June2016/CP950.txt +630 -0
- package/deps/winpty/misc/Font-Report-June2016/MinimumWindowWidths.txt +16 -0
- package/deps/winpty/misc/Font-Report-June2016/Results.txt +4 -0
- package/deps/winpty/misc/Font-Report-June2016/Windows10SetFontBugginess.txt +144 -0
- package/deps/winpty/misc/FontSurvey.cc +100 -0
- package/deps/winpty/misc/FormatChar.h +21 -0
- package/deps/winpty/misc/FreezePerfTest.cc +62 -0
- package/deps/winpty/misc/GetCh.cc +20 -0
- package/deps/winpty/misc/GetConsolePos.cc +41 -0
- package/deps/winpty/misc/GetFont.cc +261 -0
- package/deps/winpty/misc/IdentifyConsoleWindow.ps1 +51 -0
- package/deps/winpty/misc/IsNewConsole.cc +87 -0
- package/deps/winpty/misc/MouseInputNotes.txt +90 -0
- package/deps/winpty/misc/MoveConsoleWindow.cc +34 -0
- package/deps/winpty/misc/Notes.txt +219 -0
- package/deps/winpty/misc/OSVersion.cc +27 -0
- package/deps/winpty/misc/ScreenBufferFreezeInactive.cc +101 -0
- package/deps/winpty/misc/ScreenBufferTest.cc +671 -0
- package/deps/winpty/misc/ScreenBufferTest2.cc +151 -0
- package/deps/winpty/misc/SelectAllTest.cc +45 -0
- package/deps/winpty/misc/SetBufferSize.cc +32 -0
- package/deps/winpty/misc/SetCursorPos.cc +10 -0
- package/deps/winpty/misc/SetFont.cc +145 -0
- package/deps/winpty/misc/SetWindowRect.cc +36 -0
- package/deps/winpty/misc/ShowArgv.cc +12 -0
- package/deps/winpty/misc/ShowConsoleInput.cc +40 -0
- package/deps/winpty/misc/Spew.py +5 -0
- package/deps/winpty/misc/TestUtil.cc +172 -0
- package/deps/winpty/misc/UnicodeDoubleWidthTest.cc +102 -0
- package/deps/winpty/misc/UnicodeWideTest1.cc +246 -0
- package/deps/winpty/misc/UnicodeWideTest2.cc +130 -0
- package/deps/winpty/misc/UnixEcho.cc +89 -0
- package/deps/winpty/misc/Utf16Echo.cc +46 -0
- package/deps/winpty/misc/VeryLargeRead.cc +122 -0
- package/deps/winpty/misc/VkEscapeTest.cc +56 -0
- package/deps/winpty/misc/Win10ResizeWhileFrozen.cc +52 -0
- package/deps/winpty/misc/Win10WrapTest1.cc +57 -0
- package/deps/winpty/misc/Win10WrapTest2.cc +30 -0
- package/deps/winpty/misc/Win32Echo1.cc +26 -0
- package/deps/winpty/misc/Win32Echo2.cc +19 -0
- package/deps/winpty/misc/Win32Test1.cc +46 -0
- package/deps/winpty/misc/Win32Test2.cc +70 -0
- package/deps/winpty/misc/Win32Test3.cc +78 -0
- package/deps/winpty/misc/Win32Write1.cc +44 -0
- package/deps/winpty/misc/WindowsBugCrashReader.cc +27 -0
- package/deps/winpty/misc/WriteConsole.cc +106 -0
- package/deps/winpty/misc/build32.sh +9 -0
- package/deps/winpty/misc/build64.sh +9 -0
- package/deps/winpty/misc/color-test.sh +212 -0
- package/deps/winpty/misc/font-notes.txt +300 -0
- package/deps/winpty/misc/winbug-15048.cc +201 -0
- package/deps/winpty/ship/build-pty4j-libpty.bat +36 -0
- package/deps/winpty/ship/common_ship.py +53 -0
- package/deps/winpty/ship/make_msvc_package.py +165 -0
- package/deps/winpty/ship/ship.py +108 -0
- package/deps/winpty/src/agent/Agent.cc +613 -0
- package/deps/winpty/src/agent/Agent.h +103 -0
- package/deps/winpty/src/agent/AgentCreateDesktop.cc +84 -0
- package/deps/winpty/src/agent/AgentCreateDesktop.h +28 -0
- package/deps/winpty/src/agent/ConsoleFont.cc +632 -0
- package/deps/winpty/src/agent/ConsoleFont.h +28 -0
- package/deps/winpty/src/agent/ConsoleInput.cc +852 -0
- package/deps/winpty/src/agent/ConsoleInput.h +109 -0
- package/deps/winpty/src/agent/ConsoleInputReencoding.cc +121 -0
- package/deps/winpty/src/agent/ConsoleInputReencoding.h +36 -0
- package/deps/winpty/src/agent/ConsoleLine.cc +152 -0
- package/deps/winpty/src/agent/ConsoleLine.h +41 -0
- package/deps/winpty/src/agent/Coord.h +87 -0
- package/deps/winpty/src/agent/DebugShowInput.cc +239 -0
- package/deps/winpty/src/agent/DebugShowInput.h +32 -0
- package/deps/winpty/src/agent/DefaultInputMap.cc +422 -0
- package/deps/winpty/src/agent/DefaultInputMap.h +28 -0
- package/deps/winpty/src/agent/DsrSender.h +30 -0
- package/deps/winpty/src/agent/EventLoop.cc +99 -0
- package/deps/winpty/src/agent/EventLoop.h +47 -0
- package/deps/winpty/src/agent/InputMap.cc +246 -0
- package/deps/winpty/src/agent/InputMap.h +114 -0
- package/deps/winpty/src/agent/LargeConsoleRead.cc +71 -0
- package/deps/winpty/src/agent/LargeConsoleRead.h +68 -0
- package/deps/winpty/src/agent/NamedPipe.cc +378 -0
- package/deps/winpty/src/agent/NamedPipe.h +125 -0
- package/deps/winpty/src/agent/Scraper.cc +699 -0
- package/deps/winpty/src/agent/Scraper.h +103 -0
- package/deps/winpty/src/agent/SimplePool.h +75 -0
- package/deps/winpty/src/agent/SmallRect.h +143 -0
- package/deps/winpty/src/agent/Terminal.cc +535 -0
- package/deps/winpty/src/agent/Terminal.h +69 -0
- package/deps/winpty/src/agent/UnicodeEncoding.h +157 -0
- package/deps/winpty/src/agent/UnicodeEncodingTest.cc +189 -0
- package/deps/winpty/src/agent/Win32Console.cc +107 -0
- package/deps/winpty/src/agent/Win32Console.h +67 -0
- package/deps/winpty/src/agent/Win32ConsoleBuffer.cc +193 -0
- package/deps/winpty/src/agent/Win32ConsoleBuffer.h +99 -0
- package/deps/winpty/src/agent/main.cc +114 -0
- package/deps/winpty/src/agent/subdir.mk +61 -0
- package/deps/winpty/src/configurations.gypi +60 -0
- package/deps/winpty/src/debugserver/DebugServer.cc +117 -0
- package/deps/winpty/src/debugserver/subdir.mk +41 -0
- package/deps/winpty/src/include/winpty.h +242 -0
- package/deps/winpty/src/include/winpty_constants.h +131 -0
- package/deps/winpty/src/libwinpty/AgentLocation.cc +75 -0
- package/deps/winpty/src/libwinpty/AgentLocation.h +28 -0
- package/deps/winpty/src/libwinpty/LibWinptyException.h +54 -0
- package/deps/winpty/src/libwinpty/WinptyInternal.h +72 -0
- package/deps/winpty/src/libwinpty/subdir.mk +46 -0
- package/deps/winpty/src/libwinpty/winpty.cc +970 -0
- package/deps/winpty/src/shared/AgentMsg.h +38 -0
- package/deps/winpty/src/shared/BackgroundDesktop.cc +122 -0
- package/deps/winpty/src/shared/BackgroundDesktop.h +73 -0
- package/deps/winpty/src/shared/Buffer.cc +103 -0
- package/deps/winpty/src/shared/Buffer.h +102 -0
- package/deps/winpty/src/shared/DebugClient.cc +187 -0
- package/deps/winpty/src/shared/DebugClient.h +38 -0
- package/deps/winpty/src/shared/GenRandom.cc +138 -0
- package/deps/winpty/src/shared/GenRandom.h +55 -0
- package/deps/winpty/src/shared/GetCommitHash.bat +13 -0
- package/deps/winpty/src/shared/Mutex.h +54 -0
- package/deps/winpty/src/shared/OsModule.h +63 -0
- package/deps/winpty/src/shared/OwnedHandle.cc +36 -0
- package/deps/winpty/src/shared/OwnedHandle.h +45 -0
- package/deps/winpty/src/shared/PrecompiledHeader.h +43 -0
- package/deps/winpty/src/shared/StringBuilder.h +227 -0
- package/deps/winpty/src/shared/StringBuilderTest.cc +114 -0
- package/deps/winpty/src/shared/StringUtil.cc +55 -0
- package/deps/winpty/src/shared/StringUtil.h +80 -0
- package/deps/winpty/src/shared/TimeMeasurement.h +63 -0
- package/deps/winpty/src/shared/UnixCtrlChars.h +45 -0
- package/deps/winpty/src/shared/UpdateGenVersion.bat +20 -0
- package/deps/winpty/src/shared/WindowsSecurity.cc +460 -0
- package/deps/winpty/src/shared/WindowsSecurity.h +104 -0
- package/deps/winpty/src/shared/WindowsVersion.cc +252 -0
- package/deps/winpty/src/shared/WindowsVersion.h +29 -0
- package/deps/winpty/src/shared/WinptyAssert.cc +55 -0
- package/deps/winpty/src/shared/WinptyAssert.h +64 -0
- package/deps/winpty/src/shared/WinptyException.cc +57 -0
- package/deps/winpty/src/shared/WinptyException.h +43 -0
- package/deps/winpty/src/shared/WinptyVersion.cc +42 -0
- package/deps/winpty/src/shared/WinptyVersion.h +27 -0
- package/deps/winpty/src/shared/winpty_snprintf.h +99 -0
- package/deps/winpty/src/subdir.mk +5 -0
- package/deps/winpty/src/tests/subdir.mk +28 -0
- package/deps/winpty/src/tests/trivial_test.cc +158 -0
- package/deps/winpty/src/unix-adapter/InputHandler.cc +114 -0
- package/deps/winpty/src/unix-adapter/InputHandler.h +56 -0
- package/deps/winpty/src/unix-adapter/OutputHandler.cc +80 -0
- package/deps/winpty/src/unix-adapter/OutputHandler.h +53 -0
- package/deps/winpty/src/unix-adapter/Util.cc +86 -0
- package/deps/winpty/src/unix-adapter/Util.h +31 -0
- package/deps/winpty/src/unix-adapter/WakeupFd.cc +70 -0
- package/deps/winpty/src/unix-adapter/WakeupFd.h +42 -0
- package/deps/winpty/src/unix-adapter/main.cc +729 -0
- package/deps/winpty/src/unix-adapter/subdir.mk +41 -0
- package/deps/winpty/src/winpty.gyp +234 -0
- package/deps/winpty/vcbuild.bat +83 -0
- package/lib/conpty_console_list_agent.js +16 -0
- package/lib/conpty_console_list_agent.js.map +1 -0
- package/lib/eventEmitter2.js +47 -0
- package/lib/eventEmitter2.js.map +1 -0
- package/lib/eventEmitter2.test.js +30 -0
- package/lib/eventEmitter2.test.js.map +1 -0
- package/lib/index.js +52 -0
- package/lib/index.js.map +1 -0
- package/lib/interfaces.js +7 -0
- package/lib/interfaces.js.map +1 -0
- package/lib/shared/conout.js +11 -0
- package/lib/shared/conout.js.map +1 -0
- package/lib/terminal.js +190 -0
- package/lib/terminal.js.map +1 -0
- package/lib/terminal.test.js +139 -0
- package/lib/terminal.test.js.map +1 -0
- package/lib/testUtils.test.js +28 -0
- package/lib/testUtils.test.js.map +1 -0
- package/lib/types.js +7 -0
- package/lib/types.js.map +1 -0
- package/lib/unixTerminal.js +346 -0
- package/lib/unixTerminal.js.map +1 -0
- package/lib/unixTerminal.test.js +351 -0
- package/lib/unixTerminal.test.js.map +1 -0
- package/lib/utils.js +39 -0
- package/lib/utils.js.map +1 -0
- package/lib/windowsConoutConnection.js +125 -0
- package/lib/windowsConoutConnection.js.map +1 -0
- package/lib/windowsPtyAgent.js +320 -0
- package/lib/windowsPtyAgent.js.map +1 -0
- package/lib/windowsPtyAgent.test.js +90 -0
- package/lib/windowsPtyAgent.test.js.map +1 -0
- package/lib/windowsTerminal.js +199 -0
- package/lib/windowsTerminal.js.map +1 -0
- package/lib/windowsTerminal.test.js +219 -0
- package/lib/windowsTerminal.test.js.map +1 -0
- package/lib/worker/conoutSocketWorker.js +22 -0
- package/lib/worker/conoutSocketWorker.js.map +1 -0
- package/package.json +68 -0
- package/prebuilds/darwin-arm64/pty.node +0 -0
- package/prebuilds/darwin-arm64/spawn-helper +0 -0
- package/prebuilds/darwin-x64/pty.node +0 -0
- package/prebuilds/darwin-x64/spawn-helper +0 -0
- package/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
- package/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
- package/prebuilds/win32-arm64/conpty.node +0 -0
- package/prebuilds/win32-arm64/conpty.pdb +0 -0
- package/prebuilds/win32-arm64/conpty_console_list.node +0 -0
- package/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
- package/prebuilds/win32-arm64/pty.node +0 -0
- package/prebuilds/win32-arm64/pty.pdb +0 -0
- package/prebuilds/win32-arm64/winpty-agent.exe +0 -0
- package/prebuilds/win32-arm64/winpty-agent.pdb +0 -0
- package/prebuilds/win32-arm64/winpty.dll +0 -0
- package/prebuilds/win32-arm64/winpty.pdb +0 -0
- package/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
- package/prebuilds/win32-x64/conpty/conpty.dll +0 -0
- package/prebuilds/win32-x64/conpty.node +0 -0
- package/prebuilds/win32-x64/conpty.pdb +0 -0
- package/prebuilds/win32-x64/conpty_console_list.node +0 -0
- package/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
- package/prebuilds/win32-x64/pty.node +0 -0
- package/prebuilds/win32-x64/pty.pdb +0 -0
- package/prebuilds/win32-x64/winpty-agent.exe +0 -0
- package/prebuilds/win32-x64/winpty-agent.pdb +0 -0
- package/prebuilds/win32-x64/winpty.dll +0 -0
- package/prebuilds/win32-x64/winpty.pdb +0 -0
- package/scripts/gen-compile-commands.js +8 -0
- package/scripts/increment-version.js +54 -0
- package/scripts/post-install.js +99 -0
- package/scripts/prebuild.js +39 -0
- package/scripts/sync-prebuild.js +31 -0
- package/scripts/verify-darwin-fd-leak.js +63 -0
- package/src/conpty_console_list_agent.ts +15 -0
- package/src/eventEmitter2.test.ts +30 -0
- package/src/eventEmitter2.ts +48 -0
- package/src/index.ts +52 -0
- package/src/interfaces.ts +130 -0
- package/src/native.d.ts +54 -0
- package/src/shared/conout.ts +15 -0
- package/src/terminal.test.ts +119 -0
- package/src/terminal.ts +211 -0
- package/src/testUtils.test.ts +23 -0
- package/src/tsconfig.json +22 -0
- package/src/types.ts +15 -0
- package/src/unix/pty.cc +808 -0
- package/src/unix/spawn-helper.cc +23 -0
- package/src/unixTerminal.test.ts +367 -0
- package/src/unixTerminal.ts +388 -0
- package/src/utils.ts +29 -0
- package/src/win/conpty.cc +583 -0
- package/src/win/conpty.h +41 -0
- package/src/win/conpty_console_list.cc +44 -0
- package/src/win/path_util.cc +95 -0
- package/src/win/path_util.h +26 -0
- package/src/win/winpty.cc +333 -0
- package/src/windowsConoutConnection.ts +82 -0
- package/src/windowsPtyAgent.test.ts +94 -0
- package/src/windowsPtyAgent.ts +321 -0
- package/src/windowsTerminal.test.ts +229 -0
- package/src/windowsTerminal.ts +203 -0
- package/src/worker/conoutSocketWorker.ts +22 -0
- package/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
- package/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
- package/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
- package/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
- package/typings/node-pty.d.ts +211 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2017, Daniel Imms (MIT License).
|
|
4
|
+
* Copyright (c) 2018, Microsoft Corporation (MIT License).
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
var fs = require("fs");
|
|
8
|
+
var assert = require("assert");
|
|
9
|
+
var windowsTerminal_1 = require("./windowsTerminal");
|
|
10
|
+
var path = require("path");
|
|
11
|
+
var psList = require("ps-list");
|
|
12
|
+
function pollForProcessState(desiredState, intervalMs, timeoutMs) {
|
|
13
|
+
if (intervalMs === void 0) { intervalMs = 100; }
|
|
14
|
+
if (timeoutMs === void 0) { timeoutMs = 2000; }
|
|
15
|
+
return new Promise(function (resolve) {
|
|
16
|
+
var tries = 0;
|
|
17
|
+
var interval = setInterval(function () {
|
|
18
|
+
psList({ all: true }).then(function (ps) {
|
|
19
|
+
var success = true;
|
|
20
|
+
var pids = Object.keys(desiredState).map(function (k) { return parseInt(k, 10); });
|
|
21
|
+
console.log('expected pids', JSON.stringify(pids));
|
|
22
|
+
pids.forEach(function (pid) {
|
|
23
|
+
if (desiredState[pid]) {
|
|
24
|
+
if (!ps.some(function (p) { return p.pid === pid; })) {
|
|
25
|
+
console.log("pid " + pid + " does not exist");
|
|
26
|
+
success = false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
if (ps.some(function (p) { return p.pid === pid; })) {
|
|
31
|
+
console.log("pid " + pid + " still exists");
|
|
32
|
+
success = false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
if (success) {
|
|
37
|
+
clearInterval(interval);
|
|
38
|
+
resolve();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
tries++;
|
|
42
|
+
if (tries * intervalMs >= timeoutMs) {
|
|
43
|
+
clearInterval(interval);
|
|
44
|
+
var processListing = pids.map(function (k) { return k + ": " + desiredState[k]; }).join('\n');
|
|
45
|
+
assert.fail("Bad process state, expected:\n" + processListing);
|
|
46
|
+
resolve();
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}, intervalMs);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function pollForProcessTreeSize(pid, size, intervalMs, timeoutMs) {
|
|
53
|
+
if (intervalMs === void 0) { intervalMs = 100; }
|
|
54
|
+
if (timeoutMs === void 0) { timeoutMs = 2000; }
|
|
55
|
+
return new Promise(function (resolve) {
|
|
56
|
+
var tries = 0;
|
|
57
|
+
var interval = setInterval(function () {
|
|
58
|
+
psList({ all: true }).then(function (ps) {
|
|
59
|
+
var openList = [];
|
|
60
|
+
openList.push(ps.filter(function (p) { return p.pid === pid; }).map(function (p) {
|
|
61
|
+
return { name: p.name, pid: p.pid };
|
|
62
|
+
})[0]);
|
|
63
|
+
var list = [];
|
|
64
|
+
var _loop_1 = function () {
|
|
65
|
+
var current = openList.shift();
|
|
66
|
+
ps.filter(function (p) { return p.ppid === current.pid; }).map(function (p) {
|
|
67
|
+
return { name: p.name, pid: p.pid };
|
|
68
|
+
}).forEach(function (p) { return openList.push(p); });
|
|
69
|
+
list.push(current);
|
|
70
|
+
};
|
|
71
|
+
while (openList.length) {
|
|
72
|
+
_loop_1();
|
|
73
|
+
}
|
|
74
|
+
console.log('list', JSON.stringify(list));
|
|
75
|
+
var success = list.length === size;
|
|
76
|
+
if (success) {
|
|
77
|
+
clearInterval(interval);
|
|
78
|
+
resolve(list);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
tries++;
|
|
82
|
+
if (tries * intervalMs >= timeoutMs) {
|
|
83
|
+
clearInterval(interval);
|
|
84
|
+
assert.fail("Bad process state, expected: " + size + ", actual: " + list.length);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}, intervalMs);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (process.platform === 'win32') {
|
|
91
|
+
[[false, false], [true, false], [true, true]].forEach(function (_a) {
|
|
92
|
+
var useConpty = _a[0], useConptyDll = _a[1];
|
|
93
|
+
describe("WindowsTerminal (useConpty = " + useConpty + ", useConptyDll = " + useConptyDll + ")", function () {
|
|
94
|
+
describe('kill', function () {
|
|
95
|
+
it('should not crash parent process', function (done) {
|
|
96
|
+
this.timeout(20000);
|
|
97
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
98
|
+
term.on('exit', function () { return done(); });
|
|
99
|
+
term.kill();
|
|
100
|
+
});
|
|
101
|
+
it('should kill the process tree', function (done) {
|
|
102
|
+
this.timeout(20000);
|
|
103
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
104
|
+
// Start sub-processes
|
|
105
|
+
term.write('powershell.exe\r');
|
|
106
|
+
term.write('node.exe\r');
|
|
107
|
+
console.log('start poll for tree size');
|
|
108
|
+
pollForProcessTreeSize(term.pid, 3, 500, 5000).then(function (list) {
|
|
109
|
+
assert.strictEqual(list[0].name.toLowerCase(), 'cmd.exe');
|
|
110
|
+
assert.strictEqual(list[1].name.toLowerCase(), 'powershell.exe');
|
|
111
|
+
assert.strictEqual(list[2].name.toLowerCase(), 'node.exe');
|
|
112
|
+
term.kill();
|
|
113
|
+
var desiredState = {};
|
|
114
|
+
desiredState[list[0].pid] = false;
|
|
115
|
+
desiredState[list[1].pid] = false;
|
|
116
|
+
desiredState[list[2].pid] = false;
|
|
117
|
+
term.on('exit', function () {
|
|
118
|
+
pollForProcessState(desiredState, 1000, 5000).then(function () {
|
|
119
|
+
done();
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('resize', function () {
|
|
126
|
+
it('should throw a non-native exception when resizing an invalid value', function (done) {
|
|
127
|
+
this.timeout(20000);
|
|
128
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
129
|
+
assert.throws(function () { return term.resize(-1, -1); });
|
|
130
|
+
assert.throws(function () { return term.resize(0, 0); });
|
|
131
|
+
assert.doesNotThrow(function () { return term.resize(1, 1); });
|
|
132
|
+
term.on('exit', function () {
|
|
133
|
+
done();
|
|
134
|
+
});
|
|
135
|
+
term.kill();
|
|
136
|
+
});
|
|
137
|
+
it('should throw a non-native exception when resizing a killed terminal', function (done) {
|
|
138
|
+
this.timeout(20000);
|
|
139
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
140
|
+
term._defer(function () {
|
|
141
|
+
term.once('exit', function () {
|
|
142
|
+
assert.throws(function () { return term.resize(1, 1); });
|
|
143
|
+
done();
|
|
144
|
+
});
|
|
145
|
+
term.destroy();
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
describe('Args as CommandLine', function () {
|
|
150
|
+
it('should not fail running a file containing a space in the path', function (done) {
|
|
151
|
+
this.timeout(10000);
|
|
152
|
+
var spaceFolder = path.resolve(__dirname, '..', 'fixtures', 'space folder');
|
|
153
|
+
if (!fs.existsSync(spaceFolder)) {
|
|
154
|
+
fs.mkdirSync(spaceFolder);
|
|
155
|
+
}
|
|
156
|
+
var cmdCopiedPath = path.resolve(spaceFolder, 'cmd.exe');
|
|
157
|
+
var data = fs.readFileSync(process.env.windir + "\\System32\\cmd.exe");
|
|
158
|
+
fs.writeFileSync(cmdCopiedPath, data);
|
|
159
|
+
if (!fs.existsSync(cmdCopiedPath)) {
|
|
160
|
+
// Skip test if git bash isn't installed
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
var term = new windowsTerminal_1.WindowsTerminal(cmdCopiedPath, '/c echo "hello world"', { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
164
|
+
var result = '';
|
|
165
|
+
term.on('data', function (data) {
|
|
166
|
+
result += data;
|
|
167
|
+
});
|
|
168
|
+
term.on('exit', function () {
|
|
169
|
+
assert.ok(result.indexOf('hello world') >= 1);
|
|
170
|
+
done();
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
describe('env', function () {
|
|
175
|
+
it('should set environment variables of the shell', function (done) {
|
|
176
|
+
this.timeout(10000);
|
|
177
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', '/C echo %FOO%', { useConpty: useConpty, useConptyDll: useConptyDll, env: { FOO: 'BAR' } });
|
|
178
|
+
var result = '';
|
|
179
|
+
term.on('data', function (data) {
|
|
180
|
+
result += data;
|
|
181
|
+
});
|
|
182
|
+
term.on('exit', function () {
|
|
183
|
+
assert.ok(result.indexOf('BAR') >= 0);
|
|
184
|
+
done();
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
describe('On close', function () {
|
|
189
|
+
it('should return process zero exit codes', function (done) {
|
|
190
|
+
this.timeout(10000);
|
|
191
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', '/C exit', { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
192
|
+
term.on('exit', function (code) {
|
|
193
|
+
assert.strictEqual(code, 0);
|
|
194
|
+
done();
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
it('should return process non-zero exit codes', function (done) {
|
|
198
|
+
this.timeout(10000);
|
|
199
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', '/C exit 2', { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
200
|
+
term.on('exit', function (code) {
|
|
201
|
+
assert.strictEqual(code, 2);
|
|
202
|
+
done();
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
describe('Write', function () {
|
|
207
|
+
it('should accept input', function (done) {
|
|
208
|
+
this.timeout(10000);
|
|
209
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', '', { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
210
|
+
term.write('exit\r');
|
|
211
|
+
term.on('exit', function () {
|
|
212
|
+
done();
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=windowsTerminal.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windowsTerminal.test.js","sourceRoot":"","sources":["../src/windowsTerminal.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2020, Microsoft Corporation (MIT License).
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var worker_threads_1 = require("worker_threads");
|
|
7
|
+
var net_1 = require("net");
|
|
8
|
+
var conout_1 = require("../shared/conout");
|
|
9
|
+
var conoutPipeName = worker_threads_1.workerData.conoutPipeName;
|
|
10
|
+
var conoutSocket = new net_1.Socket();
|
|
11
|
+
conoutSocket.setEncoding('utf8');
|
|
12
|
+
conoutSocket.connect(conoutPipeName, function () {
|
|
13
|
+
var server = net_1.createServer(function (workerSocket) {
|
|
14
|
+
conoutSocket.pipe(workerSocket);
|
|
15
|
+
});
|
|
16
|
+
server.listen(conout_1.getWorkerPipeName(conoutPipeName));
|
|
17
|
+
if (!worker_threads_1.parentPort) {
|
|
18
|
+
throw new Error('worker_threads parentPort is null');
|
|
19
|
+
}
|
|
20
|
+
worker_threads_1.parentPort.postMessage(1 /* READY */);
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=conoutSocketWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conoutSocketWorker.js","sourceRoot":"","sources":["../../src/worker/conoutSocketWorker.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,iDAAwD;AACxD,2BAA2C;AAC3C,2CAAuF;AAE/E,IAAA,cAAc,GAAM,2BAA0B,eAAhC,CAAiC;AAEvD,IAAM,YAAY,GAAG,IAAI,YAAM,EAAE,CAAC;AAClC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE;IACnC,IAAM,MAAM,GAAG,kBAAY,CAAC,UAAA,YAAY;QACtC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,0BAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,2BAAU,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;KACtD;IACD,2BAAU,CAAC,WAAW,eAA2B,CAAC;AACpD,CAAC,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@shitiandmw/node-pty",
|
|
3
|
+
"description": "Agent Tower maintained node-pty fork with darwin fd leak fixes",
|
|
4
|
+
"author": {
|
|
5
|
+
"name": "Agent Tower"
|
|
6
|
+
},
|
|
7
|
+
"version": "1.1.0-agent.0",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"main": "./lib/index.js",
|
|
10
|
+
"types": "./typings/node-pty.d.ts",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/agent-tower/core.git",
|
|
14
|
+
"directory": "packages/node-pty"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"binding.gyp",
|
|
18
|
+
"lib/",
|
|
19
|
+
"scripts/",
|
|
20
|
+
"src/",
|
|
21
|
+
"deps/",
|
|
22
|
+
"prebuilds/",
|
|
23
|
+
"third_party/",
|
|
24
|
+
"typings/"
|
|
25
|
+
],
|
|
26
|
+
"homepage": "https://github.com/agent-tower/core/tree/main/packages/node-pty",
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/agent-tower/core/issues"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"pty",
|
|
32
|
+
"tty",
|
|
33
|
+
"terminal",
|
|
34
|
+
"pseudoterminal",
|
|
35
|
+
"forkpty",
|
|
36
|
+
"openpty"
|
|
37
|
+
],
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"node-addon-api": "^7.1.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/mocha": "^7.0.2",
|
|
46
|
+
"@types/node": "12",
|
|
47
|
+
"@typescript-eslint/eslint-plugin": "^2.27.0",
|
|
48
|
+
"@typescript-eslint/parser": "^2.27.0",
|
|
49
|
+
"cross-env": "^5.1.4",
|
|
50
|
+
"eslint": "^6.8.0",
|
|
51
|
+
"mocha": "10",
|
|
52
|
+
"node-gyp": "^11.4.2",
|
|
53
|
+
"ps-list": "^6.0.0",
|
|
54
|
+
"typescript": "^3.8.3"
|
|
55
|
+
},
|
|
56
|
+
"scripts": {
|
|
57
|
+
"build": "tsc -b ./src/tsconfig.json",
|
|
58
|
+
"build:prebuild:darwin-arm64": "node-gyp rebuild && node scripts/sync-prebuild.js darwin-arm64",
|
|
59
|
+
"watch": "tsc -b -w ./src/tsconfig.json",
|
|
60
|
+
"lint": "eslint -c .eslintrc.js --ext .ts src/",
|
|
61
|
+
"install": "node scripts/prebuild.js || node-gyp rebuild",
|
|
62
|
+
"postinstall": "node scripts/post-install.js",
|
|
63
|
+
"compileCommands": "node scripts/gen-compile-commands.js",
|
|
64
|
+
"verify:darwin-fd-leak": "node scripts/verify-darwin-fd-leak.js",
|
|
65
|
+
"test": "cross-env NODE_ENV=test mocha -R spec --exit lib/*.test.js",
|
|
66
|
+
"posttest": "npm run lint"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025, Microsoft Corporation (MIT License).
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const { execSync } = require('child_process');
|
|
6
|
+
|
|
7
|
+
console.log(`\x1b[32m> Generating compile_commands.json...\x1b[0m`);
|
|
8
|
+
execSync('npx --offline node-gyp configure -- -f compile_commands_json');
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2019, Microsoft Corporation (MIT License).
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const cp = require('child_process');
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
const packageJson = require('../package.json');
|
|
9
|
+
|
|
10
|
+
// Determine if this is a stable or beta release
|
|
11
|
+
const publishedVersions = getPublishedVersions();
|
|
12
|
+
const isStableRelease = !publishedVersions.includes(packageJson.version);
|
|
13
|
+
|
|
14
|
+
// Get the next version
|
|
15
|
+
const nextVersion = isStableRelease ? packageJson.version : getNextBetaVersion();
|
|
16
|
+
console.log(`Setting version to ${nextVersion}`);
|
|
17
|
+
|
|
18
|
+
// Set the version in package.json
|
|
19
|
+
const packageJsonFile = path.resolve(__dirname, '..', 'package.json');
|
|
20
|
+
packageJson.version = nextVersion;
|
|
21
|
+
fs.writeFileSync(packageJsonFile, JSON.stringify(packageJson, null, 2));
|
|
22
|
+
|
|
23
|
+
function getNextBetaVersion() {
|
|
24
|
+
if (!/^[0-9]+\.[0-9]+\.[0-9]+$/.exec(packageJson.version)) {
|
|
25
|
+
console.error('The package.json version must be of the form x.y.z');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const tag = 'beta';
|
|
29
|
+
const stableVersion = packageJson.version.split('.');
|
|
30
|
+
const nextStableVersion = `${stableVersion[0]}.${parseInt(stableVersion[1]) + 1}.0`;
|
|
31
|
+
const publishedVersions = getPublishedVersions(nextStableVersion, tag);
|
|
32
|
+
if (publishedVersions.length === 0) {
|
|
33
|
+
return `${nextStableVersion}-${tag}1`;
|
|
34
|
+
}
|
|
35
|
+
const latestPublishedVersion = publishedVersions.sort((a, b) => {
|
|
36
|
+
const aVersion = parseInt(a.substr(a.search(/[0-9]+$/)));
|
|
37
|
+
const bVersion = parseInt(b.substr(b.search(/[0-9]+$/)));
|
|
38
|
+
return aVersion > bVersion ? -1 : 1;
|
|
39
|
+
})[0];
|
|
40
|
+
const latestTagVersion = parseInt(latestPublishedVersion.substr(latestPublishedVersion.search(/[0-9]+$/)), 10);
|
|
41
|
+
return `${nextStableVersion}-${tag}${latestTagVersion + 1}`;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function getPublishedVersions(version, tag) {
|
|
45
|
+
const isWin32 = process.platform === 'win32';
|
|
46
|
+
const versionsProcess = isWin32 ?
|
|
47
|
+
cp.spawnSync('npm.cmd', ['view', packageJson.name, 'versions', '--json'], { shell: true }) :
|
|
48
|
+
cp.spawnSync('npm', ['view', packageJson.name, 'versions', '--json']);
|
|
49
|
+
const versionsJson = JSON.parse(versionsProcess.stdout);
|
|
50
|
+
if (tag) {
|
|
51
|
+
return versionsJson.filter(v => !v.search(new RegExp(`${version}-${tag}[0-9]+`)));
|
|
52
|
+
}
|
|
53
|
+
return versionsJson;
|
|
54
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
//@ts-check
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const os = require('os');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
|
|
7
|
+
const RELEASE_DIR = path.join(__dirname, '../build/Release');
|
|
8
|
+
const BUILD_FILES = [
|
|
9
|
+
path.join(RELEASE_DIR, 'conpty.node'),
|
|
10
|
+
path.join(RELEASE_DIR, 'conpty.pdb'),
|
|
11
|
+
path.join(RELEASE_DIR, 'conpty_console_list.node'),
|
|
12
|
+
path.join(RELEASE_DIR, 'conpty_console_list.pdb'),
|
|
13
|
+
path.join(RELEASE_DIR, 'pty.node'),
|
|
14
|
+
path.join(RELEASE_DIR, 'pty.pdb'),
|
|
15
|
+
path.join(RELEASE_DIR, 'spawn-helper'),
|
|
16
|
+
path.join(RELEASE_DIR, 'winpty-agent.exe'),
|
|
17
|
+
path.join(RELEASE_DIR, 'winpty-agent.pdb'),
|
|
18
|
+
path.join(RELEASE_DIR, 'winpty.dll'),
|
|
19
|
+
path.join(RELEASE_DIR, 'winpty.pdb')
|
|
20
|
+
];
|
|
21
|
+
const CONPTY_DIR = path.join(__dirname, '../third_party/conpty');
|
|
22
|
+
const CONPTY_SUPPORTED_ARCH = ['x64', 'arm64'];
|
|
23
|
+
|
|
24
|
+
console.log('\x1b[32m> Cleaning release folder...\x1b[0m');
|
|
25
|
+
|
|
26
|
+
/** @param {string} file */
|
|
27
|
+
function ensureExecutable(file) {
|
|
28
|
+
if (!fs.existsSync(file)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const mode = fs.statSync(file).mode & 0o777;
|
|
32
|
+
if ((mode & 0o111) !== 0) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
fs.chmodSync(file, 0o755);
|
|
36
|
+
console.log(` Marked executable: ${file}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** @param {string} folder */
|
|
40
|
+
function cleanFolderRecursive(folder) {
|
|
41
|
+
var files = [];
|
|
42
|
+
if (fs.existsSync(folder)) {
|
|
43
|
+
files = fs.readdirSync(folder);
|
|
44
|
+
files.forEach(function(file,index) {
|
|
45
|
+
var curPath = path.join(folder, file);
|
|
46
|
+
if (fs.lstatSync(curPath).isDirectory()) { // recurse
|
|
47
|
+
cleanFolderRecursive(curPath);
|
|
48
|
+
fs.rmdirSync(curPath);
|
|
49
|
+
} else if (BUILD_FILES.indexOf(curPath) < 0){ // delete file
|
|
50
|
+
fs.unlinkSync(curPath);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
try {
|
|
57
|
+
cleanFolderRecursive(RELEASE_DIR);
|
|
58
|
+
} catch(e) {
|
|
59
|
+
console.log(e);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
console.log(`\x1b[32m> Moving conpty.dll...\x1b[0m`);
|
|
64
|
+
if (os.platform() !== 'win32') {
|
|
65
|
+
console.log(' SKIPPED (not Windows)');
|
|
66
|
+
} else {
|
|
67
|
+
let windowsArch;
|
|
68
|
+
if (process.env.npm_config_arch) {
|
|
69
|
+
windowsArch = process.env.npm_config_arch;
|
|
70
|
+
console.log(` Using $npm_config_arch: ${windowsArch}`);
|
|
71
|
+
} else {
|
|
72
|
+
windowsArch = os.arch();
|
|
73
|
+
console.log(` Using os.arch(): ${windowsArch}`);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (!CONPTY_SUPPORTED_ARCH.includes(windowsArch)) {
|
|
77
|
+
console.log(` SKIPPED (unsupported architecture ${windowsArch})`);
|
|
78
|
+
} else {
|
|
79
|
+
const versionFolder = fs.readdirSync(CONPTY_DIR)[0];
|
|
80
|
+
console.log(` Found version ${versionFolder}`);
|
|
81
|
+
const sourceFolder = path.join(CONPTY_DIR, versionFolder, `win10-${windowsArch}`);
|
|
82
|
+
const destFolder = path.join(RELEASE_DIR, 'conpty');
|
|
83
|
+
fs.mkdirSync(destFolder, { recursive: true });
|
|
84
|
+
for (const file of ['conpty.dll', 'OpenConsole.exe']) {
|
|
85
|
+
const sourceFile = path.join(sourceFolder, file);
|
|
86
|
+
const destFile = path.join(destFolder, file);
|
|
87
|
+
console.log(` Copying ${sourceFile} -> ${destFile}`);
|
|
88
|
+
fs.copyFileSync(sourceFile, destFile);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (os.platform() === 'darwin') {
|
|
94
|
+
console.log(`\x1b[32m> Verifying spawn-helper permissions...\x1b[0m`);
|
|
95
|
+
ensureExecutable(path.join(RELEASE_DIR, 'spawn-helper'));
|
|
96
|
+
ensureExecutable(path.join(__dirname, '..', 'prebuilds', `darwin-${os.arch()}`, 'spawn-helper'));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
process.exit(0);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//@ts-check
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This script checks for the prebuilt binaries for the current platform and
|
|
8
|
+
* architecture. It exits with 0 if prebuilds are found and 1 if not.
|
|
9
|
+
*
|
|
10
|
+
* If npm_config_build_from_source is set then it removes the prebuilds for the
|
|
11
|
+
* current platform so they are not loaded at runtime.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* node scripts/prebuild.js
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const PREBUILDS_ROOT = path.join(__dirname, '..', 'prebuilds');
|
|
18
|
+
const PREBUILD_DIR = path.join(__dirname, '..', 'prebuilds', `${process.platform}-${process.arch}`);
|
|
19
|
+
|
|
20
|
+
if (process.platform === 'darwin' && process.arch === 'x64') {
|
|
21
|
+
console.log('\x1b[33m> Rebuilding because darwin-x64 prebuilds are intentionally disabled until a patched binary is published\x1b[0m');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Do not use prebuilds when npm_config_build_from_source is set
|
|
26
|
+
if (process.env.npm_config_build_from_source === 'true') {
|
|
27
|
+
console.log('\x1b[33m> Removing prebuilds and rebuilding because npm_config_build_from_source is set\x1b[0m');
|
|
28
|
+
fs.rmSync(PREBUILDS_ROOT, { recursive: true, force: true });
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Check whether the correct prebuilt files exist
|
|
33
|
+
console.log('\x1b[32m> Checking prebuilds...\x1b[0m');
|
|
34
|
+
if (!fs.existsSync(PREBUILD_DIR)) {
|
|
35
|
+
console.log(`\x1b[33m> Rebuilding because directory ${PREBUILD_DIR} does not exist\x1b[0m`);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
process.exit(0);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//@ts-check
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
const target = process.argv[2];
|
|
7
|
+
|
|
8
|
+
if (!target) {
|
|
9
|
+
console.error('Usage: node scripts/sync-prebuild.js <platform-arch>');
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const releaseDir = path.join(__dirname, '..', 'build', 'Release');
|
|
14
|
+
const destDir = path.join(__dirname, '..', 'prebuilds', target);
|
|
15
|
+
const artifacts = ['pty.node', 'spawn-helper'];
|
|
16
|
+
|
|
17
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
18
|
+
|
|
19
|
+
for (const artifact of artifacts) {
|
|
20
|
+
const src = path.join(releaseDir, artifact);
|
|
21
|
+
if (!fs.existsSync(src)) {
|
|
22
|
+
console.error(`Missing build artifact: ${src}`);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const dest = path.join(destDir, artifact);
|
|
26
|
+
fs.copyFileSync(src, dest);
|
|
27
|
+
if (artifact === 'spawn-helper') {
|
|
28
|
+
fs.chmodSync(dest, 0o755);
|
|
29
|
+
}
|
|
30
|
+
console.log(`Copied ${artifact} -> ${dest}`);
|
|
31
|
+
}
|