Socket
Socket
Sign inDemoInstall

node-pty

Package Overview
Dependencies
Maintainers
3
Versions
164
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-pty - npm Package Compare versions

Comparing version 0.8.0 to 0.8.1

lib/conpty_console_list_agent.js

0

deps/winpty/misc/EnableExtendedFlags.txt

@@ -0,0 +0,0 @@ Note regarding ENABLE_EXTENDED_FLAGS (2016-05-30)

@@ -0,0 +0,0 @@ ==================================================================

@@ -0,0 +0,0 @@ ==================================

@@ -0,0 +0,0 @@ ==================================

@@ -0,0 +0,0 @@ =======================================

@@ -0,0 +0,0 @@ ==========================================================

@@ -0,0 +0,0 @@ =====================================

@@ -0,0 +0,0 @@ ===========================================================

@@ -0,0 +0,0 @@ The narrowest allowed console window, in pixels, on a conventional (~96dpi)

@@ -0,0 +0,0 @@ As before, avoid odd sizes in favor of even sizes.

@@ -0,0 +0,0 @@ Introduction

@@ -0,0 +0,0 @@ Test programs

@@ -0,0 +0,0 @@ # winpty

@@ -0,0 +0,0 @@ # Version 0.4.3 (2017-05-17)

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

9

lib/unixTerminal.js

@@ -8,5 +8,8 @@ "use strict";

var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {

@@ -13,0 +16,0 @@ extendStatics(d, b);

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

@@ -12,2 +12,3 @@ "use strict";

var utils_1 = require("./utils");
var child_process_1 = require("child_process");
var conptyNative;

@@ -30,3 +31,3 @@ var winptyNative;

if (this._useConpty === undefined || this._useConpty === true) {
this._useConpty = this._getWindowsBuildNumber() >= 17692;
this._useConpty = this._getWindowsBuildNumber() >= 18309;
}

@@ -117,2 +118,3 @@ if (this._useConpty) {

WindowsPtyAgent.prototype.kill = function () {
var _this = this;
this._inSocket.readable = false;

@@ -124,12 +126,23 @@ this._inSocket.writable = false;

if (this._useConpty) {
this._ptyNative.kill(this._pty);
this._getConsoleProcessList().then(function (consoleProcessList) {
consoleProcessList.forEach(function (pid) {
try {
process.kill(pid);
}
catch (e) {
// Ignore if process cannot be found (kill ESRCH error)
}
});
_this._ptyNative.kill(_this._pty);
});
}
else {
this._ptyNative.kill(this._pid, this._innerPidHandle);
// Since pty.kill closes the handle it will kill most processes by itself
// and process IDs can be reused as soon as all handles to them are
// dropped, we want to immediately kill the entire console process list.
// If we do not force kill all processes here, node servers in particular
// seem to become detached and remain running (see
// Microsoft/vscode#26807).
var processList = this._ptyNative.getProcessList(this._pid);
this._ptyNative.kill(this._pid, this._innerPidHandle);
// Since pty.kill will kill most processes by itself and process IDs can be
// reused as soon as all handles to them are dropped, we want to immediately
// kill the entire console process list. If we do not force kill all
// processes here, node servers in particular seem to become detached and
// remain running (see Microsoft/vscode#26807).
processList.forEach(function (pid) {

@@ -145,2 +158,18 @@ try {

};
WindowsPtyAgent.prototype._getConsoleProcessList = function () {
var _this = this;
return new Promise(function (resolve) {
var agent = child_process_1.fork(path.join(__dirname, 'conpty_console_list_agent'), [_this._innerPid.toString()]);
agent.on('message', function (message) {
clearTimeout(timeout);
resolve(message.consoleProcessList);
});
var timeout = setTimeout(function () {
// Something went wrong, just send back the shell PID
console.error('Could not fetch console process list');
agent.kill();
resolve([_this._innerPid]);
}, 5000);
});
};
Object.defineProperty(WindowsPtyAgent.prototype, "exitCode", {

@@ -147,0 +176,0 @@ get: function () {

@@ -0,0 +0,0 @@ "use strict";

@@ -8,5 +8,8 @@ "use strict";

var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {

@@ -13,0 +16,0 @@ extendStatics(d, b);

@@ -11,2 +11,78 @@ "use strict";

var path = require("path");
var psList = require("ps-list");
function pollForProcessState(desiredState, intervalMs, timeoutMs) {
if (intervalMs === void 0) { intervalMs = 100; }
if (timeoutMs === void 0) { timeoutMs = 2000; }
return new Promise(function (resolve) {
var tries = 0;
var interval = setInterval(function () {
psList({ all: true }).then(function (ps) {
var success = true;
var pids = Object.keys(desiredState).map(function (k) { return parseInt(k, 10); });
pids.forEach(function (pid) {
if (desiredState[pid]) {
if (!ps.some(function (p) { return p.pid === pid; })) {
success = false;
}
}
else {
if (ps.some(function (p) { return p.pid === pid; })) {
success = false;
}
}
});
if (success) {
clearInterval(interval);
resolve();
return;
}
tries++;
if (tries * intervalMs >= timeoutMs) {
clearInterval(interval);
var processListing = pids.map(function (k) { return k + ": " + desiredState[k]; }).join('\n');
assert.fail("Bad process state, expected:\n" + processListing);
resolve();
}
});
}, intervalMs);
});
}
function pollForProcessTreeSize(pid, size, intervalMs, timeoutMs) {
if (intervalMs === void 0) { intervalMs = 100; }
if (timeoutMs === void 0) { timeoutMs = 2000; }
return new Promise(function (resolve) {
var tries = 0;
var interval = setInterval(function () {
psList({ all: true }).then(function (ps) {
var openList = [];
openList.push(ps.filter(function (p) { return p.pid === pid; }).map(function (p) {
return { name: p.name, pid: p.pid };
})[0]);
var list = [];
var _loop_1 = function () {
var current = openList.shift();
ps.filter(function (p) { return p.ppid === current.pid; }).map(function (p) {
return { name: p.name, pid: p.pid };
}).forEach(function (p) { return openList.push(p); });
list.push(current);
};
while (openList.length) {
_loop_1();
}
var success = list.length === size;
if (success) {
clearInterval(interval);
resolve(list);
return;
}
tries++;
if (tries * intervalMs >= timeoutMs) {
clearInterval(interval);
assert.fail("Bad process state, expected: " + size + ", actual: " + list.length);
resolve();
}
});
}, intervalMs);
});
}
if (process.platform === 'win32') {

@@ -21,2 +97,27 @@ describe('WindowsTerminal', function () {

});
it('should kill the process tree', function (done) {
this.timeout(5000);
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], {});
// Start sub-processes
term.write('powershell.exe\r');
term.write('notepad.exe\r');
term.write('node.exe\r');
pollForProcessTreeSize(term.pid, 4, 500, 5000).then(function (list) {
assert.equal(list[0].name, 'cmd.exe');
assert.equal(list[1].name, 'powershell.exe');
assert.equal(list[2].name, 'notepad.exe');
assert.equal(list[3].name, 'node.exe');
term.kill();
var desiredState = {};
desiredState[list[0].pid] = false;
desiredState[list[1].pid] = false;
desiredState[list[2].pid] = true;
desiredState[list[3].pid] = false;
pollForProcessState(desiredState).then(function () {
// Kill notepad before done
process.kill(list[2].pid);
done();
});
});
});
});

@@ -23,0 +124,0 @@ describe('resize', function () {

@@ -7,3 +7,3 @@ {

},
"version": "0.8.0",
"version": "0.8.1",
"license": "MIT",

@@ -38,2 +38,3 @@ "main": "./lib/index.js",

"tsc": "tsc",
"watch": "tsc -w",
"lint": "tslint 'src/**/*.ts'",

@@ -46,3 +47,3 @@ "install": "node scripts/install.js",

"dependencies": {
"nan": "2.10.0"
"nan": "2.12.1"
},

@@ -52,9 +53,11 @@ "devDependencies": {

"@types/node": "^6.0.104",
"@types/ps-list": "^6.0.0",
"cross-env": "^5.1.4",
"mocha": "^5.0.5",
"pollUntil": "^1.0.3",
"tslint": "^5.9.1",
"tslint-consistent-codestyle": "^1.13.0",
"typescript": "^2.8.1"
"ps-list": "^6.0.0",
"tslint": "^5.12.1",
"tslint-consistent-codestyle": "^1.15.0",
"typescript": "^3.2.2"
}
}

@@ -25,2 +25,3 @@ # node-pty

- [atom-xterm](https://atom.io/packages/atom-xterm) - Atom plugin for providing terminals inside your Atom workspace.
- [Termination](https://atom.io/packages/termination) - Another Atom plugin that provides terminals inside your Atom workspace.

@@ -46,3 +47,3 @@ Do you use node-pty in your application as well? Please open a [Pull Request](https://github.com/Tyriar/node-pty/pulls) to include it here. We would love to have it in our list.

ptyProcess.on('data', function(data) {
console.log(data);
process.stdout.write(data);
});

@@ -49,0 +50,0 @@

@@ -7,7 +7,7 @@ 'use strict'

const args = ['rebuild'];
const gypArgs = ['rebuild'];
if (process.env.NODE_PTY_DEBUG) {
args.push('--debug');
gypArgs.push('--debug');
}
const p = spawn(os.platform() === 'win32' ? 'node-gyp.cmd' : 'node-gyp', args, {
const gypProcess = spawn(os.platform() === 'win32' ? 'node-gyp.cmd' : 'node-gyp', gypArgs, {
cwd: path.join(__dirname, '..'),

@@ -17,4 +17,4 @@ stdio: 'inherit'

p.on('exit', function (code) {
gypProcess.on('exit', function (code) {
process.exit(code);
});

@@ -8,2 +8,4 @@ var fs = require('fs');

path.join(RELEASE_DIR, 'conpty.pdb'),
path.join(RELEASE_DIR, 'conpty_console_list.node'),
path.join(RELEASE_DIR, 'conpty_console_list.pdb'),
path.join(RELEASE_DIR, 'pty.node'),

@@ -10,0 +12,0 @@ path.join(RELEASE_DIR, 'pty.pdb'),

@@ -0,0 +0,0 @@ /**

@@ -0,0 +0,0 @@ /**

@@ -0,0 +0,0 @@ /**

@@ -0,0 +0,0 @@ /**

@@ -0,0 +0,0 @@ /**

@@ -0,0 +0,0 @@ /**

@@ -0,0 +0,0 @@ /**

@@ -0,0 +0,0 @@ /**

@@ -0,0 +0,0 @@ /**

@@ -0,0 +0,0 @@ /**

@@ -12,2 +12,3 @@ /**

import { loadNative } from './utils';
import { fork } from 'child_process';

@@ -58,3 +59,3 @@ let conptyNative: IConptyNative;

if (this._useConpty === undefined || this._useConpty === true) {
this._useConpty = this._getWindowsBuildNumber() >= 17692;
this._useConpty = this._getWindowsBuildNumber() >= 18309;
}

@@ -135,11 +136,21 @@ if (this._useConpty) {

if (this._useConpty) {
(this._ptyNative as IConptyNative).kill(this._pty);
this._getConsoleProcessList().then(consoleProcessList => {
consoleProcessList.forEach((pid: number) => {
try {
process.kill(pid);
} catch (e) {
// Ignore if process cannot be found (kill ESRCH error)
}
});
(this._ptyNative as IConptyNative).kill(this._pty);
});
} else {
(this._ptyNative as IWinptyNative).kill(this._pid, this._innerPidHandle);
// Since pty.kill closes the handle it will kill most processes by itself
// and process IDs can be reused as soon as all handles to them are
// dropped, we want to immediately kill the entire console process list.
// If we do not force kill all processes here, node servers in particular
// seem to become detached and remain running (see
// Microsoft/vscode#26807).
const processList: number[] = (this._ptyNative as IWinptyNative).getProcessList(this._pid);
(this._ptyNative as IWinptyNative).kill(this._pid, this._innerPidHandle);
// Since pty.kill will kill most processes by itself and process IDs can be
// reused as soon as all handles to them are dropped, we want to immediately
// kill the entire console process list. If we do not force kill all
// processes here, node servers in particular seem to become detached and
// remain running (see Microsoft/vscode#26807).
processList.forEach(pid => {

@@ -155,2 +166,18 @@ try {

private _getConsoleProcessList(): Promise<number[]> {
return new Promise<number[]>(resolve => {
const agent = fork(path.join(__dirname, 'conpty_console_list_agent'), [ this._innerPid.toString() ]);
agent.on('message', message => {
clearTimeout(timeout);
resolve(message.consoleProcessList);
});
const timeout = setTimeout(() => {
// Something went wrong, just send back the shell PID
console.error('Could not fetch console process list');
agent.kill();
resolve([ this._innerPid ]);
}, 5000);
});
}
public get exitCode(): number {

@@ -157,0 +184,0 @@ if (this._useConpty) {

@@ -10,3 +10,83 @@ /**

import * as path from 'path';
import * as psList from 'ps-list';
interface IProcessState {
// Whether the PID must exist or must not exist
[pid: number]: boolean;
}
interface IWindowsProcessTreeResult {
name: string;
pid: number;
}
function pollForProcessState(desiredState: IProcessState, intervalMs: number = 100, timeoutMs: number = 2000): Promise<void> {
return new Promise<void>(resolve => {
let tries = 0;
const interval = setInterval(() => {
psList({ all: true }).then(ps => {
let success = true;
const pids = Object.keys(desiredState).map(k => parseInt(k, 10));
pids.forEach(pid => {
if (desiredState[pid]) {
if (!ps.some(p => p.pid === pid)) {
success = false;
}
} else {
if (ps.some(p => p.pid === pid)) {
success = false;
}
}
});
if (success) {
clearInterval(interval);
resolve();
return;
}
tries++;
if (tries * intervalMs >= timeoutMs) {
clearInterval(interval);
const processListing = pids.map(k => `${k}: ${desiredState[k]}`).join('\n');
assert.fail(`Bad process state, expected:\n${processListing}`);
resolve();
}
});
}, intervalMs);
});
}
function pollForProcessTreeSize(pid: number, size: number, intervalMs: number = 100, timeoutMs: number = 2000): Promise<IWindowsProcessTreeResult[]> {
return new Promise<IWindowsProcessTreeResult[]>(resolve => {
let tries = 0;
const interval = setInterval(() => {
psList({ all: true }).then(ps => {
const openList: IWindowsProcessTreeResult[] = [];
openList.push(ps.filter(p => p.pid === pid).map(p => {
return { name: p.name, pid: p.pid };
})[0]);
const list: IWindowsProcessTreeResult[] = [];
while (openList.length) {
const current = openList.shift();
ps.filter(p => p.ppid === current.pid).map(p => {
return { name: p.name, pid: p.pid };
}).forEach(p => openList.push(p));
list.push(current);
}
const success = list.length === size;
if (success) {
clearInterval(interval);
resolve(list);
return;
}
tries++;
if (tries * intervalMs >= timeoutMs) {
clearInterval(interval);
assert.fail(`Bad process state, expected: ${size}, actual: ${list.length}`);
resolve();
}
});
}, intervalMs);
});
}
if (process.platform === 'win32') {

@@ -21,2 +101,27 @@ describe('WindowsTerminal', () => {

});
it('should kill the process tree', function (done: Mocha.Done): void {
this.timeout(5000);
const term = new WindowsTerminal('cmd.exe', [], {});
// Start sub-processes
term.write('powershell.exe\r');
term.write('notepad.exe\r');
term.write('node.exe\r');
pollForProcessTreeSize(term.pid, 4, 500, 5000).then(list => {
assert.equal(list[0].name, 'cmd.exe');
assert.equal(list[1].name, 'powershell.exe');
assert.equal(list[2].name, 'notepad.exe');
assert.equal(list[3].name, 'node.exe');
term.kill();
const desiredState: IProcessState = {};
desiredState[list[0].pid] = false;
desiredState[list[1].pid] = false;
desiredState[list[2].pid] = true;
desiredState[list[3].pid] = false;
pollForProcessState(desiredState).then(() => {
// Kill notepad before done
process.kill(list[2].pid);
done();
});
});
});
});

@@ -23,0 +128,0 @@

@@ -0,0 +0,0 @@ /**

@@ -31,3 +31,4 @@ /**

* Whether to use the experimental ConPTY system on Windows. When this is not set, ConPTY will
* be used when the Windows build number is >= 17692.
* be used when the Windows build number is >= 18309 (it's available in 17134 and 17692 but is
* too unstable to enable by default).
*

@@ -34,0 +35,0 @@ * This setting does nothing on non-Windows.

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc