update socials section

This commit is contained in:
2025-05-21 20:59:04 +02:00
parent a0ca01e0c4
commit 08107cd890
2025 changed files with 396152 additions and 112 deletions

128
node_modules/pidtree/bin/pidtree.js generated vendored Executable file
View File

@ -0,0 +1,128 @@
#!/usr/bin/env node
'use strict';
var os = require('os');
var pidtree = require('..');
// The method startsWith is not defined on string objects in node 0.10
// eslint-disable-next-line no-extend-native
String.prototype.startsWith = function(suffix) {
return this.substring(0, suffix.length) === suffix;
};
function help() {
var help =
' Usage\n' +
' $ pidtree <ppid>\n' +
'\n' +
'Options\n' +
' --list To print the pids as a list.\n' +
'\n' +
'Examples\n' +
' $ pidtree\n' +
' $ pidtree --list\n' +
' $ pidtree 1\n' +
' $ pidtree 1 --list\n';
console.log(help);
}
function list(ppid) {
pidtree(ppid === undefined ? -1 : ppid, function(err, list) {
if (err) {
console.error(err.message);
return;
}
console.log(list.join(os.EOL));
});
}
function tree(ppid) {
pidtree(ppid, {advanced: true}, function(err, list) {
if (err) {
console.error(err.message);
return;
}
var parents = {}; // Hash Map of parents
var tree = {}; // Adiacency Hash Map
while (list.length > 0) {
var element = list.pop();
if (tree[element.ppid]) {
tree[element.ppid].push(element.pid);
} else {
tree[element.ppid] = [element.pid];
}
if (ppid === -1) {
parents[element.pid] = element.ppid;
}
}
var roots = [ppid];
if (ppid === -1) {
// Get all the roots
roots = Object.keys(tree).filter(function(node) {
return parents[node] === undefined;
});
}
roots.forEach(function(root) {
print(tree, root);
});
});
function print(tree, start) {
function printBranch(node, branch) {
var isGraphHead = branch.length === 0;
var children = tree[node] || [];
var branchHead = '';
if (!isGraphHead) {
branchHead = children.length > 0 ? '┬ ' : '─ ';
}
console.log(branch + branchHead + node);
var baseBranch = branch;
if (!isGraphHead) {
var isChildOfLastBranch = branch.slice(-2) === '└─';
baseBranch = branch.slice(0, -2) + (isChildOfLastBranch ? ' ' : '| ');
}
var nextBranch = baseBranch + '├─';
var lastBranch = baseBranch + '└─';
children.forEach(function(child, index) {
printBranch(
child,
children.length - 1 === index ? lastBranch : nextBranch
);
});
}
printBranch(start, '');
}
}
function run() {
var flag;
var ppid;
for (var i = 2; i < process.argv.length; i++) {
if (process.argv[i].startsWith('--')) {
flag = process.argv[i];
} else {
ppid = process.argv[i];
}
}
if (ppid === undefined) {
ppid = -1;
}
if (flag === '--list') list(ppid);
else if (flag === undefined) tree(ppid);
else help();
}
run();

80
node_modules/pidtree/index.d.ts generated vendored Normal file
View File

@ -0,0 +1,80 @@
declare namespace PidTree {
export interface Options {
/**
* Include the provided PID in the list. Ignored if -1 is passed as PID.
* @default false
*/
root?: boolean;
}
export interface AdvancedResult {
/**
* PID of the parent.
*/
ppid: number;
/**
* PID
*/
pid: number;
}
export type Result = number;
}
/**
* Get the list of children pids of the given pid.
* @param pid A PID. If -1 will return all the pids.
* @param callback Called when the list is ready.
*/
declare function pidtree(
pid: string | number,
callback: (error: Error | undefined, result: PidTree.Result[]) => void
): void;
/**
* Get the list of children pids of the given pid.
* @param pid A PID. If -1 will return all the pids.
* @param options Options object.
* @param callback Called when the list is ready.
*/
declare function pidtree(
pid: string | number,
options: PidTree.Options,
callback: (error: Error | undefined, result: PidTree.Result[]) => void
): void;
/**
* Get the list of children pids of the given pid.
* @param pid A PID. If -1 will return all the pids.
* @param options Options object.
* @param callback Called when the list is ready.
*/
declare function pidtree(
pid: string | number,
options: PidTree.Options & {advanced: true},
callback: (error: Error | undefined, result: PidTree.AdvancedResult[]) => void
): void;
/**
* Get the list of children pids of the given pid.
* @param pid A PID. If -1 will return all the pids.
* @param [options] Optional options object.
* @returns A promise containing the list.
*/
declare function pidtree(
pid: string | number,
options?: PidTree.Options
): Promise<PidTree.Result[]>;
/**
* Get the list of children pids of the given pid.
* @param pid A PID. If -1 will return all the pids.
* @param options Options object.
* @returns A promise containing the list.
*/
declare function pidtree(
pid: string | number,
options: PidTree.Options & {advanced: true}
): Promise<PidTree.AdvancedResult[]>;
export = pidtree;

49
node_modules/pidtree/index.js generated vendored Normal file
View File

@ -0,0 +1,49 @@
'use strict';
function pify(fn, arg1, arg2) {
return new Promise(function(resolve, reject) {
fn(arg1, arg2, function(err, data) {
if (err) return reject(err);
resolve(data);
});
});
}
// Node versions prior to 4.0.0 do not define have `startsWith`.
/* istanbul ignore if */
if (!String.prototype.startsWith) {
// eslint-disable-next-line no-extend-native
String.prototype.startsWith = function(suffix) {
return this.substring(0, suffix.length) === suffix;
};
}
var pidtree = require('./lib/pidtree');
/**
* Get the list of children pids of the given pid.
* @public
* @param {Number|String} pid A PID. If -1 will return all the pids.
* @param {Object} [options] Optional options object.
* @param {Boolean} [options.root=false] Include the provided PID in the list.
* @param {Boolean} [options.advanced=false] Returns a list of objects in the
* format {pid: X, ppid: Y}.
* @param {Function} [callback=undefined] Called when the list is ready. If not
* provided a promise is returned instead.
* @returns {Promise.<Object[]>} Only when the callback is not provided.
*/
function list(pid, options, callback) {
if (typeof options === 'function') {
callback = options;
options = undefined;
}
if (typeof callback === 'function') {
pidtree(pid, options, callback);
return;
}
return pify(pidtree, pid, options);
}
module.exports = list;

61
node_modules/pidtree/lib/bin.js generated vendored Normal file
View File

@ -0,0 +1,61 @@
'use strict';
var spawn = require('child_process').spawn;
function stripStderr(stderr) {
if (!stderr) return;
stderr = stderr.trim();
// Strip bogus screen size error.
// See https://github.com/microsoft/vscode/issues/98590
var regex = /your \d+x\d+ screen size is bogus\. expect trouble/gi;
stderr = stderr.replace(regex, '');
return stderr.trim();
}
/**
* Spawn a binary and read its stdout.
* @param {String} cmd The name of the binary to spawn.
* @param {String[]} args The arguments for the binary.
* @param {Object} [options] Optional option for the spawn function.
* @param {Function} done(err, stdout)
*/
function run(cmd, args, options, done) {
if (typeof options === 'function') {
done = options;
options = undefined;
}
var executed = false;
var ch = spawn(cmd, args, options);
var stdout = '';
var stderr = '';
ch.stdout.on('data', function(d) {
stdout += d.toString();
});
ch.stderr.on('data', function(d) {
stderr += d.toString();
});
ch.on('error', function(err) {
if (executed) return;
executed = true;
done(new Error(err));
});
ch.on('close', function(code) {
if (executed) return;
executed = true;
stderr = stripStderr(stderr);
if (stderr) {
return done(new Error(stderr));
}
done(null, stdout, code);
});
}
module.exports = run;

45
node_modules/pidtree/lib/get.js generated vendored Normal file
View File

@ -0,0 +1,45 @@
'use strict';
var os = require('os');
var platformToMethod = {
darwin: 'ps',
sunos: 'ps',
freebsd: 'ps',
netbsd: 'ps',
win: 'wmic',
linux: 'ps',
aix: 'ps',
};
var methodToRequireFn = {
ps: () => require("./ps"),
wmic: () => require("./wmic")
};
var platform = os.platform();
if (platform.startsWith('win')) {
platform = 'win';
}
var method = platformToMethod[platform];
/**
* Gets the list of all the pids of the system.
* @param {Function} callback Called when the list is ready.
*/
function get(callback) {
if (method === undefined) {
callback(
new Error(
os.platform() +
' is not supported yet, please open an issue (https://github.com/simonepri/pidtree)'
)
);
}
var list = methodToRequireFn[method]();
list(callback);
}
module.exports = get;

104
node_modules/pidtree/lib/pidtree.js generated vendored Normal file
View File

@ -0,0 +1,104 @@
'use strict';
var getAll = require('./get');
/**
* Get the list of children and grandchildren pids of the given PID.
* @param {Number|String} PID A PID. If -1 will return all the pids.
* @param {Object} [options] Optional options object.
* @param {Boolean} [options.root=false] Include the provided PID in the list.
* @param {Boolean} [options.advanced=false] Returns a list of objects in the
* format {pid: X, ppid: Y}.
* @param {Function} callback(err, list) Called when the list is ready.
*/
function list(PID, options, callback) {
if (typeof options === 'function') {
callback = options;
options = {};
}
if (typeof options !== 'object') {
options = {};
}
PID = parseInt(PID, 10);
if (isNaN(PID) || PID < -1) {
callback(new TypeError('The pid provided is invalid'));
return;
}
getAll(function(err, list) {
if (err) {
callback(err);
return;
}
// If the user wants the whole list just return it
if (PID === -1) {
for (var i = 0; i < list.length; i++) {
list[i] = options.advanced
? {ppid: list[i][0], pid: list[i][1]}
: (list[i] = list[i][1]);
}
callback(null, list);
return;
}
var root;
for (var l = 0; l < list.length; l++) {
if (list[l][1] === PID) {
root = options.advanced ? {ppid: list[l][0], pid: PID} : PID;
break;
}
if (list[l][0] === PID) {
root = options.advanced ? {pid: PID} : PID; // Special pids like 0 on *nix
}
}
if (!root) {
callback(new Error('No matching pid found'));
return;
}
// Build the adiacency Hash Map (pid -> [children of pid])
var tree = {};
while (list.length > 0) {
var element = list.pop();
if (tree[element[0]]) {
tree[element[0]].push(element[1]);
} else {
tree[element[0]] = [element[1]];
}
}
// Starting by the PID provided by the user, traverse the tree using the
// adiacency Hash Map until the whole subtree is visited.
// Each pid encountered while visiting is added to the pids array.
var idx = 0;
var pids = [root];
while (idx < pids.length) {
var curpid = options.advanced ? pids[idx++].pid : pids[idx++];
if (!tree[curpid]) continue;
var length = tree[curpid].length;
for (var j = 0; j < length; j++) {
pids.push(
options.advanced
? {ppid: curpid, pid: tree[curpid][j]}
: tree[curpid][j]
);
}
delete tree[curpid];
}
if (!options.root) {
pids.shift(); // Remove root
}
callback(null, pids);
});
}
module.exports = list;

47
node_modules/pidtree/lib/ps.js generated vendored Normal file
View File

@ -0,0 +1,47 @@
'use strict';
var os = require('os');
var bin = require('./bin');
/**
* Gets the list of all the pids of the system through the ps command.
* @param {Function} callback(err, list)
*/
function ps(callback) {
var args = ['-A', '-o', 'ppid,pid'];
bin('ps', args, function(err, stdout, code) {
if (err) return callback(err);
if (code !== 0) {
return callback(new Error('pidtree ps command exited with code ' + code));
}
// Example of stdout
//
// PPID PID
// 1 430
// 430 432
// 1 727
// 1 7166
try {
stdout = stdout.split(os.EOL);
var list = [];
for (var i = 1; i < stdout.length; i++) {
stdout[i] = stdout[i].trim();
if (!stdout[i]) continue;
stdout[i] = stdout[i].split(/\s+/);
stdout[i][0] = parseInt(stdout[i][0], 10); // PPID
stdout[i][1] = parseInt(stdout[i][1], 10); // PID
list.push(stdout[i]);
}
callback(null, list);
} catch (error) {
callback(error);
}
});
}
module.exports = ps;

49
node_modules/pidtree/lib/wmic.js generated vendored Normal file
View File

@ -0,0 +1,49 @@
'use strict';
var os = require('os');
var bin = require('./bin');
/**
* Gets the list of all the pids of the system through the wmic command.
* @param {Function} callback(err, list)
*/
function wmic(callback) {
var args = ['PROCESS', 'get', 'ParentProcessId,ProcessId'];
var options = {windowsHide: true, windowsVerbatimArguments: true};
bin('wmic', args, options, function(err, stdout, code) {
if (err) {
callback(err);
return;
}
if (code !== 0) {
callback(new Error('pidtree wmic command exited with code ' + code));
return;
}
// Example of stdout
//
// ParentProcessId ProcessId
// 0 777
try {
stdout = stdout.split(os.EOL);
var list = [];
for (var i = 1; i < stdout.length; i++) {
stdout[i] = stdout[i].trim();
if (!stdout[i]) continue;
stdout[i] = stdout[i].split(/\s+/);
stdout[i][0] = parseInt(stdout[i][0], 10); // PPID
stdout[i][1] = parseInt(stdout[i][1], 10); // PID
list.push(stdout[i]);
}
callback(null, list);
} catch (error) {
callback(error);
}
});
}
module.exports = wmic;

21
node_modules/pidtree/license generated vendored Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018 Simone Primarosa
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

90
node_modules/pidtree/package.json generated vendored Normal file
View File

@ -0,0 +1,90 @@
{
"name": "pidtree",
"version": "0.6.0",
"description": "Cross platform children list of a PID",
"license": "MIT",
"homepage": "http://github.com/simonepri/pidtree#readme",
"repository": "github:simonepri/pidtree",
"bugs": {
"url": "https://github.com/simonepri/pidtree/issues",
"email": "simonepri@outlook.com"
},
"author": "Simone Primarosa <simonepri@outlook.com> (https://github.com/simonepri)",
"contributors": [
"Simone Primarosa <simonepri@outlook.com> (https://github.com/simonepri)"
],
"keywords": [
"ps-tree",
"ps",
"tree",
"ppid",
"pid",
"pidtree",
"pgrep",
"list",
"all",
"system",
"process",
"processes"
],
"main": "index.js",
"types": "index.d.ts",
"bin": {
"pidtree": "./bin/pidtree.js"
},
"files": [
"bin",
"lib",
"index.js",
"index.d.ts"
],
"engines": {
"node": ">=0.10"
},
"scripts": {
"start": "node ./bin/pidtree.js",
"update": "npm-check -u",
"release": "np",
"lint": "xo",
"test": "nyc ava -m \"!*benchmark*\"",
"test:windows": "ava -m \"!*benchmark*\"",
"types": "tsd",
"bench": "ava -m \"*benchmark*\""
},
"devDependencies": {
"ava": "~0.25.0",
"mockery": "^2.1.0",
"np": "^2.20.1",
"npm-check": "^5.9.2",
"nyc": "^11.6.0",
"pify": "^3.0.0",
"string-to-stream": "^1.1.0",
"through": "^2.3.8",
"time-span": "^2.0.0",
"tree-kill": "^1.1.0",
"tsd": "^0.11.0",
"xo": "~0.20.3"
},
"ava": {
"verbose": true
},
"nyc": {
"reporter": [
"lcovonly",
"text"
]
},
"xo": {
"prettier": true,
"space": true,
"rules": {
"prefer-destructuring": 0,
"prefer-arrow-callback": 0,
"no-var": 0,
"object-shorthand": 0,
"unicorn/no-for-loop": 0,
"unicorn/prefer-string-slice": 0,
"unicorn/string-content": 0
}
}
}

197
node_modules/pidtree/readme.md generated vendored Normal file
View File

@ -0,0 +1,197 @@
<h1 align="center">
<b>pidtree</b>
</h1>
<p align="center">
<!-- Version - npm -->
<a href="https://www.npmjs.com/package/pidtree">
<img src="https://img.shields.io/npm/v/pidtree.svg" alt="Latest version on npm" />
</a>
<!-- Downloads - npm -->
<a href="https://npm-stat.com/charts.html?package=pidtree">
<img src="https://img.shields.io/npm/dt/pidtree.svg" alt="Downloads on npm" />
</a>
<!-- License - MIT -->
<a href="https://github.com/simonepri/pidtree/tree/master/license">
<img src="https://img.shields.io/github/license/simonepri/pidtree.svg" alt="Project license" />
</a>
<br/>
<!-- Lint -->
<a href="https://github.com/simonepri/pidtree/actions?query=workflow:lint+branch:master">
<img src="https://github.com/simonepri/pidtree/workflows/lint/badge.svg?branch=master" alt="Lint status" />
</a>
<!-- Test - macOS -->
<a href="https://github.com/simonepri/pidtree/actions?query=workflow:test-macos+branch:master">
<img src="https://github.com/simonepri/pidtree/workflows/test-macos/badge.svg?branch=master" alt="Test macOS status" />
</a>
<!-- Test - Ubuntu -->
<a href="https://github.com/simonepri/pidtree/actions?query=workflow:test-ubuntu+branch:master">
<img src="https://github.com/simonepri/pidtree/workflows/test-ubuntu/badge.svg?branch=master" alt="Test Ubuntu status" />
</a>
<!-- Test - Windows -->
<a href="https://github.com/simonepri/pidtree/actions?query=workflow:test-windows+branch:master">
<img src="https://github.com/simonepri/pidtree/workflows/test-windows/badge.svg?branch=master" alt="Test Windows status" />
</a>
<!-- Coverage - Codecov -->
<a href="https://codecov.io/gh/simonepri/pidtree">
<img src="https://img.shields.io/codecov/c/github/simonepri/pidtree/master.svg" alt="Codecov Coverage report" />
</a>
<!-- DM - Snyk -->
<a href="https://snyk.io/test/github/simonepri/pidtree?targetFile=package.json">
<img src="https://snyk.io/test/github/simonepri/pidtree/badge.svg?targetFile=package.json" alt="Known Vulnerabilities" />
</a>
<br/>
<!-- Code Style - XO-Prettier -->
<a href="https://github.com/xojs/xo">
<img src="https://img.shields.io/badge/code_style-XO+Prettier-5ed9c7.svg" alt="XO Code Style used" />
</a>
<!-- Test Runner - AVA -->
<a href="https://github.com/avajs/ava">
<img src="https://img.shields.io/badge/test_runner-AVA-fb3170.svg" alt="AVA Test Runner used" />
</a>
<!-- Test Coverage - Istanbul -->
<a href="https://github.com/istanbuljs/nyc">
<img src="https://img.shields.io/badge/test_coverage-NYC-fec606.svg" alt="Istanbul Test Coverage used" />
</a>
<!-- Init - ni -->
<a href="https://github.com/simonepri/ni">
<img src="https://img.shields.io/badge/initialized_with-ni-e74c3c.svg" alt="NI Scaffolding System used" />
</a>
<!-- Release - np -->
<a href="https://github.com/sindresorhus/np">
<img src="https://img.shields.io/badge/released_with-np-6c8784.svg" alt="NP Release System used" />
</a>
</p>
<p align="center">
🚸 Cross platform children list of a PID.
<br/>
<sub>
Coded with ❤️ by <a href="#authors">Simone Primarosa</a>.
</sub>
</p>
## Synopsis
This package is really similar to [ps-tree][gh:ps-tree] but is faster, safer and
provides sub-children results.
Furthermore ps-tree is [unmaintained][gh:ps-tree-um].
Uuh, and a fancy [CLI](#cli) is also available!
## Usage
```js
var pidtree = require('pidtree')
// Get childs of current process
pidtree(process.pid, function (err, pids) {
console.log(pids)
// => []
})
// Include the given pid in the result array
pidtree(process.pid, {root: true}, function (err, pids) {
console.log(pids)
// => [727]
})
// Get all the processes of the System (-1 is a special value of this package)
pidtree(-1, function (err, pids) {
console.log(pids)
// => [530, 42, ..., 41241]
})
// Include PPID in the results
pidtree(1, {advanced: true}, function (err, pids) {
console.log(pids)
// => [{ppid: 1, pid: 530}, {ppid: 1, pid: 42}, ..., {ppid: 1, pid: 41241}]
})
// If no callback is given it returns a promise instead
const pids = await pidtree(1)
console.log(pids)
// => [141, 42, ..., 15242]
```
## Compatibility
| Linux | FreeBSD | NetBSD | SunOS | macOS | Win | AIX |
| --- | --- | --- | --- | --- | --- | --- |
| ✅ | ❓ | ❓ | ❓ | ✅ | ✅ | ❓ |
✅ = Working
❓ = Not tested but should work
Please if your platform is not supported [file an issue][new issue].
## CLI
<img src="https://github.com/simonepri/pidtree/raw/master/media/cli.gif" alt="pidtree cli" width="300" align="right"/>
Show a tree of the processes inside your system inside your terminal.
```bash
npx pidtree $PPID
```
Just replace `$PPID` with one of the pids inside your system.
Or don't pass anything if you want all the pids inside your system.
```bash
npx pidtree
```
To display the output as a list, similar to the one produced from `pgrep -P $PID`,
pass the `--list` flag.
```bash
npx pidtree --list
```
## API
<a name="pidtree"></a>
## pidtree(pid, [options], [callback]) ⇒ <code>[Promise.&lt;Array.&lt;Object&gt;&gt;]</code>
Get the list of children pids of the given pid.
**Kind**: global function
**Returns**: <code>Promise.&lt;Array.&lt;Object&gt;&gt;</code> - Only when the callback is not provided.
**Access**: public
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| pid | <code>Number</code> \| <code>String</code> | | A pid. If -1 will return all the pids. |
| [options] | <code>Object</code> | | Optional options object. |
| [options.root] | <code>Boolean</code> | <code>false</code> | Include the provided pid in the list. Ignored if -1 is passed as pid. |
| [callback] | <code>function</code> | | Called when the list is ready. If not provided a promise is returned instead. |
## Related
- [pidusage][gh:pidusage] -
Cross-platform process cpu % and memory usage of a PID
## Authors
- **Simone Primarosa** - [simonepri][github:simonepri]
See also the list of [contributors][contributors] who participated in this project.
## License
This project is licensed under the MIT License - see the [license][license] file for details.
<!-- Links -->
[new issue]: https://github.com/simonepri/pidtree/issues/new
[license]: https://github.com/simonepri/pidtree/tree/master/license
[contributors]: https://github.com/simonepri/pidtree/contributors
[github:simonepri]: https://github.com/simonepri
[gh:pidusage]: https://github.com/soyuka/pidusage
[gh:ps-tree]: https://github.com/indexzero/ps-tree
[gh:ps-tree-um]: https://github.com/indexzero/ps-tree/issues/30