add node_modules dir per docs
This commit is contained in:
parent
5727e2b9e1
commit
fb874e1c33
|
@ -1 +0,0 @@
|
||||||
node_modules/
|
|
|
@ -0,0 +1,146 @@
|
||||||
|
# `@actions/core`
|
||||||
|
|
||||||
|
> Core functions for setting results, logging, registering secrets and exporting variables across actions
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Import the package
|
||||||
|
|
||||||
|
```js
|
||||||
|
// javascript
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
// typescript
|
||||||
|
import * as core from '@actions/core';
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Inputs/Outputs
|
||||||
|
|
||||||
|
Action inputs can be read with `getInput`. Outputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const myInput = core.getInput('inputName', { required: true });
|
||||||
|
|
||||||
|
core.setOutput('outputKey', 'outputVal');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Exporting variables
|
||||||
|
|
||||||
|
Since each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks.
|
||||||
|
|
||||||
|
```js
|
||||||
|
core.exportVariable('envVar', 'Val');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Setting a secret
|
||||||
|
|
||||||
|
Setting a secret registers the secret with the runner to ensure it is masked in logs.
|
||||||
|
|
||||||
|
```js
|
||||||
|
core.setSecret('myPassword');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PATH Manipulation
|
||||||
|
|
||||||
|
To make a tool's path available in the path for the remainder of the job (without altering the machine or containers state), use `addPath`. The runner will prepend the path given to the jobs PATH.
|
||||||
|
|
||||||
|
```js
|
||||||
|
core.addPath('/path/to/mytool');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Exit codes
|
||||||
|
|
||||||
|
You should use this library to set the failing exit code for your action. If status is not set and the script runs to completion, that will lead to a success.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Do stuff
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// setFailed logs the message and sets a failing exit code
|
||||||
|
core.setFailed(`Action failed with error ${err}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
Note that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned.
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Logging
|
||||||
|
|
||||||
|
Finally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs](../../docs/action-debugging.md#step-debug-logs).
|
||||||
|
|
||||||
|
```js
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
const myInput = core.getInput('input');
|
||||||
|
try {
|
||||||
|
core.debug('Inside try block');
|
||||||
|
|
||||||
|
if (!myInput) {
|
||||||
|
core.warning('myInput was not set');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (core.isDebug()) {
|
||||||
|
// curl -v https://github.com
|
||||||
|
} else {
|
||||||
|
// curl https://github.com
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do stuff
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
core.error(`Error ${err}, action may still succeed though`);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This library can also wrap chunks of output in foldable groups.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const core = require('@actions/core')
|
||||||
|
|
||||||
|
// Manually wrap output
|
||||||
|
core.startGroup('Do some function')
|
||||||
|
doSomeFunction()
|
||||||
|
core.endGroup()
|
||||||
|
|
||||||
|
// Wrap an asynchronous function call
|
||||||
|
const result = await core.group('Do something async', async () => {
|
||||||
|
const response = await doSomeHTTPRequest()
|
||||||
|
return response
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Action state
|
||||||
|
|
||||||
|
You can use this library to save state and get state for sharing information between a given wrapper action:
|
||||||
|
|
||||||
|
**action.yml**
|
||||||
|
```yaml
|
||||||
|
name: 'Wrapper action sample'
|
||||||
|
inputs:
|
||||||
|
name:
|
||||||
|
default: 'GitHub'
|
||||||
|
runs:
|
||||||
|
using: 'node12'
|
||||||
|
main: 'main.js'
|
||||||
|
post: 'cleanup.js'
|
||||||
|
```
|
||||||
|
|
||||||
|
In action's `main.js`:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
core.saveState("pidToKill", 12345);
|
||||||
|
```
|
||||||
|
|
||||||
|
In action's `cleanup.js`:
|
||||||
|
```js
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
var pid = core.getState("pidToKill");
|
||||||
|
|
||||||
|
process.kill(pid);
|
||||||
|
```
|
|
@ -0,0 +1,21 @@
|
||||||
|
interface CommandProperties {
|
||||||
|
[key: string]: any;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Commands
|
||||||
|
*
|
||||||
|
* Command Format:
|
||||||
|
* ::name key=value,key=value::message
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
* ::warning::This is the message
|
||||||
|
* ::set-env name=MY_VAR::some value
|
||||||
|
*/
|
||||||
|
export declare function issueCommand(command: string, properties: CommandProperties, message: any): void;
|
||||||
|
export declare function issue(name: string, message?: string): void;
|
||||||
|
/**
|
||||||
|
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
||||||
|
* @param input input to sanitize into a string
|
||||||
|
*/
|
||||||
|
export declare function toCommandValue(input: any): string;
|
||||||
|
export {};
|
|
@ -0,0 +1,92 @@
|
||||||
|
"use strict";
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const os = __importStar(require("os"));
|
||||||
|
/**
|
||||||
|
* Commands
|
||||||
|
*
|
||||||
|
* Command Format:
|
||||||
|
* ::name key=value,key=value::message
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
* ::warning::This is the message
|
||||||
|
* ::set-env name=MY_VAR::some value
|
||||||
|
*/
|
||||||
|
function issueCommand(command, properties, message) {
|
||||||
|
const cmd = new Command(command, properties, message);
|
||||||
|
process.stdout.write(cmd.toString() + os.EOL);
|
||||||
|
}
|
||||||
|
exports.issueCommand = issueCommand;
|
||||||
|
function issue(name, message = '') {
|
||||||
|
issueCommand(name, {}, message);
|
||||||
|
}
|
||||||
|
exports.issue = issue;
|
||||||
|
const CMD_STRING = '::';
|
||||||
|
class Command {
|
||||||
|
constructor(command, properties, message) {
|
||||||
|
if (!command) {
|
||||||
|
command = 'missing.command';
|
||||||
|
}
|
||||||
|
this.command = command;
|
||||||
|
this.properties = properties;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
toString() {
|
||||||
|
let cmdStr = CMD_STRING + this.command;
|
||||||
|
if (this.properties && Object.keys(this.properties).length > 0) {
|
||||||
|
cmdStr += ' ';
|
||||||
|
let first = true;
|
||||||
|
for (const key in this.properties) {
|
||||||
|
if (this.properties.hasOwnProperty(key)) {
|
||||||
|
const val = this.properties[key];
|
||||||
|
if (val) {
|
||||||
|
if (first) {
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cmdStr += ',';
|
||||||
|
}
|
||||||
|
cmdStr += `${key}=${escapeProperty(val)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
|
||||||
|
return cmdStr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
||||||
|
* @param input input to sanitize into a string
|
||||||
|
*/
|
||||||
|
function toCommandValue(input) {
|
||||||
|
if (input === null || input === undefined) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
else if (typeof input === 'string' || input instanceof String) {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
return JSON.stringify(input);
|
||||||
|
}
|
||||||
|
exports.toCommandValue = toCommandValue;
|
||||||
|
function escapeData(s) {
|
||||||
|
return toCommandValue(s)
|
||||||
|
.replace(/%/g, '%25')
|
||||||
|
.replace(/\r/g, '%0D')
|
||||||
|
.replace(/\n/g, '%0A');
|
||||||
|
}
|
||||||
|
function escapeProperty(s) {
|
||||||
|
return toCommandValue(s)
|
||||||
|
.replace(/%/g, '%25')
|
||||||
|
.replace(/\r/g, '%0D')
|
||||||
|
.replace(/\n/g, '%0A')
|
||||||
|
.replace(/:/g, '%3A')
|
||||||
|
.replace(/,/g, '%2C');
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=command.js.map
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uCAAwB;AAWxB;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAY;IAEZ,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,UAAkB,EAAE;IACtD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,IAAI,CAAA;AAEvB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,IAAI,KAAK,GAAG,IAAI,CAAA;YAChB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,IAAI,KAAK,EAAE;4BACT,KAAK,GAAG,KAAK,CAAA;yBACd;6BAAM;4BACL,MAAM,IAAI,GAAG,CAAA;yBACd;wBAED,MAAM,IAAI,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAA;qBAC1C;iBACF;aACF;SACF;QAED,MAAM,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;QACpD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAAU;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QACzC,OAAO,EAAE,CAAA;KACV;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM,EAAE;QAC/D,OAAO,KAAe,CAAA;KACvB;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAPD,wCAOC;AAED,SAAS,UAAU,CAAC,CAAM;IACxB,OAAO,cAAc,CAAC,CAAC,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,CAAM;IAC5B,OAAO,cAAc,CAAC,CAAC,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"}
|
|
@ -0,0 +1,122 @@
|
||||||
|
/**
|
||||||
|
* Interface for getInput options
|
||||||
|
*/
|
||||||
|
export interface InputOptions {
|
||||||
|
/** Optional. Whether the input is required. If required and not present, will throw. Defaults to false */
|
||||||
|
required?: boolean;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The code to exit an action
|
||||||
|
*/
|
||||||
|
export declare enum ExitCode {
|
||||||
|
/**
|
||||||
|
* A code indicating that the action was successful
|
||||||
|
*/
|
||||||
|
Success = 0,
|
||||||
|
/**
|
||||||
|
* A code indicating that the action was a failure
|
||||||
|
*/
|
||||||
|
Failure = 1
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets env variable for this action and future actions in the job
|
||||||
|
* @param name the name of the variable to set
|
||||||
|
* @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
|
||||||
|
*/
|
||||||
|
export declare function exportVariable(name: string, val: any): void;
|
||||||
|
/**
|
||||||
|
* Registers a secret which will get masked from logs
|
||||||
|
* @param secret value of the secret
|
||||||
|
*/
|
||||||
|
export declare function setSecret(secret: string): void;
|
||||||
|
/**
|
||||||
|
* Prepends inputPath to the PATH (for this action and future actions)
|
||||||
|
* @param inputPath
|
||||||
|
*/
|
||||||
|
export declare function addPath(inputPath: string): void;
|
||||||
|
/**
|
||||||
|
* Gets the value of an input. The value is also trimmed.
|
||||||
|
*
|
||||||
|
* @param name name of the input to get
|
||||||
|
* @param options optional. See InputOptions.
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export declare function getInput(name: string, options?: InputOptions): string;
|
||||||
|
/**
|
||||||
|
* Sets the value of an output.
|
||||||
|
*
|
||||||
|
* @param name name of the output to set
|
||||||
|
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
||||||
|
*/
|
||||||
|
export declare function setOutput(name: string, value: any): void;
|
||||||
|
/**
|
||||||
|
* Enables or disables the echoing of commands into stdout for the rest of the step.
|
||||||
|
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export declare function setCommandEcho(enabled: boolean): void;
|
||||||
|
/**
|
||||||
|
* Sets the action status to failed.
|
||||||
|
* When the action exits it will be with an exit code of 1
|
||||||
|
* @param message add error issue message
|
||||||
|
*/
|
||||||
|
export declare function setFailed(message: string | Error): void;
|
||||||
|
/**
|
||||||
|
* Gets whether Actions Step Debug is on or not
|
||||||
|
*/
|
||||||
|
export declare function isDebug(): boolean;
|
||||||
|
/**
|
||||||
|
* Writes debug message to user log
|
||||||
|
* @param message debug message
|
||||||
|
*/
|
||||||
|
export declare function debug(message: string): void;
|
||||||
|
/**
|
||||||
|
* Adds an error issue
|
||||||
|
* @param message error issue message. Errors will be converted to string via toString()
|
||||||
|
*/
|
||||||
|
export declare function error(message: string | Error): void;
|
||||||
|
/**
|
||||||
|
* Adds an warning issue
|
||||||
|
* @param message warning issue message. Errors will be converted to string via toString()
|
||||||
|
*/
|
||||||
|
export declare function warning(message: string | Error): void;
|
||||||
|
/**
|
||||||
|
* Writes info to log with console.log.
|
||||||
|
* @param message info message
|
||||||
|
*/
|
||||||
|
export declare function info(message: string): void;
|
||||||
|
/**
|
||||||
|
* Begin an output group.
|
||||||
|
*
|
||||||
|
* Output until the next `groupEnd` will be foldable in this group
|
||||||
|
*
|
||||||
|
* @param name The name of the output group
|
||||||
|
*/
|
||||||
|
export declare function startGroup(name: string): void;
|
||||||
|
/**
|
||||||
|
* End an output group.
|
||||||
|
*/
|
||||||
|
export declare function endGroup(): void;
|
||||||
|
/**
|
||||||
|
* Wrap an asynchronous function call in a group.
|
||||||
|
*
|
||||||
|
* Returns the same type as the function itself.
|
||||||
|
*
|
||||||
|
* @param name The name of the group
|
||||||
|
* @param fn The function to wrap in the group
|
||||||
|
*/
|
||||||
|
export declare function group<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
||||||
|
/**
|
||||||
|
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
||||||
|
*
|
||||||
|
* @param name name of the state to store
|
||||||
|
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
||||||
|
*/
|
||||||
|
export declare function saveState(name: string, value: any): void;
|
||||||
|
/**
|
||||||
|
* Gets the value of an state set by this action's main execution.
|
||||||
|
*
|
||||||
|
* @param name name of the state to get
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export declare function getState(name: string): string;
|
|
@ -0,0 +1,222 @@
|
||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const command_1 = require("./command");
|
||||||
|
const os = __importStar(require("os"));
|
||||||
|
const path = __importStar(require("path"));
|
||||||
|
/**
|
||||||
|
* The code to exit an action
|
||||||
|
*/
|
||||||
|
var ExitCode;
|
||||||
|
(function (ExitCode) {
|
||||||
|
/**
|
||||||
|
* A code indicating that the action was successful
|
||||||
|
*/
|
||||||
|
ExitCode[ExitCode["Success"] = 0] = "Success";
|
||||||
|
/**
|
||||||
|
* A code indicating that the action was a failure
|
||||||
|
*/
|
||||||
|
ExitCode[ExitCode["Failure"] = 1] = "Failure";
|
||||||
|
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
// Variables
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Sets env variable for this action and future actions in the job
|
||||||
|
* @param name the name of the variable to set
|
||||||
|
* @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
|
||||||
|
*/
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
function exportVariable(name, val) {
|
||||||
|
const convertedVal = command_1.toCommandValue(val);
|
||||||
|
process.env[name] = convertedVal;
|
||||||
|
command_1.issueCommand('set-env', { name }, convertedVal);
|
||||||
|
}
|
||||||
|
exports.exportVariable = exportVariable;
|
||||||
|
/**
|
||||||
|
* Registers a secret which will get masked from logs
|
||||||
|
* @param secret value of the secret
|
||||||
|
*/
|
||||||
|
function setSecret(secret) {
|
||||||
|
command_1.issueCommand('add-mask', {}, secret);
|
||||||
|
}
|
||||||
|
exports.setSecret = setSecret;
|
||||||
|
/**
|
||||||
|
* Prepends inputPath to the PATH (for this action and future actions)
|
||||||
|
* @param inputPath
|
||||||
|
*/
|
||||||
|
function addPath(inputPath) {
|
||||||
|
command_1.issueCommand('add-path', {}, inputPath);
|
||||||
|
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
|
||||||
|
}
|
||||||
|
exports.addPath = addPath;
|
||||||
|
/**
|
||||||
|
* Gets the value of an input. The value is also trimmed.
|
||||||
|
*
|
||||||
|
* @param name name of the input to get
|
||||||
|
* @param options optional. See InputOptions.
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
function getInput(name, options) {
|
||||||
|
const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
|
||||||
|
if (options && options.required && !val) {
|
||||||
|
throw new Error(`Input required and not supplied: ${name}`);
|
||||||
|
}
|
||||||
|
return val.trim();
|
||||||
|
}
|
||||||
|
exports.getInput = getInput;
|
||||||
|
/**
|
||||||
|
* Sets the value of an output.
|
||||||
|
*
|
||||||
|
* @param name name of the output to set
|
||||||
|
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
||||||
|
*/
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
function setOutput(name, value) {
|
||||||
|
command_1.issueCommand('set-output', { name }, value);
|
||||||
|
}
|
||||||
|
exports.setOutput = setOutput;
|
||||||
|
/**
|
||||||
|
* Enables or disables the echoing of commands into stdout for the rest of the step.
|
||||||
|
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function setCommandEcho(enabled) {
|
||||||
|
command_1.issue('echo', enabled ? 'on' : 'off');
|
||||||
|
}
|
||||||
|
exports.setCommandEcho = setCommandEcho;
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
// Results
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Sets the action status to failed.
|
||||||
|
* When the action exits it will be with an exit code of 1
|
||||||
|
* @param message add error issue message
|
||||||
|
*/
|
||||||
|
function setFailed(message) {
|
||||||
|
process.exitCode = ExitCode.Failure;
|
||||||
|
error(message);
|
||||||
|
}
|
||||||
|
exports.setFailed = setFailed;
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
// Logging Commands
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Gets whether Actions Step Debug is on or not
|
||||||
|
*/
|
||||||
|
function isDebug() {
|
||||||
|
return process.env['RUNNER_DEBUG'] === '1';
|
||||||
|
}
|
||||||
|
exports.isDebug = isDebug;
|
||||||
|
/**
|
||||||
|
* Writes debug message to user log
|
||||||
|
* @param message debug message
|
||||||
|
*/
|
||||||
|
function debug(message) {
|
||||||
|
command_1.issueCommand('debug', {}, message);
|
||||||
|
}
|
||||||
|
exports.debug = debug;
|
||||||
|
/**
|
||||||
|
* Adds an error issue
|
||||||
|
* @param message error issue message. Errors will be converted to string via toString()
|
||||||
|
*/
|
||||||
|
function error(message) {
|
||||||
|
command_1.issue('error', message instanceof Error ? message.toString() : message);
|
||||||
|
}
|
||||||
|
exports.error = error;
|
||||||
|
/**
|
||||||
|
* Adds an warning issue
|
||||||
|
* @param message warning issue message. Errors will be converted to string via toString()
|
||||||
|
*/
|
||||||
|
function warning(message) {
|
||||||
|
command_1.issue('warning', message instanceof Error ? message.toString() : message);
|
||||||
|
}
|
||||||
|
exports.warning = warning;
|
||||||
|
/**
|
||||||
|
* Writes info to log with console.log.
|
||||||
|
* @param message info message
|
||||||
|
*/
|
||||||
|
function info(message) {
|
||||||
|
process.stdout.write(message + os.EOL);
|
||||||
|
}
|
||||||
|
exports.info = info;
|
||||||
|
/**
|
||||||
|
* Begin an output group.
|
||||||
|
*
|
||||||
|
* Output until the next `groupEnd` will be foldable in this group
|
||||||
|
*
|
||||||
|
* @param name The name of the output group
|
||||||
|
*/
|
||||||
|
function startGroup(name) {
|
||||||
|
command_1.issue('group', name);
|
||||||
|
}
|
||||||
|
exports.startGroup = startGroup;
|
||||||
|
/**
|
||||||
|
* End an output group.
|
||||||
|
*/
|
||||||
|
function endGroup() {
|
||||||
|
command_1.issue('endgroup');
|
||||||
|
}
|
||||||
|
exports.endGroup = endGroup;
|
||||||
|
/**
|
||||||
|
* Wrap an asynchronous function call in a group.
|
||||||
|
*
|
||||||
|
* Returns the same type as the function itself.
|
||||||
|
*
|
||||||
|
* @param name The name of the group
|
||||||
|
* @param fn The function to wrap in the group
|
||||||
|
*/
|
||||||
|
function group(name, fn) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
startGroup(name);
|
||||||
|
let result;
|
||||||
|
try {
|
||||||
|
result = yield fn();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
endGroup();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.group = group;
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
// Wrapper action state
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
||||||
|
*
|
||||||
|
* @param name name of the state to store
|
||||||
|
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
||||||
|
*/
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
function saveState(name, value) {
|
||||||
|
command_1.issueCommand('save-state', { name }, value);
|
||||||
|
}
|
||||||
|
exports.saveState = saveState;
|
||||||
|
/**
|
||||||
|
* Gets the value of an state set by this action's main execution.
|
||||||
|
*
|
||||||
|
* @param name name of the state to get
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
function getState(name) {
|
||||||
|
return process.env[`STATE_${name}`] || '';
|
||||||
|
}
|
||||||
|
exports.getState = getState;
|
||||||
|
//# sourceMappingURL=core.js.map
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,uCAA6D;AAE7D,uCAAwB;AACxB,2CAA4B;AAU5B;;GAEG;AACH,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,6CAAW,CAAA;AACb,CAAC,EAVW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAUnB;AAED,yEAAyE;AACzE,YAAY;AACZ,yEAAyE;AAEzE;;;;GAIG;AACH,8DAA8D;AAC9D,SAAgB,cAAc,CAAC,IAAY,EAAE,GAAQ;IACnD,MAAM,YAAY,GAAG,wBAAc,CAAC,GAAG,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAA;IAChC,sBAAY,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,EAAE,YAAY,CAAC,CAAA;AAC/C,CAAC;AAJD,wCAIC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,MAAc;IACtC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;AACtC,CAAC;AAFD,8BAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,SAAiB;IACvC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AAC7E,CAAC;AAHD,0BAGC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAsB;IAC3D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACrE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAA;KAC5D;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AARD,4BAQC;AAED;;;;;GAKG;AACH,8DAA8D;AAC9D,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAU;IAChD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,OAAgB;IAC7C,eAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AACvC,CAAC;AAFD,wCAEC;AAED,yEAAyE;AACzE,UAAU;AACV,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAuB;IAC/C,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAA;IAEnC,KAAK,CAAC,OAAO,CAAC,CAAA;AAChB,CAAC;AAJD,8BAIC;AAED,yEAAyE;AACzE,mBAAmB;AACnB,yEAAyE;AAEzE;;GAEG;AACH,SAAgB,OAAO;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,GAAG,CAAA;AAC5C,CAAC;AAFD,0BAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,sBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAuB;IAC3C,eAAK,CAAC,OAAO,EAAE,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;AACzE,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAuB;IAC7C,eAAK,CAAC,SAAS,EAAE,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;AAC3E,CAAC;AAFD,0BAEC;AAED;;;GAGG;AACH,SAAgB,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC;AAFD,oBAEC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,eAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACtB,CAAC;AAFD,gCAEC;AAED;;GAEG;AACH,SAAgB,QAAQ;IACtB,eAAK,CAAC,UAAU,CAAC,CAAA;AACnB,CAAC;AAFD,4BAEC;AAED;;;;;;;GAOG;AACH,SAAsB,KAAK,CAAI,IAAY,EAAE,EAAoB;;QAC/D,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,MAAS,CAAA;QAEb,IAAI;YACF,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;SACpB;gBAAS;YACR,QAAQ,EAAE,CAAA;SACX;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAAA;AAZD,sBAYC;AAED,yEAAyE;AACzE,uBAAuB;AACvB,yEAAyE;AAEzE;;;;;GAKG;AACH,8DAA8D;AAC9D,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAU;IAChD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,IAAY;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC;AAFD,4BAEC"}
|
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
"_from": "@actions/core@1.2.4",
|
||||||
|
"_id": "@actions/core@1.2.4",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-YJCEq8BE3CdN8+7HPZ/4DxJjk/OkZV2FFIf+DlZTC/4iBlzYCD5yjRR6eiOS5llO11zbRltIRuKAjMKaWTE6cg==",
|
||||||
|
"_location": "/@actions/core",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "version",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@actions/core@1.2.4",
|
||||||
|
"name": "@actions/core",
|
||||||
|
"escapedName": "@actions%2fcore",
|
||||||
|
"scope": "@actions",
|
||||||
|
"rawSpec": "1.2.4",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "1.2.4"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"#USER",
|
||||||
|
"/",
|
||||||
|
"/@actions/tool-cache"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.4.tgz",
|
||||||
|
"_shasum": "96179dbf9f8d951dd74b40a0dbd5c22555d186ab",
|
||||||
|
"_spec": "@actions/core@1.2.4",
|
||||||
|
"_where": "/Users/dbrock/Google Drive/appleiigs/install-merlin32-action",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/actions/toolkit/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "Actions core lib",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^12.0.2"
|
||||||
|
},
|
||||||
|
"directories": {
|
||||||
|
"lib": "lib",
|
||||||
|
"test": "__tests__"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"lib"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/actions/toolkit/tree/master/packages/core",
|
||||||
|
"keywords": [
|
||||||
|
"github",
|
||||||
|
"actions",
|
||||||
|
"core"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "lib/core.js",
|
||||||
|
"name": "@actions/core",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/actions/toolkit.git",
|
||||||
|
"directory": "packages/core"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"audit-moderate": "npm install && npm audit --audit-level=moderate",
|
||||||
|
"test": "echo \"Error: run tests from root\" && exit 1",
|
||||||
|
"tsc": "tsc"
|
||||||
|
},
|
||||||
|
"types": "lib/core.d.ts",
|
||||||
|
"version": "1.2.4"
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
# `@actions/exec`
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
#### Basic
|
||||||
|
|
||||||
|
You can use this package to execute tools in a cross platform way:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const exec = require('@actions/exec');
|
||||||
|
|
||||||
|
await exec.exec('node index.js');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Args
|
||||||
|
|
||||||
|
You can also pass in arg arrays:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const exec = require('@actions/exec');
|
||||||
|
|
||||||
|
await exec.exec('node', ['index.js', 'foo=bar']);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Output/options
|
||||||
|
|
||||||
|
Capture output or specify [other options](https://github.com/actions/toolkit/blob/d9347d4ab99fd507c0b9104b2cf79fb44fcc827d/packages/exec/src/interfaces.ts#L5):
|
||||||
|
|
||||||
|
```js
|
||||||
|
const exec = require('@actions/exec');
|
||||||
|
|
||||||
|
let myOutput = '';
|
||||||
|
let myError = '';
|
||||||
|
|
||||||
|
const options = {};
|
||||||
|
options.listeners = {
|
||||||
|
stdout: (data: Buffer) => {
|
||||||
|
myOutput += data.toString();
|
||||||
|
},
|
||||||
|
stderr: (data: Buffer) => {
|
||||||
|
myError += data.toString();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
options.cwd = './lib';
|
||||||
|
|
||||||
|
await exec.exec('node', ['index.js', 'foo=bar'], options);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Exec tools not in the PATH
|
||||||
|
|
||||||
|
You can specify the full path for tools not in the PATH:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const exec = require('@actions/exec');
|
||||||
|
|
||||||
|
await exec.exec('"/path/to/my-tool"', ['arg1']);
|
||||||
|
```
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { ExecOptions } from './interfaces';
|
||||||
|
export { ExecOptions };
|
||||||
|
/**
|
||||||
|
* Exec a command.
|
||||||
|
* Output will be streamed to the live console.
|
||||||
|
* Returns promise with return code
|
||||||
|
*
|
||||||
|
* @param commandLine command to execute (can include additional args). Must be correctly escaped.
|
||||||
|
* @param args optional arguments for tool. Escaping is handled by the lib.
|
||||||
|
* @param options optional exec options. See ExecOptions
|
||||||
|
* @returns Promise<number> exit code
|
||||||
|
*/
|
||||||
|
export declare function exec(commandLine: string, args?: string[], options?: ExecOptions): Promise<number>;
|
|
@ -0,0 +1,44 @@
|
||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const tr = __importStar(require("./toolrunner"));
|
||||||
|
/**
|
||||||
|
* Exec a command.
|
||||||
|
* Output will be streamed to the live console.
|
||||||
|
* Returns promise with return code
|
||||||
|
*
|
||||||
|
* @param commandLine command to execute (can include additional args). Must be correctly escaped.
|
||||||
|
* @param args optional arguments for tool. Escaping is handled by the lib.
|
||||||
|
* @param options optional exec options. See ExecOptions
|
||||||
|
* @returns Promise<number> exit code
|
||||||
|
*/
|
||||||
|
function exec(commandLine, args, options) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const commandArgs = tr.argStringToArray(commandLine);
|
||||||
|
if (commandArgs.length === 0) {
|
||||||
|
throw new Error(`Parameter 'commandLine' cannot be null or empty.`);
|
||||||
|
}
|
||||||
|
// Path to tool to execute should be first arg
|
||||||
|
const toolPath = commandArgs[0];
|
||||||
|
args = commandArgs.slice(1).concat(args || []);
|
||||||
|
const runner = new tr.ToolRunner(toolPath, args, options);
|
||||||
|
return runner.exec();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.exec = exec;
|
||||||
|
//# sourceMappingURL=exec.js.map
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AACA,iDAAkC;AAIlC;;;;;;;;;GASG;AACH,SAAsB,IAAI,CACxB,WAAmB,EACnB,IAAe,EACf,OAAqB;;QAErB,MAAM,WAAW,GAAG,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACpD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;SACpE;QACD,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAkB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACxE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;IACtB,CAAC;CAAA;AAdD,oBAcC"}
|
|
@ -0,0 +1,37 @@
|
||||||
|
/// <reference types="node" />
|
||||||
|
import * as stream from 'stream';
|
||||||
|
/**
|
||||||
|
* Interface for exec options
|
||||||
|
*/
|
||||||
|
export interface ExecOptions {
|
||||||
|
/** optional working directory. defaults to current */
|
||||||
|
cwd?: string;
|
||||||
|
/** optional envvar dictionary. defaults to current process's env */
|
||||||
|
env?: {
|
||||||
|
[key: string]: string;
|
||||||
|
};
|
||||||
|
/** optional. defaults to false */
|
||||||
|
silent?: boolean;
|
||||||
|
/** optional out stream to use. Defaults to process.stdout */
|
||||||
|
outStream?: stream.Writable;
|
||||||
|
/** optional err stream to use. Defaults to process.stderr */
|
||||||
|
errStream?: stream.Writable;
|
||||||
|
/** optional. whether to skip quoting/escaping arguments if needed. defaults to false. */
|
||||||
|
windowsVerbatimArguments?: boolean;
|
||||||
|
/** optional. whether to fail if output to stderr. defaults to false */
|
||||||
|
failOnStdErr?: boolean;
|
||||||
|
/** optional. defaults to failing on non zero. ignore will not fail leaving it up to the caller */
|
||||||
|
ignoreReturnCode?: boolean;
|
||||||
|
/** optional. How long in ms to wait for STDIO streams to close after the exit event of the process before terminating. defaults to 10000 */
|
||||||
|
delay?: number;
|
||||||
|
/** optional. input to write to the process on STDIN. */
|
||||||
|
input?: Buffer;
|
||||||
|
/** optional. Listeners for output. Callback functions that will be called on these events */
|
||||||
|
listeners?: {
|
||||||
|
stdout?: (data: Buffer) => void;
|
||||||
|
stderr?: (data: Buffer) => void;
|
||||||
|
stdline?: (data: string) => void;
|
||||||
|
errline?: (data: string) => void;
|
||||||
|
debug?: (data: string) => void;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
//# sourceMappingURL=interfaces.js.map
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":""}
|
|
@ -0,0 +1,37 @@
|
||||||
|
/// <reference types="node" />
|
||||||
|
import * as events from 'events';
|
||||||
|
import * as im from './interfaces';
|
||||||
|
export declare class ToolRunner extends events.EventEmitter {
|
||||||
|
constructor(toolPath: string, args?: string[], options?: im.ExecOptions);
|
||||||
|
private toolPath;
|
||||||
|
private args;
|
||||||
|
private options;
|
||||||
|
private _debug;
|
||||||
|
private _getCommandString;
|
||||||
|
private _processLineBuffer;
|
||||||
|
private _getSpawnFileName;
|
||||||
|
private _getSpawnArgs;
|
||||||
|
private _endsWith;
|
||||||
|
private _isCmdFile;
|
||||||
|
private _windowsQuoteCmdArg;
|
||||||
|
private _uvQuoteCmdArg;
|
||||||
|
private _cloneExecOptions;
|
||||||
|
private _getSpawnOptions;
|
||||||
|
/**
|
||||||
|
* Exec a tool.
|
||||||
|
* Output will be streamed to the live console.
|
||||||
|
* Returns promise with return code
|
||||||
|
*
|
||||||
|
* @param tool path to tool to exec
|
||||||
|
* @param options optional exec options. See ExecOptions
|
||||||
|
* @returns number
|
||||||
|
*/
|
||||||
|
exec(): Promise<number>;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Convert an arg string to an array of args. Handles escaping
|
||||||
|
*
|
||||||
|
* @param argString string of arguments
|
||||||
|
* @returns string[] array of arguments
|
||||||
|
*/
|
||||||
|
export declare function argStringToArray(argString: string): string[];
|
|
@ -0,0 +1,600 @@
|
||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const os = __importStar(require("os"));
|
||||||
|
const events = __importStar(require("events"));
|
||||||
|
const child = __importStar(require("child_process"));
|
||||||
|
const path = __importStar(require("path"));
|
||||||
|
const io = __importStar(require("@actions/io"));
|
||||||
|
const ioUtil = __importStar(require("@actions/io/lib/io-util"));
|
||||||
|
/* eslint-disable @typescript-eslint/unbound-method */
|
||||||
|
const IS_WINDOWS = process.platform === 'win32';
|
||||||
|
/*
|
||||||
|
* Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way.
|
||||||
|
*/
|
||||||
|
class ToolRunner extends events.EventEmitter {
|
||||||
|
constructor(toolPath, args, options) {
|
||||||
|
super();
|
||||||
|
if (!toolPath) {
|
||||||
|
throw new Error("Parameter 'toolPath' cannot be null or empty.");
|
||||||
|
}
|
||||||
|
this.toolPath = toolPath;
|
||||||
|
this.args = args || [];
|
||||||
|
this.options = options || {};
|
||||||
|
}
|
||||||
|
_debug(message) {
|
||||||
|
if (this.options.listeners && this.options.listeners.debug) {
|
||||||
|
this.options.listeners.debug(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_getCommandString(options, noPrefix) {
|
||||||
|
const toolPath = this._getSpawnFileName();
|
||||||
|
const args = this._getSpawnArgs(options);
|
||||||
|
let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool
|
||||||
|
if (IS_WINDOWS) {
|
||||||
|
// Windows + cmd file
|
||||||
|
if (this._isCmdFile()) {
|
||||||
|
cmd += toolPath;
|
||||||
|
for (const a of args) {
|
||||||
|
cmd += ` ${a}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Windows + verbatim
|
||||||
|
else if (options.windowsVerbatimArguments) {
|
||||||
|
cmd += `"${toolPath}"`;
|
||||||
|
for (const a of args) {
|
||||||
|
cmd += ` ${a}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Windows (regular)
|
||||||
|
else {
|
||||||
|
cmd += this._windowsQuoteCmdArg(toolPath);
|
||||||
|
for (const a of args) {
|
||||||
|
cmd += ` ${this._windowsQuoteCmdArg(a)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// OSX/Linux - this can likely be improved with some form of quoting.
|
||||||
|
// creating processes on Unix is fundamentally different than Windows.
|
||||||
|
// on Unix, execvp() takes an arg array.
|
||||||
|
cmd += toolPath;
|
||||||
|
for (const a of args) {
|
||||||
|
cmd += ` ${a}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cmd;
|
||||||
|
}
|
||||||
|
_processLineBuffer(data, strBuffer, onLine) {
|
||||||
|
try {
|
||||||
|
let s = strBuffer + data.toString();
|
||||||
|
let n = s.indexOf(os.EOL);
|
||||||
|
while (n > -1) {
|
||||||
|
const line = s.substring(0, n);
|
||||||
|
onLine(line);
|
||||||
|
// the rest of the string ...
|
||||||
|
s = s.substring(n + os.EOL.length);
|
||||||
|
n = s.indexOf(os.EOL);
|
||||||
|
}
|
||||||
|
strBuffer = s;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// streaming lines to console is best effort. Don't fail a build.
|
||||||
|
this._debug(`error processing line. Failed with error ${err}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_getSpawnFileName() {
|
||||||
|
if (IS_WINDOWS) {
|
||||||
|
if (this._isCmdFile()) {
|
||||||
|
return process.env['COMSPEC'] || 'cmd.exe';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.toolPath;
|
||||||
|
}
|
||||||
|
_getSpawnArgs(options) {
|
||||||
|
if (IS_WINDOWS) {
|
||||||
|
if (this._isCmdFile()) {
|
||||||
|
let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;
|
||||||
|
for (const a of this.args) {
|
||||||
|
argline += ' ';
|
||||||
|
argline += options.windowsVerbatimArguments
|
||||||
|
? a
|
||||||
|
: this._windowsQuoteCmdArg(a);
|
||||||
|
}
|
||||||
|
argline += '"';
|
||||||
|
return [argline];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.args;
|
||||||
|
}
|
||||||
|
_endsWith(str, end) {
|
||||||
|
return str.endsWith(end);
|
||||||
|
}
|
||||||
|
_isCmdFile() {
|
||||||
|
const upperToolPath = this.toolPath.toUpperCase();
|
||||||
|
return (this._endsWith(upperToolPath, '.CMD') ||
|
||||||
|
this._endsWith(upperToolPath, '.BAT'));
|
||||||
|
}
|
||||||
|
_windowsQuoteCmdArg(arg) {
|
||||||
|
// for .exe, apply the normal quoting rules that libuv applies
|
||||||
|
if (!this._isCmdFile()) {
|
||||||
|
return this._uvQuoteCmdArg(arg);
|
||||||
|
}
|
||||||
|
// otherwise apply quoting rules specific to the cmd.exe command line parser.
|
||||||
|
// the libuv rules are generic and are not designed specifically for cmd.exe
|
||||||
|
// command line parser.
|
||||||
|
//
|
||||||
|
// for a detailed description of the cmd.exe command line parser, refer to
|
||||||
|
// http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912
|
||||||
|
// need quotes for empty arg
|
||||||
|
if (!arg) {
|
||||||
|
return '""';
|
||||||
|
}
|
||||||
|
// determine whether the arg needs to be quoted
|
||||||
|
const cmdSpecialChars = [
|
||||||
|
' ',
|
||||||
|
'\t',
|
||||||
|
'&',
|
||||||
|
'(',
|
||||||
|
')',
|
||||||
|
'[',
|
||||||
|
']',
|
||||||
|
'{',
|
||||||
|
'}',
|
||||||
|
'^',
|
||||||
|
'=',
|
||||||
|
';',
|
||||||
|
'!',
|
||||||
|
"'",
|
||||||
|
'+',
|
||||||
|
',',
|
||||||
|
'`',
|
||||||
|
'~',
|
||||||
|
'|',
|
||||||
|
'<',
|
||||||
|
'>',
|
||||||
|
'"'
|
||||||
|
];
|
||||||
|
let needsQuotes = false;
|
||||||
|
for (const char of arg) {
|
||||||
|
if (cmdSpecialChars.some(x => x === char)) {
|
||||||
|
needsQuotes = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// short-circuit if quotes not needed
|
||||||
|
if (!needsQuotes) {
|
||||||
|
return arg;
|
||||||
|
}
|
||||||
|
// the following quoting rules are very similar to the rules that by libuv applies.
|
||||||
|
//
|
||||||
|
// 1) wrap the string in quotes
|
||||||
|
//
|
||||||
|
// 2) double-up quotes - i.e. " => ""
|
||||||
|
//
|
||||||
|
// this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately
|
||||||
|
// doesn't work well with a cmd.exe command line.
|
||||||
|
//
|
||||||
|
// note, replacing " with "" also works well if the arg is passed to a downstream .NET console app.
|
||||||
|
// for example, the command line:
|
||||||
|
// foo.exe "myarg:""my val"""
|
||||||
|
// is parsed by a .NET console app into an arg array:
|
||||||
|
// [ "myarg:\"my val\"" ]
|
||||||
|
// which is the same end result when applying libuv quoting rules. although the actual
|
||||||
|
// command line from libuv quoting rules would look like:
|
||||||
|
// foo.exe "myarg:\"my val\""
|
||||||
|
//
|
||||||
|
// 3) double-up slashes that precede a quote,
|
||||||
|
// e.g. hello \world => "hello \world"
|
||||||
|
// hello\"world => "hello\\""world"
|
||||||
|
// hello\\"world => "hello\\\\""world"
|
||||||
|
// hello world\ => "hello world\\"
|
||||||
|
//
|
||||||
|
// technically this is not required for a cmd.exe command line, or the batch argument parser.
|
||||||
|
// the reasons for including this as a .cmd quoting rule are:
|
||||||
|
//
|
||||||
|
// a) this is optimized for the scenario where the argument is passed from the .cmd file to an
|
||||||
|
// external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.
|
||||||
|
//
|
||||||
|
// b) it's what we've been doing previously (by deferring to node default behavior) and we
|
||||||
|
// haven't heard any complaints about that aspect.
|
||||||
|
//
|
||||||
|
// note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be
|
||||||
|
// escaped when used on the command line directly - even though within a .cmd file % can be escaped
|
||||||
|
// by using %%.
|
||||||
|
//
|
||||||
|
// the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts
|
||||||
|
// the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.
|
||||||
|
//
|
||||||
|
// one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would
|
||||||
|
// often work, since it is unlikely that var^ would exist, and the ^ character is removed when the
|
||||||
|
// variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args
|
||||||
|
// to an external program.
|
||||||
|
//
|
||||||
|
// an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.
|
||||||
|
// % can be escaped within a .cmd file.
|
||||||
|
let reverse = '"';
|
||||||
|
let quoteHit = true;
|
||||||
|
for (let i = arg.length; i > 0; i--) {
|
||||||
|
// walk the string in reverse
|
||||||
|
reverse += arg[i - 1];
|
||||||
|
if (quoteHit && arg[i - 1] === '\\') {
|
||||||
|
reverse += '\\'; // double the slash
|
||||||
|
}
|
||||||
|
else if (arg[i - 1] === '"') {
|
||||||
|
quoteHit = true;
|
||||||
|
reverse += '"'; // double the quote
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
quoteHit = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reverse += '"';
|
||||||
|
return reverse
|
||||||
|
.split('')
|
||||||
|
.reverse()
|
||||||
|
.join('');
|
||||||
|
}
|
||||||
|
_uvQuoteCmdArg(arg) {
|
||||||
|
// Tool runner wraps child_process.spawn() and needs to apply the same quoting as
|
||||||
|
// Node in certain cases where the undocumented spawn option windowsVerbatimArguments
|
||||||
|
// is used.
|
||||||
|
//
|
||||||
|
// Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV,
|
||||||
|
// see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details),
|
||||||
|
// pasting copyright notice from Node within this function:
|
||||||
|
//
|
||||||
|
// Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
if (!arg) {
|
||||||
|
// Need double quotation for empty argument
|
||||||
|
return '""';
|
||||||
|
}
|
||||||
|
if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) {
|
||||||
|
// No quotation needed
|
||||||
|
return arg;
|
||||||
|
}
|
||||||
|
if (!arg.includes('"') && !arg.includes('\\')) {
|
||||||
|
// No embedded double quotes or backslashes, so I can just wrap
|
||||||
|
// quote marks around the whole thing.
|
||||||
|
return `"${arg}"`;
|
||||||
|
}
|
||||||
|
// Expected input/output:
|
||||||
|
// input : hello"world
|
||||||
|
// output: "hello\"world"
|
||||||
|
// input : hello""world
|
||||||
|
// output: "hello\"\"world"
|
||||||
|
// input : hello\world
|
||||||
|
// output: hello\world
|
||||||
|
// input : hello\\world
|
||||||
|
// output: hello\\world
|
||||||
|
// input : hello\"world
|
||||||
|
// output: "hello\\\"world"
|
||||||
|
// input : hello\\"world
|
||||||
|
// output: "hello\\\\\"world"
|
||||||
|
// input : hello world\
|
||||||
|
// output: "hello world\\" - note the comment in libuv actually reads "hello world\"
|
||||||
|
// but it appears the comment is wrong, it should be "hello world\\"
|
||||||
|
let reverse = '"';
|
||||||
|
let quoteHit = true;
|
||||||
|
for (let i = arg.length; i > 0; i--) {
|
||||||
|
// walk the string in reverse
|
||||||
|
reverse += arg[i - 1];
|
||||||
|
if (quoteHit && arg[i - 1] === '\\') {
|
||||||
|
reverse += '\\';
|
||||||
|
}
|
||||||
|
else if (arg[i - 1] === '"') {
|
||||||
|
quoteHit = true;
|
||||||
|
reverse += '\\';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
quoteHit = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reverse += '"';
|
||||||
|
return reverse
|
||||||
|
.split('')
|
||||||
|
.reverse()
|
||||||
|
.join('');
|
||||||
|
}
|
||||||
|
_cloneExecOptions(options) {
|
||||||
|
options = options || {};
|
||||||
|
const result = {
|
||||||
|
cwd: options.cwd || process.cwd(),
|
||||||
|
env: options.env || process.env,
|
||||||
|
silent: options.silent || false,
|
||||||
|
windowsVerbatimArguments: options.windowsVerbatimArguments || false,
|
||||||
|
failOnStdErr: options.failOnStdErr || false,
|
||||||
|
ignoreReturnCode: options.ignoreReturnCode || false,
|
||||||
|
delay: options.delay || 10000
|
||||||
|
};
|
||||||
|
result.outStream = options.outStream || process.stdout;
|
||||||
|
result.errStream = options.errStream || process.stderr;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
_getSpawnOptions(options, toolPath) {
|
||||||
|
options = options || {};
|
||||||
|
const result = {};
|
||||||
|
result.cwd = options.cwd;
|
||||||
|
result.env = options.env;
|
||||||
|
result['windowsVerbatimArguments'] =
|
||||||
|
options.windowsVerbatimArguments || this._isCmdFile();
|
||||||
|
if (options.windowsVerbatimArguments) {
|
||||||
|
result.argv0 = `"${toolPath}"`;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Exec a tool.
|
||||||
|
* Output will be streamed to the live console.
|
||||||
|
* Returns promise with return code
|
||||||
|
*
|
||||||
|
* @param tool path to tool to exec
|
||||||
|
* @param options optional exec options. See ExecOptions
|
||||||
|
* @returns number
|
||||||
|
*/
|
||||||
|
exec() {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
// root the tool path if it is unrooted and contains relative pathing
|
||||||
|
if (!ioUtil.isRooted(this.toolPath) &&
|
||||||
|
(this.toolPath.includes('/') ||
|
||||||
|
(IS_WINDOWS && this.toolPath.includes('\\')))) {
|
||||||
|
// prefer options.cwd if it is specified, however options.cwd may also need to be rooted
|
||||||
|
this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath);
|
||||||
|
}
|
||||||
|
// if the tool is only a file name, then resolve it from the PATH
|
||||||
|
// otherwise verify it exists (add extension on Windows if necessary)
|
||||||
|
this.toolPath = yield io.which(this.toolPath, true);
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this._debug(`exec tool: ${this.toolPath}`);
|
||||||
|
this._debug('arguments:');
|
||||||
|
for (const arg of this.args) {
|
||||||
|
this._debug(` ${arg}`);
|
||||||
|
}
|
||||||
|
const optionsNonNull = this._cloneExecOptions(this.options);
|
||||||
|
if (!optionsNonNull.silent && optionsNonNull.outStream) {
|
||||||
|
optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL);
|
||||||
|
}
|
||||||
|
const state = new ExecState(optionsNonNull, this.toolPath);
|
||||||
|
state.on('debug', (message) => {
|
||||||
|
this._debug(message);
|
||||||
|
});
|
||||||
|
const fileName = this._getSpawnFileName();
|
||||||
|
const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));
|
||||||
|
const stdbuffer = '';
|
||||||
|
if (cp.stdout) {
|
||||||
|
cp.stdout.on('data', (data) => {
|
||||||
|
if (this.options.listeners && this.options.listeners.stdout) {
|
||||||
|
this.options.listeners.stdout(data);
|
||||||
|
}
|
||||||
|
if (!optionsNonNull.silent && optionsNonNull.outStream) {
|
||||||
|
optionsNonNull.outStream.write(data);
|
||||||
|
}
|
||||||
|
this._processLineBuffer(data, stdbuffer, (line) => {
|
||||||
|
if (this.options.listeners && this.options.listeners.stdline) {
|
||||||
|
this.options.listeners.stdline(line);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const errbuffer = '';
|
||||||
|
if (cp.stderr) {
|
||||||
|
cp.stderr.on('data', (data) => {
|
||||||
|
state.processStderr = true;
|
||||||
|
if (this.options.listeners && this.options.listeners.stderr) {
|
||||||
|
this.options.listeners.stderr(data);
|
||||||
|
}
|
||||||
|
if (!optionsNonNull.silent &&
|
||||||
|
optionsNonNull.errStream &&
|
||||||
|
optionsNonNull.outStream) {
|
||||||
|
const s = optionsNonNull.failOnStdErr
|
||||||
|
? optionsNonNull.errStream
|
||||||
|
: optionsNonNull.outStream;
|
||||||
|
s.write(data);
|
||||||
|
}
|
||||||
|
this._processLineBuffer(data, errbuffer, (line) => {
|
||||||
|
if (this.options.listeners && this.options.listeners.errline) {
|
||||||
|
this.options.listeners.errline(line);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
cp.on('error', (err) => {
|
||||||
|
state.processError = err.message;
|
||||||
|
state.processExited = true;
|
||||||
|
state.processClosed = true;
|
||||||
|
state.CheckComplete();
|
||||||
|
});
|
||||||
|
cp.on('exit', (code) => {
|
||||||
|
state.processExitCode = code;
|
||||||
|
state.processExited = true;
|
||||||
|
this._debug(`Exit code ${code} received from tool '${this.toolPath}'`);
|
||||||
|
state.CheckComplete();
|
||||||
|
});
|
||||||
|
cp.on('close', (code) => {
|
||||||
|
state.processExitCode = code;
|
||||||
|
state.processExited = true;
|
||||||
|
state.processClosed = true;
|
||||||
|
this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);
|
||||||
|
state.CheckComplete();
|
||||||
|
});
|
||||||
|
state.on('done', (error, exitCode) => {
|
||||||
|
if (stdbuffer.length > 0) {
|
||||||
|
this.emit('stdline', stdbuffer);
|
||||||
|
}
|
||||||
|
if (errbuffer.length > 0) {
|
||||||
|
this.emit('errline', errbuffer);
|
||||||
|
}
|
||||||
|
cp.removeAllListeners();
|
||||||
|
if (error) {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
resolve(exitCode);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (this.options.input) {
|
||||||
|
if (!cp.stdin) {
|
||||||
|
throw new Error('child process missing stdin');
|
||||||
|
}
|
||||||
|
cp.stdin.end(this.options.input);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.ToolRunner = ToolRunner;
|
||||||
|
/**
|
||||||
|
* Convert an arg string to an array of args. Handles escaping
|
||||||
|
*
|
||||||
|
* @param argString string of arguments
|
||||||
|
* @returns string[] array of arguments
|
||||||
|
*/
|
||||||
|
function argStringToArray(argString) {
|
||||||
|
const args = [];
|
||||||
|
let inQuotes = false;
|
||||||
|
let escaped = false;
|
||||||
|
let arg = '';
|
||||||
|
function append(c) {
|
||||||
|
// we only escape double quotes.
|
||||||
|
if (escaped && c !== '"') {
|
||||||
|
arg += '\\';
|
||||||
|
}
|
||||||
|
arg += c;
|
||||||
|
escaped = false;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < argString.length; i++) {
|
||||||
|
const c = argString.charAt(i);
|
||||||
|
if (c === '"') {
|
||||||
|
if (!escaped) {
|
||||||
|
inQuotes = !inQuotes;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
append(c);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (c === '\\' && escaped) {
|
||||||
|
append(c);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (c === '\\' && inQuotes) {
|
||||||
|
escaped = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (c === ' ' && !inQuotes) {
|
||||||
|
if (arg.length > 0) {
|
||||||
|
args.push(arg);
|
||||||
|
arg = '';
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
append(c);
|
||||||
|
}
|
||||||
|
if (arg.length > 0) {
|
||||||
|
args.push(arg.trim());
|
||||||
|
}
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
exports.argStringToArray = argStringToArray;
|
||||||
|
class ExecState extends events.EventEmitter {
|
||||||
|
constructor(options, toolPath) {
|
||||||
|
super();
|
||||||
|
this.processClosed = false; // tracks whether the process has exited and stdio is closed
|
||||||
|
this.processError = '';
|
||||||
|
this.processExitCode = 0;
|
||||||
|
this.processExited = false; // tracks whether the process has exited
|
||||||
|
this.processStderr = false; // tracks whether stderr was written to
|
||||||
|
this.delay = 10000; // 10 seconds
|
||||||
|
this.done = false;
|
||||||
|
this.timeout = null;
|
||||||
|
if (!toolPath) {
|
||||||
|
throw new Error('toolPath must not be empty');
|
||||||
|
}
|
||||||
|
this.options = options;
|
||||||
|
this.toolPath = toolPath;
|
||||||
|
if (options.delay) {
|
||||||
|
this.delay = options.delay;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CheckComplete() {
|
||||||
|
if (this.done) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.processClosed) {
|
||||||
|
this._setResult();
|
||||||
|
}
|
||||||
|
else if (this.processExited) {
|
||||||
|
this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_debug(message) {
|
||||||
|
this.emit('debug', message);
|
||||||
|
}
|
||||||
|
_setResult() {
|
||||||
|
// determine whether there is an error
|
||||||
|
let error;
|
||||||
|
if (this.processExited) {
|
||||||
|
if (this.processError) {
|
||||||
|
error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);
|
||||||
|
}
|
||||||
|
else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) {
|
||||||
|
error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);
|
||||||
|
}
|
||||||
|
else if (this.processStderr && this.options.failOnStdErr) {
|
||||||
|
error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// clear the timeout
|
||||||
|
if (this.timeout) {
|
||||||
|
clearTimeout(this.timeout);
|
||||||
|
this.timeout = null;
|
||||||
|
}
|
||||||
|
this.done = true;
|
||||||
|
this.emit('done', error, this.processExitCode);
|
||||||
|
}
|
||||||
|
static HandleTimeout(state) {
|
||||||
|
if (state.done) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!state.processClosed && state.processExited) {
|
||||||
|
const message = `The STDIO streams did not close within ${state.delay /
|
||||||
|
1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;
|
||||||
|
state._debug(message);
|
||||||
|
}
|
||||||
|
state._setResult();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=toolrunner.js.map
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
"_from": "@actions/exec@1.0.4",
|
||||||
|
"_id": "@actions/exec@1.0.4",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-4DPChWow9yc9W3WqEbUj8Nr86xkpyE29ZzWjXucHItclLbEW6jr80Zx4nqv18QL6KK65+cifiQZXvnqgTV6oHw==",
|
||||||
|
"_location": "/@actions/exec",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "version",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@actions/exec@1.0.4",
|
||||||
|
"name": "@actions/exec",
|
||||||
|
"escapedName": "@actions%2fexec",
|
||||||
|
"scope": "@actions",
|
||||||
|
"rawSpec": "1.0.4",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "1.0.4"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"#USER",
|
||||||
|
"/",
|
||||||
|
"/@actions/tool-cache"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.0.4.tgz",
|
||||||
|
"_shasum": "99d75310e62e59fc37d2ee6dcff6d4bffadd3a5d",
|
||||||
|
"_spec": "@actions/exec@1.0.4",
|
||||||
|
"_where": "/Users/dbrock/Google Drive/appleiigs/install-merlin32-action",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/actions/toolkit/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"dependencies": {
|
||||||
|
"@actions/io": "^1.0.1"
|
||||||
|
},
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "Actions exec lib",
|
||||||
|
"directories": {
|
||||||
|
"lib": "lib",
|
||||||
|
"test": "__tests__"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"lib"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/actions/toolkit/tree/master/packages/exec",
|
||||||
|
"keywords": [
|
||||||
|
"github",
|
||||||
|
"actions",
|
||||||
|
"exec"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "lib/exec.js",
|
||||||
|
"name": "@actions/exec",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/actions/toolkit.git",
|
||||||
|
"directory": "packages/exec"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"audit-moderate": "npm install && npm audit --audit-level=moderate",
|
||||||
|
"test": "echo \"Error: run tests from root\" && exit 1",
|
||||||
|
"tsc": "tsc"
|
||||||
|
},
|
||||||
|
"types": "lib/exec.d.ts",
|
||||||
|
"version": "1.0.4"
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
Actions Http Client for Node.js
|
||||||
|
|
||||||
|
Copyright (c) GitHub, Inc.
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
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.
|
|
@ -0,0 +1,79 @@
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="actions.png">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
# Actions Http-Client
|
||||||
|
|
||||||
|
[![Http Status](https://github.com/actions/http-client/workflows/http-tests/badge.svg)](https://github.com/actions/http-client/actions)
|
||||||
|
|
||||||
|
A lightweight HTTP client optimized for use with actions, TypeScript with generics and async await.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- HTTP client with TypeScript generics and async/await/Promises
|
||||||
|
- Typings included so no need to acquire separately (great for intellisense and no versioning drift)
|
||||||
|
- [Proxy support](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-self-hosted-runners#using-a-proxy-server-with-self-hosted-runners) just works with actions and the runner
|
||||||
|
- Targets ES2019 (runner runs actions with node 12+). Only supported on node 12+.
|
||||||
|
- Basic, Bearer and PAT Support out of the box. Extensible handlers for others.
|
||||||
|
- Redirects supported
|
||||||
|
|
||||||
|
Features and releases [here](./RELEASES.md)
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install @actions/http-client --save
|
||||||
|
```
|
||||||
|
|
||||||
|
## Samples
|
||||||
|
|
||||||
|
See the [HTTP](./__tests__) tests for detailed examples.
|
||||||
|
|
||||||
|
## Errors
|
||||||
|
|
||||||
|
### HTTP
|
||||||
|
|
||||||
|
The HTTP client does not throw unless truly exceptional.
|
||||||
|
|
||||||
|
* A request that successfully executes resulting in a 404, 500 etc... will return a response object with a status code and a body.
|
||||||
|
* Redirects (3xx) will be followed by default.
|
||||||
|
|
||||||
|
See [HTTP tests](./__tests__) for detailed examples.
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
To enable detailed console logging of all HTTP requests and responses, set the NODE_DEBUG environment varible:
|
||||||
|
|
||||||
|
```
|
||||||
|
export NODE_DEBUG=http
|
||||||
|
```
|
||||||
|
|
||||||
|
## Node support
|
||||||
|
|
||||||
|
The http-client is built using the latest LTS version of Node 12. It may work on previous node LTS versions but it's tested and officially supported on Node12+.
|
||||||
|
|
||||||
|
## Support and Versioning
|
||||||
|
|
||||||
|
We follow semver and will hold compatibility between major versions and increment the minor version with new features and capabilities (while holding compat).
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
We welcome PRs. Please create an issue and if applicable, a design before proceeding with code.
|
||||||
|
|
||||||
|
once:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
To build:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
To run all tests:
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
|
@ -0,0 +1,16 @@
|
||||||
|
## Releases
|
||||||
|
|
||||||
|
## 1.0.7
|
||||||
|
Update NPM dependencies and add 429 to the list of HttpCodes
|
||||||
|
|
||||||
|
## 1.0.6
|
||||||
|
Automatically sends Content-Type and Accept application/json headers for \<verb>Json() helper methods if not set in the client or parameters.
|
||||||
|
|
||||||
|
## 1.0.5
|
||||||
|
Adds \<verb>Json() helper methods for json over http scenarios.
|
||||||
|
|
||||||
|
## 1.0.4
|
||||||
|
Started to add \<verb>Json() helper methods. Do not use this release for that. Use >= 1.0.5 since there was an issue with types.
|
||||||
|
|
||||||
|
## 1.0.1 to 1.0.3
|
||||||
|
Adds proxy support.
|
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
|
@ -0,0 +1,23 @@
|
||||||
|
import ifm = require('./interfaces');
|
||||||
|
export declare class BasicCredentialHandler implements ifm.IRequestHandler {
|
||||||
|
username: string;
|
||||||
|
password: string;
|
||||||
|
constructor(username: string, password: string);
|
||||||
|
prepareRequest(options: any): void;
|
||||||
|
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean;
|
||||||
|
handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>;
|
||||||
|
}
|
||||||
|
export declare class BearerCredentialHandler implements ifm.IRequestHandler {
|
||||||
|
token: string;
|
||||||
|
constructor(token: string);
|
||||||
|
prepareRequest(options: any): void;
|
||||||
|
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean;
|
||||||
|
handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>;
|
||||||
|
}
|
||||||
|
export declare class PersonalAccessTokenCredentialHandler implements ifm.IRequestHandler {
|
||||||
|
token: string;
|
||||||
|
constructor(token: string);
|
||||||
|
prepareRequest(options: any): void;
|
||||||
|
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean;
|
||||||
|
handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>;
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
class BasicCredentialHandler {
|
||||||
|
constructor(username, password) {
|
||||||
|
this.username = username;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
prepareRequest(options) {
|
||||||
|
options.headers['Authorization'] =
|
||||||
|
'Basic ' +
|
||||||
|
Buffer.from(this.username + ':' + this.password).toString('base64');
|
||||||
|
}
|
||||||
|
// This handler cannot handle 401
|
||||||
|
canHandleAuthentication(response) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
handleAuthentication(httpClient, requestInfo, objs) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.BasicCredentialHandler = BasicCredentialHandler;
|
||||||
|
class BearerCredentialHandler {
|
||||||
|
constructor(token) {
|
||||||
|
this.token = token;
|
||||||
|
}
|
||||||
|
// currently implements pre-authorization
|
||||||
|
// TODO: support preAuth = false where it hooks on 401
|
||||||
|
prepareRequest(options) {
|
||||||
|
options.headers['Authorization'] = 'Bearer ' + this.token;
|
||||||
|
}
|
||||||
|
// This handler cannot handle 401
|
||||||
|
canHandleAuthentication(response) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
handleAuthentication(httpClient, requestInfo, objs) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.BearerCredentialHandler = BearerCredentialHandler;
|
||||||
|
class PersonalAccessTokenCredentialHandler {
|
||||||
|
constructor(token) {
|
||||||
|
this.token = token;
|
||||||
|
}
|
||||||
|
// currently implements pre-authorization
|
||||||
|
// TODO: support preAuth = false where it hooks on 401
|
||||||
|
prepareRequest(options) {
|
||||||
|
options.headers['Authorization'] =
|
||||||
|
'Basic ' + Buffer.from('PAT:' + this.token).toString('base64');
|
||||||
|
}
|
||||||
|
// This handler cannot handle 401
|
||||||
|
canHandleAuthentication(response) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
handleAuthentication(httpClient, requestInfo, objs) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
|
|
@ -0,0 +1,119 @@
|
||||||
|
/// <reference types="node" />
|
||||||
|
import http = require('http');
|
||||||
|
import ifm = require('./interfaces');
|
||||||
|
export declare enum HttpCodes {
|
||||||
|
OK = 200,
|
||||||
|
MultipleChoices = 300,
|
||||||
|
MovedPermanently = 301,
|
||||||
|
ResourceMoved = 302,
|
||||||
|
SeeOther = 303,
|
||||||
|
NotModified = 304,
|
||||||
|
UseProxy = 305,
|
||||||
|
SwitchProxy = 306,
|
||||||
|
TemporaryRedirect = 307,
|
||||||
|
PermanentRedirect = 308,
|
||||||
|
BadRequest = 400,
|
||||||
|
Unauthorized = 401,
|
||||||
|
PaymentRequired = 402,
|
||||||
|
Forbidden = 403,
|
||||||
|
NotFound = 404,
|
||||||
|
MethodNotAllowed = 405,
|
||||||
|
NotAcceptable = 406,
|
||||||
|
ProxyAuthenticationRequired = 407,
|
||||||
|
RequestTimeout = 408,
|
||||||
|
Conflict = 409,
|
||||||
|
Gone = 410,
|
||||||
|
TooManyRequests = 429,
|
||||||
|
InternalServerError = 500,
|
||||||
|
NotImplemented = 501,
|
||||||
|
BadGateway = 502,
|
||||||
|
ServiceUnavailable = 503,
|
||||||
|
GatewayTimeout = 504
|
||||||
|
}
|
||||||
|
export declare enum Headers {
|
||||||
|
Accept = "accept",
|
||||||
|
ContentType = "content-type"
|
||||||
|
}
|
||||||
|
export declare enum MediaTypes {
|
||||||
|
ApplicationJson = "application/json"
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Returns the proxy URL, depending upon the supplied url and proxy environment variables.
|
||||||
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
||||||
|
*/
|
||||||
|
export declare function getProxyUrl(serverUrl: string): string;
|
||||||
|
export declare class HttpClientResponse implements ifm.IHttpClientResponse {
|
||||||
|
constructor(message: http.IncomingMessage);
|
||||||
|
message: http.IncomingMessage;
|
||||||
|
readBody(): Promise<string>;
|
||||||
|
}
|
||||||
|
export declare function isHttps(requestUrl: string): boolean;
|
||||||
|
export declare class HttpClient {
|
||||||
|
userAgent: string | undefined;
|
||||||
|
handlers: ifm.IRequestHandler[];
|
||||||
|
requestOptions: ifm.IRequestOptions;
|
||||||
|
private _ignoreSslError;
|
||||||
|
private _socketTimeout;
|
||||||
|
private _allowRedirects;
|
||||||
|
private _allowRedirectDowngrade;
|
||||||
|
private _maxRedirects;
|
||||||
|
private _allowRetries;
|
||||||
|
private _maxRetries;
|
||||||
|
private _agent;
|
||||||
|
private _proxyAgent;
|
||||||
|
private _keepAlive;
|
||||||
|
private _disposed;
|
||||||
|
constructor(userAgent?: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions);
|
||||||
|
options(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
get(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
del(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
post(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
patch(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
put(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
head(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
/**
|
||||||
|
* Gets a typed object from an endpoint
|
||||||
|
* Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
|
||||||
|
*/
|
||||||
|
getJson<T>(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.ITypedResponse<T>>;
|
||||||
|
postJson<T>(requestUrl: string, obj: any, additionalHeaders?: ifm.IHeaders): Promise<ifm.ITypedResponse<T>>;
|
||||||
|
putJson<T>(requestUrl: string, obj: any, additionalHeaders?: ifm.IHeaders): Promise<ifm.ITypedResponse<T>>;
|
||||||
|
patchJson<T>(requestUrl: string, obj: any, additionalHeaders?: ifm.IHeaders): Promise<ifm.ITypedResponse<T>>;
|
||||||
|
/**
|
||||||
|
* Makes a raw http request.
|
||||||
|
* All other methods such as get, post, patch, and request ultimately call this.
|
||||||
|
* Prefer get, del, post and patch
|
||||||
|
*/
|
||||||
|
request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
/**
|
||||||
|
* Needs to be called if keepAlive is set to true in request options.
|
||||||
|
*/
|
||||||
|
dispose(): void;
|
||||||
|
/**
|
||||||
|
* Raw request.
|
||||||
|
* @param info
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
requestRaw(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream): Promise<ifm.IHttpClientResponse>;
|
||||||
|
/**
|
||||||
|
* Raw request with callback.
|
||||||
|
* @param info
|
||||||
|
* @param data
|
||||||
|
* @param onResult
|
||||||
|
*/
|
||||||
|
requestRawWithCallback(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: ifm.IHttpClientResponse) => void): void;
|
||||||
|
/**
|
||||||
|
* Gets an http agent. This function is useful when you need an http agent that handles
|
||||||
|
* routing through a proxy server - depending upon the url and proxy environment variables.
|
||||||
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
||||||
|
*/
|
||||||
|
getAgent(serverUrl: string): http.Agent;
|
||||||
|
private _prepareRequest;
|
||||||
|
private _mergeHeaders;
|
||||||
|
private _getExistingOrDefaultHeader;
|
||||||
|
private _getAgent;
|
||||||
|
private _performExponentialBackoff;
|
||||||
|
private static dateTimeDeserializer;
|
||||||
|
private _processResponse;
|
||||||
|
}
|
|
@ -0,0 +1,531 @@
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const url = require("url");
|
||||||
|
const http = require("http");
|
||||||
|
const https = require("https");
|
||||||
|
const pm = require("./proxy");
|
||||||
|
let tunnel;
|
||||||
|
var HttpCodes;
|
||||||
|
(function (HttpCodes) {
|
||||||
|
HttpCodes[HttpCodes["OK"] = 200] = "OK";
|
||||||
|
HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
|
||||||
|
HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
|
||||||
|
HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
|
||||||
|
HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
|
||||||
|
HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
|
||||||
|
HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
|
||||||
|
HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
|
||||||
|
HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
|
||||||
|
HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
|
||||||
|
HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
|
||||||
|
HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
|
||||||
|
HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
|
||||||
|
HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
|
||||||
|
HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
|
||||||
|
HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
|
||||||
|
HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
|
||||||
|
HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
|
||||||
|
HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
|
||||||
|
HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
|
||||||
|
HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
|
||||||
|
HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
|
||||||
|
HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
|
||||||
|
HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
|
||||||
|
HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
|
||||||
|
HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
|
||||||
|
HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
|
||||||
|
})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
|
||||||
|
var Headers;
|
||||||
|
(function (Headers) {
|
||||||
|
Headers["Accept"] = "accept";
|
||||||
|
Headers["ContentType"] = "content-type";
|
||||||
|
})(Headers = exports.Headers || (exports.Headers = {}));
|
||||||
|
var MediaTypes;
|
||||||
|
(function (MediaTypes) {
|
||||||
|
MediaTypes["ApplicationJson"] = "application/json";
|
||||||
|
})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
|
||||||
|
/**
|
||||||
|
* Returns the proxy URL, depending upon the supplied url and proxy environment variables.
|
||||||
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
||||||
|
*/
|
||||||
|
function getProxyUrl(serverUrl) {
|
||||||
|
let proxyUrl = pm.getProxyUrl(url.parse(serverUrl));
|
||||||
|
return proxyUrl ? proxyUrl.href : '';
|
||||||
|
}
|
||||||
|
exports.getProxyUrl = getProxyUrl;
|
||||||
|
const HttpRedirectCodes = [
|
||||||
|
HttpCodes.MovedPermanently,
|
||||||
|
HttpCodes.ResourceMoved,
|
||||||
|
HttpCodes.SeeOther,
|
||||||
|
HttpCodes.TemporaryRedirect,
|
||||||
|
HttpCodes.PermanentRedirect
|
||||||
|
];
|
||||||
|
const HttpResponseRetryCodes = [
|
||||||
|
HttpCodes.BadGateway,
|
||||||
|
HttpCodes.ServiceUnavailable,
|
||||||
|
HttpCodes.GatewayTimeout
|
||||||
|
];
|
||||||
|
const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
|
||||||
|
const ExponentialBackoffCeiling = 10;
|
||||||
|
const ExponentialBackoffTimeSlice = 5;
|
||||||
|
class HttpClientResponse {
|
||||||
|
constructor(message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
readBody() {
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
|
let output = Buffer.alloc(0);
|
||||||
|
this.message.on('data', (chunk) => {
|
||||||
|
output = Buffer.concat([output, chunk]);
|
||||||
|
});
|
||||||
|
this.message.on('end', () => {
|
||||||
|
resolve(output.toString());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.HttpClientResponse = HttpClientResponse;
|
||||||
|
function isHttps(requestUrl) {
|
||||||
|
let parsedUrl = url.parse(requestUrl);
|
||||||
|
return parsedUrl.protocol === 'https:';
|
||||||
|
}
|
||||||
|
exports.isHttps = isHttps;
|
||||||
|
class HttpClient {
|
||||||
|
constructor(userAgent, handlers, requestOptions) {
|
||||||
|
this._ignoreSslError = false;
|
||||||
|
this._allowRedirects = true;
|
||||||
|
this._allowRedirectDowngrade = false;
|
||||||
|
this._maxRedirects = 50;
|
||||||
|
this._allowRetries = false;
|
||||||
|
this._maxRetries = 1;
|
||||||
|
this._keepAlive = false;
|
||||||
|
this._disposed = false;
|
||||||
|
this.userAgent = userAgent;
|
||||||
|
this.handlers = handlers || [];
|
||||||
|
this.requestOptions = requestOptions;
|
||||||
|
if (requestOptions) {
|
||||||
|
if (requestOptions.ignoreSslError != null) {
|
||||||
|
this._ignoreSslError = requestOptions.ignoreSslError;
|
||||||
|
}
|
||||||
|
this._socketTimeout = requestOptions.socketTimeout;
|
||||||
|
if (requestOptions.allowRedirects != null) {
|
||||||
|
this._allowRedirects = requestOptions.allowRedirects;
|
||||||
|
}
|
||||||
|
if (requestOptions.allowRedirectDowngrade != null) {
|
||||||
|
this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
|
||||||
|
}
|
||||||
|
if (requestOptions.maxRedirects != null) {
|
||||||
|
this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
|
||||||
|
}
|
||||||
|
if (requestOptions.keepAlive != null) {
|
||||||
|
this._keepAlive = requestOptions.keepAlive;
|
||||||
|
}
|
||||||
|
if (requestOptions.allowRetries != null) {
|
||||||
|
this._allowRetries = requestOptions.allowRetries;
|
||||||
|
}
|
||||||
|
if (requestOptions.maxRetries != null) {
|
||||||
|
this._maxRetries = requestOptions.maxRetries;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
options(requestUrl, additionalHeaders) {
|
||||||
|
return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
get(requestUrl, additionalHeaders) {
|
||||||
|
return this.request('GET', requestUrl, null, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
del(requestUrl, additionalHeaders) {
|
||||||
|
return this.request('DELETE', requestUrl, null, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
post(requestUrl, data, additionalHeaders) {
|
||||||
|
return this.request('POST', requestUrl, data, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
patch(requestUrl, data, additionalHeaders) {
|
||||||
|
return this.request('PATCH', requestUrl, data, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
put(requestUrl, data, additionalHeaders) {
|
||||||
|
return this.request('PUT', requestUrl, data, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
head(requestUrl, additionalHeaders) {
|
||||||
|
return this.request('HEAD', requestUrl, null, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
sendStream(verb, requestUrl, stream, additionalHeaders) {
|
||||||
|
return this.request(verb, requestUrl, stream, additionalHeaders);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Gets a typed object from an endpoint
|
||||||
|
* Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
|
||||||
|
*/
|
||||||
|
async getJson(requestUrl, additionalHeaders = {}) {
|
||||||
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
||||||
|
let res = await this.get(requestUrl, additionalHeaders);
|
||||||
|
return this._processResponse(res, this.requestOptions);
|
||||||
|
}
|
||||||
|
async postJson(requestUrl, obj, additionalHeaders = {}) {
|
||||||
|
let data = JSON.stringify(obj, null, 2);
|
||||||
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
||||||
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
||||||
|
let res = await this.post(requestUrl, data, additionalHeaders);
|
||||||
|
return this._processResponse(res, this.requestOptions);
|
||||||
|
}
|
||||||
|
async putJson(requestUrl, obj, additionalHeaders = {}) {
|
||||||
|
let data = JSON.stringify(obj, null, 2);
|
||||||
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
||||||
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
||||||
|
let res = await this.put(requestUrl, data, additionalHeaders);
|
||||||
|
return this._processResponse(res, this.requestOptions);
|
||||||
|
}
|
||||||
|
async patchJson(requestUrl, obj, additionalHeaders = {}) {
|
||||||
|
let data = JSON.stringify(obj, null, 2);
|
||||||
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
||||||
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
||||||
|
let res = await this.patch(requestUrl, data, additionalHeaders);
|
||||||
|
return this._processResponse(res, this.requestOptions);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Makes a raw http request.
|
||||||
|
* All other methods such as get, post, patch, and request ultimately call this.
|
||||||
|
* Prefer get, del, post and patch
|
||||||
|
*/
|
||||||
|
async request(verb, requestUrl, data, headers) {
|
||||||
|
if (this._disposed) {
|
||||||
|
throw new Error('Client has already been disposed.');
|
||||||
|
}
|
||||||
|
let parsedUrl = url.parse(requestUrl);
|
||||||
|
let info = this._prepareRequest(verb, parsedUrl, headers);
|
||||||
|
// Only perform retries on reads since writes may not be idempotent.
|
||||||
|
let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1
|
||||||
|
? this._maxRetries + 1
|
||||||
|
: 1;
|
||||||
|
let numTries = 0;
|
||||||
|
let response;
|
||||||
|
while (numTries < maxTries) {
|
||||||
|
response = await this.requestRaw(info, data);
|
||||||
|
// Check if it's an authentication challenge
|
||||||
|
if (response &&
|
||||||
|
response.message &&
|
||||||
|
response.message.statusCode === HttpCodes.Unauthorized) {
|
||||||
|
let authenticationHandler;
|
||||||
|
for (let i = 0; i < this.handlers.length; i++) {
|
||||||
|
if (this.handlers[i].canHandleAuthentication(response)) {
|
||||||
|
authenticationHandler = this.handlers[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (authenticationHandler) {
|
||||||
|
return authenticationHandler.handleAuthentication(this, info, data);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// We have received an unauthorized response but have no handlers to handle it.
|
||||||
|
// Let the response return to the caller.
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let redirectsRemaining = this._maxRedirects;
|
||||||
|
while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&
|
||||||
|
this._allowRedirects &&
|
||||||
|
redirectsRemaining > 0) {
|
||||||
|
const redirectUrl = response.message.headers['location'];
|
||||||
|
if (!redirectUrl) {
|
||||||
|
// if there's no location to redirect to, we won't
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
let parsedRedirectUrl = url.parse(redirectUrl);
|
||||||
|
if (parsedUrl.protocol == 'https:' &&
|
||||||
|
parsedUrl.protocol != parsedRedirectUrl.protocol &&
|
||||||
|
!this._allowRedirectDowngrade) {
|
||||||
|
throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
|
||||||
|
}
|
||||||
|
// we need to finish reading the response before reassigning response
|
||||||
|
// which will leak the open socket.
|
||||||
|
await response.readBody();
|
||||||
|
// strip authorization header if redirected to a different hostname
|
||||||
|
if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
|
||||||
|
for (let header in headers) {
|
||||||
|
// header names are case insensitive
|
||||||
|
if (header.toLowerCase() === 'authorization') {
|
||||||
|
delete headers[header];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// let's make the request with the new redirectUrl
|
||||||
|
info = this._prepareRequest(verb, parsedRedirectUrl, headers);
|
||||||
|
response = await this.requestRaw(info, data);
|
||||||
|
redirectsRemaining--;
|
||||||
|
}
|
||||||
|
if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {
|
||||||
|
// If not a retry code, return immediately instead of retrying
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
numTries += 1;
|
||||||
|
if (numTries < maxTries) {
|
||||||
|
await response.readBody();
|
||||||
|
await this._performExponentialBackoff(numTries);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Needs to be called if keepAlive is set to true in request options.
|
||||||
|
*/
|
||||||
|
dispose() {
|
||||||
|
if (this._agent) {
|
||||||
|
this._agent.destroy();
|
||||||
|
}
|
||||||
|
this._disposed = true;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Raw request.
|
||||||
|
* @param info
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
requestRaw(info, data) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let callbackForResult = function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(res);
|
||||||
|
};
|
||||||
|
this.requestRawWithCallback(info, data, callbackForResult);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Raw request with callback.
|
||||||
|
* @param info
|
||||||
|
* @param data
|
||||||
|
* @param onResult
|
||||||
|
*/
|
||||||
|
requestRawWithCallback(info, data, onResult) {
|
||||||
|
let socket;
|
||||||
|
if (typeof data === 'string') {
|
||||||
|
info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
|
||||||
|
}
|
||||||
|
let callbackCalled = false;
|
||||||
|
let handleResult = (err, res) => {
|
||||||
|
if (!callbackCalled) {
|
||||||
|
callbackCalled = true;
|
||||||
|
onResult(err, res);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let req = info.httpModule.request(info.options, (msg) => {
|
||||||
|
let res = new HttpClientResponse(msg);
|
||||||
|
handleResult(null, res);
|
||||||
|
});
|
||||||
|
req.on('socket', sock => {
|
||||||
|
socket = sock;
|
||||||
|
});
|
||||||
|
// If we ever get disconnected, we want the socket to timeout eventually
|
||||||
|
req.setTimeout(this._socketTimeout || 3 * 60000, () => {
|
||||||
|
if (socket) {
|
||||||
|
socket.end();
|
||||||
|
}
|
||||||
|
handleResult(new Error('Request timeout: ' + info.options.path), null);
|
||||||
|
});
|
||||||
|
req.on('error', function (err) {
|
||||||
|
// err has statusCode property
|
||||||
|
// res should have headers
|
||||||
|
handleResult(err, null);
|
||||||
|
});
|
||||||
|
if (data && typeof data === 'string') {
|
||||||
|
req.write(data, 'utf8');
|
||||||
|
}
|
||||||
|
if (data && typeof data !== 'string') {
|
||||||
|
data.on('close', function () {
|
||||||
|
req.end();
|
||||||
|
});
|
||||||
|
data.pipe(req);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
req.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Gets an http agent. This function is useful when you need an http agent that handles
|
||||||
|
* routing through a proxy server - depending upon the url and proxy environment variables.
|
||||||
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
||||||
|
*/
|
||||||
|
getAgent(serverUrl) {
|
||||||
|
let parsedUrl = url.parse(serverUrl);
|
||||||
|
return this._getAgent(parsedUrl);
|
||||||
|
}
|
||||||
|
_prepareRequest(method, requestUrl, headers) {
|
||||||
|
const info = {};
|
||||||
|
info.parsedUrl = requestUrl;
|
||||||
|
const usingSsl = info.parsedUrl.protocol === 'https:';
|
||||||
|
info.httpModule = usingSsl ? https : http;
|
||||||
|
const defaultPort = usingSsl ? 443 : 80;
|
||||||
|
info.options = {};
|
||||||
|
info.options.host = info.parsedUrl.hostname;
|
||||||
|
info.options.port = info.parsedUrl.port
|
||||||
|
? parseInt(info.parsedUrl.port)
|
||||||
|
: defaultPort;
|
||||||
|
info.options.path =
|
||||||
|
(info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
|
||||||
|
info.options.method = method;
|
||||||
|
info.options.headers = this._mergeHeaders(headers);
|
||||||
|
if (this.userAgent != null) {
|
||||||
|
info.options.headers['user-agent'] = this.userAgent;
|
||||||
|
}
|
||||||
|
info.options.agent = this._getAgent(info.parsedUrl);
|
||||||
|
// gives handlers an opportunity to participate
|
||||||
|
if (this.handlers) {
|
||||||
|
this.handlers.forEach(handler => {
|
||||||
|
handler.prepareRequest(info.options);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
_mergeHeaders(headers) {
|
||||||
|
const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
|
||||||
|
if (this.requestOptions && this.requestOptions.headers) {
|
||||||
|
return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));
|
||||||
|
}
|
||||||
|
return lowercaseKeys(headers || {});
|
||||||
|
}
|
||||||
|
_getExistingOrDefaultHeader(additionalHeaders, header, _default) {
|
||||||
|
const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
|
||||||
|
let clientHeader;
|
||||||
|
if (this.requestOptions && this.requestOptions.headers) {
|
||||||
|
clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
|
||||||
|
}
|
||||||
|
return additionalHeaders[header] || clientHeader || _default;
|
||||||
|
}
|
||||||
|
_getAgent(parsedUrl) {
|
||||||
|
let agent;
|
||||||
|
let proxyUrl = pm.getProxyUrl(parsedUrl);
|
||||||
|
let useProxy = proxyUrl && proxyUrl.hostname;
|
||||||
|
if (this._keepAlive && useProxy) {
|
||||||
|
agent = this._proxyAgent;
|
||||||
|
}
|
||||||
|
if (this._keepAlive && !useProxy) {
|
||||||
|
agent = this._agent;
|
||||||
|
}
|
||||||
|
// if agent is already assigned use that agent.
|
||||||
|
if (!!agent) {
|
||||||
|
return agent;
|
||||||
|
}
|
||||||
|
const usingSsl = parsedUrl.protocol === 'https:';
|
||||||
|
let maxSockets = 100;
|
||||||
|
if (!!this.requestOptions) {
|
||||||
|
maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
|
||||||
|
}
|
||||||
|
if (useProxy) {
|
||||||
|
// If using proxy, need tunnel
|
||||||
|
if (!tunnel) {
|
||||||
|
tunnel = require('tunnel');
|
||||||
|
}
|
||||||
|
const agentOptions = {
|
||||||
|
maxSockets: maxSockets,
|
||||||
|
keepAlive: this._keepAlive,
|
||||||
|
proxy: {
|
||||||
|
proxyAuth: proxyUrl.auth,
|
||||||
|
host: proxyUrl.hostname,
|
||||||
|
port: proxyUrl.port
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let tunnelAgent;
|
||||||
|
const overHttps = proxyUrl.protocol === 'https:';
|
||||||
|
if (usingSsl) {
|
||||||
|
tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
|
||||||
|
}
|
||||||
|
agent = tunnelAgent(agentOptions);
|
||||||
|
this._proxyAgent = agent;
|
||||||
|
}
|
||||||
|
// if reusing agent across request and tunneling agent isn't assigned create a new agent
|
||||||
|
if (this._keepAlive && !agent) {
|
||||||
|
const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };
|
||||||
|
agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
|
||||||
|
this._agent = agent;
|
||||||
|
}
|
||||||
|
// if not using private agent and tunnel agent isn't setup then use global agent
|
||||||
|
if (!agent) {
|
||||||
|
agent = usingSsl ? https.globalAgent : http.globalAgent;
|
||||||
|
}
|
||||||
|
if (usingSsl && this._ignoreSslError) {
|
||||||
|
// we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
|
||||||
|
// http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
|
||||||
|
// we have to cast it to any and change it directly
|
||||||
|
agent.options = Object.assign(agent.options || {}, {
|
||||||
|
rejectUnauthorized: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return agent;
|
||||||
|
}
|
||||||
|
_performExponentialBackoff(retryNumber) {
|
||||||
|
retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
|
||||||
|
const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
|
||||||
|
return new Promise(resolve => setTimeout(() => resolve(), ms));
|
||||||
|
}
|
||||||
|
static dateTimeDeserializer(key, value) {
|
||||||
|
if (typeof value === 'string') {
|
||||||
|
let a = new Date(value);
|
||||||
|
if (!isNaN(a.valueOf())) {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
async _processResponse(res, options) {
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
|
const statusCode = res.message.statusCode;
|
||||||
|
const response = {
|
||||||
|
statusCode: statusCode,
|
||||||
|
result: null,
|
||||||
|
headers: {}
|
||||||
|
};
|
||||||
|
// not found leads to null obj returned
|
||||||
|
if (statusCode == HttpCodes.NotFound) {
|
||||||
|
resolve(response);
|
||||||
|
}
|
||||||
|
let obj;
|
||||||
|
let contents;
|
||||||
|
// get the result from the body
|
||||||
|
try {
|
||||||
|
contents = await res.readBody();
|
||||||
|
if (contents && contents.length > 0) {
|
||||||
|
if (options && options.deserializeDates) {
|
||||||
|
obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj = JSON.parse(contents);
|
||||||
|
}
|
||||||
|
response.result = obj;
|
||||||
|
}
|
||||||
|
response.headers = res.message.headers;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// Invalid resource (contents not json); leaving result obj null
|
||||||
|
}
|
||||||
|
// note that 3xx redirects are handled by the http layer.
|
||||||
|
if (statusCode > 299) {
|
||||||
|
let msg;
|
||||||
|
// if exception/error in body, attempt to get better error
|
||||||
|
if (obj && obj.message) {
|
||||||
|
msg = obj.message;
|
||||||
|
}
|
||||||
|
else if (contents && contents.length > 0) {
|
||||||
|
// it may be the case that the exception is in the body message as string
|
||||||
|
msg = contents;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
msg = 'Failed request: (' + statusCode + ')';
|
||||||
|
}
|
||||||
|
let err = new Error(msg);
|
||||||
|
// attach statusCode and body obj (if available) to the error object
|
||||||
|
err['statusCode'] = statusCode;
|
||||||
|
if (response.result) {
|
||||||
|
err['result'] = response.result;
|
||||||
|
}
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
resolve(response);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.HttpClient = HttpClient;
|
|
@ -0,0 +1,50 @@
|
||||||
|
/// <reference types="node" />
|
||||||
|
import http = require('http');
|
||||||
|
import url = require('url');
|
||||||
|
export interface IHeaders {
|
||||||
|
[key: string]: any;
|
||||||
|
}
|
||||||
|
export interface IHttpClient {
|
||||||
|
options(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
get(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
del(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
post(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
patch(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
put(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
requestRaw(info: IRequestInfo, data: string | NodeJS.ReadableStream): Promise<IHttpClientResponse>;
|
||||||
|
requestRawWithCallback(info: IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: IHttpClientResponse) => void): void;
|
||||||
|
}
|
||||||
|
export interface IRequestHandler {
|
||||||
|
prepareRequest(options: http.RequestOptions): void;
|
||||||
|
canHandleAuthentication(response: IHttpClientResponse): boolean;
|
||||||
|
handleAuthentication(httpClient: IHttpClient, requestInfo: IRequestInfo, objs: any): Promise<IHttpClientResponse>;
|
||||||
|
}
|
||||||
|
export interface IHttpClientResponse {
|
||||||
|
message: http.IncomingMessage;
|
||||||
|
readBody(): Promise<string>;
|
||||||
|
}
|
||||||
|
export interface IRequestInfo {
|
||||||
|
options: http.RequestOptions;
|
||||||
|
parsedUrl: url.Url;
|
||||||
|
httpModule: any;
|
||||||
|
}
|
||||||
|
export interface IRequestOptions {
|
||||||
|
headers?: IHeaders;
|
||||||
|
socketTimeout?: number;
|
||||||
|
ignoreSslError?: boolean;
|
||||||
|
allowRedirects?: boolean;
|
||||||
|
allowRedirectDowngrade?: boolean;
|
||||||
|
maxRedirects?: number;
|
||||||
|
maxSockets?: number;
|
||||||
|
keepAlive?: boolean;
|
||||||
|
deserializeDates?: boolean;
|
||||||
|
allowRetries?: boolean;
|
||||||
|
maxRetries?: number;
|
||||||
|
}
|
||||||
|
export interface ITypedResponse<T> {
|
||||||
|
statusCode: number;
|
||||||
|
result: T | null;
|
||||||
|
headers: Object;
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@ -0,0 +1,67 @@
|
||||||
|
{
|
||||||
|
"_from": "@actions/http-client@^1.0.8",
|
||||||
|
"_id": "@actions/http-client@1.0.8",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-G4JjJ6f9Hb3Zvejj+ewLLKLf99ZC+9v+yCxoYf9vSyH+WkzPLB2LuUtRMGNkooMqdugGBFStIKXOuvH1W+EctA==",
|
||||||
|
"_location": "/@actions/http-client",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "range",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@actions/http-client@^1.0.8",
|
||||||
|
"name": "@actions/http-client",
|
||||||
|
"escapedName": "@actions%2fhttp-client",
|
||||||
|
"scope": "@actions",
|
||||||
|
"rawSpec": "^1.0.8",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "^1.0.8"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/@actions/tool-cache"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.8.tgz",
|
||||||
|
"_shasum": "8bd76e8eca89dc8bcf619aa128eba85f7a39af45",
|
||||||
|
"_spec": "@actions/http-client@^1.0.8",
|
||||||
|
"_where": "/Users/dbrock/Google Drive/appleiigs/install-merlin32-action/node_modules/@actions/tool-cache",
|
||||||
|
"author": {
|
||||||
|
"name": "GitHub, Inc."
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/actions/http-client/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"dependencies": {
|
||||||
|
"tunnel": "0.0.6"
|
||||||
|
},
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "Actions Http Client",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/jest": "^25.1.4",
|
||||||
|
"@types/node": "^12.12.31",
|
||||||
|
"jest": "^25.1.0",
|
||||||
|
"prettier": "^2.0.4",
|
||||||
|
"proxy": "^1.0.1",
|
||||||
|
"ts-jest": "^25.2.1",
|
||||||
|
"typescript": "^3.8.3"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/actions/http-client#readme",
|
||||||
|
"keywords": [
|
||||||
|
"Actions",
|
||||||
|
"Http"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "index.js",
|
||||||
|
"name": "@actions/http-client",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/actions/http-client.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"audit-check": "npm audit --audit-level=moderate",
|
||||||
|
"build": "rm -Rf ./_out && tsc && cp package*.json ./_out && cp *.md ./_out && cp LICENSE ./_out && cp actions.png ./_out",
|
||||||
|
"format": "prettier --write *.ts && prettier --write **/*.ts",
|
||||||
|
"format-check": "prettier --check *.ts && prettier --check **/*.ts",
|
||||||
|
"test": "jest"
|
||||||
|
},
|
||||||
|
"version": "1.0.8"
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
/// <reference types="node" />
|
||||||
|
import * as url from 'url';
|
||||||
|
export declare function getProxyUrl(reqUrl: url.Url): url.Url | undefined;
|
||||||
|
export declare function checkBypass(reqUrl: url.Url): boolean;
|
|
@ -0,0 +1,58 @@
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const url = require("url");
|
||||||
|
function getProxyUrl(reqUrl) {
|
||||||
|
let usingSsl = reqUrl.protocol === 'https:';
|
||||||
|
let proxyUrl;
|
||||||
|
if (checkBypass(reqUrl)) {
|
||||||
|
return proxyUrl;
|
||||||
|
}
|
||||||
|
let proxyVar;
|
||||||
|
if (usingSsl) {
|
||||||
|
proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY'];
|
||||||
|
}
|
||||||
|
if (proxyVar) {
|
||||||
|
proxyUrl = url.parse(proxyVar);
|
||||||
|
}
|
||||||
|
return proxyUrl;
|
||||||
|
}
|
||||||
|
exports.getProxyUrl = getProxyUrl;
|
||||||
|
function checkBypass(reqUrl) {
|
||||||
|
if (!reqUrl.hostname) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';
|
||||||
|
if (!noProxy) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Determine the request port
|
||||||
|
let reqPort;
|
||||||
|
if (reqUrl.port) {
|
||||||
|
reqPort = Number(reqUrl.port);
|
||||||
|
}
|
||||||
|
else if (reqUrl.protocol === 'http:') {
|
||||||
|
reqPort = 80;
|
||||||
|
}
|
||||||
|
else if (reqUrl.protocol === 'https:') {
|
||||||
|
reqPort = 443;
|
||||||
|
}
|
||||||
|
// Format the request hostname and hostname with port
|
||||||
|
let upperReqHosts = [reqUrl.hostname.toUpperCase()];
|
||||||
|
if (typeof reqPort === 'number') {
|
||||||
|
upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
|
||||||
|
}
|
||||||
|
// Compare request host against noproxy
|
||||||
|
for (let upperNoProxyItem of noProxy
|
||||||
|
.split(',')
|
||||||
|
.map(x => x.trim().toUpperCase())
|
||||||
|
.filter(x => x)) {
|
||||||
|
if (upperReqHosts.some(x => x === upperNoProxyItem)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
exports.checkBypass = checkBypass;
|
|
@ -0,0 +1,53 @@
|
||||||
|
# `@actions/io`
|
||||||
|
|
||||||
|
> Core functions for cli filesystem scenarios
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
#### mkdir -p
|
||||||
|
|
||||||
|
Recursively make a directory. Follows rules specified in [man mkdir](https://linux.die.net/man/1/mkdir) with the `-p` option specified:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const io = require('@actions/io');
|
||||||
|
|
||||||
|
await io.mkdirP('path/to/make');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### cp/mv
|
||||||
|
|
||||||
|
Copy or move files or folders. Follows rules specified in [man cp](https://linux.die.net/man/1/cp) and [man mv](https://linux.die.net/man/1/mv):
|
||||||
|
|
||||||
|
```js
|
||||||
|
const io = require('@actions/io');
|
||||||
|
|
||||||
|
// Recursive must be true for directories
|
||||||
|
const options = { recursive: true, force: false }
|
||||||
|
|
||||||
|
await io.cp('path/to/directory', 'path/to/dest', options);
|
||||||
|
await io.mv('path/to/file', 'path/to/dest');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### rm -rf
|
||||||
|
|
||||||
|
Remove a file or folder recursively. Follows rules specified in [man rm](https://linux.die.net/man/1/rm) with the `-r` and `-f` rules specified.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const io = require('@actions/io');
|
||||||
|
|
||||||
|
await io.rmRF('path/to/directory');
|
||||||
|
await io.rmRF('path/to/file');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### which
|
||||||
|
|
||||||
|
Get the path to a tool and resolves via paths. Follows the rules specified in [man which](https://linux.die.net/man/1/which).
|
||||||
|
|
||||||
|
```js
|
||||||
|
const exec = require('@actions/exec');
|
||||||
|
const io = require('@actions/io');
|
||||||
|
|
||||||
|
const pythonPath: string = await io.which('python', true)
|
||||||
|
|
||||||
|
await exec.exec(`"${pythonPath}"`, ['main.py']);
|
||||||
|
```
|
|
@ -0,0 +1,29 @@
|
||||||
|
/// <reference types="node" />
|
||||||
|
import * as fs from 'fs';
|
||||||
|
export declare const chmod: typeof fs.promises.chmod, copyFile: typeof fs.promises.copyFile, lstat: typeof fs.promises.lstat, mkdir: typeof fs.promises.mkdir, readdir: typeof fs.promises.readdir, readlink: typeof fs.promises.readlink, rename: typeof fs.promises.rename, rmdir: typeof fs.promises.rmdir, stat: typeof fs.promises.stat, symlink: typeof fs.promises.symlink, unlink: typeof fs.promises.unlink;
|
||||||
|
export declare const IS_WINDOWS: boolean;
|
||||||
|
export declare function exists(fsPath: string): Promise<boolean>;
|
||||||
|
export declare function isDirectory(fsPath: string, useStat?: boolean): Promise<boolean>;
|
||||||
|
/**
|
||||||
|
* On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:
|
||||||
|
* \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases).
|
||||||
|
*/
|
||||||
|
export declare function isRooted(p: string): boolean;
|
||||||
|
/**
|
||||||
|
* Recursively create a directory at `fsPath`.
|
||||||
|
*
|
||||||
|
* This implementation is optimistic, meaning it attempts to create the full
|
||||||
|
* path first, and backs up the path stack from there.
|
||||||
|
*
|
||||||
|
* @param fsPath The path to create
|
||||||
|
* @param maxDepth The maximum recursion depth
|
||||||
|
* @param depth The current recursion depth
|
||||||
|
*/
|
||||||
|
export declare function mkdirP(fsPath: string, maxDepth?: number, depth?: number): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Best effort attempt to determine whether a file exists and is executable.
|
||||||
|
* @param filePath file path to check
|
||||||
|
* @param extensions additional file extensions to try
|
||||||
|
* @return if file exists and is executable, returns the file path. otherwise empty string.
|
||||||
|
*/
|
||||||
|
export declare function tryGetExecutablePath(filePath: string, extensions: string[]): Promise<string>;
|
|
@ -0,0 +1,195 @@
|
||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var _a;
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const assert_1 = require("assert");
|
||||||
|
const fs = require("fs");
|
||||||
|
const path = require("path");
|
||||||
|
_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink;
|
||||||
|
exports.IS_WINDOWS = process.platform === 'win32';
|
||||||
|
function exists(fsPath) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
try {
|
||||||
|
yield exports.stat(fsPath);
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
if (err.code === 'ENOENT') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.exists = exists;
|
||||||
|
function isDirectory(fsPath, useStat = false) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath);
|
||||||
|
return stats.isDirectory();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.isDirectory = isDirectory;
|
||||||
|
/**
|
||||||
|
* On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:
|
||||||
|
* \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases).
|
||||||
|
*/
|
||||||
|
function isRooted(p) {
|
||||||
|
p = normalizeSeparators(p);
|
||||||
|
if (!p) {
|
||||||
|
throw new Error('isRooted() parameter "p" cannot be empty');
|
||||||
|
}
|
||||||
|
if (exports.IS_WINDOWS) {
|
||||||
|
return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello
|
||||||
|
); // e.g. C: or C:\hello
|
||||||
|
}
|
||||||
|
return p.startsWith('/');
|
||||||
|
}
|
||||||
|
exports.isRooted = isRooted;
|
||||||
|
/**
|
||||||
|
* Recursively create a directory at `fsPath`.
|
||||||
|
*
|
||||||
|
* This implementation is optimistic, meaning it attempts to create the full
|
||||||
|
* path first, and backs up the path stack from there.
|
||||||
|
*
|
||||||
|
* @param fsPath The path to create
|
||||||
|
* @param maxDepth The maximum recursion depth
|
||||||
|
* @param depth The current recursion depth
|
||||||
|
*/
|
||||||
|
function mkdirP(fsPath, maxDepth = 1000, depth = 1) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
assert_1.ok(fsPath, 'a path argument must be provided');
|
||||||
|
fsPath = path.resolve(fsPath);
|
||||||
|
if (depth >= maxDepth)
|
||||||
|
return exports.mkdir(fsPath);
|
||||||
|
try {
|
||||||
|
yield exports.mkdir(fsPath);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
switch (err.code) {
|
||||||
|
case 'ENOENT': {
|
||||||
|
yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1);
|
||||||
|
yield exports.mkdir(fsPath);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
let stats;
|
||||||
|
try {
|
||||||
|
stats = yield exports.stat(fsPath);
|
||||||
|
}
|
||||||
|
catch (err2) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
if (!stats.isDirectory())
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.mkdirP = mkdirP;
|
||||||
|
/**
|
||||||
|
* Best effort attempt to determine whether a file exists and is executable.
|
||||||
|
* @param filePath file path to check
|
||||||
|
* @param extensions additional file extensions to try
|
||||||
|
* @return if file exists and is executable, returns the file path. otherwise empty string.
|
||||||
|
*/
|
||||||
|
function tryGetExecutablePath(filePath, extensions) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
let stats = undefined;
|
||||||
|
try {
|
||||||
|
// test file exists
|
||||||
|
stats = yield exports.stat(filePath);
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
if (err.code !== 'ENOENT') {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (stats && stats.isFile()) {
|
||||||
|
if (exports.IS_WINDOWS) {
|
||||||
|
// on Windows, test for valid extension
|
||||||
|
const upperExt = path.extname(filePath).toUpperCase();
|
||||||
|
if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) {
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (isUnixExecutable(stats)) {
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// try each extension
|
||||||
|
const originalFilePath = filePath;
|
||||||
|
for (const extension of extensions) {
|
||||||
|
filePath = originalFilePath + extension;
|
||||||
|
stats = undefined;
|
||||||
|
try {
|
||||||
|
stats = yield exports.stat(filePath);
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
if (err.code !== 'ENOENT') {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (stats && stats.isFile()) {
|
||||||
|
if (exports.IS_WINDOWS) {
|
||||||
|
// preserve the case of the actual file (since an extension was appended)
|
||||||
|
try {
|
||||||
|
const directory = path.dirname(filePath);
|
||||||
|
const upperName = path.basename(filePath).toUpperCase();
|
||||||
|
for (const actualName of yield exports.readdir(directory)) {
|
||||||
|
if (upperName === actualName.toUpperCase()) {
|
||||||
|
filePath = path.join(directory, actualName);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`);
|
||||||
|
}
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (isUnixExecutable(stats)) {
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.tryGetExecutablePath = tryGetExecutablePath;
|
||||||
|
function normalizeSeparators(p) {
|
||||||
|
p = p || '';
|
||||||
|
if (exports.IS_WINDOWS) {
|
||||||
|
// convert slashes on Windows
|
||||||
|
p = p.replace(/\//g, '\\');
|
||||||
|
// remove redundant slashes
|
||||||
|
return p.replace(/\\\\+/g, '\\');
|
||||||
|
}
|
||||||
|
// remove redundant slashes
|
||||||
|
return p.replace(/\/\/+/g, '/');
|
||||||
|
}
|
||||||
|
// on Mac/Linux, test the execute bit
|
||||||
|
// R W X R W X R W X
|
||||||
|
// 256 128 64 32 16 8 4 2 1
|
||||||
|
function isUnixExecutable(stats) {
|
||||||
|
return ((stats.mode & 1) > 0 ||
|
||||||
|
((stats.mode & 8) > 0 && stats.gid === process.getgid()) ||
|
||||||
|
((stats.mode & 64) > 0 && stats.uid === process.getuid()));
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=io-util.js.map
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"io-util.js","sourceRoot":"","sources":["../src/io-util.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAyB;AACzB,yBAAwB;AACxB,6BAA4B;AAEf,gBAYE,qTAAA;AAEF,QAAA,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AAEtD,SAAsB,MAAM,CAAC,MAAc;;QACzC,IAAI;YACF,MAAM,YAAI,CAAC,MAAM,CAAC,CAAA;SACnB;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACzB,OAAO,KAAK,CAAA;aACb;YAED,MAAM,GAAG,CAAA;SACV;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AAZD,wBAYC;AAED,SAAsB,WAAW,CAC/B,MAAc,EACd,UAAmB,KAAK;;QAExB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,YAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,aAAK,CAAC,MAAM,CAAC,CAAA;QAChE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC;CAAA;AAND,kCAMC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,CAAS;IAChC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,CAAC,CAAC,EAAE;QACN,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;KAC5D;IAED,IAAI,kBAAU,EAAE;QACd,OAAO,CACL,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,8BAA8B;SACxE,CAAA,CAAC,sBAAsB;KACzB;IAED,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC;AAbD,4BAaC;AAED;;;;;;;;;GASG;AACH,SAAsB,MAAM,CAC1B,MAAc,EACd,WAAmB,IAAI,EACvB,QAAgB,CAAC;;QAEjB,WAAE,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAA;QAE9C,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAE7B,IAAI,KAAK,IAAI,QAAQ;YAAE,OAAO,aAAK,CAAC,MAAM,CAAC,CAAA;QAE3C,IAAI;YACF,MAAM,aAAK,CAAC,MAAM,CAAC,CAAA;YACnB,OAAM;SACP;QAAC,OAAO,GAAG,EAAE;YACZ,QAAQ,GAAG,CAAC,IAAI,EAAE;gBAChB,KAAK,QAAQ,CAAC,CAAC;oBACb,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;oBACvD,MAAM,aAAK,CAAC,MAAM,CAAC,CAAA;oBACnB,OAAM;iBACP;gBACD,OAAO,CAAC,CAAC;oBACP,IAAI,KAAe,CAAA;oBAEnB,IAAI;wBACF,KAAK,GAAG,MAAM,YAAI,CAAC,MAAM,CAAC,CAAA;qBAC3B;oBAAC,OAAO,IAAI,EAAE;wBACb,MAAM,GAAG,CAAA;qBACV;oBAED,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;wBAAE,MAAM,GAAG,CAAA;iBACpC;aACF;SACF;IACH,CAAC;CAAA;AAlCD,wBAkCC;AAED;;;;;GAKG;AACH,SAAsB,oBAAoB,CACxC,QAAgB,EAChB,UAAoB;;QAEpB,IAAI,KAAK,GAAyB,SAAS,CAAA;QAC3C,IAAI;YACF,mBAAmB;YACnB,KAAK,GAAG,MAAM,YAAI,CAAC,QAAQ,CAAC,CAAA;SAC7B;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACzB,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CACT,uEAAuE,QAAQ,MAAM,GAAG,EAAE,CAC3F,CAAA;aACF;SACF;QACD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;YAC3B,IAAI,kBAAU,EAAE;gBACd,uCAAuC;gBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;gBACrD,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,EAAE;oBACpE,OAAO,QAAQ,CAAA;iBAChB;aACF;iBAAM;gBACL,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;oBAC3B,OAAO,QAAQ,CAAA;iBAChB;aACF;SACF;QAED,qBAAqB;QACrB,MAAM,gBAAgB,GAAG,QAAQ,CAAA;QACjC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,QAAQ,GAAG,gBAAgB,GAAG,SAAS,CAAA;YAEvC,KAAK,GAAG,SAAS,CAAA;YACjB,IAAI;gBACF,KAAK,GAAG,MAAM,YAAI,CAAC,QAAQ,CAAC,CAAA;aAC7B;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;oBACzB,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CACT,uEAAuE,QAAQ,MAAM,GAAG,EAAE,CAC3F,CAAA;iBACF;aACF;YAED,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;gBAC3B,IAAI,kBAAU,EAAE;oBACd,yEAAyE;oBACzE,IAAI;wBACF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;wBACxC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;wBACvD,KAAK,MAAM,UAAU,IAAI,MAAM,eAAO,CAAC,SAAS,CAAC,EAAE;4BACjD,IAAI,SAAS,KAAK,UAAU,CAAC,WAAW,EAAE,EAAE;gCAC1C,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;gCAC3C,MAAK;6BACN;yBACF;qBACF;oBAAC,OAAO,GAAG,EAAE;wBACZ,sCAAsC;wBACtC,OAAO,CAAC,GAAG,CACT,yEAAyE,QAAQ,MAAM,GAAG,EAAE,CAC7F,CAAA;qBACF;oBAED,OAAO,QAAQ,CAAA;iBAChB;qBAAM;oBACL,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;wBAC3B,OAAO,QAAQ,CAAA;qBAChB;iBACF;aACF;SACF;QAED,OAAO,EAAE,CAAA;IACX,CAAC;CAAA;AA5ED,oDA4EC;AAED,SAAS,mBAAmB,CAAC,CAAS;IACpC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;IACX,IAAI,kBAAU,EAAE;QACd,6BAA6B;QAC7B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAE1B,2BAA2B;QAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;KACjC;IAED,2BAA2B;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC;AAED,qCAAqC;AACrC,6BAA6B;AAC7B,6BAA6B;AAC7B,SAAS,gBAAgB,CAAC,KAAe;IACvC,OAAO,CACL,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACxD,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAC1D,CAAA;AACH,CAAC"}
|
|
@ -0,0 +1,56 @@
|
||||||
|
/**
|
||||||
|
* Interface for cp/mv options
|
||||||
|
*/
|
||||||
|
export interface CopyOptions {
|
||||||
|
/** Optional. Whether to recursively copy all subdirectories. Defaults to false */
|
||||||
|
recursive?: boolean;
|
||||||
|
/** Optional. Whether to overwrite existing files in the destination. Defaults to true */
|
||||||
|
force?: boolean;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Interface for cp/mv options
|
||||||
|
*/
|
||||||
|
export interface MoveOptions {
|
||||||
|
/** Optional. Whether to overwrite existing files in the destination. Defaults to true */
|
||||||
|
force?: boolean;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Copies a file or folder.
|
||||||
|
* Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
|
||||||
|
*
|
||||||
|
* @param source source path
|
||||||
|
* @param dest destination path
|
||||||
|
* @param options optional. See CopyOptions.
|
||||||
|
*/
|
||||||
|
export declare function cp(source: string, dest: string, options?: CopyOptions): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Moves a path.
|
||||||
|
*
|
||||||
|
* @param source source path
|
||||||
|
* @param dest destination path
|
||||||
|
* @param options optional. See MoveOptions.
|
||||||
|
*/
|
||||||
|
export declare function mv(source: string, dest: string, options?: MoveOptions): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Remove a path recursively with force
|
||||||
|
*
|
||||||
|
* @param inputPath path to remove
|
||||||
|
*/
|
||||||
|
export declare function rmRF(inputPath: string): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Make a directory. Creates the full path with folders in between
|
||||||
|
* Will throw if it fails
|
||||||
|
*
|
||||||
|
* @param fsPath path to create
|
||||||
|
* @returns Promise<void>
|
||||||
|
*/
|
||||||
|
export declare function mkdirP(fsPath: string): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Returns path of a tool had the tool actually been invoked. Resolves via paths.
|
||||||
|
* If you check and the tool does not exist, it will throw.
|
||||||
|
*
|
||||||
|
* @param tool name of the tool
|
||||||
|
* @param check whether to check if tool exists
|
||||||
|
* @returns Promise<string> path to tool
|
||||||
|
*/
|
||||||
|
export declare function which(tool: string, check?: boolean): Promise<string>;
|
|
@ -0,0 +1,290 @@
|
||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const childProcess = require("child_process");
|
||||||
|
const path = require("path");
|
||||||
|
const util_1 = require("util");
|
||||||
|
const ioUtil = require("./io-util");
|
||||||
|
const exec = util_1.promisify(childProcess.exec);
|
||||||
|
/**
|
||||||
|
* Copies a file or folder.
|
||||||
|
* Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
|
||||||
|
*
|
||||||
|
* @param source source path
|
||||||
|
* @param dest destination path
|
||||||
|
* @param options optional. See CopyOptions.
|
||||||
|
*/
|
||||||
|
function cp(source, dest, options = {}) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const { force, recursive } = readCopyOptions(options);
|
||||||
|
const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;
|
||||||
|
// Dest is an existing file, but not forcing
|
||||||
|
if (destStat && destStat.isFile() && !force) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// If dest is an existing directory, should copy inside.
|
||||||
|
const newDest = destStat && destStat.isDirectory()
|
||||||
|
? path.join(dest, path.basename(source))
|
||||||
|
: dest;
|
||||||
|
if (!(yield ioUtil.exists(source))) {
|
||||||
|
throw new Error(`no such file or directory: ${source}`);
|
||||||
|
}
|
||||||
|
const sourceStat = yield ioUtil.stat(source);
|
||||||
|
if (sourceStat.isDirectory()) {
|
||||||
|
if (!recursive) {
|
||||||
|
throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
yield cpDirRecursive(source, newDest, 0, force);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (path.relative(source, newDest) === '') {
|
||||||
|
// a file cannot be copied to itself
|
||||||
|
throw new Error(`'${newDest}' and '${source}' are the same file`);
|
||||||
|
}
|
||||||
|
yield copyFile(source, newDest, force);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.cp = cp;
|
||||||
|
/**
|
||||||
|
* Moves a path.
|
||||||
|
*
|
||||||
|
* @param source source path
|
||||||
|
* @param dest destination path
|
||||||
|
* @param options optional. See MoveOptions.
|
||||||
|
*/
|
||||||
|
function mv(source, dest, options = {}) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (yield ioUtil.exists(dest)) {
|
||||||
|
let destExists = true;
|
||||||
|
if (yield ioUtil.isDirectory(dest)) {
|
||||||
|
// If dest is directory copy src into dest
|
||||||
|
dest = path.join(dest, path.basename(source));
|
||||||
|
destExists = yield ioUtil.exists(dest);
|
||||||
|
}
|
||||||
|
if (destExists) {
|
||||||
|
if (options.force == null || options.force) {
|
||||||
|
yield rmRF(dest);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new Error('Destination already exists');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
yield mkdirP(path.dirname(dest));
|
||||||
|
yield ioUtil.rename(source, dest);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.mv = mv;
|
||||||
|
/**
|
||||||
|
* Remove a path recursively with force
|
||||||
|
*
|
||||||
|
* @param inputPath path to remove
|
||||||
|
*/
|
||||||
|
function rmRF(inputPath) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (ioUtil.IS_WINDOWS) {
|
||||||
|
// Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another
|
||||||
|
// program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del.
|
||||||
|
try {
|
||||||
|
if (yield ioUtil.isDirectory(inputPath, true)) {
|
||||||
|
yield exec(`rd /s /q "${inputPath}"`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
yield exec(`del /f /a "${inputPath}"`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// if you try to delete a file that doesn't exist, desired result is achieved
|
||||||
|
// other errors are valid
|
||||||
|
if (err.code !== 'ENOENT')
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
// Shelling out fails to remove a symlink folder with missing source, this unlink catches that
|
||||||
|
try {
|
||||||
|
yield ioUtil.unlink(inputPath);
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// if you try to delete a file that doesn't exist, desired result is achieved
|
||||||
|
// other errors are valid
|
||||||
|
if (err.code !== 'ENOENT')
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let isDir = false;
|
||||||
|
try {
|
||||||
|
isDir = yield ioUtil.isDirectory(inputPath);
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// if you try to delete a file that doesn't exist, desired result is achieved
|
||||||
|
// other errors are valid
|
||||||
|
if (err.code !== 'ENOENT')
|
||||||
|
throw err;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isDir) {
|
||||||
|
yield exec(`rm -rf "${inputPath}"`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
yield ioUtil.unlink(inputPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.rmRF = rmRF;
|
||||||
|
/**
|
||||||
|
* Make a directory. Creates the full path with folders in between
|
||||||
|
* Will throw if it fails
|
||||||
|
*
|
||||||
|
* @param fsPath path to create
|
||||||
|
* @returns Promise<void>
|
||||||
|
*/
|
||||||
|
function mkdirP(fsPath) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
yield ioUtil.mkdirP(fsPath);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.mkdirP = mkdirP;
|
||||||
|
/**
|
||||||
|
* Returns path of a tool had the tool actually been invoked. Resolves via paths.
|
||||||
|
* If you check and the tool does not exist, it will throw.
|
||||||
|
*
|
||||||
|
* @param tool name of the tool
|
||||||
|
* @param check whether to check if tool exists
|
||||||
|
* @returns Promise<string> path to tool
|
||||||
|
*/
|
||||||
|
function which(tool, check) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (!tool) {
|
||||||
|
throw new Error("parameter 'tool' is required");
|
||||||
|
}
|
||||||
|
// recursive when check=true
|
||||||
|
if (check) {
|
||||||
|
const result = yield which(tool, false);
|
||||||
|
if (!result) {
|
||||||
|
if (ioUtil.IS_WINDOWS) {
|
||||||
|
throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// build the list of extensions to try
|
||||||
|
const extensions = [];
|
||||||
|
if (ioUtil.IS_WINDOWS && process.env.PATHEXT) {
|
||||||
|
for (const extension of process.env.PATHEXT.split(path.delimiter)) {
|
||||||
|
if (extension) {
|
||||||
|
extensions.push(extension);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if it's rooted, return it if exists. otherwise return empty.
|
||||||
|
if (ioUtil.isRooted(tool)) {
|
||||||
|
const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);
|
||||||
|
if (filePath) {
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
// if any path separators, return empty
|
||||||
|
if (tool.includes('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
// build the list of directories
|
||||||
|
//
|
||||||
|
// Note, technically "where" checks the current directory on Windows. From a toolkit perspective,
|
||||||
|
// it feels like we should not do this. Checking the current directory seems like more of a use
|
||||||
|
// case of a shell, and the which() function exposed by the toolkit should strive for consistency
|
||||||
|
// across platforms.
|
||||||
|
const directories = [];
|
||||||
|
if (process.env.PATH) {
|
||||||
|
for (const p of process.env.PATH.split(path.delimiter)) {
|
||||||
|
if (p) {
|
||||||
|
directories.push(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// return the first match
|
||||||
|
for (const directory of directories) {
|
||||||
|
const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions);
|
||||||
|
if (filePath) {
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
throw new Error(`which failed with message ${err.message}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.which = which;
|
||||||
|
function readCopyOptions(options) {
|
||||||
|
const force = options.force == null ? true : options.force;
|
||||||
|
const recursive = Boolean(options.recursive);
|
||||||
|
return { force, recursive };
|
||||||
|
}
|
||||||
|
function cpDirRecursive(sourceDir, destDir, currentDepth, force) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
// Ensure there is not a run away recursive copy
|
||||||
|
if (currentDepth >= 255)
|
||||||
|
return;
|
||||||
|
currentDepth++;
|
||||||
|
yield mkdirP(destDir);
|
||||||
|
const files = yield ioUtil.readdir(sourceDir);
|
||||||
|
for (const fileName of files) {
|
||||||
|
const srcFile = `${sourceDir}/${fileName}`;
|
||||||
|
const destFile = `${destDir}/${fileName}`;
|
||||||
|
const srcFileStat = yield ioUtil.lstat(srcFile);
|
||||||
|
if (srcFileStat.isDirectory()) {
|
||||||
|
// Recurse
|
||||||
|
yield cpDirRecursive(srcFile, destFile, currentDepth, force);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
yield copyFile(srcFile, destFile, force);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Change the mode for the newly created directory
|
||||||
|
yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// Buffered file copy
|
||||||
|
function copyFile(srcFile, destFile, force) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) {
|
||||||
|
// unlink/re-link it
|
||||||
|
try {
|
||||||
|
yield ioUtil.lstat(destFile);
|
||||||
|
yield ioUtil.unlink(destFile);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
// Try to override file permission
|
||||||
|
if (e.code === 'EPERM') {
|
||||||
|
yield ioUtil.chmod(destFile, '0666');
|
||||||
|
yield ioUtil.unlink(destFile);
|
||||||
|
}
|
||||||
|
// other errors = it doesn't exist, no work to do
|
||||||
|
}
|
||||||
|
// Copy over symlink
|
||||||
|
const symlinkFull = yield ioUtil.readlink(srcFile);
|
||||||
|
yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null);
|
||||||
|
}
|
||||||
|
else if (!(yield ioUtil.exists(destFile)) || force) {
|
||||||
|
yield ioUtil.copyFile(srcFile, destFile);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=io.js.map
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,65 @@
|
||||||
|
{
|
||||||
|
"_from": "@actions/io@^1.0.1",
|
||||||
|
"_id": "@actions/io@1.0.2",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg==",
|
||||||
|
"_location": "/@actions/io",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "range",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@actions/io@^1.0.1",
|
||||||
|
"name": "@actions/io",
|
||||||
|
"escapedName": "@actions%2fio",
|
||||||
|
"scope": "@actions",
|
||||||
|
"rawSpec": "^1.0.1",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "^1.0.1"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/",
|
||||||
|
"/@actions/exec",
|
||||||
|
"/@actions/tool-cache"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@actions/io/-/io-1.0.2.tgz",
|
||||||
|
"_shasum": "2f614b6e69ce14d191180451eb38e6576a6e6b27",
|
||||||
|
"_spec": "@actions/io@^1.0.1",
|
||||||
|
"_where": "/Users/dbrock/Google Drive/appleiigs/install-merlin32-action",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/actions/toolkit/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "Actions io lib",
|
||||||
|
"directories": {
|
||||||
|
"lib": "lib",
|
||||||
|
"test": "__tests__"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"lib"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/actions/toolkit/tree/master/packages/io",
|
||||||
|
"keywords": [
|
||||||
|
"github",
|
||||||
|
"actions",
|
||||||
|
"io"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "lib/io.js",
|
||||||
|
"name": "@actions/io",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/actions/toolkit.git",
|
||||||
|
"directory": "packages/io"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"audit-moderate": "npm install && npm audit --audit-level=moderate",
|
||||||
|
"test": "echo \"Error: run tests from root\" && exit 1",
|
||||||
|
"tsc": "tsc"
|
||||||
|
},
|
||||||
|
"types": "lib/io.d.ts",
|
||||||
|
"version": "1.0.2"
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
# `@actions/tool-cache`
|
||||||
|
|
||||||
|
> Functions necessary for downloading and caching tools.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
#### Download
|
||||||
|
|
||||||
|
You can use this to download tools (or other files) from a download URL:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const tc = require('@actions/tool-cache');
|
||||||
|
|
||||||
|
const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Extract
|
||||||
|
|
||||||
|
These can then be extracted in platform specific ways:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const tc = require('@actions/tool-cache');
|
||||||
|
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.zip');
|
||||||
|
const node12ExtractedFolder = await tc.extractZip(node12Path, 'path/to/extract/to');
|
||||||
|
|
||||||
|
// Or alternately
|
||||||
|
const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z');
|
||||||
|
const node12ExtractedFolder = await tc.extract7z(node12Path, 'path/to/extract/to');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
|
||||||
|
const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Cache
|
||||||
|
|
||||||
|
Finally, you can cache these directories in our tool-cache. This is useful if you want to switch back and forth between versions of a tool, or save a tool between runs for self-hosted runners.
|
||||||
|
|
||||||
|
You'll often want to add it to the path as part of this step:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const tc = require('@actions/tool-cache');
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
|
||||||
|
const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');
|
||||||
|
|
||||||
|
const cachedPath = await tc.cacheDir(node12ExtractedFolder, 'node', '12.7.0');
|
||||||
|
core.addPath(cachedPath);
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also cache files for reuse.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const tc = require('@actions/tool-cache');
|
||||||
|
|
||||||
|
const cachedPath = await tc.cacheFile('path/to/exe', 'destFileName.exe', 'myExeName', '1.1.0');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Find
|
||||||
|
|
||||||
|
Finally, you can find directories and files you've previously cached:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const tc = require('@actions/tool-cache');
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
const nodeDirectory = tc.find('node', '12.x', 'x64');
|
||||||
|
core.addPath(nodeDirectory);
|
||||||
|
```
|
||||||
|
|
||||||
|
You can even find all cached versions of a tool:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const tc = require('@actions/tool-cache');
|
||||||
|
|
||||||
|
const allNodeVersions = tc.findAllVersions('node');
|
||||||
|
console.log(`Versions of node available: ${allNodeVersions}`);
|
||||||
|
```
|
|
@ -0,0 +1,12 @@
|
||||||
|
/**
|
||||||
|
* Internal class for retries
|
||||||
|
*/
|
||||||
|
export declare class RetryHelper {
|
||||||
|
private maxAttempts;
|
||||||
|
private minSeconds;
|
||||||
|
private maxSeconds;
|
||||||
|
constructor(maxAttempts: number, minSeconds: number, maxSeconds: number);
|
||||||
|
execute<T>(action: () => Promise<T>, isRetryable?: (e: Error) => boolean): Promise<T>;
|
||||||
|
private getSleepAmount;
|
||||||
|
private sleep;
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const core = __importStar(require("@actions/core"));
|
||||||
|
/**
|
||||||
|
* Internal class for retries
|
||||||
|
*/
|
||||||
|
class RetryHelper {
|
||||||
|
constructor(maxAttempts, minSeconds, maxSeconds) {
|
||||||
|
if (maxAttempts < 1) {
|
||||||
|
throw new Error('max attempts should be greater than or equal to 1');
|
||||||
|
}
|
||||||
|
this.maxAttempts = maxAttempts;
|
||||||
|
this.minSeconds = Math.floor(minSeconds);
|
||||||
|
this.maxSeconds = Math.floor(maxSeconds);
|
||||||
|
if (this.minSeconds > this.maxSeconds) {
|
||||||
|
throw new Error('min seconds should be less than or equal to max seconds');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
execute(action, isRetryable) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
let attempt = 1;
|
||||||
|
while (attempt < this.maxAttempts) {
|
||||||
|
// Try
|
||||||
|
try {
|
||||||
|
return yield action();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
if (isRetryable && !isRetryable(err)) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
core.info(err.message);
|
||||||
|
}
|
||||||
|
// Sleep
|
||||||
|
const seconds = this.getSleepAmount();
|
||||||
|
core.info(`Waiting ${seconds} seconds before trying again`);
|
||||||
|
yield this.sleep(seconds);
|
||||||
|
attempt++;
|
||||||
|
}
|
||||||
|
// Last attempt
|
||||||
|
return yield action();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
getSleepAmount() {
|
||||||
|
return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) +
|
||||||
|
this.minSeconds);
|
||||||
|
}
|
||||||
|
sleep(seconds) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, seconds * 1000));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.RetryHelper = RetryHelper;
|
||||||
|
//# sourceMappingURL=retry-helper.js.map
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"retry-helper.js","sourceRoot":"","sources":["../src/retry-helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,oDAAqC;AAErC;;GAEG;AACH,MAAa,WAAW;IAKtB,YAAY,WAAmB,EAAE,UAAkB,EAAE,UAAkB;QACrE,IAAI,WAAW,GAAG,CAAC,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;SACrE;QAED,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACxC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;SAC3E;IACH,CAAC;IAEK,OAAO,CACX,MAAwB,EACxB,WAAmC;;YAEnC,IAAI,OAAO,GAAG,CAAC,CAAA;YACf,OAAO,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;gBACjC,MAAM;gBACN,IAAI;oBACF,OAAO,MAAM,MAAM,EAAE,CAAA;iBACtB;gBAAC,OAAO,GAAG,EAAE;oBACZ,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;wBACpC,MAAM,GAAG,CAAA;qBACV;oBAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;iBACvB;gBAED,QAAQ;gBACR,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;gBACrC,IAAI,CAAC,IAAI,CAAC,WAAW,OAAO,8BAA8B,CAAC,CAAA;gBAC3D,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBACzB,OAAO,EAAE,CAAA;aACV;YAED,eAAe;YACf,OAAO,MAAM,MAAM,EAAE,CAAA;QACvB,CAAC;KAAA;IAEO,cAAc;QACpB,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,UAAU,CAChB,CAAA;IACH,CAAC;IAEa,KAAK,CAAC,OAAe;;YACjC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC,CAAA;QACpE,CAAC;KAAA;CACF;AAxDD,kCAwDC"}
|
|
@ -0,0 +1,80 @@
|
||||||
|
export declare class HTTPError extends Error {
|
||||||
|
readonly httpStatusCode: number | undefined;
|
||||||
|
constructor(httpStatusCode: number | undefined);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Download a tool from an url and stream it into a file
|
||||||
|
*
|
||||||
|
* @param url url of tool to download
|
||||||
|
* @param dest path to download tool
|
||||||
|
* @returns path to downloaded tool
|
||||||
|
*/
|
||||||
|
export declare function downloadTool(url: string, dest?: string): Promise<string>;
|
||||||
|
/**
|
||||||
|
* Extract a .7z file
|
||||||
|
*
|
||||||
|
* @param file path to the .7z file
|
||||||
|
* @param dest destination directory. Optional.
|
||||||
|
* @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this
|
||||||
|
* problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will
|
||||||
|
* gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is
|
||||||
|
* bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line
|
||||||
|
* interface, it is smaller than the full command line interface, and it does support long paths. At the
|
||||||
|
* time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website.
|
||||||
|
* Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path
|
||||||
|
* to 7zr.exe can be pass to this function.
|
||||||
|
* @returns path to the destination directory
|
||||||
|
*/
|
||||||
|
export declare function extract7z(file: string, dest?: string, _7zPath?: string): Promise<string>;
|
||||||
|
/**
|
||||||
|
* Extract a compressed tar archive
|
||||||
|
*
|
||||||
|
* @param file path to the tar
|
||||||
|
* @param dest destination directory. Optional.
|
||||||
|
* @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional.
|
||||||
|
* @returns path to the destination directory
|
||||||
|
*/
|
||||||
|
export declare function extractTar(file: string, dest?: string, flags?: string): Promise<string>;
|
||||||
|
/**
|
||||||
|
* Extract a zip
|
||||||
|
*
|
||||||
|
* @param file path to the zip
|
||||||
|
* @param dest destination directory. Optional.
|
||||||
|
* @returns path to the destination directory
|
||||||
|
*/
|
||||||
|
export declare function extractZip(file: string, dest?: string): Promise<string>;
|
||||||
|
/**
|
||||||
|
* Caches a directory and installs it into the tool cacheDir
|
||||||
|
*
|
||||||
|
* @param sourceDir the directory to cache into tools
|
||||||
|
* @param tool tool name
|
||||||
|
* @param version version of the tool. semver format
|
||||||
|
* @param arch architecture of the tool. Optional. Defaults to machine architecture
|
||||||
|
*/
|
||||||
|
export declare function cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise<string>;
|
||||||
|
/**
|
||||||
|
* Caches a downloaded file (GUID) and installs it
|
||||||
|
* into the tool cache with a given targetName
|
||||||
|
*
|
||||||
|
* @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid.
|
||||||
|
* @param targetFile the name of the file name in the tools directory
|
||||||
|
* @param tool tool name
|
||||||
|
* @param version version of the tool. semver format
|
||||||
|
* @param arch architecture of the tool. Optional. Defaults to machine architecture
|
||||||
|
*/
|
||||||
|
export declare function cacheFile(sourceFile: string, targetFile: string, tool: string, version: string, arch?: string): Promise<string>;
|
||||||
|
/**
|
||||||
|
* Finds the path to a tool version in the local installed tool cache
|
||||||
|
*
|
||||||
|
* @param toolName name of the tool
|
||||||
|
* @param versionSpec version of the tool
|
||||||
|
* @param arch optional arch. defaults to arch of computer
|
||||||
|
*/
|
||||||
|
export declare function find(toolName: string, versionSpec: string, arch?: string): string;
|
||||||
|
/**
|
||||||
|
* Finds the paths to all versions of a tool that are installed in the local tool cache
|
||||||
|
*
|
||||||
|
* @param toolName name of the tool
|
||||||
|
* @param arch optional arch. defaults to arch of computer
|
||||||
|
*/
|
||||||
|
export declare function findAllVersions(toolName: string, arch?: string): string[];
|
|
@ -0,0 +1,500 @@
|
||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const core = __importStar(require("@actions/core"));
|
||||||
|
const io = __importStar(require("@actions/io"));
|
||||||
|
const fs = __importStar(require("fs"));
|
||||||
|
const os = __importStar(require("os"));
|
||||||
|
const path = __importStar(require("path"));
|
||||||
|
const httpm = __importStar(require("@actions/http-client"));
|
||||||
|
const semver = __importStar(require("semver"));
|
||||||
|
const stream = __importStar(require("stream"));
|
||||||
|
const util = __importStar(require("util"));
|
||||||
|
const v4_1 = __importDefault(require("uuid/v4"));
|
||||||
|
const exec_1 = require("@actions/exec/lib/exec");
|
||||||
|
const assert_1 = require("assert");
|
||||||
|
const retry_helper_1 = require("./retry-helper");
|
||||||
|
class HTTPError extends Error {
|
||||||
|
constructor(httpStatusCode) {
|
||||||
|
super(`Unexpected HTTP response: ${httpStatusCode}`);
|
||||||
|
this.httpStatusCode = httpStatusCode;
|
||||||
|
Object.setPrototypeOf(this, new.target.prototype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.HTTPError = HTTPError;
|
||||||
|
const IS_WINDOWS = process.platform === 'win32';
|
||||||
|
const userAgent = 'actions/tool-cache';
|
||||||
|
/**
|
||||||
|
* Download a tool from an url and stream it into a file
|
||||||
|
*
|
||||||
|
* @param url url of tool to download
|
||||||
|
* @param dest path to download tool
|
||||||
|
* @returns path to downloaded tool
|
||||||
|
*/
|
||||||
|
function downloadTool(url, dest) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
dest = dest || path.join(_getTempDirectory(), v4_1.default());
|
||||||
|
yield io.mkdirP(path.dirname(dest));
|
||||||
|
core.debug(`Downloading ${url}`);
|
||||||
|
core.debug(`Destination ${dest}`);
|
||||||
|
const maxAttempts = 3;
|
||||||
|
const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10);
|
||||||
|
const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20);
|
||||||
|
const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds);
|
||||||
|
return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
|
||||||
|
return yield downloadToolAttempt(url, dest || '');
|
||||||
|
}), (err) => {
|
||||||
|
if (err instanceof HTTPError && err.httpStatusCode) {
|
||||||
|
// Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests
|
||||||
|
if (err.httpStatusCode < 500 &&
|
||||||
|
err.httpStatusCode !== 408 &&
|
||||||
|
err.httpStatusCode !== 429) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Otherwise retry
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.downloadTool = downloadTool;
|
||||||
|
function downloadToolAttempt(url, dest) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (fs.existsSync(dest)) {
|
||||||
|
throw new Error(`Destination file path ${dest} already exists`);
|
||||||
|
}
|
||||||
|
// Get the response headers
|
||||||
|
const http = new httpm.HttpClient(userAgent, [], {
|
||||||
|
allowRetries: false
|
||||||
|
});
|
||||||
|
const response = yield http.get(url);
|
||||||
|
if (response.message.statusCode !== 200) {
|
||||||
|
const err = new HTTPError(response.message.statusCode);
|
||||||
|
core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
// Download the response body
|
||||||
|
const pipeline = util.promisify(stream.pipeline);
|
||||||
|
const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message);
|
||||||
|
const readStream = responseMessageFactory();
|
||||||
|
let succeeded = false;
|
||||||
|
try {
|
||||||
|
yield pipeline(readStream, fs.createWriteStream(dest));
|
||||||
|
core.debug('download complete');
|
||||||
|
succeeded = true;
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
// Error, delete dest before retry
|
||||||
|
if (!succeeded) {
|
||||||
|
core.debug('download failed');
|
||||||
|
try {
|
||||||
|
yield io.rmRF(dest);
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
core.debug(`Failed to delete '${dest}'. ${err.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Extract a .7z file
|
||||||
|
*
|
||||||
|
* @param file path to the .7z file
|
||||||
|
* @param dest destination directory. Optional.
|
||||||
|
* @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this
|
||||||
|
* problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will
|
||||||
|
* gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is
|
||||||
|
* bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line
|
||||||
|
* interface, it is smaller than the full command line interface, and it does support long paths. At the
|
||||||
|
* time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website.
|
||||||
|
* Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path
|
||||||
|
* to 7zr.exe can be pass to this function.
|
||||||
|
* @returns path to the destination directory
|
||||||
|
*/
|
||||||
|
function extract7z(file, dest, _7zPath) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS');
|
||||||
|
assert_1.ok(file, 'parameter "file" is required');
|
||||||
|
dest = yield _createExtractFolder(dest);
|
||||||
|
const originalCwd = process.cwd();
|
||||||
|
process.chdir(dest);
|
||||||
|
if (_7zPath) {
|
||||||
|
try {
|
||||||
|
const args = [
|
||||||
|
'x',
|
||||||
|
'-bb1',
|
||||||
|
'-bd',
|
||||||
|
'-sccUTF-8',
|
||||||
|
file
|
||||||
|
];
|
||||||
|
const options = {
|
||||||
|
silent: true
|
||||||
|
};
|
||||||
|
yield exec_1.exec(`"${_7zPath}"`, args, options);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
process.chdir(originalCwd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const escapedScript = path
|
||||||
|
.join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1')
|
||||||
|
.replace(/'/g, "''")
|
||||||
|
.replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
|
||||||
|
const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, '');
|
||||||
|
const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
|
||||||
|
const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`;
|
||||||
|
const args = [
|
||||||
|
'-NoLogo',
|
||||||
|
'-Sta',
|
||||||
|
'-NoProfile',
|
||||||
|
'-NonInteractive',
|
||||||
|
'-ExecutionPolicy',
|
||||||
|
'Unrestricted',
|
||||||
|
'-Command',
|
||||||
|
command
|
||||||
|
];
|
||||||
|
const options = {
|
||||||
|
silent: true
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
const powershellPath = yield io.which('powershell', true);
|
||||||
|
yield exec_1.exec(`"${powershellPath}"`, args, options);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
process.chdir(originalCwd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dest;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.extract7z = extract7z;
|
||||||
|
/**
|
||||||
|
* Extract a compressed tar archive
|
||||||
|
*
|
||||||
|
* @param file path to the tar
|
||||||
|
* @param dest destination directory. Optional.
|
||||||
|
* @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional.
|
||||||
|
* @returns path to the destination directory
|
||||||
|
*/
|
||||||
|
function extractTar(file, dest, flags = 'xz') {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (!file) {
|
||||||
|
throw new Error("parameter 'file' is required");
|
||||||
|
}
|
||||||
|
// Create dest
|
||||||
|
dest = yield _createExtractFolder(dest);
|
||||||
|
// Determine whether GNU tar
|
||||||
|
core.debug('Checking tar --version');
|
||||||
|
let versionOutput = '';
|
||||||
|
yield exec_1.exec('tar --version', [], {
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
silent: true,
|
||||||
|
listeners: {
|
||||||
|
stdout: (data) => (versionOutput += data.toString()),
|
||||||
|
stderr: (data) => (versionOutput += data.toString())
|
||||||
|
}
|
||||||
|
});
|
||||||
|
core.debug(versionOutput.trim());
|
||||||
|
const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR');
|
||||||
|
// Initialize args
|
||||||
|
const args = [flags];
|
||||||
|
let destArg = dest;
|
||||||
|
let fileArg = file;
|
||||||
|
if (IS_WINDOWS && isGnuTar) {
|
||||||
|
args.push('--force-local');
|
||||||
|
destArg = dest.replace(/\\/g, '/');
|
||||||
|
// Technically only the dest needs to have `/` but for aesthetic consistency
|
||||||
|
// convert slashes in the file arg too.
|
||||||
|
fileArg = file.replace(/\\/g, '/');
|
||||||
|
}
|
||||||
|
if (isGnuTar) {
|
||||||
|
// Suppress warnings when using GNU tar to extract archives created by BSD tar
|
||||||
|
args.push('--warning=no-unknown-keyword');
|
||||||
|
}
|
||||||
|
args.push('-C', destArg, '-f', fileArg);
|
||||||
|
yield exec_1.exec(`tar`, args);
|
||||||
|
return dest;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.extractTar = extractTar;
|
||||||
|
/**
|
||||||
|
* Extract a zip
|
||||||
|
*
|
||||||
|
* @param file path to the zip
|
||||||
|
* @param dest destination directory. Optional.
|
||||||
|
* @returns path to the destination directory
|
||||||
|
*/
|
||||||
|
function extractZip(file, dest) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (!file) {
|
||||||
|
throw new Error("parameter 'file' is required");
|
||||||
|
}
|
||||||
|
dest = yield _createExtractFolder(dest);
|
||||||
|
if (IS_WINDOWS) {
|
||||||
|
yield extractZipWin(file, dest);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
yield extractZipNix(file, dest);
|
||||||
|
}
|
||||||
|
return dest;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.extractZip = extractZip;
|
||||||
|
function extractZipWin(file, dest) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
// build the powershell command
|
||||||
|
const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
|
||||||
|
const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
|
||||||
|
const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`;
|
||||||
|
// run powershell
|
||||||
|
const powershellPath = yield io.which('powershell');
|
||||||
|
const args = [
|
||||||
|
'-NoLogo',
|
||||||
|
'-Sta',
|
||||||
|
'-NoProfile',
|
||||||
|
'-NonInteractive',
|
||||||
|
'-ExecutionPolicy',
|
||||||
|
'Unrestricted',
|
||||||
|
'-Command',
|
||||||
|
command
|
||||||
|
];
|
||||||
|
yield exec_1.exec(`"${powershellPath}"`, args);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function extractZipNix(file, dest) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const unzipPath = yield io.which('unzip');
|
||||||
|
yield exec_1.exec(`"${unzipPath}"`, [file], { cwd: dest });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Caches a directory and installs it into the tool cacheDir
|
||||||
|
*
|
||||||
|
* @param sourceDir the directory to cache into tools
|
||||||
|
* @param tool tool name
|
||||||
|
* @param version version of the tool. semver format
|
||||||
|
* @param arch architecture of the tool. Optional. Defaults to machine architecture
|
||||||
|
*/
|
||||||
|
function cacheDir(sourceDir, tool, version, arch) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
version = semver.clean(version) || version;
|
||||||
|
arch = arch || os.arch();
|
||||||
|
core.debug(`Caching tool ${tool} ${version} ${arch}`);
|
||||||
|
core.debug(`source dir: ${sourceDir}`);
|
||||||
|
if (!fs.statSync(sourceDir).isDirectory()) {
|
||||||
|
throw new Error('sourceDir is not a directory');
|
||||||
|
}
|
||||||
|
// Create the tool dir
|
||||||
|
const destPath = yield _createToolPath(tool, version, arch);
|
||||||
|
// copy each child item. do not move. move can fail on Windows
|
||||||
|
// due to anti-virus software having an open handle on a file.
|
||||||
|
for (const itemName of fs.readdirSync(sourceDir)) {
|
||||||
|
const s = path.join(sourceDir, itemName);
|
||||||
|
yield io.cp(s, destPath, { recursive: true });
|
||||||
|
}
|
||||||
|
// write .complete
|
||||||
|
_completeToolPath(tool, version, arch);
|
||||||
|
return destPath;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.cacheDir = cacheDir;
|
||||||
|
/**
|
||||||
|
* Caches a downloaded file (GUID) and installs it
|
||||||
|
* into the tool cache with a given targetName
|
||||||
|
*
|
||||||
|
* @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid.
|
||||||
|
* @param targetFile the name of the file name in the tools directory
|
||||||
|
* @param tool tool name
|
||||||
|
* @param version version of the tool. semver format
|
||||||
|
* @param arch architecture of the tool. Optional. Defaults to machine architecture
|
||||||
|
*/
|
||||||
|
function cacheFile(sourceFile, targetFile, tool, version, arch) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
version = semver.clean(version) || version;
|
||||||
|
arch = arch || os.arch();
|
||||||
|
core.debug(`Caching tool ${tool} ${version} ${arch}`);
|
||||||
|
core.debug(`source file: ${sourceFile}`);
|
||||||
|
if (!fs.statSync(sourceFile).isFile()) {
|
||||||
|
throw new Error('sourceFile is not a file');
|
||||||
|
}
|
||||||
|
// create the tool dir
|
||||||
|
const destFolder = yield _createToolPath(tool, version, arch);
|
||||||
|
// copy instead of move. move can fail on Windows due to
|
||||||
|
// anti-virus software having an open handle on a file.
|
||||||
|
const destPath = path.join(destFolder, targetFile);
|
||||||
|
core.debug(`destination file ${destPath}`);
|
||||||
|
yield io.cp(sourceFile, destPath);
|
||||||
|
// write .complete
|
||||||
|
_completeToolPath(tool, version, arch);
|
||||||
|
return destFolder;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.cacheFile = cacheFile;
|
||||||
|
/**
|
||||||
|
* Finds the path to a tool version in the local installed tool cache
|
||||||
|
*
|
||||||
|
* @param toolName name of the tool
|
||||||
|
* @param versionSpec version of the tool
|
||||||
|
* @param arch optional arch. defaults to arch of computer
|
||||||
|
*/
|
||||||
|
function find(toolName, versionSpec, arch) {
|
||||||
|
if (!toolName) {
|
||||||
|
throw new Error('toolName parameter is required');
|
||||||
|
}
|
||||||
|
if (!versionSpec) {
|
||||||
|
throw new Error('versionSpec parameter is required');
|
||||||
|
}
|
||||||
|
arch = arch || os.arch();
|
||||||
|
// attempt to resolve an explicit version
|
||||||
|
if (!_isExplicitVersion(versionSpec)) {
|
||||||
|
const localVersions = findAllVersions(toolName, arch);
|
||||||
|
const match = _evaluateVersions(localVersions, versionSpec);
|
||||||
|
versionSpec = match;
|
||||||
|
}
|
||||||
|
// check for the explicit version in the cache
|
||||||
|
let toolPath = '';
|
||||||
|
if (versionSpec) {
|
||||||
|
versionSpec = semver.clean(versionSpec) || '';
|
||||||
|
const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch);
|
||||||
|
core.debug(`checking cache: ${cachePath}`);
|
||||||
|
if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) {
|
||||||
|
core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`);
|
||||||
|
toolPath = cachePath;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
core.debug('not found');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return toolPath;
|
||||||
|
}
|
||||||
|
exports.find = find;
|
||||||
|
/**
|
||||||
|
* Finds the paths to all versions of a tool that are installed in the local tool cache
|
||||||
|
*
|
||||||
|
* @param toolName name of the tool
|
||||||
|
* @param arch optional arch. defaults to arch of computer
|
||||||
|
*/
|
||||||
|
function findAllVersions(toolName, arch) {
|
||||||
|
const versions = [];
|
||||||
|
arch = arch || os.arch();
|
||||||
|
const toolPath = path.join(_getCacheDirectory(), toolName);
|
||||||
|
if (fs.existsSync(toolPath)) {
|
||||||
|
const children = fs.readdirSync(toolPath);
|
||||||
|
for (const child of children) {
|
||||||
|
if (_isExplicitVersion(child)) {
|
||||||
|
const fullPath = path.join(toolPath, child, arch || '');
|
||||||
|
if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) {
|
||||||
|
versions.push(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return versions;
|
||||||
|
}
|
||||||
|
exports.findAllVersions = findAllVersions;
|
||||||
|
function _createExtractFolder(dest) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (!dest) {
|
||||||
|
// create a temp dir
|
||||||
|
dest = path.join(_getTempDirectory(), v4_1.default());
|
||||||
|
}
|
||||||
|
yield io.mkdirP(dest);
|
||||||
|
return dest;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function _createToolPath(tool, version, arch) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || '');
|
||||||
|
core.debug(`destination ${folderPath}`);
|
||||||
|
const markerPath = `${folderPath}.complete`;
|
||||||
|
yield io.rmRF(folderPath);
|
||||||
|
yield io.rmRF(markerPath);
|
||||||
|
yield io.mkdirP(folderPath);
|
||||||
|
return folderPath;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function _completeToolPath(tool, version, arch) {
|
||||||
|
const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || '');
|
||||||
|
const markerPath = `${folderPath}.complete`;
|
||||||
|
fs.writeFileSync(markerPath, '');
|
||||||
|
core.debug('finished caching tool');
|
||||||
|
}
|
||||||
|
function _isExplicitVersion(versionSpec) {
|
||||||
|
const c = semver.clean(versionSpec) || '';
|
||||||
|
core.debug(`isExplicit: ${c}`);
|
||||||
|
const valid = semver.valid(c) != null;
|
||||||
|
core.debug(`explicit? ${valid}`);
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
function _evaluateVersions(versions, versionSpec) {
|
||||||
|
let version = '';
|
||||||
|
core.debug(`evaluating ${versions.length} versions`);
|
||||||
|
versions = versions.sort((a, b) => {
|
||||||
|
if (semver.gt(a, b)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
});
|
||||||
|
for (let i = versions.length - 1; i >= 0; i--) {
|
||||||
|
const potential = versions[i];
|
||||||
|
const satisfied = semver.satisfies(potential, versionSpec);
|
||||||
|
if (satisfied) {
|
||||||
|
version = potential;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (version) {
|
||||||
|
core.debug(`matched: ${version}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
core.debug('match not found');
|
||||||
|
}
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Gets RUNNER_TOOL_CACHE
|
||||||
|
*/
|
||||||
|
function _getCacheDirectory() {
|
||||||
|
const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || '';
|
||||||
|
assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined');
|
||||||
|
return cacheDirectory;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Gets RUNNER_TEMP
|
||||||
|
*/
|
||||||
|
function _getTempDirectory() {
|
||||||
|
const tempDirectory = process.env['RUNNER_TEMP'] || '';
|
||||||
|
assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined');
|
||||||
|
return tempDirectory;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Gets a global variable
|
||||||
|
*/
|
||||||
|
function _getGlobal(key, defaultValue) {
|
||||||
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
|
const value = global[key];
|
||||||
|
/* eslint-enable @typescript-eslint/no-explicit-any */
|
||||||
|
return value !== undefined ? value : defaultValue;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=tool-cache.js.map
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,79 @@
|
||||||
|
{
|
||||||
|
"_from": "@actions/tool-cache@1.3.4",
|
||||||
|
"_id": "@actions/tool-cache@1.3.4",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-1Pfz4vDbKzqsWOi5CdNl377cwBNfsNrV3Wy8i94mw+49T+6JVqAH3gtFj/Woe93zyvlvzqM0rmQlPh5+jvKLag==",
|
||||||
|
"_location": "/@actions/tool-cache",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "version",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@actions/tool-cache@1.3.4",
|
||||||
|
"name": "@actions/tool-cache",
|
||||||
|
"escapedName": "@actions%2ftool-cache",
|
||||||
|
"scope": "@actions",
|
||||||
|
"rawSpec": "1.3.4",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "1.3.4"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"#USER",
|
||||||
|
"/"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.3.4.tgz",
|
||||||
|
"_shasum": "2d2e3d109696edc7c12b0bd47ab6f66446428246",
|
||||||
|
"_spec": "@actions/tool-cache@1.3.4",
|
||||||
|
"_where": "/Users/dbrock/Google Drive/appleiigs/install-merlin32-action",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/actions/toolkit/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"dependencies": {
|
||||||
|
"@actions/core": "^1.2.0",
|
||||||
|
"@actions/exec": "^1.0.0",
|
||||||
|
"@actions/http-client": "^1.0.8",
|
||||||
|
"@actions/io": "^1.0.1",
|
||||||
|
"semver": "^6.1.0",
|
||||||
|
"uuid": "^3.3.2"
|
||||||
|
},
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "Actions tool-cache lib",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/nock": "^10.0.3",
|
||||||
|
"@types/semver": "^6.0.0",
|
||||||
|
"@types/uuid": "^3.4.4",
|
||||||
|
"nock": "^10.0.6"
|
||||||
|
},
|
||||||
|
"directories": {
|
||||||
|
"lib": "lib",
|
||||||
|
"test": "__tests__"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"lib",
|
||||||
|
"scripts"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/actions/toolkit/tree/master/packages/exec",
|
||||||
|
"keywords": [
|
||||||
|
"github",
|
||||||
|
"actions",
|
||||||
|
"exec"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "lib/tool-cache.js",
|
||||||
|
"name": "@actions/tool-cache",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/actions/toolkit.git",
|
||||||
|
"directory": "packages/tool-cache"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"audit-moderate": "npm install && npm audit --audit-level=moderate",
|
||||||
|
"test": "echo \"Error: run tests from root\" && exit 1",
|
||||||
|
"tsc": "tsc"
|
||||||
|
},
|
||||||
|
"types": "lib/tool-cache.d.ts",
|
||||||
|
"version": "1.3.4"
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
[CmdletBinding()]
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[string]$Source,
|
||||||
|
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[string]$Target)
|
||||||
|
|
||||||
|
# This script translates the output from 7zdec into UTF8. Node has limited
|
||||||
|
# built-in support for encodings.
|
||||||
|
#
|
||||||
|
# 7zdec uses the system default code page. The system default code page varies
|
||||||
|
# depending on the locale configuration. On an en-US box, the system default code
|
||||||
|
# page is Windows-1252.
|
||||||
|
#
|
||||||
|
# Note, on a typical en-US box, testing with the 'ç' character is a good way to
|
||||||
|
# determine whether data is passed correctly between processes. This is because
|
||||||
|
# the 'ç' character has a different code point across each of the common encodings
|
||||||
|
# on a typical en-US box, i.e.
|
||||||
|
# 1) the default console-output code page (IBM437)
|
||||||
|
# 2) the system default code page (i.e. CP_ACP) (Windows-1252)
|
||||||
|
# 3) UTF8
|
||||||
|
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
# Redefine the wrapper over STDOUT to use UTF8. Node expects UTF8 by default.
|
||||||
|
$stdout = [System.Console]::OpenStandardOutput()
|
||||||
|
$utf8 = New-Object System.Text.UTF8Encoding($false) # do not emit BOM
|
||||||
|
$writer = New-Object System.IO.StreamWriter($stdout, $utf8)
|
||||||
|
[System.Console]::SetOut($writer)
|
||||||
|
|
||||||
|
# All subsequent output must be written using [System.Console]::WriteLine(). In
|
||||||
|
# PowerShell 4, Write-Host and Out-Default do not consider the updated stream writer.
|
||||||
|
|
||||||
|
Set-Location -LiteralPath $Target
|
||||||
|
|
||||||
|
# Print the ##command.
|
||||||
|
$_7zdec = Join-Path -Path "$PSScriptRoot" -ChildPath "externals/7zdec.exe"
|
||||||
|
[System.Console]::WriteLine("##[command]$_7zdec x `"$Source`"")
|
||||||
|
|
||||||
|
# The $OutputEncoding variable instructs PowerShell how to interpret the output
|
||||||
|
# from the external command.
|
||||||
|
$OutputEncoding = [System.Text.Encoding]::Default
|
||||||
|
|
||||||
|
# Note, the output from 7zdec.exe needs to be iterated over. Otherwise PowerShell.exe
|
||||||
|
# will launch the external command in such a way that it inherits the streams.
|
||||||
|
& $_7zdec x $Source 2>&1 |
|
||||||
|
ForEach-Object {
|
||||||
|
if ($_ -is [System.Management.Automation.ErrorRecord]) {
|
||||||
|
[System.Console]::WriteLine($_.Exception.Message)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[System.Console]::WriteLine($_)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[System.Console]::WriteLine("##[debug]7zdec.exe exit code '$LASTEXITCODE'")
|
||||||
|
[System.Console]::Out.Flush()
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
exit $LASTEXITCODE
|
||||||
|
}
|
Binary file not shown.
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) Microsoft Corporation.
|
||||||
|
|
||||||
|
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
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Installation
|
||||||
|
> `npm install --save @types/node`
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
This package contains type definitions for Node.js (http://nodejs.org/).
|
||||||
|
|
||||||
|
# Details
|
||||||
|
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node/v12.
|
||||||
|
|
||||||
|
### Additional Details
|
||||||
|
* Last updated: Tue, 05 May 2020 19:03:00 GMT
|
||||||
|
* Dependencies: none
|
||||||
|
* Global values: `Buffer`, `NodeJS`, `Symbol`, `__dirname`, `__filename`, `clearImmediate`, `clearInterval`, `clearTimeout`, `console`, `exports`, `global`, `module`, `process`, `queueMicrotask`, `require`, `setImmediate`, `setInterval`, `setTimeout`
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alexander T.](https://github.com/a-tarasyuk), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Bruno Scheufler](https://github.com/brunoscheufler), [Chigozirim C.](https://github.com/smac89), [Christian Vaagland Tellnes](https://github.com/tellnes), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Flarna](https://github.com/Flarna), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Hoàng Văn Khải](https://github.com/KSXGitHub), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nicolas Voigt](https://github.com/octo-sniffle), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Zane Hannan AU](https://github.com/ZaneHannanAU), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Jordi Oliveras Rovira](https://github.com/j-oliveras), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Minh Son Nguyen](https://github.com/nguymin4), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), and [ExE Boss](https://github.com/ExE-Boss).
|
|
@ -0,0 +1,52 @@
|
||||||
|
declare module "assert" {
|
||||||
|
function assert(value: any, message?: string | Error): void;
|
||||||
|
namespace assert {
|
||||||
|
class AssertionError implements Error {
|
||||||
|
name: string;
|
||||||
|
message: string;
|
||||||
|
actual: any;
|
||||||
|
expected: any;
|
||||||
|
operator: string;
|
||||||
|
generatedMessage: boolean;
|
||||||
|
code: 'ERR_ASSERTION';
|
||||||
|
|
||||||
|
constructor(options?: {
|
||||||
|
message?: string; actual?: any; expected?: any;
|
||||||
|
operator?: string; stackStartFn?: Function
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function fail(message?: string | Error): never;
|
||||||
|
/** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */
|
||||||
|
function fail(actual: any, expected: any, message?: string | Error, operator?: string, stackStartFn?: Function): never;
|
||||||
|
function ok(value: any, message?: string | Error): void;
|
||||||
|
/** @deprecated since v9.9.0 - use strictEqual() instead. */
|
||||||
|
function equal(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
/** @deprecated since v9.9.0 - use notStrictEqual() instead. */
|
||||||
|
function notEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
/** @deprecated since v9.9.0 - use deepStrictEqual() instead. */
|
||||||
|
function deepEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
/** @deprecated since v9.9.0 - use notDeepStrictEqual() instead. */
|
||||||
|
function notDeepEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
function strictEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
function notStrictEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
function deepStrictEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
function notDeepStrictEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
|
||||||
|
function throws(block: () => any, message?: string | Error): void;
|
||||||
|
function throws(block: () => any, error: RegExp | Function | Object | Error, message?: string | Error): void;
|
||||||
|
function doesNotThrow(block: () => any, message?: string | Error): void;
|
||||||
|
function doesNotThrow(block: () => any, error: RegExp | Function, message?: string | Error): void;
|
||||||
|
|
||||||
|
function ifError(value: any): void;
|
||||||
|
|
||||||
|
function rejects(block: (() => Promise<any>) | Promise<any>, message?: string | Error): Promise<void>;
|
||||||
|
function rejects(block: (() => Promise<any>) | Promise<any>, error: RegExp | Function | Object | Error, message?: string | Error): Promise<void>;
|
||||||
|
function doesNotReject(block: (() => Promise<any>) | Promise<any>, message?: string | Error): Promise<void>;
|
||||||
|
function doesNotReject(block: (() => Promise<any>) | Promise<any>, error: RegExp | Function, message?: string | Error): Promise<void>;
|
||||||
|
|
||||||
|
const strict: typeof assert;
|
||||||
|
}
|
||||||
|
|
||||||
|
export = assert;
|
||||||
|
}
|
|
@ -0,0 +1,132 @@
|
||||||
|
/**
|
||||||
|
* Async Hooks module: https://nodejs.org/api/async_hooks.html
|
||||||
|
*/
|
||||||
|
declare module "async_hooks" {
|
||||||
|
/**
|
||||||
|
* Returns the asyncId of the current execution context.
|
||||||
|
*/
|
||||||
|
function executionAsyncId(): number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the ID of the resource responsible for calling the callback that is currently being executed.
|
||||||
|
*/
|
||||||
|
function triggerAsyncId(): number;
|
||||||
|
|
||||||
|
interface HookCallbacks {
|
||||||
|
/**
|
||||||
|
* Called when a class is constructed that has the possibility to emit an asynchronous event.
|
||||||
|
* @param asyncId a unique ID for the async resource
|
||||||
|
* @param type the type of the async resource
|
||||||
|
* @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created
|
||||||
|
* @param resource reference to the resource representing the async operation, needs to be released during destroy
|
||||||
|
*/
|
||||||
|
init?(asyncId: number, type: string, triggerAsyncId: number, resource: Object): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When an asynchronous operation is initiated or completes a callback is called to notify the user.
|
||||||
|
* The before callback is called just before said callback is executed.
|
||||||
|
* @param asyncId the unique identifier assigned to the resource about to execute the callback.
|
||||||
|
*/
|
||||||
|
before?(asyncId: number): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called immediately after the callback specified in before is completed.
|
||||||
|
* @param asyncId the unique identifier assigned to the resource which has executed the callback.
|
||||||
|
*/
|
||||||
|
after?(asyncId: number): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a promise has resolve() called. This may not be in the same execution id
|
||||||
|
* as the promise itself.
|
||||||
|
* @param asyncId the unique id for the promise that was resolve()d.
|
||||||
|
*/
|
||||||
|
promiseResolve?(asyncId: number): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called after the resource corresponding to asyncId is destroyed
|
||||||
|
* @param asyncId a unique ID for the async resource
|
||||||
|
*/
|
||||||
|
destroy?(asyncId: number): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AsyncHook {
|
||||||
|
/**
|
||||||
|
* Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
|
||||||
|
*/
|
||||||
|
enable(): this;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled.
|
||||||
|
*/
|
||||||
|
disable(): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers functions to be called for different lifetime events of each async operation.
|
||||||
|
* @param options the callbacks to register
|
||||||
|
* @return an AsyncHooks instance used for disabling and enabling hooks
|
||||||
|
*/
|
||||||
|
function createHook(options: HookCallbacks): AsyncHook;
|
||||||
|
|
||||||
|
interface AsyncResourceOptions {
|
||||||
|
/**
|
||||||
|
* The ID of the execution context that created this async event.
|
||||||
|
* Default: `executionAsyncId()`
|
||||||
|
*/
|
||||||
|
triggerAsyncId?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disables automatic `emitDestroy` when the object is garbage collected.
|
||||||
|
* This usually does not need to be set (even if `emitDestroy` is called
|
||||||
|
* manually), unless the resource's `asyncId` is retrieved and the
|
||||||
|
* sensitive API's `emitDestroy` is called with it.
|
||||||
|
* Default: `false`
|
||||||
|
*/
|
||||||
|
requireManualDestroy?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class AsyncResource was designed to be extended by the embedder's async resources.
|
||||||
|
* Using this users can easily trigger the lifetime events of their own resources.
|
||||||
|
*/
|
||||||
|
class AsyncResource {
|
||||||
|
/**
|
||||||
|
* AsyncResource() is meant to be extended. Instantiating a
|
||||||
|
* new AsyncResource() also triggers init. If triggerAsyncId is omitted then
|
||||||
|
* async_hook.executionAsyncId() is used.
|
||||||
|
* @param type The type of async event.
|
||||||
|
* @param triggerAsyncId The ID of the execution context that created
|
||||||
|
* this async event (default: `executionAsyncId()`), or an
|
||||||
|
* AsyncResourceOptions object (since 9.3)
|
||||||
|
*/
|
||||||
|
constructor(type: string, triggerAsyncId?: number|AsyncResourceOptions);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call the provided function with the provided arguments in the
|
||||||
|
* execution context of the async resource. This will establish the
|
||||||
|
* context, trigger the AsyncHooks before callbacks, call the function,
|
||||||
|
* trigger the AsyncHooks after callbacks, and then restore the original
|
||||||
|
* execution context.
|
||||||
|
* @param fn The function to call in the execution context of this
|
||||||
|
* async resource.
|
||||||
|
* @param thisArg The receiver to be used for the function call.
|
||||||
|
* @param args Optional arguments to pass to the function.
|
||||||
|
*/
|
||||||
|
runInAsyncScope<This, Result>(fn: (this: This, ...args: any[]) => Result, thisArg?: This, ...args: any[]): Result;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call AsyncHooks destroy callbacks.
|
||||||
|
*/
|
||||||
|
emitDestroy(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the unique ID assigned to this AsyncResource instance.
|
||||||
|
*/
|
||||||
|
asyncId(): number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the trigger ID for this AsyncResource instance.
|
||||||
|
*/
|
||||||
|
triggerAsyncId(): number;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
// base definnitions for all NodeJS modules that are not specific to any version of TypeScript
|
||||||
|
/// <reference path="globals.d.ts" />
|
||||||
|
/// <reference path="async_hooks.d.ts" />
|
||||||
|
/// <reference path="buffer.d.ts" />
|
||||||
|
/// <reference path="child_process.d.ts" />
|
||||||
|
/// <reference path="cluster.d.ts" />
|
||||||
|
/// <reference path="console.d.ts" />
|
||||||
|
/// <reference path="constants.d.ts" />
|
||||||
|
/// <reference path="crypto.d.ts" />
|
||||||
|
/// <reference path="dgram.d.ts" />
|
||||||
|
/// <reference path="dns.d.ts" />
|
||||||
|
/// <reference path="domain.d.ts" />
|
||||||
|
/// <reference path="events.d.ts" />
|
||||||
|
/// <reference path="fs.d.ts" />
|
||||||
|
/// <reference path="http.d.ts" />
|
||||||
|
/// <reference path="http2.d.ts" />
|
||||||
|
/// <reference path="https.d.ts" />
|
||||||
|
/// <reference path="inspector.d.ts" />
|
||||||
|
/// <reference path="module.d.ts" />
|
||||||
|
/// <reference path="net.d.ts" />
|
||||||
|
/// <reference path="os.d.ts" />
|
||||||
|
/// <reference path="path.d.ts" />
|
||||||
|
/// <reference path="perf_hooks.d.ts" />
|
||||||
|
/// <reference path="process.d.ts" />
|
||||||
|
/// <reference path="punycode.d.ts" />
|
||||||
|
/// <reference path="querystring.d.ts" />
|
||||||
|
/// <reference path="readline.d.ts" />
|
||||||
|
/// <reference path="repl.d.ts" />
|
||||||
|
/// <reference path="stream.d.ts" />
|
||||||
|
/// <reference path="string_decoder.d.ts" />
|
||||||
|
/// <reference path="timers.d.ts" />
|
||||||
|
/// <reference path="tls.d.ts" />
|
||||||
|
/// <reference path="trace_events.d.ts" />
|
||||||
|
/// <reference path="tty.d.ts" />
|
||||||
|
/// <reference path="url.d.ts" />
|
||||||
|
/// <reference path="util.d.ts" />
|
||||||
|
/// <reference path="v8.d.ts" />
|
||||||
|
/// <reference path="vm.d.ts" />
|
||||||
|
/// <reference path="worker_threads.d.ts" />
|
||||||
|
/// <reference path="zlib.d.ts" />
|
|
@ -0,0 +1,22 @@
|
||||||
|
declare module "buffer" {
|
||||||
|
export const INSPECT_MAX_BYTES: number;
|
||||||
|
export const kMaxLength: number;
|
||||||
|
export const kStringMaxLength: number;
|
||||||
|
export const constants: {
|
||||||
|
MAX_LENGTH: number;
|
||||||
|
MAX_STRING_LENGTH: number;
|
||||||
|
};
|
||||||
|
const BuffType: typeof Buffer;
|
||||||
|
|
||||||
|
export type TranscodeEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "latin1" | "binary";
|
||||||
|
|
||||||
|
export function transcode(source: Uint8Array, fromEnc: TranscodeEncoding, toEnc: TranscodeEncoding): Buffer;
|
||||||
|
|
||||||
|
export const SlowBuffer: {
|
||||||
|
/** @deprecated since v6.0.0, use Buffer.allocUnsafeSlow() */
|
||||||
|
new(size: number): Buffer;
|
||||||
|
prototype: Buffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
export { BuffType as Buffer };
|
||||||
|
}
|
|
@ -0,0 +1,483 @@
|
||||||
|
declare module "child_process" {
|
||||||
|
import * as events from "events";
|
||||||
|
import * as net from "net";
|
||||||
|
import { Writable, Readable, Stream, Pipe } from "stream";
|
||||||
|
|
||||||
|
interface ChildProcess extends events.EventEmitter {
|
||||||
|
stdin: Writable | null;
|
||||||
|
stdout: Readable | null;
|
||||||
|
stderr: Readable | null;
|
||||||
|
readonly channel?: Pipe | null;
|
||||||
|
readonly stdio: [
|
||||||
|
Writable | null, // stdin
|
||||||
|
Readable | null, // stdout
|
||||||
|
Readable | null, // stderr
|
||||||
|
Readable | Writable | null | undefined, // extra
|
||||||
|
Readable | Writable | null | undefined // extra
|
||||||
|
];
|
||||||
|
readonly killed: boolean;
|
||||||
|
readonly pid: number;
|
||||||
|
readonly connected: boolean;
|
||||||
|
kill(signal?: NodeJS.Signals | number): void;
|
||||||
|
send(message: any, callback?: (error: Error | null) => void): boolean;
|
||||||
|
send(message: any, sendHandle?: net.Socket | net.Server, callback?: (error: Error | null) => void): boolean;
|
||||||
|
send(message: any, sendHandle?: net.Socket | net.Server, options?: MessageOptions, callback?: (error: Error | null) => void): boolean;
|
||||||
|
disconnect(): void;
|
||||||
|
unref(): void;
|
||||||
|
ref(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* events.EventEmitter
|
||||||
|
* 1. close
|
||||||
|
* 2. disconnect
|
||||||
|
* 3. error
|
||||||
|
* 4. exit
|
||||||
|
* 5. message
|
||||||
|
*/
|
||||||
|
|
||||||
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
addListener(event: "close", listener: (code: number, signal: NodeJS.Signals) => void): this;
|
||||||
|
addListener(event: "disconnect", listener: () => void): this;
|
||||||
|
addListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
addListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
||||||
|
addListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
|
||||||
|
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
emit(event: "close", code: number, signal: NodeJS.Signals): boolean;
|
||||||
|
emit(event: "disconnect"): boolean;
|
||||||
|
emit(event: "error", err: Error): boolean;
|
||||||
|
emit(event: "exit", code: number | null, signal: NodeJS.Signals | null): boolean;
|
||||||
|
emit(event: "message", message: any, sendHandle: net.Socket | net.Server): boolean;
|
||||||
|
|
||||||
|
on(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: "close", listener: (code: number, signal: NodeJS.Signals) => void): this;
|
||||||
|
on(event: "disconnect", listener: () => void): this;
|
||||||
|
on(event: "error", listener: (err: Error) => void): this;
|
||||||
|
on(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
||||||
|
on(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
|
||||||
|
|
||||||
|
once(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: "close", listener: (code: number, signal: NodeJS.Signals) => void): this;
|
||||||
|
once(event: "disconnect", listener: () => void): this;
|
||||||
|
once(event: "error", listener: (err: Error) => void): this;
|
||||||
|
once(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
||||||
|
once(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: "close", listener: (code: number, signal: NodeJS.Signals) => void): this;
|
||||||
|
prependListener(event: "disconnect", listener: () => void): this;
|
||||||
|
prependListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
||||||
|
prependListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: "close", listener: (code: number, signal: NodeJS.Signals) => void): this;
|
||||||
|
prependOnceListener(event: "disconnect", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
||||||
|
prependOnceListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return this object when stdio option is undefined or not specified
|
||||||
|
interface ChildProcessWithoutNullStreams extends ChildProcess {
|
||||||
|
stdin: Writable;
|
||||||
|
stdout: Readable;
|
||||||
|
stderr: Readable;
|
||||||
|
readonly stdio: [
|
||||||
|
Writable, // stdin
|
||||||
|
Readable, // stdout
|
||||||
|
Readable, // stderr
|
||||||
|
Readable | Writable | null | undefined, // extra, no modification
|
||||||
|
Readable | Writable | null | undefined // extra, no modification
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// return this object when stdio option is a tuple of 3
|
||||||
|
interface ChildProcessByStdio<
|
||||||
|
I extends null | Writable,
|
||||||
|
O extends null | Readable,
|
||||||
|
E extends null | Readable,
|
||||||
|
> extends ChildProcess {
|
||||||
|
stdin: I;
|
||||||
|
stdout: O;
|
||||||
|
stderr: E;
|
||||||
|
readonly stdio: [
|
||||||
|
I,
|
||||||
|
O,
|
||||||
|
E,
|
||||||
|
Readable | Writable | null | undefined, // extra, no modification
|
||||||
|
Readable | Writable | null | undefined // extra, no modification
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
interface MessageOptions {
|
||||||
|
keepOpen?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
type StdioOptions = "pipe" | "ignore" | "inherit" | Array<("pipe" | "ipc" | "ignore" | "inherit" | Stream | number | null | undefined)>;
|
||||||
|
|
||||||
|
interface ProcessEnvOptions {
|
||||||
|
uid?: number;
|
||||||
|
gid?: number;
|
||||||
|
cwd?: string;
|
||||||
|
env?: NodeJS.ProcessEnv;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CommonOptions extends ProcessEnvOptions {
|
||||||
|
/**
|
||||||
|
* @default true
|
||||||
|
*/
|
||||||
|
windowsHide?: boolean;
|
||||||
|
/**
|
||||||
|
* @default 0
|
||||||
|
*/
|
||||||
|
timeout?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SpawnOptions extends CommonOptions {
|
||||||
|
argv0?: string;
|
||||||
|
stdio?: StdioOptions;
|
||||||
|
detached?: boolean;
|
||||||
|
shell?: boolean | string;
|
||||||
|
windowsVerbatimArguments?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SpawnOptionsWithoutStdio extends SpawnOptions {
|
||||||
|
stdio?: 'pipe' | Array<null | undefined | 'pipe'>;
|
||||||
|
}
|
||||||
|
|
||||||
|
type StdioNull = 'inherit' | 'ignore' | Stream;
|
||||||
|
type StdioPipe = undefined | null | 'pipe';
|
||||||
|
|
||||||
|
interface SpawnOptionsWithStdioTuple<
|
||||||
|
Stdin extends StdioNull | StdioPipe,
|
||||||
|
Stdout extends StdioNull | StdioPipe,
|
||||||
|
Stderr extends StdioNull | StdioPipe,
|
||||||
|
> extends SpawnOptions {
|
||||||
|
stdio: [Stdin, Stdout, Stderr];
|
||||||
|
}
|
||||||
|
|
||||||
|
// overloads of spawn without 'args'
|
||||||
|
function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
|
||||||
|
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioPipe>,
|
||||||
|
): ChildProcessByStdio<Writable, Readable, Readable>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioNull>,
|
||||||
|
): ChildProcessByStdio<Writable, Readable, null>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioPipe>,
|
||||||
|
): ChildProcessByStdio<Writable, null, Readable>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioPipe>,
|
||||||
|
): ChildProcessByStdio<null, Readable, Readable>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioNull>,
|
||||||
|
): ChildProcessByStdio<Writable, null, null>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioNull>,
|
||||||
|
): ChildProcessByStdio<null, Readable, null>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioPipe>,
|
||||||
|
): ChildProcessByStdio<null, null, Readable>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioNull>,
|
||||||
|
): ChildProcessByStdio<null, null, null>;
|
||||||
|
|
||||||
|
function spawn(command: string, options: SpawnOptions): ChildProcess;
|
||||||
|
|
||||||
|
// overloads of spawn with 'args'
|
||||||
|
function spawn(command: string, args?: ReadonlyArray<string>, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
|
||||||
|
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
args: ReadonlyArray<string>,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioPipe>,
|
||||||
|
): ChildProcessByStdio<Writable, Readable, Readable>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
args: ReadonlyArray<string>,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioNull>,
|
||||||
|
): ChildProcessByStdio<Writable, Readable, null>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
args: ReadonlyArray<string>,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioPipe>,
|
||||||
|
): ChildProcessByStdio<Writable, null, Readable>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
args: ReadonlyArray<string>,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioPipe>,
|
||||||
|
): ChildProcessByStdio<null, Readable, Readable>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
args: ReadonlyArray<string>,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioNull>,
|
||||||
|
): ChildProcessByStdio<Writable, null, null>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
args: ReadonlyArray<string>,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioNull>,
|
||||||
|
): ChildProcessByStdio<null, Readable, null>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
args: ReadonlyArray<string>,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioPipe>,
|
||||||
|
): ChildProcessByStdio<null, null, Readable>;
|
||||||
|
function spawn(
|
||||||
|
command: string,
|
||||||
|
args: ReadonlyArray<string>,
|
||||||
|
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioNull>,
|
||||||
|
): ChildProcessByStdio<null, null, null>;
|
||||||
|
|
||||||
|
function spawn(command: string, args: ReadonlyArray<string>, options: SpawnOptions): ChildProcess;
|
||||||
|
|
||||||
|
interface ExecOptions extends CommonOptions {
|
||||||
|
shell?: string;
|
||||||
|
maxBuffer?: number;
|
||||||
|
killSignal?: NodeJS.Signals | number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ExecOptionsWithStringEncoding extends ExecOptions {
|
||||||
|
encoding: BufferEncoding;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ExecOptionsWithBufferEncoding extends ExecOptions {
|
||||||
|
encoding: string | null; // specify `null`.
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ExecException extends Error {
|
||||||
|
cmd?: string;
|
||||||
|
killed?: boolean;
|
||||||
|
code?: number;
|
||||||
|
signal?: NodeJS.Signals;
|
||||||
|
}
|
||||||
|
|
||||||
|
// no `options` definitely means stdout/stderr are `string`.
|
||||||
|
function exec(command: string, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
|
||||||
|
|
||||||
|
// `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
|
||||||
|
function exec(command: string, options: { encoding: "buffer" | null } & ExecOptions, callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess;
|
||||||
|
|
||||||
|
// `options` with well known `encoding` means stdout/stderr are definitely `string`.
|
||||||
|
function exec(command: string, options: { encoding: BufferEncoding } & ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
|
||||||
|
|
||||||
|
// `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`.
|
||||||
|
// There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`.
|
||||||
|
function exec(command: string, options: { encoding: string } & ExecOptions, callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void): ChildProcess;
|
||||||
|
|
||||||
|
// `options` without an `encoding` means stdout/stderr are definitely `string`.
|
||||||
|
function exec(command: string, options: ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
|
||||||
|
|
||||||
|
// fallback if nothing else matches. Worst case is always `string | Buffer`.
|
||||||
|
function exec(
|
||||||
|
command: string,
|
||||||
|
options: ({ encoding?: string | null } & ExecOptions) | undefined | null,
|
||||||
|
callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
|
||||||
|
): ChildProcess;
|
||||||
|
|
||||||
|
interface PromiseWithChild<T> extends Promise<T> {
|
||||||
|
child: ChildProcess;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
|
||||||
|
namespace exec {
|
||||||
|
function __promisify__(command: string): PromiseWithChild<{ stdout: string, stderr: string }>;
|
||||||
|
function __promisify__(command: string, options: { encoding: "buffer" | null } & ExecOptions): PromiseWithChild<{ stdout: Buffer, stderr: Buffer }>;
|
||||||
|
function __promisify__(command: string, options: { encoding: BufferEncoding } & ExecOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
|
||||||
|
function __promisify__(command: string, options: ExecOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
|
||||||
|
function __promisify__(command: string, options?: ({ encoding?: string | null } & ExecOptions) | null): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ExecFileOptions extends CommonOptions {
|
||||||
|
maxBuffer?: number;
|
||||||
|
killSignal?: NodeJS.Signals | number;
|
||||||
|
windowsVerbatimArguments?: boolean;
|
||||||
|
shell?: boolean | string;
|
||||||
|
}
|
||||||
|
interface ExecFileOptionsWithStringEncoding extends ExecFileOptions {
|
||||||
|
encoding: BufferEncoding;
|
||||||
|
}
|
||||||
|
interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions {
|
||||||
|
encoding: 'buffer' | null;
|
||||||
|
}
|
||||||
|
interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions {
|
||||||
|
encoding: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
function execFile(file: string): ChildProcess;
|
||||||
|
function execFile(file: string, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): ChildProcess;
|
||||||
|
function execFile(file: string, args?: ReadonlyArray<string> | null): ChildProcess;
|
||||||
|
function execFile(file: string, args: ReadonlyArray<string> | undefined | null, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): ChildProcess;
|
||||||
|
|
||||||
|
// no `options` definitely means stdout/stderr are `string`.
|
||||||
|
function execFile(file: string, callback: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
|
||||||
|
function execFile(file: string, args: ReadonlyArray<string> | undefined | null, callback: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
|
||||||
|
|
||||||
|
// `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
|
||||||
|
function execFile(file: string, options: ExecFileOptionsWithBufferEncoding, callback: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess;
|
||||||
|
function execFile(
|
||||||
|
file: string,
|
||||||
|
args: ReadonlyArray<string> | undefined | null,
|
||||||
|
options: ExecFileOptionsWithBufferEncoding,
|
||||||
|
callback: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void,
|
||||||
|
): ChildProcess;
|
||||||
|
|
||||||
|
// `options` with well known `encoding` means stdout/stderr are definitely `string`.
|
||||||
|
function execFile(file: string, options: ExecFileOptionsWithStringEncoding, callback: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
|
||||||
|
function execFile(
|
||||||
|
file: string,
|
||||||
|
args: ReadonlyArray<string> | undefined | null,
|
||||||
|
options: ExecFileOptionsWithStringEncoding,
|
||||||
|
callback: (error: ExecException | null, stdout: string, stderr: string) => void,
|
||||||
|
): ChildProcess;
|
||||||
|
|
||||||
|
// `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`.
|
||||||
|
// There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`.
|
||||||
|
function execFile(
|
||||||
|
file: string,
|
||||||
|
options: ExecFileOptionsWithOtherEncoding,
|
||||||
|
callback: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
|
||||||
|
): ChildProcess;
|
||||||
|
function execFile(
|
||||||
|
file: string,
|
||||||
|
args: ReadonlyArray<string> | undefined | null,
|
||||||
|
options: ExecFileOptionsWithOtherEncoding,
|
||||||
|
callback: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
|
||||||
|
): ChildProcess;
|
||||||
|
|
||||||
|
// `options` without an `encoding` means stdout/stderr are definitely `string`.
|
||||||
|
function execFile(file: string, options: ExecFileOptions, callback: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
|
||||||
|
function execFile(
|
||||||
|
file: string,
|
||||||
|
args: ReadonlyArray<string> | undefined | null,
|
||||||
|
options: ExecFileOptions,
|
||||||
|
callback: (error: ExecException | null, stdout: string, stderr: string) => void
|
||||||
|
): ChildProcess;
|
||||||
|
|
||||||
|
// fallback if nothing else matches. Worst case is always `string | Buffer`.
|
||||||
|
function execFile(
|
||||||
|
file: string,
|
||||||
|
options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null,
|
||||||
|
callback: ((error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null,
|
||||||
|
): ChildProcess;
|
||||||
|
function execFile(
|
||||||
|
file: string,
|
||||||
|
args: ReadonlyArray<string> | undefined | null,
|
||||||
|
options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null,
|
||||||
|
callback: ((error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null,
|
||||||
|
): ChildProcess;
|
||||||
|
|
||||||
|
// NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
|
||||||
|
namespace execFile {
|
||||||
|
function __promisify__(file: string): PromiseWithChild<{ stdout: string, stderr: string }>;
|
||||||
|
function __promisify__(file: string, args: string[] | undefined | null): PromiseWithChild<{ stdout: string, stderr: string }>;
|
||||||
|
function __promisify__(file: string, options: ExecFileOptionsWithBufferEncoding): PromiseWithChild<{ stdout: Buffer, stderr: Buffer }>;
|
||||||
|
function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithBufferEncoding): PromiseWithChild<{ stdout: Buffer, stderr: Buffer }>;
|
||||||
|
function __promisify__(file: string, options: ExecFileOptionsWithStringEncoding): PromiseWithChild<{ stdout: string, stderr: string }>;
|
||||||
|
function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithStringEncoding): PromiseWithChild<{ stdout: string, stderr: string }>;
|
||||||
|
function __promisify__(file: string, options: ExecFileOptionsWithOtherEncoding): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
|
||||||
|
function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithOtherEncoding): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
|
||||||
|
function __promisify__(file: string, options: ExecFileOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
|
||||||
|
function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
|
||||||
|
function __promisify__(file: string, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
|
||||||
|
function __promisify__(
|
||||||
|
file: string,
|
||||||
|
args: string[] | undefined | null,
|
||||||
|
options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null,
|
||||||
|
): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ForkOptions extends ProcessEnvOptions {
|
||||||
|
execPath?: string;
|
||||||
|
execArgv?: string[];
|
||||||
|
silent?: boolean;
|
||||||
|
stdio?: StdioOptions;
|
||||||
|
detached?: boolean;
|
||||||
|
windowsVerbatimArguments?: boolean;
|
||||||
|
}
|
||||||
|
function fork(modulePath: string, args?: ReadonlyArray<string>, options?: ForkOptions): ChildProcess;
|
||||||
|
|
||||||
|
interface SpawnSyncOptions extends CommonOptions {
|
||||||
|
argv0?: string; // Not specified in the docs
|
||||||
|
input?: string | NodeJS.ArrayBufferView;
|
||||||
|
stdio?: StdioOptions;
|
||||||
|
killSignal?: NodeJS.Signals | number;
|
||||||
|
maxBuffer?: number;
|
||||||
|
encoding?: string;
|
||||||
|
shell?: boolean | string;
|
||||||
|
windowsVerbatimArguments?: boolean;
|
||||||
|
}
|
||||||
|
interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions {
|
||||||
|
encoding: BufferEncoding;
|
||||||
|
}
|
||||||
|
interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions {
|
||||||
|
encoding: string; // specify `null`.
|
||||||
|
}
|
||||||
|
interface SpawnSyncReturns<T> {
|
||||||
|
pid: number;
|
||||||
|
output: string[];
|
||||||
|
stdout: T;
|
||||||
|
stderr: T;
|
||||||
|
status: number | null;
|
||||||
|
signal: NodeJS.Signals | null;
|
||||||
|
error?: Error;
|
||||||
|
}
|
||||||
|
function spawnSync(command: string): SpawnSyncReturns<Buffer>;
|
||||||
|
function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns<string>;
|
||||||
|
function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns<Buffer>;
|
||||||
|
function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns<Buffer>;
|
||||||
|
function spawnSync(command: string, args?: ReadonlyArray<string>, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns<string>;
|
||||||
|
function spawnSync(command: string, args?: ReadonlyArray<string>, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns<Buffer>;
|
||||||
|
function spawnSync(command: string, args?: ReadonlyArray<string>, options?: SpawnSyncOptions): SpawnSyncReturns<Buffer>;
|
||||||
|
|
||||||
|
interface ExecSyncOptions extends CommonOptions {
|
||||||
|
input?: string | Uint8Array;
|
||||||
|
stdio?: StdioOptions;
|
||||||
|
shell?: string;
|
||||||
|
killSignal?: NodeJS.Signals | number;
|
||||||
|
maxBuffer?: number;
|
||||||
|
encoding?: string;
|
||||||
|
}
|
||||||
|
interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions {
|
||||||
|
encoding: BufferEncoding;
|
||||||
|
}
|
||||||
|
interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions {
|
||||||
|
encoding: string; // specify `null`.
|
||||||
|
}
|
||||||
|
function execSync(command: string): Buffer;
|
||||||
|
function execSync(command: string, options?: ExecSyncOptionsWithStringEncoding): string;
|
||||||
|
function execSync(command: string, options?: ExecSyncOptionsWithBufferEncoding): Buffer;
|
||||||
|
function execSync(command: string, options?: ExecSyncOptions): Buffer;
|
||||||
|
|
||||||
|
interface ExecFileSyncOptions extends CommonOptions {
|
||||||
|
input?: string | NodeJS.ArrayBufferView;
|
||||||
|
stdio?: StdioOptions;
|
||||||
|
killSignal?: NodeJS.Signals | number;
|
||||||
|
maxBuffer?: number;
|
||||||
|
encoding?: string;
|
||||||
|
shell?: boolean | string;
|
||||||
|
}
|
||||||
|
interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions {
|
||||||
|
encoding: BufferEncoding;
|
||||||
|
}
|
||||||
|
interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions {
|
||||||
|
encoding: string; // specify `null`.
|
||||||
|
}
|
||||||
|
function execFileSync(command: string): Buffer;
|
||||||
|
function execFileSync(command: string, options?: ExecFileSyncOptionsWithStringEncoding): string;
|
||||||
|
function execFileSync(command: string, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer;
|
||||||
|
function execFileSync(command: string, options?: ExecFileSyncOptions): Buffer;
|
||||||
|
function execFileSync(command: string, args?: ReadonlyArray<string>, options?: ExecFileSyncOptionsWithStringEncoding): string;
|
||||||
|
function execFileSync(command: string, args?: ReadonlyArray<string>, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer;
|
||||||
|
function execFileSync(command: string, args?: ReadonlyArray<string>, options?: ExecFileSyncOptions): Buffer;
|
||||||
|
}
|
|
@ -0,0 +1,260 @@
|
||||||
|
declare module "cluster" {
|
||||||
|
import * as child from "child_process";
|
||||||
|
import * as events from "events";
|
||||||
|
import * as net from "net";
|
||||||
|
|
||||||
|
// interfaces
|
||||||
|
interface ClusterSettings {
|
||||||
|
execArgv?: string[]; // default: process.execArgv
|
||||||
|
exec?: string;
|
||||||
|
args?: string[];
|
||||||
|
silent?: boolean;
|
||||||
|
stdio?: any[];
|
||||||
|
uid?: number;
|
||||||
|
gid?: number;
|
||||||
|
inspectPort?: number | (() => number);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Address {
|
||||||
|
address: string;
|
||||||
|
port: number;
|
||||||
|
addressType: number | "udp4" | "udp6"; // 4, 6, -1, "udp4", "udp6"
|
||||||
|
}
|
||||||
|
|
||||||
|
class Worker extends events.EventEmitter {
|
||||||
|
id: number;
|
||||||
|
process: child.ChildProcess;
|
||||||
|
send(message: any, sendHandle?: any, callback?: (error: Error | null) => void): boolean;
|
||||||
|
kill(signal?: string): void;
|
||||||
|
destroy(signal?: string): void;
|
||||||
|
disconnect(): void;
|
||||||
|
isConnected(): boolean;
|
||||||
|
isDead(): boolean;
|
||||||
|
exitedAfterDisconnect: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* events.EventEmitter
|
||||||
|
* 1. disconnect
|
||||||
|
* 2. error
|
||||||
|
* 3. exit
|
||||||
|
* 4. listening
|
||||||
|
* 5. message
|
||||||
|
* 6. online
|
||||||
|
*/
|
||||||
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
addListener(event: "disconnect", listener: () => void): this;
|
||||||
|
addListener(event: "error", listener: (error: Error) => void): this;
|
||||||
|
addListener(event: "exit", listener: (code: number, signal: string) => void): this;
|
||||||
|
addListener(event: "listening", listener: (address: Address) => void): this;
|
||||||
|
addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
addListener(event: "online", listener: () => void): this;
|
||||||
|
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
emit(event: "disconnect"): boolean;
|
||||||
|
emit(event: "error", error: Error): boolean;
|
||||||
|
emit(event: "exit", code: number, signal: string): boolean;
|
||||||
|
emit(event: "listening", address: Address): boolean;
|
||||||
|
emit(event: "message", message: any, handle: net.Socket | net.Server): boolean;
|
||||||
|
emit(event: "online"): boolean;
|
||||||
|
|
||||||
|
on(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: "disconnect", listener: () => void): this;
|
||||||
|
on(event: "error", listener: (error: Error) => void): this;
|
||||||
|
on(event: "exit", listener: (code: number, signal: string) => void): this;
|
||||||
|
on(event: "listening", listener: (address: Address) => void): this;
|
||||||
|
on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
on(event: "online", listener: () => void): this;
|
||||||
|
|
||||||
|
once(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: "disconnect", listener: () => void): this;
|
||||||
|
once(event: "error", listener: (error: Error) => void): this;
|
||||||
|
once(event: "exit", listener: (code: number, signal: string) => void): this;
|
||||||
|
once(event: "listening", listener: (address: Address) => void): this;
|
||||||
|
once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
once(event: "online", listener: () => void): this;
|
||||||
|
|
||||||
|
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: "disconnect", listener: () => void): this;
|
||||||
|
prependListener(event: "error", listener: (error: Error) => void): this;
|
||||||
|
prependListener(event: "exit", listener: (code: number, signal: string) => void): this;
|
||||||
|
prependListener(event: "listening", listener: (address: Address) => void): this;
|
||||||
|
prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
prependListener(event: "online", listener: () => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: "disconnect", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "error", listener: (error: Error) => void): this;
|
||||||
|
prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this;
|
||||||
|
prependOnceListener(event: "listening", listener: (address: Address) => void): this;
|
||||||
|
prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
prependOnceListener(event: "online", listener: () => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Cluster extends events.EventEmitter {
|
||||||
|
Worker: Worker;
|
||||||
|
disconnect(callback?: () => void): void;
|
||||||
|
fork(env?: any): Worker;
|
||||||
|
isMaster: boolean;
|
||||||
|
isWorker: boolean;
|
||||||
|
// TODO: cluster.schedulingPolicy
|
||||||
|
settings: ClusterSettings;
|
||||||
|
setupMaster(settings?: ClusterSettings): void;
|
||||||
|
worker?: Worker;
|
||||||
|
workers?: {
|
||||||
|
[index: string]: Worker | undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* events.EventEmitter
|
||||||
|
* 1. disconnect
|
||||||
|
* 2. exit
|
||||||
|
* 3. fork
|
||||||
|
* 4. listening
|
||||||
|
* 5. message
|
||||||
|
* 6. online
|
||||||
|
* 7. setup
|
||||||
|
*/
|
||||||
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
addListener(event: "disconnect", listener: (worker: Worker) => void): this;
|
||||||
|
addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
|
||||||
|
addListener(event: "fork", listener: (worker: Worker) => void): this;
|
||||||
|
addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
|
||||||
|
addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
addListener(event: "online", listener: (worker: Worker) => void): this;
|
||||||
|
addListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
|
||||||
|
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
emit(event: "disconnect", worker: Worker): boolean;
|
||||||
|
emit(event: "exit", worker: Worker, code: number, signal: string): boolean;
|
||||||
|
emit(event: "fork", worker: Worker): boolean;
|
||||||
|
emit(event: "listening", worker: Worker, address: Address): boolean;
|
||||||
|
emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
|
||||||
|
emit(event: "online", worker: Worker): boolean;
|
||||||
|
emit(event: "setup", settings: ClusterSettings): boolean;
|
||||||
|
|
||||||
|
on(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: "disconnect", listener: (worker: Worker) => void): this;
|
||||||
|
on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
|
||||||
|
on(event: "fork", listener: (worker: Worker) => void): this;
|
||||||
|
on(event: "listening", listener: (worker: Worker, address: Address) => void): this;
|
||||||
|
on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
on(event: "online", listener: (worker: Worker) => void): this;
|
||||||
|
on(event: "setup", listener: (settings: ClusterSettings) => void): this;
|
||||||
|
|
||||||
|
once(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: "disconnect", listener: (worker: Worker) => void): this;
|
||||||
|
once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
|
||||||
|
once(event: "fork", listener: (worker: Worker) => void): this;
|
||||||
|
once(event: "listening", listener: (worker: Worker, address: Address) => void): this;
|
||||||
|
once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
once(event: "online", listener: (worker: Worker) => void): this;
|
||||||
|
once(event: "setup", listener: (settings: ClusterSettings) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: "disconnect", listener: (worker: Worker) => void): this;
|
||||||
|
prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
|
||||||
|
prependListener(event: "fork", listener: (worker: Worker) => void): this;
|
||||||
|
prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
|
||||||
|
prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
prependListener(event: "online", listener: (worker: Worker) => void): this;
|
||||||
|
prependListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this;
|
||||||
|
prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
|
||||||
|
prependOnceListener(event: "fork", listener: (worker: Worker) => void): this;
|
||||||
|
prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
|
||||||
|
// the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;
|
||||||
|
prependOnceListener(event: "online", listener: (worker: Worker) => void): this;
|
||||||
|
prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
function disconnect(callback?: () => void): void;
|
||||||
|
function fork(env?: any): Worker;
|
||||||
|
const isMaster: boolean;
|
||||||
|
const isWorker: boolean;
|
||||||
|
// TODO: cluster.schedulingPolicy
|
||||||
|
const settings: ClusterSettings;
|
||||||
|
function setupMaster(settings?: ClusterSettings): void;
|
||||||
|
const worker: Worker;
|
||||||
|
const workers: {
|
||||||
|
[index: string]: Worker | undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* events.EventEmitter
|
||||||
|
* 1. disconnect
|
||||||
|
* 2. exit
|
||||||
|
* 3. fork
|
||||||
|
* 4. listening
|
||||||
|
* 5. message
|
||||||
|
* 6. online
|
||||||
|
* 7. setup
|
||||||
|
*/
|
||||||
|
function addListener(event: string, listener: (...args: any[]) => void): Cluster;
|
||||||
|
function addListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
|
||||||
|
function addListener(event: "fork", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function addListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
|
||||||
|
// the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
function addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
|
||||||
|
function addListener(event: "online", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function addListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
|
||||||
|
|
||||||
|
function emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
function emit(event: "disconnect", worker: Worker): boolean;
|
||||||
|
function emit(event: "exit", worker: Worker, code: number, signal: string): boolean;
|
||||||
|
function emit(event: "fork", worker: Worker): boolean;
|
||||||
|
function emit(event: "listening", worker: Worker, address: Address): boolean;
|
||||||
|
function emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
|
||||||
|
function emit(event: "online", worker: Worker): boolean;
|
||||||
|
function emit(event: "setup", settings: ClusterSettings): boolean;
|
||||||
|
|
||||||
|
function on(event: string, listener: (...args: any[]) => void): Cluster;
|
||||||
|
function on(event: "disconnect", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
|
||||||
|
function on(event: "fork", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function on(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
|
||||||
|
function on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster; // the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
function on(event: "online", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function on(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
|
||||||
|
|
||||||
|
function once(event: string, listener: (...args: any[]) => void): Cluster;
|
||||||
|
function once(event: "disconnect", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
|
||||||
|
function once(event: "fork", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function once(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
|
||||||
|
function once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster; // the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
function once(event: "online", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function once(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
|
||||||
|
|
||||||
|
function removeListener(event: string, listener: (...args: any[]) => void): Cluster;
|
||||||
|
function removeAllListeners(event?: string): Cluster;
|
||||||
|
function setMaxListeners(n: number): Cluster;
|
||||||
|
function getMaxListeners(): number;
|
||||||
|
function listeners(event: string): Function[];
|
||||||
|
function listenerCount(type: string): number;
|
||||||
|
|
||||||
|
function prependListener(event: string, listener: (...args: any[]) => void): Cluster;
|
||||||
|
function prependListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
|
||||||
|
function prependListener(event: "fork", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
|
||||||
|
// the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
function prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
|
||||||
|
function prependListener(event: "online", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function prependListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
|
||||||
|
|
||||||
|
function prependOnceListener(event: string, listener: (...args: any[]) => void): Cluster;
|
||||||
|
function prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
|
||||||
|
function prependOnceListener(event: "fork", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
|
||||||
|
// the handle is a net.Socket or net.Server object, or undefined.
|
||||||
|
function prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
|
||||||
|
function prependOnceListener(event: "online", listener: (worker: Worker) => void): Cluster;
|
||||||
|
function prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
|
||||||
|
|
||||||
|
function eventNames(): string[];
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
declare module "console" {
|
||||||
|
export = console;
|
||||||
|
}
|
|
@ -0,0 +1,448 @@
|
||||||
|
/** @deprecated since v6.3.0 - use constants property exposed by the relevant module instead. */
|
||||||
|
declare module "constants" {
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.E2BIG` instead. */
|
||||||
|
const E2BIG: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EACCES` instead. */
|
||||||
|
const EACCES: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EADDRINUSE` instead. */
|
||||||
|
const EADDRINUSE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EADDRNOTAVAIL` instead. */
|
||||||
|
const EADDRNOTAVAIL: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EAFNOSUPPORT` instead. */
|
||||||
|
const EAFNOSUPPORT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EAGAIN` instead. */
|
||||||
|
const EAGAIN: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EALREADY` instead. */
|
||||||
|
const EALREADY: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EBADF` instead. */
|
||||||
|
const EBADF: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EBADMSG` instead. */
|
||||||
|
const EBADMSG: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EBUSY` instead. */
|
||||||
|
const EBUSY: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ECANCELED` instead. */
|
||||||
|
const ECANCELED: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ECHILD` instead. */
|
||||||
|
const ECHILD: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ECONNABORTED` instead. */
|
||||||
|
const ECONNABORTED: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ECONNREFUSED` instead. */
|
||||||
|
const ECONNREFUSED: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ECONNRESET` instead. */
|
||||||
|
const ECONNRESET: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EDEADLK` instead. */
|
||||||
|
const EDEADLK: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EDESTADDRREQ` instead. */
|
||||||
|
const EDESTADDRREQ: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EDOM` instead. */
|
||||||
|
const EDOM: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EEXIST` instead. */
|
||||||
|
const EEXIST: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EFAULT` instead. */
|
||||||
|
const EFAULT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EFBIG` instead. */
|
||||||
|
const EFBIG: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EHOSTUNREACH` instead. */
|
||||||
|
const EHOSTUNREACH: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EIDRM` instead. */
|
||||||
|
const EIDRM: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EILSEQ` instead. */
|
||||||
|
const EILSEQ: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EINPROGRESS` instead. */
|
||||||
|
const EINPROGRESS: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EINTR` instead. */
|
||||||
|
const EINTR: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EINVAL` instead. */
|
||||||
|
const EINVAL: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EIO` instead. */
|
||||||
|
const EIO: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EISCONN` instead. */
|
||||||
|
const EISCONN: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EISDIR` instead. */
|
||||||
|
const EISDIR: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ELOOP` instead. */
|
||||||
|
const ELOOP: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EMFILE` instead. */
|
||||||
|
const EMFILE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EMLINK` instead. */
|
||||||
|
const EMLINK: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EMSGSIZE` instead. */
|
||||||
|
const EMSGSIZE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENAMETOOLONG` instead. */
|
||||||
|
const ENAMETOOLONG: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENETDOWN` instead. */
|
||||||
|
const ENETDOWN: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENETRESET` instead. */
|
||||||
|
const ENETRESET: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENETUNREACH` instead. */
|
||||||
|
const ENETUNREACH: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENFILE` instead. */
|
||||||
|
const ENFILE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOBUFS` instead. */
|
||||||
|
const ENOBUFS: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENODATA` instead. */
|
||||||
|
const ENODATA: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENODEV` instead. */
|
||||||
|
const ENODEV: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOENT` instead. */
|
||||||
|
const ENOENT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOEXEC` instead. */
|
||||||
|
const ENOEXEC: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOLCK` instead. */
|
||||||
|
const ENOLCK: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOLINK` instead. */
|
||||||
|
const ENOLINK: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOMEM` instead. */
|
||||||
|
const ENOMEM: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOMSG` instead. */
|
||||||
|
const ENOMSG: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOPROTOOPT` instead. */
|
||||||
|
const ENOPROTOOPT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOSPC` instead. */
|
||||||
|
const ENOSPC: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOSR` instead. */
|
||||||
|
const ENOSR: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOSTR` instead. */
|
||||||
|
const ENOSTR: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOSYS` instead. */
|
||||||
|
const ENOSYS: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOTCONN` instead. */
|
||||||
|
const ENOTCONN: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOTDIR` instead. */
|
||||||
|
const ENOTDIR: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOTEMPTY` instead. */
|
||||||
|
const ENOTEMPTY: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOTSOCK` instead. */
|
||||||
|
const ENOTSOCK: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOTSUP` instead. */
|
||||||
|
const ENOTSUP: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENOTTY` instead. */
|
||||||
|
const ENOTTY: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ENXIO` instead. */
|
||||||
|
const ENXIO: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EOPNOTSUPP` instead. */
|
||||||
|
const EOPNOTSUPP: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EOVERFLOW` instead. */
|
||||||
|
const EOVERFLOW: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EPERM` instead. */
|
||||||
|
const EPERM: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EPIPE` instead. */
|
||||||
|
const EPIPE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EPROTO` instead. */
|
||||||
|
const EPROTO: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EPROTONOSUPPORT` instead. */
|
||||||
|
const EPROTONOSUPPORT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EPROTOTYPE` instead. */
|
||||||
|
const EPROTOTYPE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ERANGE` instead. */
|
||||||
|
const ERANGE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EROFS` instead. */
|
||||||
|
const EROFS: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ESPIPE` instead. */
|
||||||
|
const ESPIPE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ESRCH` instead. */
|
||||||
|
const ESRCH: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ETIME` instead. */
|
||||||
|
const ETIME: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ETIMEDOUT` instead. */
|
||||||
|
const ETIMEDOUT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.ETXTBSY` instead. */
|
||||||
|
const ETXTBSY: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EWOULDBLOCK` instead. */
|
||||||
|
const EWOULDBLOCK: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.EXDEV` instead. */
|
||||||
|
const EXDEV: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEINTR` instead. */
|
||||||
|
const WSAEINTR: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEBADF` instead. */
|
||||||
|
const WSAEBADF: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEACCES` instead. */
|
||||||
|
const WSAEACCES: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEFAULT` instead. */
|
||||||
|
const WSAEFAULT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEINVAL` instead. */
|
||||||
|
const WSAEINVAL: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEMFILE` instead. */
|
||||||
|
const WSAEMFILE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEWOULDBLOCK` instead. */
|
||||||
|
const WSAEWOULDBLOCK: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEINPROGRESS` instead. */
|
||||||
|
const WSAEINPROGRESS: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEALREADY` instead. */
|
||||||
|
const WSAEALREADY: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOTSOCK` instead. */
|
||||||
|
const WSAENOTSOCK: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEDESTADDRREQ` instead. */
|
||||||
|
const WSAEDESTADDRREQ: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEMSGSIZE` instead. */
|
||||||
|
const WSAEMSGSIZE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEPROTOTYPE` instead. */
|
||||||
|
const WSAEPROTOTYPE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOPROTOOPT` instead. */
|
||||||
|
const WSAENOPROTOOPT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEPROTONOSUPPORT` instead. */
|
||||||
|
const WSAEPROTONOSUPPORT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAESOCKTNOSUPPORT` instead. */
|
||||||
|
const WSAESOCKTNOSUPPORT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEOPNOTSUPP` instead. */
|
||||||
|
const WSAEOPNOTSUPP: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEPFNOSUPPORT` instead. */
|
||||||
|
const WSAEPFNOSUPPORT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEAFNOSUPPORT` instead. */
|
||||||
|
const WSAEAFNOSUPPORT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEADDRINUSE` instead. */
|
||||||
|
const WSAEADDRINUSE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEADDRNOTAVAIL` instead. */
|
||||||
|
const WSAEADDRNOTAVAIL: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAENETDOWN` instead. */
|
||||||
|
const WSAENETDOWN: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAENETUNREACH` instead. */
|
||||||
|
const WSAENETUNREACH: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAENETRESET` instead. */
|
||||||
|
const WSAENETRESET: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAECONNABORTED` instead. */
|
||||||
|
const WSAECONNABORTED: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAECONNRESET` instead. */
|
||||||
|
const WSAECONNRESET: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOBUFS` instead. */
|
||||||
|
const WSAENOBUFS: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEISCONN` instead. */
|
||||||
|
const WSAEISCONN: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOTCONN` instead. */
|
||||||
|
const WSAENOTCONN: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAESHUTDOWN` instead. */
|
||||||
|
const WSAESHUTDOWN: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAETOOMANYREFS` instead. */
|
||||||
|
const WSAETOOMANYREFS: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAETIMEDOUT` instead. */
|
||||||
|
const WSAETIMEDOUT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAECONNREFUSED` instead. */
|
||||||
|
const WSAECONNREFUSED: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAELOOP` instead. */
|
||||||
|
const WSAELOOP: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAENAMETOOLONG` instead. */
|
||||||
|
const WSAENAMETOOLONG: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEHOSTDOWN` instead. */
|
||||||
|
const WSAEHOSTDOWN: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEHOSTUNREACH` instead. */
|
||||||
|
const WSAEHOSTUNREACH: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOTEMPTY` instead. */
|
||||||
|
const WSAENOTEMPTY: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEPROCLIM` instead. */
|
||||||
|
const WSAEPROCLIM: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEUSERS` instead. */
|
||||||
|
const WSAEUSERS: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEDQUOT` instead. */
|
||||||
|
const WSAEDQUOT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAESTALE` instead. */
|
||||||
|
const WSAESTALE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEREMOTE` instead. */
|
||||||
|
const WSAEREMOTE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSASYSNOTREADY` instead. */
|
||||||
|
const WSASYSNOTREADY: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAVERNOTSUPPORTED` instead. */
|
||||||
|
const WSAVERNOTSUPPORTED: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSANOTINITIALISED` instead. */
|
||||||
|
const WSANOTINITIALISED: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEDISCON` instead. */
|
||||||
|
const WSAEDISCON: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAENOMORE` instead. */
|
||||||
|
const WSAENOMORE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAECANCELLED` instead. */
|
||||||
|
const WSAECANCELLED: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEINVALIDPROCTABLE` instead. */
|
||||||
|
const WSAEINVALIDPROCTABLE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEINVALIDPROVIDER` instead. */
|
||||||
|
const WSAEINVALIDPROVIDER: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEPROVIDERFAILEDINIT` instead. */
|
||||||
|
const WSAEPROVIDERFAILEDINIT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSASYSCALLFAILURE` instead. */
|
||||||
|
const WSASYSCALLFAILURE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSASERVICE_NOT_FOUND` instead. */
|
||||||
|
const WSASERVICE_NOT_FOUND: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSATYPE_NOT_FOUND` instead. */
|
||||||
|
const WSATYPE_NOT_FOUND: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSA_E_NO_MORE` instead. */
|
||||||
|
const WSA_E_NO_MORE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSA_E_CANCELLED` instead. */
|
||||||
|
const WSA_E_CANCELLED: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.errno.WSAEREFUSED` instead. */
|
||||||
|
const WSAEREFUSED: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGHUP` instead. */
|
||||||
|
const SIGHUP: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGINT` instead. */
|
||||||
|
const SIGINT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGILL` instead. */
|
||||||
|
const SIGILL: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGABRT` instead. */
|
||||||
|
const SIGABRT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGFPE` instead. */
|
||||||
|
const SIGFPE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGKILL` instead. */
|
||||||
|
const SIGKILL: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGSEGV` instead. */
|
||||||
|
const SIGSEGV: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGTERM` instead. */
|
||||||
|
const SIGTERM: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGBREAK` instead. */
|
||||||
|
const SIGBREAK: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGWINCH` instead. */
|
||||||
|
const SIGWINCH: number;
|
||||||
|
const SSL_OP_ALL: number;
|
||||||
|
const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number;
|
||||||
|
const SSL_OP_CIPHER_SERVER_PREFERENCE: number;
|
||||||
|
const SSL_OP_CISCO_ANYCONNECT: number;
|
||||||
|
const SSL_OP_COOKIE_EXCHANGE: number;
|
||||||
|
const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number;
|
||||||
|
const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number;
|
||||||
|
const SSL_OP_EPHEMERAL_RSA: number;
|
||||||
|
const SSL_OP_LEGACY_SERVER_CONNECT: number;
|
||||||
|
const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number;
|
||||||
|
const SSL_OP_MICROSOFT_SESS_ID_BUG: number;
|
||||||
|
const SSL_OP_MSIE_SSLV2_RSA_PADDING: number;
|
||||||
|
const SSL_OP_NETSCAPE_CA_DN_BUG: number;
|
||||||
|
const SSL_OP_NETSCAPE_CHALLENGE_BUG: number;
|
||||||
|
const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number;
|
||||||
|
const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number;
|
||||||
|
const SSL_OP_NO_COMPRESSION: number;
|
||||||
|
const SSL_OP_NO_QUERY_MTU: number;
|
||||||
|
const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number;
|
||||||
|
const SSL_OP_NO_SSLv2: number;
|
||||||
|
const SSL_OP_NO_SSLv3: number;
|
||||||
|
const SSL_OP_NO_TICKET: number;
|
||||||
|
const SSL_OP_NO_TLSv1: number;
|
||||||
|
const SSL_OP_NO_TLSv1_1: number;
|
||||||
|
const SSL_OP_NO_TLSv1_2: number;
|
||||||
|
const SSL_OP_PKCS1_CHECK_1: number;
|
||||||
|
const SSL_OP_PKCS1_CHECK_2: number;
|
||||||
|
const SSL_OP_SINGLE_DH_USE: number;
|
||||||
|
const SSL_OP_SINGLE_ECDH_USE: number;
|
||||||
|
const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number;
|
||||||
|
const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number;
|
||||||
|
const SSL_OP_TLS_BLOCK_PADDING_BUG: number;
|
||||||
|
const SSL_OP_TLS_D5_BUG: number;
|
||||||
|
const SSL_OP_TLS_ROLLBACK_BUG: number;
|
||||||
|
const ENGINE_METHOD_DSA: number;
|
||||||
|
const ENGINE_METHOD_DH: number;
|
||||||
|
const ENGINE_METHOD_RAND: number;
|
||||||
|
const ENGINE_METHOD_ECDH: number;
|
||||||
|
const ENGINE_METHOD_ECDSA: number;
|
||||||
|
const ENGINE_METHOD_CIPHERS: number;
|
||||||
|
const ENGINE_METHOD_DIGESTS: number;
|
||||||
|
const ENGINE_METHOD_STORE: number;
|
||||||
|
const ENGINE_METHOD_PKEY_METHS: number;
|
||||||
|
const ENGINE_METHOD_PKEY_ASN1_METHS: number;
|
||||||
|
const ENGINE_METHOD_ALL: number;
|
||||||
|
const ENGINE_METHOD_NONE: number;
|
||||||
|
const DH_CHECK_P_NOT_SAFE_PRIME: number;
|
||||||
|
const DH_CHECK_P_NOT_PRIME: number;
|
||||||
|
const DH_UNABLE_TO_CHECK_GENERATOR: number;
|
||||||
|
const DH_NOT_SUITABLE_GENERATOR: number;
|
||||||
|
const RSA_PKCS1_PADDING: number;
|
||||||
|
const RSA_SSLV23_PADDING: number;
|
||||||
|
const RSA_NO_PADDING: number;
|
||||||
|
const RSA_PKCS1_OAEP_PADDING: number;
|
||||||
|
const RSA_X931_PADDING: number;
|
||||||
|
const RSA_PKCS1_PSS_PADDING: number;
|
||||||
|
const POINT_CONVERSION_COMPRESSED: number;
|
||||||
|
const POINT_CONVERSION_UNCOMPRESSED: number;
|
||||||
|
const POINT_CONVERSION_HYBRID: number;
|
||||||
|
const O_RDONLY: number;
|
||||||
|
const O_WRONLY: number;
|
||||||
|
const O_RDWR: number;
|
||||||
|
const S_IFMT: number;
|
||||||
|
const S_IFREG: number;
|
||||||
|
const S_IFDIR: number;
|
||||||
|
const S_IFCHR: number;
|
||||||
|
const S_IFBLK: number;
|
||||||
|
const S_IFIFO: number;
|
||||||
|
const S_IFSOCK: number;
|
||||||
|
const S_IRWXU: number;
|
||||||
|
const S_IRUSR: number;
|
||||||
|
const S_IWUSR: number;
|
||||||
|
const S_IXUSR: number;
|
||||||
|
const S_IRWXG: number;
|
||||||
|
const S_IRGRP: number;
|
||||||
|
const S_IWGRP: number;
|
||||||
|
const S_IXGRP: number;
|
||||||
|
const S_IRWXO: number;
|
||||||
|
const S_IROTH: number;
|
||||||
|
const S_IWOTH: number;
|
||||||
|
const S_IXOTH: number;
|
||||||
|
const S_IFLNK: number;
|
||||||
|
const O_CREAT: number;
|
||||||
|
const O_EXCL: number;
|
||||||
|
const O_NOCTTY: number;
|
||||||
|
const O_DIRECTORY: number;
|
||||||
|
const O_NOATIME: number;
|
||||||
|
const O_NOFOLLOW: number;
|
||||||
|
const O_SYNC: number;
|
||||||
|
const O_DSYNC: number;
|
||||||
|
const O_SYMLINK: number;
|
||||||
|
const O_DIRECT: number;
|
||||||
|
const O_NONBLOCK: number;
|
||||||
|
const O_TRUNC: number;
|
||||||
|
const O_APPEND: number;
|
||||||
|
const F_OK: number;
|
||||||
|
const R_OK: number;
|
||||||
|
const W_OK: number;
|
||||||
|
const X_OK: number;
|
||||||
|
const COPYFILE_EXCL: number;
|
||||||
|
const COPYFILE_FICLONE: number;
|
||||||
|
const COPYFILE_FICLONE_FORCE: number;
|
||||||
|
const UV_UDP_REUSEADDR: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGQUIT` instead. */
|
||||||
|
const SIGQUIT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGTRAP` instead. */
|
||||||
|
const SIGTRAP: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGIOT` instead. */
|
||||||
|
const SIGIOT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGBUS` instead. */
|
||||||
|
const SIGBUS: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGUSR1` instead. */
|
||||||
|
const SIGUSR1: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGUSR2` instead. */
|
||||||
|
const SIGUSR2: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGPIPE` instead. */
|
||||||
|
const SIGPIPE: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGALRM` instead. */
|
||||||
|
const SIGALRM: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGCHLD` instead. */
|
||||||
|
const SIGCHLD: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGSTKFLT` instead. */
|
||||||
|
const SIGSTKFLT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGCONT` instead. */
|
||||||
|
const SIGCONT: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGSTOP` instead. */
|
||||||
|
const SIGSTOP: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGTSTP` instead. */
|
||||||
|
const SIGTSTP: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGTTIN` instead. */
|
||||||
|
const SIGTTIN: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGTTOU` instead. */
|
||||||
|
const SIGTTOU: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGURG` instead. */
|
||||||
|
const SIGURG: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGXCPU` instead. */
|
||||||
|
const SIGXCPU: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGXFSZ` instead. */
|
||||||
|
const SIGXFSZ: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGVTALRM` instead. */
|
||||||
|
const SIGVTALRM: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGPROF` instead. */
|
||||||
|
const SIGPROF: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGIO` instead. */
|
||||||
|
const SIGIO: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGPOLL` instead. */
|
||||||
|
const SIGPOLL: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGPWR` instead. */
|
||||||
|
const SIGPWR: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGSYS` instead. */
|
||||||
|
const SIGSYS: number;
|
||||||
|
/** @deprecated since v6.3.0 - use `os.constants.signals.SIGUNUSED` instead. */
|
||||||
|
const SIGUNUSED: number;
|
||||||
|
const defaultCoreCipherList: string;
|
||||||
|
const defaultCipherList: string;
|
||||||
|
const ENGINE_METHOD_RSA: number;
|
||||||
|
const ALPN_ENABLED: number;
|
||||||
|
}
|
|
@ -0,0 +1,614 @@
|
||||||
|
declare module "crypto" {
|
||||||
|
import * as stream from "stream";
|
||||||
|
|
||||||
|
interface Certificate {
|
||||||
|
exportChallenge(spkac: BinaryLike): Buffer;
|
||||||
|
exportPublicKey(spkac: BinaryLike): Buffer;
|
||||||
|
verifySpkac(spkac: NodeJS.ArrayBufferView): boolean;
|
||||||
|
}
|
||||||
|
const Certificate: {
|
||||||
|
new(): Certificate;
|
||||||
|
(): Certificate;
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace constants { // https://nodejs.org/dist/latest-v10.x/docs/api/crypto.html#crypto_crypto_constants
|
||||||
|
const OPENSSL_VERSION_NUMBER: number;
|
||||||
|
|
||||||
|
/** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */
|
||||||
|
const SSL_OP_ALL: number;
|
||||||
|
/** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
|
||||||
|
const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number;
|
||||||
|
/** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
|
||||||
|
const SSL_OP_CIPHER_SERVER_PREFERENCE: number;
|
||||||
|
/** Instructs OpenSSL to use Cisco's "speshul" version of DTLS_BAD_VER. */
|
||||||
|
const SSL_OP_CISCO_ANYCONNECT: number;
|
||||||
|
/** Instructs OpenSSL to turn on cookie exchange. */
|
||||||
|
const SSL_OP_COOKIE_EXCHANGE: number;
|
||||||
|
/** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */
|
||||||
|
const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number;
|
||||||
|
/** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */
|
||||||
|
const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number;
|
||||||
|
/** Instructs OpenSSL to always use the tmp_rsa key when performing RSA operations. */
|
||||||
|
const SSL_OP_EPHEMERAL_RSA: number;
|
||||||
|
/** Allows initial connection to servers that do not support RI. */
|
||||||
|
const SSL_OP_LEGACY_SERVER_CONNECT: number;
|
||||||
|
const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number;
|
||||||
|
const SSL_OP_MICROSOFT_SESS_ID_BUG: number;
|
||||||
|
/** Instructs OpenSSL to disable the workaround for a man-in-the-middle protocol-version vulnerability in the SSL 2.0 server implementation. */
|
||||||
|
const SSL_OP_MSIE_SSLV2_RSA_PADDING: number;
|
||||||
|
const SSL_OP_NETSCAPE_CA_DN_BUG: number;
|
||||||
|
const SSL_OP_NETSCAPE_CHALLENGE_BUG: number;
|
||||||
|
const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number;
|
||||||
|
const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number;
|
||||||
|
/** Instructs OpenSSL to disable support for SSL/TLS compression. */
|
||||||
|
const SSL_OP_NO_COMPRESSION: number;
|
||||||
|
const SSL_OP_NO_QUERY_MTU: number;
|
||||||
|
/** Instructs OpenSSL to always start a new session when performing renegotiation. */
|
||||||
|
const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number;
|
||||||
|
const SSL_OP_NO_SSLv2: number;
|
||||||
|
const SSL_OP_NO_SSLv3: number;
|
||||||
|
const SSL_OP_NO_TICKET: number;
|
||||||
|
const SSL_OP_NO_TLSv1: number;
|
||||||
|
const SSL_OP_NO_TLSv1_1: number;
|
||||||
|
const SSL_OP_NO_TLSv1_2: number;
|
||||||
|
const SSL_OP_PKCS1_CHECK_1: number;
|
||||||
|
const SSL_OP_PKCS1_CHECK_2: number;
|
||||||
|
/** Instructs OpenSSL to always create a new key when using temporary/ephemeral DH parameters. */
|
||||||
|
const SSL_OP_SINGLE_DH_USE: number;
|
||||||
|
/** Instructs OpenSSL to always create a new key when using temporary/ephemeral ECDH parameters. */
|
||||||
|
const SSL_OP_SINGLE_ECDH_USE: number;
|
||||||
|
const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number;
|
||||||
|
const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number;
|
||||||
|
const SSL_OP_TLS_BLOCK_PADDING_BUG: number;
|
||||||
|
const SSL_OP_TLS_D5_BUG: number;
|
||||||
|
/** Instructs OpenSSL to disable version rollback attack detection. */
|
||||||
|
const SSL_OP_TLS_ROLLBACK_BUG: number;
|
||||||
|
|
||||||
|
const ENGINE_METHOD_RSA: number;
|
||||||
|
const ENGINE_METHOD_DSA: number;
|
||||||
|
const ENGINE_METHOD_DH: number;
|
||||||
|
const ENGINE_METHOD_RAND: number;
|
||||||
|
const ENGINE_METHOD_EC: number;
|
||||||
|
const ENGINE_METHOD_CIPHERS: number;
|
||||||
|
const ENGINE_METHOD_DIGESTS: number;
|
||||||
|
const ENGINE_METHOD_PKEY_METHS: number;
|
||||||
|
const ENGINE_METHOD_PKEY_ASN1_METHS: number;
|
||||||
|
const ENGINE_METHOD_ALL: number;
|
||||||
|
const ENGINE_METHOD_NONE: number;
|
||||||
|
|
||||||
|
const DH_CHECK_P_NOT_SAFE_PRIME: number;
|
||||||
|
const DH_CHECK_P_NOT_PRIME: number;
|
||||||
|
const DH_UNABLE_TO_CHECK_GENERATOR: number;
|
||||||
|
const DH_NOT_SUITABLE_GENERATOR: number;
|
||||||
|
|
||||||
|
const ALPN_ENABLED: number;
|
||||||
|
|
||||||
|
const RSA_PKCS1_PADDING: number;
|
||||||
|
const RSA_SSLV23_PADDING: number;
|
||||||
|
const RSA_NO_PADDING: number;
|
||||||
|
const RSA_PKCS1_OAEP_PADDING: number;
|
||||||
|
const RSA_X931_PADDING: number;
|
||||||
|
const RSA_PKCS1_PSS_PADDING: number;
|
||||||
|
/** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */
|
||||||
|
const RSA_PSS_SALTLEN_DIGEST: number;
|
||||||
|
/** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */
|
||||||
|
const RSA_PSS_SALTLEN_MAX_SIGN: number;
|
||||||
|
/** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */
|
||||||
|
const RSA_PSS_SALTLEN_AUTO: number;
|
||||||
|
|
||||||
|
const POINT_CONVERSION_COMPRESSED: number;
|
||||||
|
const POINT_CONVERSION_UNCOMPRESSED: number;
|
||||||
|
const POINT_CONVERSION_HYBRID: number;
|
||||||
|
|
||||||
|
/** Specifies the built-in default cipher list used by Node.js (colon-separated values). */
|
||||||
|
const defaultCoreCipherList: string;
|
||||||
|
/** Specifies the active default cipher list used by the current Node.js process (colon-separated values). */
|
||||||
|
const defaultCipherList: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface HashOptions extends stream.TransformOptions {
|
||||||
|
/**
|
||||||
|
* For XOF hash functions such as `shake256`, the
|
||||||
|
* outputLength option can be used to specify the desired output length in bytes.
|
||||||
|
*/
|
||||||
|
outputLength?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated since v10.0.0 */
|
||||||
|
const fips: boolean;
|
||||||
|
|
||||||
|
function createHash(algorithm: string, options?: HashOptions): Hash;
|
||||||
|
function createHmac(algorithm: string, key: BinaryLike, options?: stream.TransformOptions): Hmac;
|
||||||
|
|
||||||
|
type Utf8AsciiLatin1Encoding = "utf8" | "ascii" | "latin1";
|
||||||
|
type HexBase64Latin1Encoding = "latin1" | "hex" | "base64";
|
||||||
|
type Utf8AsciiBinaryEncoding = "utf8" | "ascii" | "binary";
|
||||||
|
type HexBase64BinaryEncoding = "binary" | "base64" | "hex";
|
||||||
|
type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid";
|
||||||
|
|
||||||
|
class Hash extends stream.Transform {
|
||||||
|
private constructor();
|
||||||
|
update(data: BinaryLike): Hash;
|
||||||
|
update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Hash;
|
||||||
|
digest(): Buffer;
|
||||||
|
digest(encoding: HexBase64Latin1Encoding): string;
|
||||||
|
}
|
||||||
|
class Hmac extends stream.Transform {
|
||||||
|
private constructor();
|
||||||
|
update(data: BinaryLike): Hmac;
|
||||||
|
update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Hmac;
|
||||||
|
digest(): Buffer;
|
||||||
|
digest(encoding: HexBase64Latin1Encoding): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
type KeyObjectType = 'secret' | 'public' | 'private';
|
||||||
|
|
||||||
|
interface KeyExportOptions<T extends KeyFormat> {
|
||||||
|
type: 'pkcs1' | 'spki' | 'pkcs8' | 'sec1';
|
||||||
|
format: T;
|
||||||
|
cipher?: string;
|
||||||
|
passphrase?: string | Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
class KeyObject {
|
||||||
|
private constructor();
|
||||||
|
asymmetricKeyType?: KeyType;
|
||||||
|
/**
|
||||||
|
* For asymmetric keys, this property represents the size of the embedded key in
|
||||||
|
* bytes. This property is `undefined` for symmetric keys.
|
||||||
|
*/
|
||||||
|
asymmetricKeySize?: number;
|
||||||
|
export(options: KeyExportOptions<'pem'>): string | Buffer;
|
||||||
|
export(options?: KeyExportOptions<'der'>): Buffer;
|
||||||
|
symmetricKeySize?: number;
|
||||||
|
type: KeyObjectType;
|
||||||
|
}
|
||||||
|
|
||||||
|
type CipherCCMTypes = 'aes-128-ccm' | 'aes-192-ccm' | 'aes-256-ccm';
|
||||||
|
type CipherGCMTypes = 'aes-128-gcm' | 'aes-192-gcm' | 'aes-256-gcm';
|
||||||
|
|
||||||
|
type BinaryLike = string | NodeJS.ArrayBufferView;
|
||||||
|
|
||||||
|
type CipherKey = BinaryLike | KeyObject;
|
||||||
|
|
||||||
|
interface CipherCCMOptions extends stream.TransformOptions {
|
||||||
|
authTagLength: number;
|
||||||
|
}
|
||||||
|
interface CipherGCMOptions extends stream.TransformOptions {
|
||||||
|
authTagLength?: number;
|
||||||
|
}
|
||||||
|
/** @deprecated since v10.0.0 use createCipheriv() */
|
||||||
|
function createCipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): CipherCCM;
|
||||||
|
/** @deprecated since v10.0.0 use createCipheriv() */
|
||||||
|
function createCipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): CipherGCM;
|
||||||
|
/** @deprecated since v10.0.0 use createCipheriv() */
|
||||||
|
function createCipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Cipher;
|
||||||
|
|
||||||
|
function createCipheriv(
|
||||||
|
algorithm: CipherCCMTypes,
|
||||||
|
key: CipherKey,
|
||||||
|
iv: BinaryLike | null,
|
||||||
|
options: CipherCCMOptions
|
||||||
|
): CipherCCM;
|
||||||
|
function createCipheriv(
|
||||||
|
algorithm: CipherGCMTypes,
|
||||||
|
key: CipherKey,
|
||||||
|
iv: BinaryLike | null,
|
||||||
|
options?: CipherGCMOptions
|
||||||
|
): CipherGCM;
|
||||||
|
function createCipheriv(
|
||||||
|
algorithm: string, key: CipherKey, iv: BinaryLike | null, options?: stream.TransformOptions
|
||||||
|
): Cipher;
|
||||||
|
|
||||||
|
class Cipher extends stream.Transform {
|
||||||
|
private constructor();
|
||||||
|
update(data: BinaryLike): Buffer;
|
||||||
|
update(data: string, input_encoding: Utf8AsciiBinaryEncoding): Buffer;
|
||||||
|
update(data: NodeJS.ArrayBufferView, input_encoding: undefined, output_encoding: HexBase64BinaryEncoding): string;
|
||||||
|
update(data: string, input_encoding: Utf8AsciiBinaryEncoding | undefined, output_encoding: HexBase64BinaryEncoding): string;
|
||||||
|
final(): Buffer;
|
||||||
|
final(output_encoding: string): string;
|
||||||
|
setAutoPadding(auto_padding?: boolean): this;
|
||||||
|
// getAuthTag(): Buffer;
|
||||||
|
// setAAD(buffer: Buffer): this; // docs only say buffer
|
||||||
|
}
|
||||||
|
interface CipherCCM extends Cipher {
|
||||||
|
setAAD(buffer: Buffer, options: { plaintextLength: number }): this;
|
||||||
|
getAuthTag(): Buffer;
|
||||||
|
}
|
||||||
|
interface CipherGCM extends Cipher {
|
||||||
|
setAAD(buffer: Buffer, options?: { plaintextLength: number }): this;
|
||||||
|
getAuthTag(): Buffer;
|
||||||
|
}
|
||||||
|
/** @deprecated since v10.0.0 use createDecipheriv() */
|
||||||
|
function createDecipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): DecipherCCM;
|
||||||
|
/** @deprecated since v10.0.0 use createDecipheriv() */
|
||||||
|
function createDecipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): DecipherGCM;
|
||||||
|
/** @deprecated since v10.0.0 use createDecipheriv() */
|
||||||
|
function createDecipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Decipher;
|
||||||
|
|
||||||
|
function createDecipheriv(
|
||||||
|
algorithm: CipherCCMTypes,
|
||||||
|
key: BinaryLike,
|
||||||
|
iv: BinaryLike | null,
|
||||||
|
options: CipherCCMOptions,
|
||||||
|
): DecipherCCM;
|
||||||
|
function createDecipheriv(
|
||||||
|
algorithm: CipherGCMTypes,
|
||||||
|
key: BinaryLike,
|
||||||
|
iv: BinaryLike | null,
|
||||||
|
options?: CipherGCMOptions,
|
||||||
|
): DecipherGCM;
|
||||||
|
function createDecipheriv(algorithm: string, key: BinaryLike, iv: BinaryLike | null, options?: stream.TransformOptions): Decipher;
|
||||||
|
|
||||||
|
class Decipher extends stream.Transform {
|
||||||
|
private constructor();
|
||||||
|
update(data: NodeJS.ArrayBufferView): Buffer;
|
||||||
|
update(data: string, input_encoding: HexBase64BinaryEncoding): Buffer;
|
||||||
|
update(data: NodeJS.ArrayBufferView, input_encoding: HexBase64BinaryEncoding | undefined, output_encoding: Utf8AsciiBinaryEncoding): string;
|
||||||
|
update(data: string, input_encoding: HexBase64BinaryEncoding | undefined, output_encoding: Utf8AsciiBinaryEncoding): string;
|
||||||
|
final(): Buffer;
|
||||||
|
final(output_encoding: string): string;
|
||||||
|
setAutoPadding(auto_padding?: boolean): this;
|
||||||
|
// setAuthTag(tag: NodeJS.ArrayBufferView): this;
|
||||||
|
// setAAD(buffer: NodeJS.ArrayBufferView): this;
|
||||||
|
}
|
||||||
|
interface DecipherCCM extends Decipher {
|
||||||
|
setAuthTag(buffer: NodeJS.ArrayBufferView): this;
|
||||||
|
setAAD(buffer: NodeJS.ArrayBufferView, options: { plaintextLength: number }): this;
|
||||||
|
}
|
||||||
|
interface DecipherGCM extends Decipher {
|
||||||
|
setAuthTag(buffer: NodeJS.ArrayBufferView): this;
|
||||||
|
setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PrivateKeyInput {
|
||||||
|
key: string | Buffer;
|
||||||
|
format?: KeyFormat;
|
||||||
|
type?: 'pkcs1' | 'pkcs8' | 'sec1';
|
||||||
|
passphrase?: string | Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PublicKeyInput {
|
||||||
|
key: string | Buffer;
|
||||||
|
format?: KeyFormat;
|
||||||
|
type?: 'pkcs1' | 'spki';
|
||||||
|
}
|
||||||
|
|
||||||
|
function createPrivateKey(key: PrivateKeyInput | string | Buffer): KeyObject;
|
||||||
|
function createPublicKey(key: PublicKeyInput | string | Buffer | KeyObject): KeyObject;
|
||||||
|
function createSecretKey(key: Buffer): KeyObject;
|
||||||
|
|
||||||
|
function createSign(algorithm: string, options?: stream.WritableOptions): Signer;
|
||||||
|
|
||||||
|
interface SigningOptions {
|
||||||
|
/**
|
||||||
|
* @See crypto.constants.RSA_PKCS1_PADDING
|
||||||
|
*/
|
||||||
|
padding?: number;
|
||||||
|
saltLength?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SignPrivateKeyInput extends PrivateKeyInput, SigningOptions {
|
||||||
|
}
|
||||||
|
|
||||||
|
type KeyLike = string | Buffer | KeyObject;
|
||||||
|
|
||||||
|
class Signer extends stream.Writable {
|
||||||
|
private constructor();
|
||||||
|
|
||||||
|
update(data: BinaryLike): Signer;
|
||||||
|
update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Signer;
|
||||||
|
sign(private_key: SignPrivateKeyInput | KeyLike): Buffer;
|
||||||
|
sign(private_key: SignPrivateKeyInput | KeyLike, output_format: HexBase64Latin1Encoding): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createVerify(algorithm: string, options?: stream.WritableOptions): Verify;
|
||||||
|
class Verify extends stream.Writable {
|
||||||
|
private constructor();
|
||||||
|
|
||||||
|
update(data: BinaryLike): Verify;
|
||||||
|
update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Verify;
|
||||||
|
verify(object: Object | KeyLike, signature: NodeJS.ArrayBufferView): boolean;
|
||||||
|
verify(object: Object | KeyLike, signature: string, signature_format?: HexBase64Latin1Encoding): boolean;
|
||||||
|
// https://nodejs.org/api/crypto.html#crypto_verifier_verify_object_signature_signature_format
|
||||||
|
// The signature field accepts a TypedArray type, but it is only available starting ES2017
|
||||||
|
}
|
||||||
|
function createDiffieHellman(prime_length: number, generator?: number | NodeJS.ArrayBufferView): DiffieHellman;
|
||||||
|
function createDiffieHellman(prime: NodeJS.ArrayBufferView): DiffieHellman;
|
||||||
|
function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding): DiffieHellman;
|
||||||
|
function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: number | NodeJS.ArrayBufferView): DiffieHellman;
|
||||||
|
function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: string, generator_encoding: HexBase64Latin1Encoding): DiffieHellman;
|
||||||
|
class DiffieHellman {
|
||||||
|
private constructor();
|
||||||
|
generateKeys(): Buffer;
|
||||||
|
generateKeys(encoding: HexBase64Latin1Encoding): string;
|
||||||
|
computeSecret(other_public_key: NodeJS.ArrayBufferView): Buffer;
|
||||||
|
computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer;
|
||||||
|
computeSecret(other_public_key: NodeJS.ArrayBufferView, output_encoding: HexBase64Latin1Encoding): string;
|
||||||
|
computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string;
|
||||||
|
getPrime(): Buffer;
|
||||||
|
getPrime(encoding: HexBase64Latin1Encoding): string;
|
||||||
|
getGenerator(): Buffer;
|
||||||
|
getGenerator(encoding: HexBase64Latin1Encoding): string;
|
||||||
|
getPublicKey(): Buffer;
|
||||||
|
getPublicKey(encoding: HexBase64Latin1Encoding): string;
|
||||||
|
getPrivateKey(): Buffer;
|
||||||
|
getPrivateKey(encoding: HexBase64Latin1Encoding): string;
|
||||||
|
setPublicKey(public_key: NodeJS.ArrayBufferView): void;
|
||||||
|
setPublicKey(public_key: string, encoding: string): void;
|
||||||
|
setPrivateKey(private_key: NodeJS.ArrayBufferView): void;
|
||||||
|
setPrivateKey(private_key: string, encoding: string): void;
|
||||||
|
verifyError: number;
|
||||||
|
}
|
||||||
|
function getDiffieHellman(group_name: string): DiffieHellman;
|
||||||
|
function pbkdf2(
|
||||||
|
password: BinaryLike,
|
||||||
|
salt: BinaryLike,
|
||||||
|
iterations: number,
|
||||||
|
keylen: number,
|
||||||
|
digest: string,
|
||||||
|
callback: (err: Error | null, derivedKey: Buffer) => any,
|
||||||
|
): void;
|
||||||
|
function pbkdf2Sync(password: BinaryLike, salt: BinaryLike, iterations: number, keylen: number, digest: string): Buffer;
|
||||||
|
|
||||||
|
function randomBytes(size: number): Buffer;
|
||||||
|
function randomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void;
|
||||||
|
function pseudoRandomBytes(size: number): Buffer;
|
||||||
|
function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void;
|
||||||
|
|
||||||
|
function randomFillSync<T extends NodeJS.ArrayBufferView>(buffer: T, offset?: number, size?: number): T;
|
||||||
|
function randomFill<T extends NodeJS.ArrayBufferView>(buffer: T, callback: (err: Error | null, buf: T) => void): void;
|
||||||
|
function randomFill<T extends NodeJS.ArrayBufferView>(buffer: T, offset: number, callback: (err: Error | null, buf: T) => void): void;
|
||||||
|
function randomFill<T extends NodeJS.ArrayBufferView>(buffer: T, offset: number, size: number, callback: (err: Error | null, buf: T) => void): void;
|
||||||
|
|
||||||
|
interface ScryptOptions {
|
||||||
|
N?: number;
|
||||||
|
r?: number;
|
||||||
|
p?: number;
|
||||||
|
maxmem?: number;
|
||||||
|
}
|
||||||
|
function scrypt(
|
||||||
|
password: BinaryLike,
|
||||||
|
salt: BinaryLike,
|
||||||
|
keylen: number, callback: (err: Error | null, derivedKey: Buffer) => void,
|
||||||
|
): void;
|
||||||
|
function scrypt(
|
||||||
|
password: BinaryLike,
|
||||||
|
salt: BinaryLike,
|
||||||
|
keylen: number,
|
||||||
|
options: ScryptOptions,
|
||||||
|
callback: (err: Error | null, derivedKey: Buffer) => void,
|
||||||
|
): void;
|
||||||
|
function scryptSync(password: BinaryLike, salt: BinaryLike, keylen: number, options?: ScryptOptions): Buffer;
|
||||||
|
|
||||||
|
interface RsaPublicKey {
|
||||||
|
key: KeyLike;
|
||||||
|
padding?: number;
|
||||||
|
}
|
||||||
|
interface RsaPrivateKey {
|
||||||
|
key: KeyLike;
|
||||||
|
passphrase?: string;
|
||||||
|
/**
|
||||||
|
* @default 'sha1'
|
||||||
|
*/
|
||||||
|
oaepHash?: string;
|
||||||
|
oaepLabel?: NodeJS.TypedArray;
|
||||||
|
padding?: number;
|
||||||
|
}
|
||||||
|
function publicEncrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
|
||||||
|
function publicDecrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
|
||||||
|
function privateDecrypt(private_key: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
|
||||||
|
function privateEncrypt(private_key: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
|
||||||
|
function getCiphers(): string[];
|
||||||
|
function getCurves(): string[];
|
||||||
|
function getHashes(): string[];
|
||||||
|
class ECDH {
|
||||||
|
private constructor();
|
||||||
|
static convertKey(
|
||||||
|
key: BinaryLike,
|
||||||
|
curve: string,
|
||||||
|
inputEncoding?: HexBase64Latin1Encoding,
|
||||||
|
outputEncoding?: "latin1" | "hex" | "base64",
|
||||||
|
format?: "uncompressed" | "compressed" | "hybrid",
|
||||||
|
): Buffer | string;
|
||||||
|
generateKeys(): Buffer;
|
||||||
|
generateKeys(encoding: HexBase64Latin1Encoding, format?: ECDHKeyFormat): string;
|
||||||
|
computeSecret(other_public_key: NodeJS.ArrayBufferView): Buffer;
|
||||||
|
computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer;
|
||||||
|
computeSecret(other_public_key: NodeJS.ArrayBufferView, output_encoding: HexBase64Latin1Encoding): string;
|
||||||
|
computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string;
|
||||||
|
getPrivateKey(): Buffer;
|
||||||
|
getPrivateKey(encoding: HexBase64Latin1Encoding): string;
|
||||||
|
getPublicKey(): Buffer;
|
||||||
|
getPublicKey(encoding: HexBase64Latin1Encoding, format?: ECDHKeyFormat): string;
|
||||||
|
setPrivateKey(private_key: NodeJS.ArrayBufferView): void;
|
||||||
|
setPrivateKey(private_key: string, encoding: HexBase64Latin1Encoding): void;
|
||||||
|
}
|
||||||
|
function createECDH(curve_name: string): ECDH;
|
||||||
|
function timingSafeEqual(a: NodeJS.ArrayBufferView, b: NodeJS.ArrayBufferView): boolean;
|
||||||
|
/** @deprecated since v10.0.0 */
|
||||||
|
const DEFAULT_ENCODING: string;
|
||||||
|
|
||||||
|
type KeyType = 'rsa' | 'dsa' | 'ec';
|
||||||
|
type KeyFormat = 'pem' | 'der';
|
||||||
|
|
||||||
|
interface BasePrivateKeyEncodingOptions<T extends KeyFormat> {
|
||||||
|
format: T;
|
||||||
|
cipher?: string;
|
||||||
|
passphrase?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface KeyPairKeyObjectResult {
|
||||||
|
publicKey: KeyObject;
|
||||||
|
privateKey: KeyObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ECKeyPairKeyObjectOptions {
|
||||||
|
/**
|
||||||
|
* Name of the curve to use.
|
||||||
|
*/
|
||||||
|
namedCurve: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface RSAKeyPairKeyObjectOptions {
|
||||||
|
/**
|
||||||
|
* Key size in bits
|
||||||
|
*/
|
||||||
|
modulusLength: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @default 0x10001
|
||||||
|
*/
|
||||||
|
publicExponent?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface DSAKeyPairKeyObjectOptions {
|
||||||
|
/**
|
||||||
|
* Key size in bits
|
||||||
|
*/
|
||||||
|
modulusLength: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Size of q in bits
|
||||||
|
*/
|
||||||
|
divisorLength: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface RSAKeyPairOptions<PubF extends KeyFormat, PrivF extends KeyFormat> {
|
||||||
|
/**
|
||||||
|
* Key size in bits
|
||||||
|
*/
|
||||||
|
modulusLength: number;
|
||||||
|
/**
|
||||||
|
* @default 0x10001
|
||||||
|
*/
|
||||||
|
publicExponent?: number;
|
||||||
|
|
||||||
|
publicKeyEncoding: {
|
||||||
|
type: 'pkcs1' | 'spki';
|
||||||
|
format: PubF;
|
||||||
|
};
|
||||||
|
privateKeyEncoding: BasePrivateKeyEncodingOptions<PrivF> & {
|
||||||
|
type: 'pkcs1' | 'pkcs8';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
interface DSAKeyPairOptions<PubF extends KeyFormat, PrivF extends KeyFormat> {
|
||||||
|
/**
|
||||||
|
* Key size in bits
|
||||||
|
*/
|
||||||
|
modulusLength: number;
|
||||||
|
/**
|
||||||
|
* Size of q in bits
|
||||||
|
*/
|
||||||
|
divisorLength: number;
|
||||||
|
|
||||||
|
publicKeyEncoding: {
|
||||||
|
type: 'spki';
|
||||||
|
format: PubF;
|
||||||
|
};
|
||||||
|
privateKeyEncoding: BasePrivateKeyEncodingOptions<PrivF> & {
|
||||||
|
type: 'pkcs8';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ECKeyPairOptions<PubF extends KeyFormat, PrivF extends KeyFormat> {
|
||||||
|
/**
|
||||||
|
* Name of the curve to use.
|
||||||
|
*/
|
||||||
|
namedCurve: string;
|
||||||
|
|
||||||
|
publicKeyEncoding: {
|
||||||
|
type: 'pkcs1' | 'spki';
|
||||||
|
format: PubF;
|
||||||
|
};
|
||||||
|
privateKeyEncoding: BasePrivateKeyEncodingOptions<PrivF> & {
|
||||||
|
type: 'sec1' | 'pkcs8';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
interface KeyPairSyncResult<T1 extends string | Buffer, T2 extends string | Buffer> {
|
||||||
|
publicKey: T1;
|
||||||
|
privateKey: T2;
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult<string, string>;
|
||||||
|
function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'pem', 'der'>): KeyPairSyncResult<string, Buffer>;
|
||||||
|
function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'der', 'pem'>): KeyPairSyncResult<Buffer, string>;
|
||||||
|
function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'der', 'der'>): KeyPairSyncResult<Buffer, Buffer>;
|
||||||
|
function generateKeyPairSync(type: 'rsa', options: RSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
|
||||||
|
|
||||||
|
function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult<string, string>;
|
||||||
|
function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'pem', 'der'>): KeyPairSyncResult<string, Buffer>;
|
||||||
|
function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'der', 'pem'>): KeyPairSyncResult<Buffer, string>;
|
||||||
|
function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'der', 'der'>): KeyPairSyncResult<Buffer, Buffer>;
|
||||||
|
function generateKeyPairSync(type: 'dsa', options: DSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
|
||||||
|
|
||||||
|
function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult<string, string>;
|
||||||
|
function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'pem', 'der'>): KeyPairSyncResult<string, Buffer>;
|
||||||
|
function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'der', 'pem'>): KeyPairSyncResult<Buffer, string>;
|
||||||
|
function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'der', 'der'>): KeyPairSyncResult<Buffer, Buffer>;
|
||||||
|
function generateKeyPairSync(type: 'ec', options: ECKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
|
||||||
|
|
||||||
|
function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void;
|
||||||
|
function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void;
|
||||||
|
function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void;
|
||||||
|
function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void;
|
||||||
|
function generateKeyPair(type: 'rsa', options: RSAKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void;
|
||||||
|
|
||||||
|
function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void;
|
||||||
|
function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void;
|
||||||
|
function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void;
|
||||||
|
function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void;
|
||||||
|
function generateKeyPair(type: 'dsa', options: DSAKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void;
|
||||||
|
|
||||||
|
function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void;
|
||||||
|
function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void;
|
||||||
|
function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void;
|
||||||
|
function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void;
|
||||||
|
function generateKeyPair(type: 'ec', options: ECKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void;
|
||||||
|
|
||||||
|
namespace generateKeyPair {
|
||||||
|
function __promisify__(type: "rsa", options: RSAKeyPairOptions<'pem', 'pem'>): Promise<{ publicKey: string, privateKey: string }>;
|
||||||
|
function __promisify__(type: "rsa", options: RSAKeyPairOptions<'pem', 'der'>): Promise<{ publicKey: string, privateKey: Buffer }>;
|
||||||
|
function __promisify__(type: "rsa", options: RSAKeyPairOptions<'der', 'pem'>): Promise<{ publicKey: Buffer, privateKey: string }>;
|
||||||
|
function __promisify__(type: "rsa", options: RSAKeyPairOptions<'der', 'der'>): Promise<{ publicKey: Buffer, privateKey: Buffer }>;
|
||||||
|
function __promisify__(type: "rsa", options: RSAKeyPairKeyObjectOptions): Promise<KeyPairKeyObjectResult>;
|
||||||
|
|
||||||
|
function __promisify__(type: "dsa", options: DSAKeyPairOptions<'pem', 'pem'>): Promise<{ publicKey: string, privateKey: string }>;
|
||||||
|
function __promisify__(type: "dsa", options: DSAKeyPairOptions<'pem', 'der'>): Promise<{ publicKey: string, privateKey: Buffer }>;
|
||||||
|
function __promisify__(type: "dsa", options: DSAKeyPairOptions<'der', 'pem'>): Promise<{ publicKey: Buffer, privateKey: string }>;
|
||||||
|
function __promisify__(type: "dsa", options: DSAKeyPairOptions<'der', 'der'>): Promise<{ publicKey: Buffer, privateKey: Buffer }>;
|
||||||
|
function __promisify__(type: "dsa", options: DSAKeyPairKeyObjectOptions): Promise<KeyPairKeyObjectResult>;
|
||||||
|
|
||||||
|
function __promisify__(type: "ec", options: ECKeyPairOptions<'pem', 'pem'>): Promise<{ publicKey: string, privateKey: string }>;
|
||||||
|
function __promisify__(type: "ec", options: ECKeyPairOptions<'pem', 'der'>): Promise<{ publicKey: string, privateKey: Buffer }>;
|
||||||
|
function __promisify__(type: "ec", options: ECKeyPairOptions<'der', 'pem'>): Promise<{ publicKey: Buffer, privateKey: string }>;
|
||||||
|
function __promisify__(type: "ec", options: ECKeyPairOptions<'der', 'der'>): Promise<{ publicKey: Buffer, privateKey: Buffer }>;
|
||||||
|
function __promisify__(type: "ec", options: ECKeyPairKeyObjectOptions): Promise<KeyPairKeyObjectResult>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates and returns the signature for `data` using the given private key and
|
||||||
|
* algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is
|
||||||
|
* dependent upon the key type (especially Ed25519 and Ed448).
|
||||||
|
*
|
||||||
|
* If `key` is not a [`KeyObject`][], this function behaves as if `key` had been
|
||||||
|
* passed to [`crypto.createPrivateKey()`][].
|
||||||
|
*/
|
||||||
|
function sign(algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, key: KeyLike | SignPrivateKeyInput): Buffer;
|
||||||
|
|
||||||
|
interface VerifyKeyWithOptions extends KeyObject, SigningOptions {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates and returns the signature for `data` using the given private key and
|
||||||
|
* algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is
|
||||||
|
* dependent upon the key type (especially Ed25519 and Ed448).
|
||||||
|
*
|
||||||
|
* If `key` is not a [`KeyObject`][], this function behaves as if `key` had been
|
||||||
|
* passed to [`crypto.createPublicKey()`][].
|
||||||
|
*/
|
||||||
|
function verify(algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, key: KeyLike | VerifyKeyWithOptions, signature: NodeJS.ArrayBufferView): Buffer;
|
||||||
|
}
|
|
@ -0,0 +1,118 @@
|
||||||
|
declare module "dgram" {
|
||||||
|
import { AddressInfo } from "net";
|
||||||
|
import * as dns from "dns";
|
||||||
|
import * as events from "events";
|
||||||
|
|
||||||
|
interface RemoteInfo {
|
||||||
|
address: string;
|
||||||
|
family: 'IPv4' | 'IPv6';
|
||||||
|
port: number;
|
||||||
|
size: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface BindOptions {
|
||||||
|
port?: number;
|
||||||
|
address?: string;
|
||||||
|
exclusive?: boolean;
|
||||||
|
fd?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
type SocketType = "udp4" | "udp6";
|
||||||
|
|
||||||
|
interface SocketOptions {
|
||||||
|
type: SocketType;
|
||||||
|
reuseAddr?: boolean;
|
||||||
|
/**
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
ipv6Only?: boolean;
|
||||||
|
recvBufferSize?: number;
|
||||||
|
sendBufferSize?: number;
|
||||||
|
lookup?: (hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket;
|
||||||
|
function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket;
|
||||||
|
|
||||||
|
class Socket extends events.EventEmitter {
|
||||||
|
addMembership(multicastAddress: string, multicastInterface?: string): void;
|
||||||
|
address(): AddressInfo;
|
||||||
|
bind(port?: number, address?: string, callback?: () => void): void;
|
||||||
|
bind(port?: number, callback?: () => void): void;
|
||||||
|
bind(callback?: () => void): void;
|
||||||
|
bind(options: BindOptions, callback?: () => void): void;
|
||||||
|
close(callback?: () => void): void;
|
||||||
|
connect(port: number, address?: string, callback?: () => void): void;
|
||||||
|
connect(port: number, callback: () => void): void;
|
||||||
|
disconnect(): void;
|
||||||
|
dropMembership(multicastAddress: string, multicastInterface?: string): void;
|
||||||
|
getRecvBufferSize(): number;
|
||||||
|
getSendBufferSize(): number;
|
||||||
|
ref(): this;
|
||||||
|
remoteAddress(): AddressInfo;
|
||||||
|
send(msg: string | Uint8Array | any[], port?: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void;
|
||||||
|
send(msg: string | Uint8Array | any[], port?: number, callback?: (error: Error | null, bytes: number) => void): void;
|
||||||
|
send(msg: string | Uint8Array | any[], callback?: (error: Error | null, bytes: number) => void): void;
|
||||||
|
send(msg: string | Uint8Array, offset: number, length: number, port?: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void;
|
||||||
|
send(msg: string | Uint8Array, offset: number, length: number, port?: number, callback?: (error: Error | null, bytes: number) => void): void;
|
||||||
|
send(msg: string | Uint8Array, offset: number, length: number, callback?: (error: Error | null, bytes: number) => void): void;
|
||||||
|
setBroadcast(flag: boolean): void;
|
||||||
|
setMulticastInterface(multicastInterface: string): void;
|
||||||
|
setMulticastLoopback(flag: boolean): void;
|
||||||
|
setMulticastTTL(ttl: number): void;
|
||||||
|
setRecvBufferSize(size: number): void;
|
||||||
|
setSendBufferSize(size: number): void;
|
||||||
|
setTTL(ttl: number): void;
|
||||||
|
unref(): this;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* events.EventEmitter
|
||||||
|
* 1. close
|
||||||
|
* 2. connect
|
||||||
|
* 3. error
|
||||||
|
* 4. listening
|
||||||
|
* 5. message
|
||||||
|
*/
|
||||||
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
addListener(event: "close", listener: () => void): this;
|
||||||
|
addListener(event: "connect", listener: () => void): this;
|
||||||
|
addListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
addListener(event: "listening", listener: () => void): this;
|
||||||
|
addListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
|
||||||
|
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
emit(event: "close"): boolean;
|
||||||
|
emit(event: "connect"): boolean;
|
||||||
|
emit(event: "error", err: Error): boolean;
|
||||||
|
emit(event: "listening"): boolean;
|
||||||
|
emit(event: "message", msg: Buffer, rinfo: RemoteInfo): boolean;
|
||||||
|
|
||||||
|
on(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: "close", listener: () => void): this;
|
||||||
|
on(event: "connect", listener: () => void): this;
|
||||||
|
on(event: "error", listener: (err: Error) => void): this;
|
||||||
|
on(event: "listening", listener: () => void): this;
|
||||||
|
on(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
|
||||||
|
|
||||||
|
once(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: "close", listener: () => void): this;
|
||||||
|
once(event: "connect", listener: () => void): this;
|
||||||
|
once(event: "error", listener: (err: Error) => void): this;
|
||||||
|
once(event: "listening", listener: () => void): this;
|
||||||
|
once(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: "close", listener: () => void): this;
|
||||||
|
prependListener(event: "connect", listener: () => void): this;
|
||||||
|
prependListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: "listening", listener: () => void): this;
|
||||||
|
prependListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: "close", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "connect", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: "listening", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,366 @@
|
||||||
|
declare module "dns" {
|
||||||
|
// Supported getaddrinfo flags.
|
||||||
|
const ADDRCONFIG: number;
|
||||||
|
const V4MAPPED: number;
|
||||||
|
|
||||||
|
interface LookupOptions {
|
||||||
|
family?: number;
|
||||||
|
hints?: number;
|
||||||
|
all?: boolean;
|
||||||
|
verbatim?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LookupOneOptions extends LookupOptions {
|
||||||
|
all?: false;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LookupAllOptions extends LookupOptions {
|
||||||
|
all: true;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LookupAddress {
|
||||||
|
address: string;
|
||||||
|
family: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
function lookup(hostname: string, family: number, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void;
|
||||||
|
function lookup(hostname: string, options: LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void;
|
||||||
|
function lookup(hostname: string, options: LookupAllOptions, callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void): void;
|
||||||
|
function lookup(hostname: string, options: LookupOptions, callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void): void;
|
||||||
|
function lookup(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void;
|
||||||
|
|
||||||
|
// NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
|
||||||
|
namespace lookup {
|
||||||
|
function __promisify__(hostname: string, options: LookupAllOptions): Promise<LookupAddress[]>;
|
||||||
|
function __promisify__(hostname: string, options?: LookupOneOptions | number): Promise<LookupAddress>;
|
||||||
|
function __promisify__(hostname: string, options: LookupOptions): Promise<LookupAddress | LookupAddress[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function lookupService(address: string, port: number, callback: (err: NodeJS.ErrnoException | null, hostname: string, service: string) => void): void;
|
||||||
|
|
||||||
|
namespace lookupService {
|
||||||
|
function __promisify__(address: string, port: number): Promise<{ hostname: string, service: string }>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ResolveOptions {
|
||||||
|
ttl: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ResolveWithTtlOptions extends ResolveOptions {
|
||||||
|
ttl: true;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface RecordWithTtl {
|
||||||
|
address: string;
|
||||||
|
ttl: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated Use AnyARecord or AnyAaaaRecord instead. */
|
||||||
|
type AnyRecordWithTtl = AnyARecord | AnyAaaaRecord;
|
||||||
|
|
||||||
|
interface AnyARecord extends RecordWithTtl {
|
||||||
|
type: "A";
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AnyAaaaRecord extends RecordWithTtl {
|
||||||
|
type: "AAAA";
|
||||||
|
}
|
||||||
|
|
||||||
|
interface MxRecord {
|
||||||
|
priority: number;
|
||||||
|
exchange: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AnyMxRecord extends MxRecord {
|
||||||
|
type: "MX";
|
||||||
|
}
|
||||||
|
|
||||||
|
interface NaptrRecord {
|
||||||
|
flags: string;
|
||||||
|
service: string;
|
||||||
|
regexp: string;
|
||||||
|
replacement: string;
|
||||||
|
order: number;
|
||||||
|
preference: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AnyNaptrRecord extends NaptrRecord {
|
||||||
|
type: "NAPTR";
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SoaRecord {
|
||||||
|
nsname: string;
|
||||||
|
hostmaster: string;
|
||||||
|
serial: number;
|
||||||
|
refresh: number;
|
||||||
|
retry: number;
|
||||||
|
expire: number;
|
||||||
|
minttl: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AnySoaRecord extends SoaRecord {
|
||||||
|
type: "SOA";
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SrvRecord {
|
||||||
|
priority: number;
|
||||||
|
weight: number;
|
||||||
|
port: number;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AnySrvRecord extends SrvRecord {
|
||||||
|
type: "SRV";
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AnyTxtRecord {
|
||||||
|
type: "TXT";
|
||||||
|
entries: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AnyNsRecord {
|
||||||
|
type: "NS";
|
||||||
|
value: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AnyPtrRecord {
|
||||||
|
type: "PTR";
|
||||||
|
value: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AnyCnameRecord {
|
||||||
|
type: "CNAME";
|
||||||
|
value: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
type AnyRecord = AnyARecord |
|
||||||
|
AnyAaaaRecord |
|
||||||
|
AnyCnameRecord |
|
||||||
|
AnyMxRecord |
|
||||||
|
AnyNaptrRecord |
|
||||||
|
AnyNsRecord |
|
||||||
|
AnyPtrRecord |
|
||||||
|
AnySoaRecord |
|
||||||
|
AnySrvRecord |
|
||||||
|
AnyTxtRecord;
|
||||||
|
|
||||||
|
function resolve(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
|
||||||
|
function resolve(hostname: string, rrtype: "A", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
|
||||||
|
function resolve(hostname: string, rrtype: "AAAA", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
|
||||||
|
function resolve(hostname: string, rrtype: "ANY", callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void): void;
|
||||||
|
function resolve(hostname: string, rrtype: "CNAME", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
|
||||||
|
function resolve(hostname: string, rrtype: "MX", callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void): void;
|
||||||
|
function resolve(hostname: string, rrtype: "NAPTR", callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void): void;
|
||||||
|
function resolve(hostname: string, rrtype: "NS", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
|
||||||
|
function resolve(hostname: string, rrtype: "PTR", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
|
||||||
|
function resolve(hostname: string, rrtype: "SOA", callback: (err: NodeJS.ErrnoException | null, addresses: SoaRecord) => void): void;
|
||||||
|
function resolve(hostname: string, rrtype: "SRV", callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void): void;
|
||||||
|
function resolve(hostname: string, rrtype: "TXT", callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void): void;
|
||||||
|
function resolve(
|
||||||
|
hostname: string,
|
||||||
|
rrtype: string,
|
||||||
|
callback: (err: NodeJS.ErrnoException | null, addresses: string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]) => void,
|
||||||
|
): void;
|
||||||
|
|
||||||
|
// NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
|
||||||
|
namespace resolve {
|
||||||
|
function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise<string[]>;
|
||||||
|
function __promisify__(hostname: string, rrtype: "ANY"): Promise<AnyRecord[]>;
|
||||||
|
function __promisify__(hostname: string, rrtype: "MX"): Promise<MxRecord[]>;
|
||||||
|
function __promisify__(hostname: string, rrtype: "NAPTR"): Promise<NaptrRecord[]>;
|
||||||
|
function __promisify__(hostname: string, rrtype: "SOA"): Promise<SoaRecord>;
|
||||||
|
function __promisify__(hostname: string, rrtype: "SRV"): Promise<SrvRecord[]>;
|
||||||
|
function __promisify__(hostname: string, rrtype: "TXT"): Promise<string[][]>;
|
||||||
|
function __promisify__(hostname: string, rrtype: string): Promise<string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolve4(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
|
||||||
|
function resolve4(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void): void;
|
||||||
|
function resolve4(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void): void;
|
||||||
|
|
||||||
|
// NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
|
||||||
|
namespace resolve4 {
|
||||||
|
function __promisify__(hostname: string): Promise<string[]>;
|
||||||
|
function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>;
|
||||||
|
function __promisify__(hostname: string, options?: ResolveOptions): Promise<string[] | RecordWithTtl[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolve6(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
|
||||||
|
function resolve6(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void): void;
|
||||||
|
function resolve6(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void): void;
|
||||||
|
|
||||||
|
// NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
|
||||||
|
namespace resolve6 {
|
||||||
|
function __promisify__(hostname: string): Promise<string[]>;
|
||||||
|
function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>;
|
||||||
|
function __promisify__(hostname: string, options?: ResolveOptions): Promise<string[] | RecordWithTtl[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveCname(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
|
||||||
|
namespace resolveCname {
|
||||||
|
function __promisify__(hostname: string): Promise<string[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveMx(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void): void;
|
||||||
|
namespace resolveMx {
|
||||||
|
function __promisify__(hostname: string): Promise<MxRecord[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveNaptr(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void): void;
|
||||||
|
namespace resolveNaptr {
|
||||||
|
function __promisify__(hostname: string): Promise<NaptrRecord[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveNs(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
|
||||||
|
namespace resolveNs {
|
||||||
|
function __promisify__(hostname: string): Promise<string[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolvePtr(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
|
||||||
|
namespace resolvePtr {
|
||||||
|
function __promisify__(hostname: string): Promise<string[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveSoa(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: SoaRecord) => void): void;
|
||||||
|
namespace resolveSoa {
|
||||||
|
function __promisify__(hostname: string): Promise<SoaRecord>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveSrv(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void): void;
|
||||||
|
namespace resolveSrv {
|
||||||
|
function __promisify__(hostname: string): Promise<SrvRecord[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveTxt(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void): void;
|
||||||
|
namespace resolveTxt {
|
||||||
|
function __promisify__(hostname: string): Promise<string[][]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveAny(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void): void;
|
||||||
|
namespace resolveAny {
|
||||||
|
function __promisify__(hostname: string): Promise<AnyRecord[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function reverse(ip: string, callback: (err: NodeJS.ErrnoException | null, hostnames: string[]) => void): void;
|
||||||
|
function setServers(servers: ReadonlyArray<string>): void;
|
||||||
|
function getServers(): string[];
|
||||||
|
|
||||||
|
// Error codes
|
||||||
|
const NODATA: string;
|
||||||
|
const FORMERR: string;
|
||||||
|
const SERVFAIL: string;
|
||||||
|
const NOTFOUND: string;
|
||||||
|
const NOTIMP: string;
|
||||||
|
const REFUSED: string;
|
||||||
|
const BADQUERY: string;
|
||||||
|
const BADNAME: string;
|
||||||
|
const BADFAMILY: string;
|
||||||
|
const BADRESP: string;
|
||||||
|
const CONNREFUSED: string;
|
||||||
|
const TIMEOUT: string;
|
||||||
|
const EOF: string;
|
||||||
|
const FILE: string;
|
||||||
|
const NOMEM: string;
|
||||||
|
const DESTRUCTION: string;
|
||||||
|
const BADSTR: string;
|
||||||
|
const BADFLAGS: string;
|
||||||
|
const NONAME: string;
|
||||||
|
const BADHINTS: string;
|
||||||
|
const NOTINITIALIZED: string;
|
||||||
|
const LOADIPHLPAPI: string;
|
||||||
|
const ADDRGETNETWORKPARAMS: string;
|
||||||
|
const CANCELLED: string;
|
||||||
|
|
||||||
|
class Resolver {
|
||||||
|
getServers: typeof getServers;
|
||||||
|
setServers: typeof setServers;
|
||||||
|
resolve: typeof resolve;
|
||||||
|
resolve4: typeof resolve4;
|
||||||
|
resolve6: typeof resolve6;
|
||||||
|
resolveAny: typeof resolveAny;
|
||||||
|
resolveCname: typeof resolveCname;
|
||||||
|
resolveMx: typeof resolveMx;
|
||||||
|
resolveNaptr: typeof resolveNaptr;
|
||||||
|
resolveNs: typeof resolveNs;
|
||||||
|
resolvePtr: typeof resolvePtr;
|
||||||
|
resolveSoa: typeof resolveSoa;
|
||||||
|
resolveSrv: typeof resolveSrv;
|
||||||
|
resolveTxt: typeof resolveTxt;
|
||||||
|
reverse: typeof reverse;
|
||||||
|
cancel(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace promises {
|
||||||
|
function getServers(): string[];
|
||||||
|
|
||||||
|
function lookup(hostname: string, family: number): Promise<LookupAddress>;
|
||||||
|
function lookup(hostname: string, options: LookupOneOptions): Promise<LookupAddress>;
|
||||||
|
function lookup(hostname: string, options: LookupAllOptions): Promise<LookupAddress[]>;
|
||||||
|
function lookup(hostname: string, options: LookupOptions): Promise<LookupAddress | LookupAddress[]>;
|
||||||
|
function lookup(hostname: string): Promise<LookupAddress>;
|
||||||
|
|
||||||
|
function lookupService(address: string, port: number): Promise<{ hostname: string, service: string }>;
|
||||||
|
|
||||||
|
function resolve(hostname: string): Promise<string[]>;
|
||||||
|
function resolve(hostname: string, rrtype: "A"): Promise<string[]>;
|
||||||
|
function resolve(hostname: string, rrtype: "AAAA"): Promise<string[]>;
|
||||||
|
function resolve(hostname: string, rrtype: "ANY"): Promise<AnyRecord[]>;
|
||||||
|
function resolve(hostname: string, rrtype: "CNAME"): Promise<string[]>;
|
||||||
|
function resolve(hostname: string, rrtype: "MX"): Promise<MxRecord[]>;
|
||||||
|
function resolve(hostname: string, rrtype: "NAPTR"): Promise<NaptrRecord[]>;
|
||||||
|
function resolve(hostname: string, rrtype: "NS"): Promise<string[]>;
|
||||||
|
function resolve(hostname: string, rrtype: "PTR"): Promise<string[]>;
|
||||||
|
function resolve(hostname: string, rrtype: "SOA"): Promise<SoaRecord>;
|
||||||
|
function resolve(hostname: string, rrtype: "SRV"): Promise<SrvRecord[]>;
|
||||||
|
function resolve(hostname: string, rrtype: "TXT"): Promise<string[][]>;
|
||||||
|
function resolve(hostname: string, rrtype: string): Promise<string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]>;
|
||||||
|
|
||||||
|
function resolve4(hostname: string): Promise<string[]>;
|
||||||
|
function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>;
|
||||||
|
function resolve4(hostname: string, options: ResolveOptions): Promise<string[] | RecordWithTtl[]>;
|
||||||
|
|
||||||
|
function resolve6(hostname: string): Promise<string[]>;
|
||||||
|
function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>;
|
||||||
|
function resolve6(hostname: string, options: ResolveOptions): Promise<string[] | RecordWithTtl[]>;
|
||||||
|
|
||||||
|
function resolveAny(hostname: string): Promise<AnyRecord[]>;
|
||||||
|
|
||||||
|
function resolveCname(hostname: string): Promise<string[]>;
|
||||||
|
|
||||||
|
function resolveMx(hostname: string): Promise<MxRecord[]>;
|
||||||
|
|
||||||
|
function resolveNaptr(hostname: string): Promise<NaptrRecord[]>;
|
||||||
|
|
||||||
|
function resolveNs(hostname: string): Promise<string[]>;
|
||||||
|
|
||||||
|
function resolvePtr(hostname: string): Promise<string[]>;
|
||||||
|
|
||||||
|
function resolveSoa(hostname: string): Promise<SoaRecord>;
|
||||||
|
|
||||||
|
function resolveSrv(hostname: string): Promise<SrvRecord[]>;
|
||||||
|
|
||||||
|
function resolveTxt(hostname: string): Promise<string[][]>;
|
||||||
|
|
||||||
|
function reverse(ip: string): Promise<string[]>;
|
||||||
|
|
||||||
|
function setServers(servers: ReadonlyArray<string>): void;
|
||||||
|
|
||||||
|
class Resolver {
|
||||||
|
getServers: typeof getServers;
|
||||||
|
resolve: typeof resolve;
|
||||||
|
resolve4: typeof resolve4;
|
||||||
|
resolve6: typeof resolve6;
|
||||||
|
resolveAny: typeof resolveAny;
|
||||||
|
resolveCname: typeof resolveCname;
|
||||||
|
resolveMx: typeof resolveMx;
|
||||||
|
resolveNaptr: typeof resolveNaptr;
|
||||||
|
resolveNs: typeof resolveNs;
|
||||||
|
resolvePtr: typeof resolvePtr;
|
||||||
|
resolveSoa: typeof resolveSoa;
|
||||||
|
resolveSrv: typeof resolveSrv;
|
||||||
|
resolveTxt: typeof resolveTxt;
|
||||||
|
reverse: typeof reverse;
|
||||||
|
setServers: typeof setServers;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
declare module "domain" {
|
||||||
|
import * as events from "events";
|
||||||
|
|
||||||
|
class Domain extends events.EventEmitter implements NodeJS.Domain {
|
||||||
|
run<T>(fn: (...args: any[]) => T, ...args: any[]): T;
|
||||||
|
add(emitter: events.EventEmitter | NodeJS.Timer): void;
|
||||||
|
remove(emitter: events.EventEmitter | NodeJS.Timer): void;
|
||||||
|
bind<T extends Function>(cb: T): T;
|
||||||
|
intercept<T extends Function>(cb: T): T;
|
||||||
|
members: Array<events.EventEmitter | NodeJS.Timer>;
|
||||||
|
enter(): void;
|
||||||
|
exit(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
function create(): Domain;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
declare module "events" {
|
||||||
|
class internal extends NodeJS.EventEmitter { }
|
||||||
|
|
||||||
|
interface NodeEventTarget {
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface DOMEventTarget {
|
||||||
|
addEventListener(event: string, listener: (...args: any[]) => void, opts?: { once: boolean }): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace internal {
|
||||||
|
function once(emitter: NodeEventTarget, event: string | symbol): Promise<any[]>;
|
||||||
|
function once(emitter: DOMEventTarget, event: string): Promise<any[]>;
|
||||||
|
class EventEmitter extends internal {
|
||||||
|
/** @deprecated since v4.0.0 */
|
||||||
|
static listenerCount(emitter: EventEmitter, event: string | symbol): number;
|
||||||
|
static defaultMaxListeners: number;
|
||||||
|
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
off(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
removeAllListeners(event?: string | symbol): this;
|
||||||
|
setMaxListeners(n: number): this;
|
||||||
|
getMaxListeners(): number;
|
||||||
|
listeners(event: string | symbol): Function[];
|
||||||
|
rawListeners(event: string | symbol): Function[];
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
eventNames(): Array<string | symbol>;
|
||||||
|
listenerCount(type: string | symbol): number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export = internal;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,372 @@
|
||||||
|
declare module "http" {
|
||||||
|
import * as events from "events";
|
||||||
|
import * as stream from "stream";
|
||||||
|
import { URL } from "url";
|
||||||
|
import { Socket, Server as NetServer } from "net";
|
||||||
|
|
||||||
|
// incoming headers will never contain number
|
||||||
|
interface IncomingHttpHeaders {
|
||||||
|
'accept'?: string;
|
||||||
|
'accept-language'?: string;
|
||||||
|
'accept-patch'?: string;
|
||||||
|
'accept-ranges'?: string;
|
||||||
|
'access-control-allow-credentials'?: string;
|
||||||
|
'access-control-allow-headers'?: string;
|
||||||
|
'access-control-allow-methods'?: string;
|
||||||
|
'access-control-allow-origin'?: string;
|
||||||
|
'access-control-expose-headers'?: string;
|
||||||
|
'access-control-max-age'?: string;
|
||||||
|
'age'?: string;
|
||||||
|
'allow'?: string;
|
||||||
|
'alt-svc'?: string;
|
||||||
|
'authorization'?: string;
|
||||||
|
'cache-control'?: string;
|
||||||
|
'connection'?: string;
|
||||||
|
'content-disposition'?: string;
|
||||||
|
'content-encoding'?: string;
|
||||||
|
'content-language'?: string;
|
||||||
|
'content-length'?: string;
|
||||||
|
'content-location'?: string;
|
||||||
|
'content-range'?: string;
|
||||||
|
'content-type'?: string;
|
||||||
|
'cookie'?: string;
|
||||||
|
'date'?: string;
|
||||||
|
'expect'?: string;
|
||||||
|
'expires'?: string;
|
||||||
|
'forwarded'?: string;
|
||||||
|
'from'?: string;
|
||||||
|
'host'?: string;
|
||||||
|
'if-match'?: string;
|
||||||
|
'if-modified-since'?: string;
|
||||||
|
'if-none-match'?: string;
|
||||||
|
'if-unmodified-since'?: string;
|
||||||
|
'last-modified'?: string;
|
||||||
|
'location'?: string;
|
||||||
|
'pragma'?: string;
|
||||||
|
'proxy-authenticate'?: string;
|
||||||
|
'proxy-authorization'?: string;
|
||||||
|
'public-key-pins'?: string;
|
||||||
|
'range'?: string;
|
||||||
|
'referer'?: string;
|
||||||
|
'retry-after'?: string;
|
||||||
|
'set-cookie'?: string[];
|
||||||
|
'strict-transport-security'?: string;
|
||||||
|
'tk'?: string;
|
||||||
|
'trailer'?: string;
|
||||||
|
'transfer-encoding'?: string;
|
||||||
|
'upgrade'?: string;
|
||||||
|
'user-agent'?: string;
|
||||||
|
'vary'?: string;
|
||||||
|
'via'?: string;
|
||||||
|
'warning'?: string;
|
||||||
|
'www-authenticate'?: string;
|
||||||
|
[header: string]: string | string[] | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
// outgoing headers allows numbers (as they are converted internally to strings)
|
||||||
|
interface OutgoingHttpHeaders {
|
||||||
|
[header: string]: number | string | string[] | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ClientRequestArgs {
|
||||||
|
protocol?: string | null;
|
||||||
|
host?: string | null;
|
||||||
|
hostname?: string | null;
|
||||||
|
family?: number;
|
||||||
|
port?: number | string | null;
|
||||||
|
defaultPort?: number | string;
|
||||||
|
localAddress?: string;
|
||||||
|
socketPath?: string;
|
||||||
|
method?: string;
|
||||||
|
path?: string | null;
|
||||||
|
headers?: OutgoingHttpHeaders;
|
||||||
|
auth?: string | null;
|
||||||
|
agent?: Agent | boolean;
|
||||||
|
_defaultAgent?: Agent;
|
||||||
|
timeout?: number;
|
||||||
|
setHost?: boolean;
|
||||||
|
// https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278
|
||||||
|
createConnection?: (options: ClientRequestArgs, oncreate: (err: Error, socket: Socket) => void) => Socket;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ServerOptions {
|
||||||
|
IncomingMessage?: typeof IncomingMessage;
|
||||||
|
ServerResponse?: typeof ServerResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
type RequestListener = (req: IncomingMessage, res: ServerResponse) => void;
|
||||||
|
|
||||||
|
class Server extends NetServer {
|
||||||
|
constructor(requestListener?: RequestListener);
|
||||||
|
constructor(options: ServerOptions, requestListener?: RequestListener);
|
||||||
|
|
||||||
|
setTimeout(msecs?: number, callback?: () => void): this;
|
||||||
|
setTimeout(callback: () => void): this;
|
||||||
|
/**
|
||||||
|
* Limits maximum incoming headers count. If set to 0, no limit will be applied.
|
||||||
|
* @default 2000
|
||||||
|
* {@link https://nodejs.org/api/http.html#http_server_maxheaderscount}
|
||||||
|
*/
|
||||||
|
maxHeadersCount: number | null;
|
||||||
|
timeout: number;
|
||||||
|
/**
|
||||||
|
* Limit the amount of time the parser will wait to receive the complete HTTP headers.
|
||||||
|
* @default 40000
|
||||||
|
* {@link https://nodejs.org/api/http.html#http_server_headerstimeout}
|
||||||
|
*/
|
||||||
|
headersTimeout: number;
|
||||||
|
keepAliveTimeout: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js
|
||||||
|
class OutgoingMessage extends stream.Writable {
|
||||||
|
upgrading: boolean;
|
||||||
|
chunkedEncoding: boolean;
|
||||||
|
shouldKeepAlive: boolean;
|
||||||
|
useChunkedEncodingByDefault: boolean;
|
||||||
|
sendDate: boolean;
|
||||||
|
finished: boolean;
|
||||||
|
headersSent: boolean;
|
||||||
|
connection: Socket;
|
||||||
|
|
||||||
|
constructor();
|
||||||
|
|
||||||
|
setTimeout(msecs: number, callback?: () => void): this;
|
||||||
|
setHeader(name: string, value: number | string | string[]): void;
|
||||||
|
getHeader(name: string): number | string | string[] | undefined;
|
||||||
|
getHeaders(): OutgoingHttpHeaders;
|
||||||
|
getHeaderNames(): string[];
|
||||||
|
hasHeader(name: string): boolean;
|
||||||
|
removeHeader(name: string): void;
|
||||||
|
addTrailers(headers: OutgoingHttpHeaders | Array<[string, string]>): void;
|
||||||
|
flushHeaders(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/nodejs/node/blob/master/lib/_http_server.js#L108-L256
|
||||||
|
class ServerResponse extends OutgoingMessage {
|
||||||
|
statusCode: number;
|
||||||
|
statusMessage: string;
|
||||||
|
writableFinished: boolean;
|
||||||
|
|
||||||
|
constructor(req: IncomingMessage);
|
||||||
|
|
||||||
|
assignSocket(socket: Socket): void;
|
||||||
|
detachSocket(socket: Socket): void;
|
||||||
|
// https://github.com/nodejs/node/blob/master/test/parallel/test-http-write-callbacks.js#L53
|
||||||
|
// no args in writeContinue callback
|
||||||
|
writeContinue(callback?: () => void): void;
|
||||||
|
writeHead(statusCode: number, reasonPhrase?: string, headers?: OutgoingHttpHeaders): this;
|
||||||
|
writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this;
|
||||||
|
writeProcessing(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface InformationEvent {
|
||||||
|
statusCode: number;
|
||||||
|
statusMessage: string;
|
||||||
|
httpVersion: string;
|
||||||
|
httpVersionMajor: number;
|
||||||
|
httpVersionMinor: number;
|
||||||
|
headers: IncomingHttpHeaders;
|
||||||
|
rawHeaders: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/nodejs/node/blob/master/lib/_http_client.js#L77
|
||||||
|
class ClientRequest extends OutgoingMessage {
|
||||||
|
connection: Socket;
|
||||||
|
socket: Socket;
|
||||||
|
aborted: number;
|
||||||
|
|
||||||
|
constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void);
|
||||||
|
|
||||||
|
readonly path: string;
|
||||||
|
abort(): void;
|
||||||
|
onSocket(socket: Socket): void;
|
||||||
|
setTimeout(timeout: number, callback?: () => void): this;
|
||||||
|
setNoDelay(noDelay?: boolean): void;
|
||||||
|
setSocketKeepAlive(enable?: boolean, initialDelay?: number): void;
|
||||||
|
|
||||||
|
addListener(event: 'abort', listener: () => void): this;
|
||||||
|
addListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
|
||||||
|
addListener(event: 'continue', listener: () => void): this;
|
||||||
|
addListener(event: 'information', listener: (info: InformationEvent) => void): this;
|
||||||
|
addListener(event: 'response', listener: (response: IncomingMessage) => void): this;
|
||||||
|
addListener(event: 'socket', listener: (socket: Socket) => void): this;
|
||||||
|
addListener(event: 'timeout', listener: () => void): this;
|
||||||
|
addListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
|
||||||
|
addListener(event: 'close', listener: () => void): this;
|
||||||
|
addListener(event: 'drain', listener: () => void): this;
|
||||||
|
addListener(event: 'error', listener: (err: Error) => void): this;
|
||||||
|
addListener(event: 'finish', listener: () => void): this;
|
||||||
|
addListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
|
||||||
|
addListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
on(event: 'abort', listener: () => void): this;
|
||||||
|
on(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
|
||||||
|
on(event: 'continue', listener: () => void): this;
|
||||||
|
on(event: 'information', listener: (info: InformationEvent) => void): this;
|
||||||
|
on(event: 'response', listener: (response: IncomingMessage) => void): this;
|
||||||
|
on(event: 'socket', listener: (socket: Socket) => void): this;
|
||||||
|
on(event: 'timeout', listener: () => void): this;
|
||||||
|
on(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
|
||||||
|
on(event: 'close', listener: () => void): this;
|
||||||
|
on(event: 'drain', listener: () => void): this;
|
||||||
|
on(event: 'error', listener: (err: Error) => void): this;
|
||||||
|
on(event: 'finish', listener: () => void): this;
|
||||||
|
on(event: 'pipe', listener: (src: stream.Readable) => void): this;
|
||||||
|
on(event: 'unpipe', listener: (src: stream.Readable) => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: 'abort', listener: () => void): this;
|
||||||
|
once(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
|
||||||
|
once(event: 'continue', listener: () => void): this;
|
||||||
|
once(event: 'information', listener: (info: InformationEvent) => void): this;
|
||||||
|
once(event: 'response', listener: (response: IncomingMessage) => void): this;
|
||||||
|
once(event: 'socket', listener: (socket: Socket) => void): this;
|
||||||
|
once(event: 'timeout', listener: () => void): this;
|
||||||
|
once(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
|
||||||
|
once(event: 'close', listener: () => void): this;
|
||||||
|
once(event: 'drain', listener: () => void): this;
|
||||||
|
once(event: 'error', listener: (err: Error) => void): this;
|
||||||
|
once(event: 'finish', listener: () => void): this;
|
||||||
|
once(event: 'pipe', listener: (src: stream.Readable) => void): this;
|
||||||
|
once(event: 'unpipe', listener: (src: stream.Readable) => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: 'abort', listener: () => void): this;
|
||||||
|
prependListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
|
||||||
|
prependListener(event: 'continue', listener: () => void): this;
|
||||||
|
prependListener(event: 'information', listener: (info: InformationEvent) => void): this;
|
||||||
|
prependListener(event: 'response', listener: (response: IncomingMessage) => void): this;
|
||||||
|
prependListener(event: 'socket', listener: (socket: Socket) => void): this;
|
||||||
|
prependListener(event: 'timeout', listener: () => void): this;
|
||||||
|
prependListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
|
||||||
|
prependListener(event: 'close', listener: () => void): this;
|
||||||
|
prependListener(event: 'drain', listener: () => void): this;
|
||||||
|
prependListener(event: 'error', listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: 'finish', listener: () => void): this;
|
||||||
|
prependListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
|
||||||
|
prependListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: 'abort', listener: () => void): this;
|
||||||
|
prependOnceListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
|
||||||
|
prependOnceListener(event: 'continue', listener: () => void): this;
|
||||||
|
prependOnceListener(event: 'information', listener: (info: InformationEvent) => void): this;
|
||||||
|
prependOnceListener(event: 'response', listener: (response: IncomingMessage) => void): this;
|
||||||
|
prependOnceListener(event: 'socket', listener: (socket: Socket) => void): this;
|
||||||
|
prependOnceListener(event: 'timeout', listener: () => void): this;
|
||||||
|
prependOnceListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
|
||||||
|
prependOnceListener(event: 'close', listener: () => void): this;
|
||||||
|
prependOnceListener(event: 'drain', listener: () => void): this;
|
||||||
|
prependOnceListener(event: 'error', listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: 'finish', listener: () => void): this;
|
||||||
|
prependOnceListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
|
||||||
|
prependOnceListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
class IncomingMessage extends stream.Readable {
|
||||||
|
constructor(socket: Socket);
|
||||||
|
|
||||||
|
aborted: boolean;
|
||||||
|
httpVersion: string;
|
||||||
|
httpVersionMajor: number;
|
||||||
|
httpVersionMinor: number;
|
||||||
|
complete: boolean;
|
||||||
|
connection: Socket;
|
||||||
|
headers: IncomingHttpHeaders;
|
||||||
|
rawHeaders: string[];
|
||||||
|
trailers: { [key: string]: string | undefined };
|
||||||
|
rawTrailers: string[];
|
||||||
|
setTimeout(msecs: number, callback?: () => void): this;
|
||||||
|
/**
|
||||||
|
* Only valid for request obtained from http.Server.
|
||||||
|
*/
|
||||||
|
method?: string;
|
||||||
|
/**
|
||||||
|
* Only valid for request obtained from http.Server.
|
||||||
|
*/
|
||||||
|
url?: string;
|
||||||
|
/**
|
||||||
|
* Only valid for response obtained from http.ClientRequest.
|
||||||
|
*/
|
||||||
|
statusCode?: number;
|
||||||
|
/**
|
||||||
|
* Only valid for response obtained from http.ClientRequest.
|
||||||
|
*/
|
||||||
|
statusMessage?: string;
|
||||||
|
socket: Socket;
|
||||||
|
destroy(error?: Error): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AgentOptions {
|
||||||
|
/**
|
||||||
|
* Keep sockets around in a pool to be used by other requests in the future. Default = false
|
||||||
|
*/
|
||||||
|
keepAlive?: boolean;
|
||||||
|
/**
|
||||||
|
* When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000.
|
||||||
|
* Only relevant if keepAlive is set to true.
|
||||||
|
*/
|
||||||
|
keepAliveMsecs?: number;
|
||||||
|
/**
|
||||||
|
* Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity
|
||||||
|
*/
|
||||||
|
maxSockets?: number;
|
||||||
|
/**
|
||||||
|
* Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256.
|
||||||
|
*/
|
||||||
|
maxFreeSockets?: number;
|
||||||
|
/**
|
||||||
|
* Socket timeout in milliseconds. This will set the timeout after the socket is connected.
|
||||||
|
*/
|
||||||
|
timeout?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Agent {
|
||||||
|
maxFreeSockets: number;
|
||||||
|
maxSockets: number;
|
||||||
|
readonly sockets: {
|
||||||
|
readonly [key: string]: Socket[];
|
||||||
|
};
|
||||||
|
readonly requests: {
|
||||||
|
readonly [key: string]: IncomingMessage[];
|
||||||
|
};
|
||||||
|
|
||||||
|
constructor(opts?: AgentOptions);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy any sockets that are currently in use by the agent.
|
||||||
|
* It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled,
|
||||||
|
* then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise,
|
||||||
|
* sockets may hang open for quite a long time before the server terminates them.
|
||||||
|
*/
|
||||||
|
destroy(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const METHODS: string[];
|
||||||
|
|
||||||
|
const STATUS_CODES: {
|
||||||
|
[errorCode: number]: string | undefined;
|
||||||
|
[errorCode: string]: string | undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
function createServer(requestListener?: RequestListener): Server;
|
||||||
|
function createServer(options: ServerOptions, requestListener?: RequestListener): Server;
|
||||||
|
|
||||||
|
// although RequestOptions are passed as ClientRequestArgs to ClientRequest directly,
|
||||||
|
// create interface RequestOptions would make the naming more clear to developers
|
||||||
|
interface RequestOptions extends ClientRequestArgs { }
|
||||||
|
function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest;
|
||||||
|
function request(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
|
||||||
|
function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest;
|
||||||
|
function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
|
||||||
|
let globalAgent: Agent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read-only property specifying the maximum allowed size of HTTP headers in bytes.
|
||||||
|
* Defaults to 8KB. Configurable using the [`--max-http-header-size`][] CLI option.
|
||||||
|
*/
|
||||||
|
const maxHeaderSize: number;
|
||||||
|
}
|
|
@ -0,0 +1,947 @@
|
||||||
|
declare module "http2" {
|
||||||
|
import * as events from "events";
|
||||||
|
import * as fs from "fs";
|
||||||
|
import * as net from "net";
|
||||||
|
import * as stream from "stream";
|
||||||
|
import * as tls from "tls";
|
||||||
|
import * as url from "url";
|
||||||
|
|
||||||
|
import { IncomingHttpHeaders as Http1IncomingHttpHeaders, OutgoingHttpHeaders, IncomingMessage, ServerResponse } from "http";
|
||||||
|
export { OutgoingHttpHeaders } from "http";
|
||||||
|
|
||||||
|
export interface IncomingHttpStatusHeader {
|
||||||
|
":status"?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IncomingHttpHeaders extends Http1IncomingHttpHeaders {
|
||||||
|
":path"?: string;
|
||||||
|
":method"?: string;
|
||||||
|
":authority"?: string;
|
||||||
|
":scheme"?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Http2Stream
|
||||||
|
|
||||||
|
export interface StreamPriorityOptions {
|
||||||
|
exclusive?: boolean;
|
||||||
|
parent?: number;
|
||||||
|
weight?: number;
|
||||||
|
silent?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface StreamState {
|
||||||
|
localWindowSize?: number;
|
||||||
|
state?: number;
|
||||||
|
localClose?: number;
|
||||||
|
remoteClose?: number;
|
||||||
|
sumDependencyWeight?: number;
|
||||||
|
weight?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ServerStreamResponseOptions {
|
||||||
|
endStream?: boolean;
|
||||||
|
waitForTrailers?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface StatOptions {
|
||||||
|
offset: number;
|
||||||
|
length: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ServerStreamFileResponseOptions {
|
||||||
|
statCheck?(stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions): void | boolean;
|
||||||
|
waitForTrailers?: boolean;
|
||||||
|
offset?: number;
|
||||||
|
length?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions {
|
||||||
|
onError?(err: NodeJS.ErrnoException): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Http2Stream extends stream.Duplex {
|
||||||
|
readonly aborted: boolean;
|
||||||
|
readonly bufferSize: number;
|
||||||
|
readonly closed: boolean;
|
||||||
|
readonly destroyed: boolean;
|
||||||
|
/**
|
||||||
|
* Set the true if the END_STREAM flag was set in the request or response HEADERS frame received,
|
||||||
|
* indicating that no additional data should be received and the readable side of the Http2Stream will be closed.
|
||||||
|
*/
|
||||||
|
readonly endAfterHeaders: boolean;
|
||||||
|
readonly id?: number;
|
||||||
|
readonly pending: boolean;
|
||||||
|
readonly rstCode: number;
|
||||||
|
readonly sentHeaders: OutgoingHttpHeaders;
|
||||||
|
readonly sentInfoHeaders?: OutgoingHttpHeaders[];
|
||||||
|
readonly sentTrailers?: OutgoingHttpHeaders;
|
||||||
|
readonly session: Http2Session;
|
||||||
|
readonly state: StreamState;
|
||||||
|
|
||||||
|
close(code?: number, callback?: () => void): void;
|
||||||
|
priority(options: StreamPriorityOptions): void;
|
||||||
|
setTimeout(msecs: number, callback?: () => void): void;
|
||||||
|
sendTrailers(headers: OutgoingHttpHeaders): void;
|
||||||
|
|
||||||
|
addListener(event: "aborted", listener: () => void): this;
|
||||||
|
addListener(event: "close", listener: () => void): this;
|
||||||
|
addListener(event: "data", listener: (chunk: Buffer | string) => void): this;
|
||||||
|
addListener(event: "drain", listener: () => void): this;
|
||||||
|
addListener(event: "end", listener: () => void): this;
|
||||||
|
addListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
addListener(event: "finish", listener: () => void): this;
|
||||||
|
addListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
|
||||||
|
addListener(event: "pipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
addListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
addListener(event: "streamClosed", listener: (code: number) => void): this;
|
||||||
|
addListener(event: "timeout", listener: () => void): this;
|
||||||
|
addListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
addListener(event: "wantTrailers", listener: () => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
emit(event: "aborted"): boolean;
|
||||||
|
emit(event: "close"): boolean;
|
||||||
|
emit(event: "data", chunk: Buffer | string): boolean;
|
||||||
|
emit(event: "drain"): boolean;
|
||||||
|
emit(event: "end"): boolean;
|
||||||
|
emit(event: "error", err: Error): boolean;
|
||||||
|
emit(event: "finish"): boolean;
|
||||||
|
emit(event: "frameError", frameType: number, errorCode: number): boolean;
|
||||||
|
emit(event: "pipe", src: stream.Readable): boolean;
|
||||||
|
emit(event: "unpipe", src: stream.Readable): boolean;
|
||||||
|
emit(event: "streamClosed", code: number): boolean;
|
||||||
|
emit(event: "timeout"): boolean;
|
||||||
|
emit(event: "trailers", trailers: IncomingHttpHeaders, flags: number): boolean;
|
||||||
|
emit(event: "wantTrailers"): boolean;
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
|
||||||
|
on(event: "aborted", listener: () => void): this;
|
||||||
|
on(event: "close", listener: () => void): this;
|
||||||
|
on(event: "data", listener: (chunk: Buffer | string) => void): this;
|
||||||
|
on(event: "drain", listener: () => void): this;
|
||||||
|
on(event: "end", listener: () => void): this;
|
||||||
|
on(event: "error", listener: (err: Error) => void): this;
|
||||||
|
on(event: "finish", listener: () => void): this;
|
||||||
|
on(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
|
||||||
|
on(event: "pipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
on(event: "unpipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
on(event: "streamClosed", listener: (code: number) => void): this;
|
||||||
|
on(event: "timeout", listener: () => void): this;
|
||||||
|
on(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
on(event: "wantTrailers", listener: () => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: "aborted", listener: () => void): this;
|
||||||
|
once(event: "close", listener: () => void): this;
|
||||||
|
once(event: "data", listener: (chunk: Buffer | string) => void): this;
|
||||||
|
once(event: "drain", listener: () => void): this;
|
||||||
|
once(event: "end", listener: () => void): this;
|
||||||
|
once(event: "error", listener: (err: Error) => void): this;
|
||||||
|
once(event: "finish", listener: () => void): this;
|
||||||
|
once(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
|
||||||
|
once(event: "pipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
once(event: "unpipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
once(event: "streamClosed", listener: (code: number) => void): this;
|
||||||
|
once(event: "timeout", listener: () => void): this;
|
||||||
|
once(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
once(event: "wantTrailers", listener: () => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: "aborted", listener: () => void): this;
|
||||||
|
prependListener(event: "close", listener: () => void): this;
|
||||||
|
prependListener(event: "data", listener: (chunk: Buffer | string) => void): this;
|
||||||
|
prependListener(event: "drain", listener: () => void): this;
|
||||||
|
prependListener(event: "end", listener: () => void): this;
|
||||||
|
prependListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: "finish", listener: () => void): this;
|
||||||
|
prependListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
|
||||||
|
prependListener(event: "pipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
prependListener(event: "streamClosed", listener: (code: number) => void): this;
|
||||||
|
prependListener(event: "timeout", listener: () => void): this;
|
||||||
|
prependListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
prependListener(event: "wantTrailers", listener: () => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: "aborted", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "close", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this;
|
||||||
|
prependOnceListener(event: "drain", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "end", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: "finish", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
|
||||||
|
prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
prependOnceListener(event: "streamClosed", listener: (code: number) => void): this;
|
||||||
|
prependOnceListener(event: "timeout", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
prependOnceListener(event: "wantTrailers", listener: () => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ClientHttp2Stream extends Http2Stream {
|
||||||
|
addListener(event: "continue", listener: () => {}): this;
|
||||||
|
addListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
addListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
addListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
emit(event: "continue"): boolean;
|
||||||
|
emit(event: "headers", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
|
||||||
|
emit(event: "push", headers: IncomingHttpHeaders, flags: number): boolean;
|
||||||
|
emit(event: "response", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
|
||||||
|
on(event: "continue", listener: () => {}): this;
|
||||||
|
on(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
on(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
on(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: "continue", listener: () => {}): this;
|
||||||
|
once(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
once(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
once(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: "continue", listener: () => {}): this;
|
||||||
|
prependListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
prependListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
prependListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: "continue", listener: () => {}): this;
|
||||||
|
prependOnceListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
prependOnceListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
prependOnceListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ServerHttp2Stream extends Http2Stream {
|
||||||
|
readonly headersSent: boolean;
|
||||||
|
readonly pushAllowed: boolean;
|
||||||
|
additionalHeaders(headers: OutgoingHttpHeaders): void;
|
||||||
|
pushStream(headers: OutgoingHttpHeaders, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void;
|
||||||
|
pushStream(headers: OutgoingHttpHeaders, options?: StreamPriorityOptions, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void;
|
||||||
|
respond(headers?: OutgoingHttpHeaders, options?: ServerStreamResponseOptions): void;
|
||||||
|
respondWithFD(fd: number | fs.promises.FileHandle, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptions): void;
|
||||||
|
respondWithFile(path: string, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptionsWithError): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Http2Session
|
||||||
|
|
||||||
|
export interface Settings {
|
||||||
|
headerTableSize?: number;
|
||||||
|
enablePush?: boolean;
|
||||||
|
initialWindowSize?: number;
|
||||||
|
maxFrameSize?: number;
|
||||||
|
maxConcurrentStreams?: number;
|
||||||
|
maxHeaderListSize?: number;
|
||||||
|
enableConnectProtocol?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ClientSessionRequestOptions {
|
||||||
|
endStream?: boolean;
|
||||||
|
exclusive?: boolean;
|
||||||
|
parent?: number;
|
||||||
|
weight?: number;
|
||||||
|
waitForTrailers?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SessionState {
|
||||||
|
effectiveLocalWindowSize?: number;
|
||||||
|
effectiveRecvDataLength?: number;
|
||||||
|
nextStreamID?: number;
|
||||||
|
localWindowSize?: number;
|
||||||
|
lastProcStreamID?: number;
|
||||||
|
remoteWindowSize?: number;
|
||||||
|
outboundQueueSize?: number;
|
||||||
|
deflateDynamicTableSize?: number;
|
||||||
|
inflateDynamicTableSize?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Http2Session extends events.EventEmitter {
|
||||||
|
readonly alpnProtocol?: string;
|
||||||
|
readonly closed: boolean;
|
||||||
|
readonly connecting: boolean;
|
||||||
|
readonly destroyed: boolean;
|
||||||
|
readonly encrypted?: boolean;
|
||||||
|
readonly localSettings: Settings;
|
||||||
|
readonly originSet?: string[];
|
||||||
|
readonly pendingSettingsAck: boolean;
|
||||||
|
readonly remoteSettings: Settings;
|
||||||
|
readonly socket: net.Socket | tls.TLSSocket;
|
||||||
|
readonly state: SessionState;
|
||||||
|
readonly type: number;
|
||||||
|
|
||||||
|
close(callback?: () => void): void;
|
||||||
|
destroy(error?: Error, code?: number): void;
|
||||||
|
goaway(code?: number, lastStreamID?: number, opaqueData?: NodeJS.ArrayBufferView): void;
|
||||||
|
ping(callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean;
|
||||||
|
ping(payload: NodeJS.ArrayBufferView, callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean;
|
||||||
|
ref(): void;
|
||||||
|
setTimeout(msecs: number, callback?: () => void): void;
|
||||||
|
settings(settings: Settings): void;
|
||||||
|
unref(): void;
|
||||||
|
|
||||||
|
addListener(event: "close", listener: () => void): this;
|
||||||
|
addListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
addListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
|
||||||
|
addListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
|
||||||
|
addListener(event: "localSettings", listener: (settings: Settings) => void): this;
|
||||||
|
addListener(event: "ping", listener: () => void): this;
|
||||||
|
addListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
|
||||||
|
addListener(event: "timeout", listener: () => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
emit(event: "close"): boolean;
|
||||||
|
emit(event: "error", err: Error): boolean;
|
||||||
|
emit(event: "frameError", frameType: number, errorCode: number, streamID: number): boolean;
|
||||||
|
emit(event: "goaway", errorCode: number, lastStreamID: number, opaqueData: Buffer): boolean;
|
||||||
|
emit(event: "localSettings", settings: Settings): boolean;
|
||||||
|
emit(event: "ping"): boolean;
|
||||||
|
emit(event: "remoteSettings", settings: Settings): boolean;
|
||||||
|
emit(event: "timeout"): boolean;
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
|
||||||
|
on(event: "close", listener: () => void): this;
|
||||||
|
on(event: "error", listener: (err: Error) => void): this;
|
||||||
|
on(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
|
||||||
|
on(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
|
||||||
|
on(event: "localSettings", listener: (settings: Settings) => void): this;
|
||||||
|
on(event: "ping", listener: () => void): this;
|
||||||
|
on(event: "remoteSettings", listener: (settings: Settings) => void): this;
|
||||||
|
on(event: "timeout", listener: () => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: "close", listener: () => void): this;
|
||||||
|
once(event: "error", listener: (err: Error) => void): this;
|
||||||
|
once(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
|
||||||
|
once(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
|
||||||
|
once(event: "localSettings", listener: (settings: Settings) => void): this;
|
||||||
|
once(event: "ping", listener: () => void): this;
|
||||||
|
once(event: "remoteSettings", listener: (settings: Settings) => void): this;
|
||||||
|
once(event: "timeout", listener: () => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: "close", listener: () => void): this;
|
||||||
|
prependListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
|
||||||
|
prependListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
|
||||||
|
prependListener(event: "localSettings", listener: (settings: Settings) => void): this;
|
||||||
|
prependListener(event: "ping", listener: () => void): this;
|
||||||
|
prependListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
|
||||||
|
prependListener(event: "timeout", listener: () => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: "close", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
|
||||||
|
prependOnceListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
|
||||||
|
prependOnceListener(event: "localSettings", listener: (settings: Settings) => void): this;
|
||||||
|
prependOnceListener(event: "ping", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
|
||||||
|
prependOnceListener(event: "timeout", listener: () => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ClientHttp2Session extends Http2Session {
|
||||||
|
request(headers?: OutgoingHttpHeaders, options?: ClientSessionRequestOptions): ClientHttp2Stream;
|
||||||
|
|
||||||
|
addListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
|
||||||
|
addListener(event: "origin", listener: (origins: string[]) => void): this;
|
||||||
|
addListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
|
||||||
|
addListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
emit(event: "altsvc", alt: string, origin: string, stream: number): boolean;
|
||||||
|
emit(event: "origin", origins: string[]): boolean;
|
||||||
|
emit(event: "connect", session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket): boolean;
|
||||||
|
emit(event: "stream", stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
|
||||||
|
on(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
|
||||||
|
on(event: "origin", listener: (origins: string[]) => void): this;
|
||||||
|
on(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
|
||||||
|
on(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
|
||||||
|
once(event: "origin", listener: (origins: string[]) => void): this;
|
||||||
|
once(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
|
||||||
|
once(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
|
||||||
|
prependListener(event: "origin", listener: (origins: string[]) => void): this;
|
||||||
|
prependListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
|
||||||
|
prependListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
|
||||||
|
prependOnceListener(event: "origin", listener: (origins: string[]) => void): this;
|
||||||
|
prependOnceListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
|
||||||
|
prependOnceListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AlternativeServiceOptions {
|
||||||
|
origin: number | string | url.URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ServerHttp2Session extends Http2Session {
|
||||||
|
readonly server: Http2Server | Http2SecureServer;
|
||||||
|
|
||||||
|
altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void;
|
||||||
|
origin(...args: Array<string | url.URL | { origin: string }>): void;
|
||||||
|
|
||||||
|
addListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
|
||||||
|
addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
emit(event: "connect", session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket): boolean;
|
||||||
|
emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
|
||||||
|
on(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
|
||||||
|
on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
|
||||||
|
once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
|
||||||
|
prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
|
||||||
|
prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Http2Server
|
||||||
|
|
||||||
|
export interface SessionOptions {
|
||||||
|
maxDeflateDynamicTableSize?: number;
|
||||||
|
maxSessionMemory?: number;
|
||||||
|
maxHeaderListPairs?: number;
|
||||||
|
maxOutstandingPings?: number;
|
||||||
|
maxSendHeaderBlockLength?: number;
|
||||||
|
paddingStrategy?: number;
|
||||||
|
peerMaxConcurrentStreams?: number;
|
||||||
|
settings?: Settings;
|
||||||
|
|
||||||
|
selectPadding?(frameLen: number, maxFrameLen: number): number;
|
||||||
|
createConnection?(authority: url.URL, option: SessionOptions): stream.Duplex;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ClientSessionOptions extends SessionOptions {
|
||||||
|
maxReservedRemoteStreams?: number;
|
||||||
|
createConnection?: (authority: url.URL, option: SessionOptions) => stream.Duplex;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ServerSessionOptions extends SessionOptions {
|
||||||
|
Http1IncomingMessage?: typeof IncomingMessage;
|
||||||
|
Http1ServerResponse?: typeof ServerResponse;
|
||||||
|
Http2ServerRequest?: typeof Http2ServerRequest;
|
||||||
|
Http2ServerResponse?: typeof Http2ServerResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions { }
|
||||||
|
export interface SecureServerSessionOptions extends ServerSessionOptions, tls.TlsOptions { }
|
||||||
|
|
||||||
|
export interface ServerOptions extends ServerSessionOptions { }
|
||||||
|
|
||||||
|
export interface SecureServerOptions extends SecureServerSessionOptions {
|
||||||
|
allowHTTP1?: boolean;
|
||||||
|
origins?: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Http2Server extends net.Server {
|
||||||
|
addListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
addListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
addListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
|
||||||
|
addListener(event: "sessionError", listener: (err: Error) => void): this;
|
||||||
|
addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
addListener(event: "timeout", listener: () => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
|
||||||
|
emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
|
||||||
|
emit(event: "session", session: ServerHttp2Session): boolean;
|
||||||
|
emit(event: "sessionError", err: Error): boolean;
|
||||||
|
emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
|
||||||
|
emit(event: "timeout"): boolean;
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
|
||||||
|
on(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
on(event: "session", listener: (session: ServerHttp2Session) => void): this;
|
||||||
|
on(event: "sessionError", listener: (err: Error) => void): this;
|
||||||
|
on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
on(event: "timeout", listener: () => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
once(event: "session", listener: (session: ServerHttp2Session) => void): this;
|
||||||
|
once(event: "sessionError", listener: (err: Error) => void): this;
|
||||||
|
once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
once(event: "timeout", listener: () => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
prependListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
|
||||||
|
prependListener(event: "sessionError", listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
prependListener(event: "timeout", listener: () => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
prependOnceListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
|
||||||
|
prependOnceListener(event: "sessionError", listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
prependOnceListener(event: "timeout", listener: () => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
setTimeout(msec?: number, callback?: () => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Http2SecureServer extends tls.Server {
|
||||||
|
addListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
addListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
addListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
|
||||||
|
addListener(event: "sessionError", listener: (err: Error) => void): this;
|
||||||
|
addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
addListener(event: "timeout", listener: () => void): this;
|
||||||
|
addListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
|
||||||
|
emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
|
||||||
|
emit(event: "session", session: ServerHttp2Session): boolean;
|
||||||
|
emit(event: "sessionError", err: Error): boolean;
|
||||||
|
emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
|
||||||
|
emit(event: "timeout"): boolean;
|
||||||
|
emit(event: "unknownProtocol", socket: tls.TLSSocket): boolean;
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
|
||||||
|
on(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
on(event: "session", listener: (session: ServerHttp2Session) => void): this;
|
||||||
|
on(event: "sessionError", listener: (err: Error) => void): this;
|
||||||
|
on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
on(event: "timeout", listener: () => void): this;
|
||||||
|
on(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
once(event: "session", listener: (session: ServerHttp2Session) => void): this;
|
||||||
|
once(event: "sessionError", listener: (err: Error) => void): this;
|
||||||
|
once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
once(event: "timeout", listener: () => void): this;
|
||||||
|
once(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
prependListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
|
||||||
|
prependListener(event: "sessionError", listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
prependListener(event: "timeout", listener: () => void): this;
|
||||||
|
prependListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
prependOnceListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
|
||||||
|
prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
|
||||||
|
prependOnceListener(event: "sessionError", listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
|
||||||
|
prependOnceListener(event: "timeout", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
setTimeout(msec?: number, callback?: () => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Http2ServerRequest extends stream.Readable {
|
||||||
|
constructor(stream: ServerHttp2Stream, headers: IncomingHttpHeaders, options: stream.ReadableOptions, rawHeaders: string[]);
|
||||||
|
|
||||||
|
readonly aborted: boolean;
|
||||||
|
readonly authority: string;
|
||||||
|
readonly headers: IncomingHttpHeaders;
|
||||||
|
readonly httpVersion: string;
|
||||||
|
readonly method: string;
|
||||||
|
readonly rawHeaders: string[];
|
||||||
|
readonly rawTrailers: string[];
|
||||||
|
readonly scheme: string;
|
||||||
|
readonly socket: net.Socket | tls.TLSSocket;
|
||||||
|
readonly stream: ServerHttp2Stream;
|
||||||
|
readonly trailers: IncomingHttpHeaders;
|
||||||
|
readonly url: string;
|
||||||
|
|
||||||
|
setTimeout(msecs: number, callback?: () => void): void;
|
||||||
|
read(size?: number): Buffer | string | null;
|
||||||
|
|
||||||
|
addListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
|
||||||
|
addListener(event: "close", listener: () => void): this;
|
||||||
|
addListener(event: "data", listener: (chunk: Buffer | string) => void): this;
|
||||||
|
addListener(event: "end", listener: () => void): this;
|
||||||
|
addListener(event: "readable", listener: () => void): this;
|
||||||
|
addListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
emit(event: "aborted", hadError: boolean, code: number): boolean;
|
||||||
|
emit(event: "close"): boolean;
|
||||||
|
emit(event: "data", chunk: Buffer | string): boolean;
|
||||||
|
emit(event: "end"): boolean;
|
||||||
|
emit(event: "readable"): boolean;
|
||||||
|
emit(event: "error", err: Error): boolean;
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
|
||||||
|
on(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
|
||||||
|
on(event: "close", listener: () => void): this;
|
||||||
|
on(event: "data", listener: (chunk: Buffer | string) => void): this;
|
||||||
|
on(event: "end", listener: () => void): this;
|
||||||
|
on(event: "readable", listener: () => void): this;
|
||||||
|
on(event: "error", listener: (err: Error) => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
|
||||||
|
once(event: "close", listener: () => void): this;
|
||||||
|
once(event: "data", listener: (chunk: Buffer | string) => void): this;
|
||||||
|
once(event: "end", listener: () => void): this;
|
||||||
|
once(event: "readable", listener: () => void): this;
|
||||||
|
once(event: "error", listener: (err: Error) => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
|
||||||
|
prependListener(event: "close", listener: () => void): this;
|
||||||
|
prependListener(event: "data", listener: (chunk: Buffer | string) => void): this;
|
||||||
|
prependListener(event: "end", listener: () => void): this;
|
||||||
|
prependListener(event: "readable", listener: () => void): this;
|
||||||
|
prependListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
|
||||||
|
prependOnceListener(event: "close", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this;
|
||||||
|
prependOnceListener(event: "end", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "readable", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Http2ServerResponse extends stream.Stream {
|
||||||
|
constructor(stream: ServerHttp2Stream);
|
||||||
|
|
||||||
|
readonly connection: net.Socket | tls.TLSSocket;
|
||||||
|
readonly finished: boolean;
|
||||||
|
readonly headersSent: boolean;
|
||||||
|
readonly socket: net.Socket | tls.TLSSocket;
|
||||||
|
readonly stream: ServerHttp2Stream;
|
||||||
|
sendDate: boolean;
|
||||||
|
statusCode: number;
|
||||||
|
statusMessage: '';
|
||||||
|
addTrailers(trailers: OutgoingHttpHeaders): void;
|
||||||
|
end(callback?: () => void): void;
|
||||||
|
end(data: string | Uint8Array, callback?: () => void): void;
|
||||||
|
end(data: string | Uint8Array, encoding: string, callback?: () => void): void;
|
||||||
|
getHeader(name: string): string;
|
||||||
|
getHeaderNames(): string[];
|
||||||
|
getHeaders(): OutgoingHttpHeaders;
|
||||||
|
hasHeader(name: string): boolean;
|
||||||
|
removeHeader(name: string): void;
|
||||||
|
setHeader(name: string, value: number | string | string[]): void;
|
||||||
|
setTimeout(msecs: number, callback?: () => void): void;
|
||||||
|
write(chunk: string | Uint8Array, callback?: (err: Error) => void): boolean;
|
||||||
|
write(chunk: string | Uint8Array, encoding: string, callback?: (err: Error) => void): boolean;
|
||||||
|
writeContinue(): void;
|
||||||
|
writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this;
|
||||||
|
writeHead(statusCode: number, statusMessage: string, headers?: OutgoingHttpHeaders): this;
|
||||||
|
createPushResponse(headers: OutgoingHttpHeaders, callback: (err: Error | null, res: Http2ServerResponse) => void): void;
|
||||||
|
|
||||||
|
addListener(event: "close", listener: () => void): this;
|
||||||
|
addListener(event: "drain", listener: () => void): this;
|
||||||
|
addListener(event: "error", listener: (error: Error) => void): this;
|
||||||
|
addListener(event: "finish", listener: () => void): this;
|
||||||
|
addListener(event: "pipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
addListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
emit(event: "close"): boolean;
|
||||||
|
emit(event: "drain"): boolean;
|
||||||
|
emit(event: "error", error: Error): boolean;
|
||||||
|
emit(event: "finish"): boolean;
|
||||||
|
emit(event: "pipe", src: stream.Readable): boolean;
|
||||||
|
emit(event: "unpipe", src: stream.Readable): boolean;
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
|
||||||
|
on(event: "close", listener: () => void): this;
|
||||||
|
on(event: "drain", listener: () => void): this;
|
||||||
|
on(event: "error", listener: (error: Error) => void): this;
|
||||||
|
on(event: "finish", listener: () => void): this;
|
||||||
|
on(event: "pipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
on(event: "unpipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: "close", listener: () => void): this;
|
||||||
|
once(event: "drain", listener: () => void): this;
|
||||||
|
once(event: "error", listener: (error: Error) => void): this;
|
||||||
|
once(event: "finish", listener: () => void): this;
|
||||||
|
once(event: "pipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
once(event: "unpipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: "close", listener: () => void): this;
|
||||||
|
prependListener(event: "drain", listener: () => void): this;
|
||||||
|
prependListener(event: "error", listener: (error: Error) => void): this;
|
||||||
|
prependListener(event: "finish", listener: () => void): this;
|
||||||
|
prependListener(event: "pipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: "close", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "drain", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "error", listener: (error: Error) => void): this;
|
||||||
|
prependOnceListener(event: "finish", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Public API
|
||||||
|
|
||||||
|
export namespace constants {
|
||||||
|
const NGHTTP2_SESSION_SERVER: number;
|
||||||
|
const NGHTTP2_SESSION_CLIENT: number;
|
||||||
|
const NGHTTP2_STREAM_STATE_IDLE: number;
|
||||||
|
const NGHTTP2_STREAM_STATE_OPEN: number;
|
||||||
|
const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number;
|
||||||
|
const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number;
|
||||||
|
const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number;
|
||||||
|
const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number;
|
||||||
|
const NGHTTP2_STREAM_STATE_CLOSED: number;
|
||||||
|
const NGHTTP2_NO_ERROR: number;
|
||||||
|
const NGHTTP2_PROTOCOL_ERROR: number;
|
||||||
|
const NGHTTP2_INTERNAL_ERROR: number;
|
||||||
|
const NGHTTP2_FLOW_CONTROL_ERROR: number;
|
||||||
|
const NGHTTP2_SETTINGS_TIMEOUT: number;
|
||||||
|
const NGHTTP2_STREAM_CLOSED: number;
|
||||||
|
const NGHTTP2_FRAME_SIZE_ERROR: number;
|
||||||
|
const NGHTTP2_REFUSED_STREAM: number;
|
||||||
|
const NGHTTP2_CANCEL: number;
|
||||||
|
const NGHTTP2_COMPRESSION_ERROR: number;
|
||||||
|
const NGHTTP2_CONNECT_ERROR: number;
|
||||||
|
const NGHTTP2_ENHANCE_YOUR_CALM: number;
|
||||||
|
const NGHTTP2_INADEQUATE_SECURITY: number;
|
||||||
|
const NGHTTP2_HTTP_1_1_REQUIRED: number;
|
||||||
|
const NGHTTP2_ERR_FRAME_SIZE_ERROR: number;
|
||||||
|
const NGHTTP2_FLAG_NONE: number;
|
||||||
|
const NGHTTP2_FLAG_END_STREAM: number;
|
||||||
|
const NGHTTP2_FLAG_END_HEADERS: number;
|
||||||
|
const NGHTTP2_FLAG_ACK: number;
|
||||||
|
const NGHTTP2_FLAG_PADDED: number;
|
||||||
|
const NGHTTP2_FLAG_PRIORITY: number;
|
||||||
|
const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number;
|
||||||
|
const DEFAULT_SETTINGS_ENABLE_PUSH: number;
|
||||||
|
const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number;
|
||||||
|
const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number;
|
||||||
|
const MAX_MAX_FRAME_SIZE: number;
|
||||||
|
const MIN_MAX_FRAME_SIZE: number;
|
||||||
|
const MAX_INITIAL_WINDOW_SIZE: number;
|
||||||
|
const NGHTTP2_DEFAULT_WEIGHT: number;
|
||||||
|
const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number;
|
||||||
|
const NGHTTP2_SETTINGS_ENABLE_PUSH: number;
|
||||||
|
const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number;
|
||||||
|
const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number;
|
||||||
|
const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number;
|
||||||
|
const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number;
|
||||||
|
const PADDING_STRATEGY_NONE: number;
|
||||||
|
const PADDING_STRATEGY_MAX: number;
|
||||||
|
const PADDING_STRATEGY_CALLBACK: number;
|
||||||
|
const HTTP2_HEADER_STATUS: string;
|
||||||
|
const HTTP2_HEADER_METHOD: string;
|
||||||
|
const HTTP2_HEADER_AUTHORITY: string;
|
||||||
|
const HTTP2_HEADER_SCHEME: string;
|
||||||
|
const HTTP2_HEADER_PATH: string;
|
||||||
|
const HTTP2_HEADER_ACCEPT_CHARSET: string;
|
||||||
|
const HTTP2_HEADER_ACCEPT_ENCODING: string;
|
||||||
|
const HTTP2_HEADER_ACCEPT_LANGUAGE: string;
|
||||||
|
const HTTP2_HEADER_ACCEPT_RANGES: string;
|
||||||
|
const HTTP2_HEADER_ACCEPT: string;
|
||||||
|
const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string;
|
||||||
|
const HTTP2_HEADER_AGE: string;
|
||||||
|
const HTTP2_HEADER_ALLOW: string;
|
||||||
|
const HTTP2_HEADER_AUTHORIZATION: string;
|
||||||
|
const HTTP2_HEADER_CACHE_CONTROL: string;
|
||||||
|
const HTTP2_HEADER_CONNECTION: string;
|
||||||
|
const HTTP2_HEADER_CONTENT_DISPOSITION: string;
|
||||||
|
const HTTP2_HEADER_CONTENT_ENCODING: string;
|
||||||
|
const HTTP2_HEADER_CONTENT_LANGUAGE: string;
|
||||||
|
const HTTP2_HEADER_CONTENT_LENGTH: string;
|
||||||
|
const HTTP2_HEADER_CONTENT_LOCATION: string;
|
||||||
|
const HTTP2_HEADER_CONTENT_MD5: string;
|
||||||
|
const HTTP2_HEADER_CONTENT_RANGE: string;
|
||||||
|
const HTTP2_HEADER_CONTENT_TYPE: string;
|
||||||
|
const HTTP2_HEADER_COOKIE: string;
|
||||||
|
const HTTP2_HEADER_DATE: string;
|
||||||
|
const HTTP2_HEADER_ETAG: string;
|
||||||
|
const HTTP2_HEADER_EXPECT: string;
|
||||||
|
const HTTP2_HEADER_EXPIRES: string;
|
||||||
|
const HTTP2_HEADER_FROM: string;
|
||||||
|
const HTTP2_HEADER_HOST: string;
|
||||||
|
const HTTP2_HEADER_IF_MATCH: string;
|
||||||
|
const HTTP2_HEADER_IF_MODIFIED_SINCE: string;
|
||||||
|
const HTTP2_HEADER_IF_NONE_MATCH: string;
|
||||||
|
const HTTP2_HEADER_IF_RANGE: string;
|
||||||
|
const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string;
|
||||||
|
const HTTP2_HEADER_LAST_MODIFIED: string;
|
||||||
|
const HTTP2_HEADER_LINK: string;
|
||||||
|
const HTTP2_HEADER_LOCATION: string;
|
||||||
|
const HTTP2_HEADER_MAX_FORWARDS: string;
|
||||||
|
const HTTP2_HEADER_PREFER: string;
|
||||||
|
const HTTP2_HEADER_PROXY_AUTHENTICATE: string;
|
||||||
|
const HTTP2_HEADER_PROXY_AUTHORIZATION: string;
|
||||||
|
const HTTP2_HEADER_RANGE: string;
|
||||||
|
const HTTP2_HEADER_REFERER: string;
|
||||||
|
const HTTP2_HEADER_REFRESH: string;
|
||||||
|
const HTTP2_HEADER_RETRY_AFTER: string;
|
||||||
|
const HTTP2_HEADER_SERVER: string;
|
||||||
|
const HTTP2_HEADER_SET_COOKIE: string;
|
||||||
|
const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string;
|
||||||
|
const HTTP2_HEADER_TRANSFER_ENCODING: string;
|
||||||
|
const HTTP2_HEADER_TE: string;
|
||||||
|
const HTTP2_HEADER_UPGRADE: string;
|
||||||
|
const HTTP2_HEADER_USER_AGENT: string;
|
||||||
|
const HTTP2_HEADER_VARY: string;
|
||||||
|
const HTTP2_HEADER_VIA: string;
|
||||||
|
const HTTP2_HEADER_WWW_AUTHENTICATE: string;
|
||||||
|
const HTTP2_HEADER_HTTP2_SETTINGS: string;
|
||||||
|
const HTTP2_HEADER_KEEP_ALIVE: string;
|
||||||
|
const HTTP2_HEADER_PROXY_CONNECTION: string;
|
||||||
|
const HTTP2_METHOD_ACL: string;
|
||||||
|
const HTTP2_METHOD_BASELINE_CONTROL: string;
|
||||||
|
const HTTP2_METHOD_BIND: string;
|
||||||
|
const HTTP2_METHOD_CHECKIN: string;
|
||||||
|
const HTTP2_METHOD_CHECKOUT: string;
|
||||||
|
const HTTP2_METHOD_CONNECT: string;
|
||||||
|
const HTTP2_METHOD_COPY: string;
|
||||||
|
const HTTP2_METHOD_DELETE: string;
|
||||||
|
const HTTP2_METHOD_GET: string;
|
||||||
|
const HTTP2_METHOD_HEAD: string;
|
||||||
|
const HTTP2_METHOD_LABEL: string;
|
||||||
|
const HTTP2_METHOD_LINK: string;
|
||||||
|
const HTTP2_METHOD_LOCK: string;
|
||||||
|
const HTTP2_METHOD_MERGE: string;
|
||||||
|
const HTTP2_METHOD_MKACTIVITY: string;
|
||||||
|
const HTTP2_METHOD_MKCALENDAR: string;
|
||||||
|
const HTTP2_METHOD_MKCOL: string;
|
||||||
|
const HTTP2_METHOD_MKREDIRECTREF: string;
|
||||||
|
const HTTP2_METHOD_MKWORKSPACE: string;
|
||||||
|
const HTTP2_METHOD_MOVE: string;
|
||||||
|
const HTTP2_METHOD_OPTIONS: string;
|
||||||
|
const HTTP2_METHOD_ORDERPATCH: string;
|
||||||
|
const HTTP2_METHOD_PATCH: string;
|
||||||
|
const HTTP2_METHOD_POST: string;
|
||||||
|
const HTTP2_METHOD_PRI: string;
|
||||||
|
const HTTP2_METHOD_PROPFIND: string;
|
||||||
|
const HTTP2_METHOD_PROPPATCH: string;
|
||||||
|
const HTTP2_METHOD_PUT: string;
|
||||||
|
const HTTP2_METHOD_REBIND: string;
|
||||||
|
const HTTP2_METHOD_REPORT: string;
|
||||||
|
const HTTP2_METHOD_SEARCH: string;
|
||||||
|
const HTTP2_METHOD_TRACE: string;
|
||||||
|
const HTTP2_METHOD_UNBIND: string;
|
||||||
|
const HTTP2_METHOD_UNCHECKOUT: string;
|
||||||
|
const HTTP2_METHOD_UNLINK: string;
|
||||||
|
const HTTP2_METHOD_UNLOCK: string;
|
||||||
|
const HTTP2_METHOD_UPDATE: string;
|
||||||
|
const HTTP2_METHOD_UPDATEREDIRECTREF: string;
|
||||||
|
const HTTP2_METHOD_VERSION_CONTROL: string;
|
||||||
|
const HTTP_STATUS_CONTINUE: number;
|
||||||
|
const HTTP_STATUS_SWITCHING_PROTOCOLS: number;
|
||||||
|
const HTTP_STATUS_PROCESSING: number;
|
||||||
|
const HTTP_STATUS_OK: number;
|
||||||
|
const HTTP_STATUS_CREATED: number;
|
||||||
|
const HTTP_STATUS_ACCEPTED: number;
|
||||||
|
const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number;
|
||||||
|
const HTTP_STATUS_NO_CONTENT: number;
|
||||||
|
const HTTP_STATUS_RESET_CONTENT: number;
|
||||||
|
const HTTP_STATUS_PARTIAL_CONTENT: number;
|
||||||
|
const HTTP_STATUS_MULTI_STATUS: number;
|
||||||
|
const HTTP_STATUS_ALREADY_REPORTED: number;
|
||||||
|
const HTTP_STATUS_IM_USED: number;
|
||||||
|
const HTTP_STATUS_MULTIPLE_CHOICES: number;
|
||||||
|
const HTTP_STATUS_MOVED_PERMANENTLY: number;
|
||||||
|
const HTTP_STATUS_FOUND: number;
|
||||||
|
const HTTP_STATUS_SEE_OTHER: number;
|
||||||
|
const HTTP_STATUS_NOT_MODIFIED: number;
|
||||||
|
const HTTP_STATUS_USE_PROXY: number;
|
||||||
|
const HTTP_STATUS_TEMPORARY_REDIRECT: number;
|
||||||
|
const HTTP_STATUS_PERMANENT_REDIRECT: number;
|
||||||
|
const HTTP_STATUS_BAD_REQUEST: number;
|
||||||
|
const HTTP_STATUS_UNAUTHORIZED: number;
|
||||||
|
const HTTP_STATUS_PAYMENT_REQUIRED: number;
|
||||||
|
const HTTP_STATUS_FORBIDDEN: number;
|
||||||
|
const HTTP_STATUS_NOT_FOUND: number;
|
||||||
|
const HTTP_STATUS_METHOD_NOT_ALLOWED: number;
|
||||||
|
const HTTP_STATUS_NOT_ACCEPTABLE: number;
|
||||||
|
const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number;
|
||||||
|
const HTTP_STATUS_REQUEST_TIMEOUT: number;
|
||||||
|
const HTTP_STATUS_CONFLICT: number;
|
||||||
|
const HTTP_STATUS_GONE: number;
|
||||||
|
const HTTP_STATUS_LENGTH_REQUIRED: number;
|
||||||
|
const HTTP_STATUS_PRECONDITION_FAILED: number;
|
||||||
|
const HTTP_STATUS_PAYLOAD_TOO_LARGE: number;
|
||||||
|
const HTTP_STATUS_URI_TOO_LONG: number;
|
||||||
|
const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number;
|
||||||
|
const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number;
|
||||||
|
const HTTP_STATUS_EXPECTATION_FAILED: number;
|
||||||
|
const HTTP_STATUS_TEAPOT: number;
|
||||||
|
const HTTP_STATUS_MISDIRECTED_REQUEST: number;
|
||||||
|
const HTTP_STATUS_UNPROCESSABLE_ENTITY: number;
|
||||||
|
const HTTP_STATUS_LOCKED: number;
|
||||||
|
const HTTP_STATUS_FAILED_DEPENDENCY: number;
|
||||||
|
const HTTP_STATUS_UNORDERED_COLLECTION: number;
|
||||||
|
const HTTP_STATUS_UPGRADE_REQUIRED: number;
|
||||||
|
const HTTP_STATUS_PRECONDITION_REQUIRED: number;
|
||||||
|
const HTTP_STATUS_TOO_MANY_REQUESTS: number;
|
||||||
|
const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number;
|
||||||
|
const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number;
|
||||||
|
const HTTP_STATUS_INTERNAL_SERVER_ERROR: number;
|
||||||
|
const HTTP_STATUS_NOT_IMPLEMENTED: number;
|
||||||
|
const HTTP_STATUS_BAD_GATEWAY: number;
|
||||||
|
const HTTP_STATUS_SERVICE_UNAVAILABLE: number;
|
||||||
|
const HTTP_STATUS_GATEWAY_TIMEOUT: number;
|
||||||
|
const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number;
|
||||||
|
const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number;
|
||||||
|
const HTTP_STATUS_INSUFFICIENT_STORAGE: number;
|
||||||
|
const HTTP_STATUS_LOOP_DETECTED: number;
|
||||||
|
const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number;
|
||||||
|
const HTTP_STATUS_NOT_EXTENDED: number;
|
||||||
|
const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getDefaultSettings(): Settings;
|
||||||
|
export function getPackedSettings(settings: Settings): Buffer;
|
||||||
|
export function getUnpackedSettings(buf: Uint8Array): Settings;
|
||||||
|
|
||||||
|
export function createServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server;
|
||||||
|
export function createServer(options: ServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server;
|
||||||
|
|
||||||
|
export function createSecureServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer;
|
||||||
|
export function createSecureServer(options: SecureServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer;
|
||||||
|
|
||||||
|
export function connect(authority: string | url.URL, listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): ClientHttp2Session;
|
||||||
|
export function connect(
|
||||||
|
authority: string | url.URL,
|
||||||
|
options?: ClientSessionOptions | SecureClientSessionOptions,
|
||||||
|
listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void
|
||||||
|
): ClientHttp2Session;
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
declare module "https" {
|
||||||
|
import * as tls from "tls";
|
||||||
|
import * as events from "events";
|
||||||
|
import * as http from "http";
|
||||||
|
import { URL } from "url";
|
||||||
|
|
||||||
|
type ServerOptions = tls.SecureContextOptions & tls.TlsOptions & http.ServerOptions;
|
||||||
|
|
||||||
|
type RequestOptions = http.RequestOptions & tls.SecureContextOptions & {
|
||||||
|
rejectUnauthorized?: boolean; // Defaults to true
|
||||||
|
servername?: string; // SNI TLS Extension
|
||||||
|
};
|
||||||
|
|
||||||
|
interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions {
|
||||||
|
rejectUnauthorized?: boolean;
|
||||||
|
maxCachedSessions?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Agent extends http.Agent {
|
||||||
|
constructor(options?: AgentOptions);
|
||||||
|
options: AgentOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Server extends tls.Server {
|
||||||
|
constructor(requestListener?: http.RequestListener);
|
||||||
|
constructor(options: ServerOptions, requestListener?: http.RequestListener);
|
||||||
|
|
||||||
|
setTimeout(callback: () => void): this;
|
||||||
|
setTimeout(msecs?: number, callback?: () => void): this;
|
||||||
|
/**
|
||||||
|
* Limits maximum incoming headers count. If set to 0, no limit will be applied.
|
||||||
|
* @default 2000
|
||||||
|
* {@link https://nodejs.org/api/http.html#http_server_maxheaderscount}
|
||||||
|
*/
|
||||||
|
maxHeadersCount: number | null;
|
||||||
|
timeout: number;
|
||||||
|
/**
|
||||||
|
* Limit the amount of time the parser will wait to receive the complete HTTP headers.
|
||||||
|
* @default 40000
|
||||||
|
* {@link https://nodejs.org/api/http.html#http_server_headerstimeout}
|
||||||
|
*/
|
||||||
|
headersTimeout: number;
|
||||||
|
keepAliveTimeout: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createServer(requestListener?: http.RequestListener): Server;
|
||||||
|
function createServer(options: ServerOptions, requestListener?: http.RequestListener): Server;
|
||||||
|
function request(options: RequestOptions | string | URL, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
|
||||||
|
function request(url: string | URL, options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
|
||||||
|
function get(options: RequestOptions | string | URL, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
|
||||||
|
function get(url: string | URL, options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
|
||||||
|
let globalAgent: Agent;
|
||||||
|
}
|
|
@ -0,0 +1,108 @@
|
||||||
|
// Type definitions for non-npm package Node.js 12.12
|
||||||
|
// Project: http://nodejs.org/
|
||||||
|
// Definitions by: Microsoft TypeScript <https://github.com/Microsoft>
|
||||||
|
// DefinitelyTyped <https://github.com/DefinitelyTyped>
|
||||||
|
// Alberto Schiabel <https://github.com/jkomyno>
|
||||||
|
// Alexander T. <https://github.com/a-tarasyuk>
|
||||||
|
// Alvis HT Tang <https://github.com/alvis>
|
||||||
|
// Andrew Makarov <https://github.com/r3nya>
|
||||||
|
// Benjamin Toueg <https://github.com/btoueg>
|
||||||
|
// Bruno Scheufler <https://github.com/brunoscheufler>
|
||||||
|
// Chigozirim C. <https://github.com/smac89>
|
||||||
|
// Christian Vaagland Tellnes <https://github.com/tellnes>
|
||||||
|
// David Junger <https://github.com/touffy>
|
||||||
|
// Deividas Bakanas <https://github.com/DeividasBakanas>
|
||||||
|
// Eugene Y. Q. Shen <https://github.com/eyqs>
|
||||||
|
// Flarna <https://github.com/Flarna>
|
||||||
|
// Hannes Magnusson <https://github.com/Hannes-Magnusson-CK>
|
||||||
|
// Hoàng Văn Khải <https://github.com/KSXGitHub>
|
||||||
|
// Huw <https://github.com/hoo29>
|
||||||
|
// Kelvin Jin <https://github.com/kjin>
|
||||||
|
// Klaus Meinhardt <https://github.com/ajafff>
|
||||||
|
// Lishude <https://github.com/islishude>
|
||||||
|
// Mariusz Wiktorczyk <https://github.com/mwiktorczyk>
|
||||||
|
// Mohsen Azimi <https://github.com/mohsen1>
|
||||||
|
// Nicolas Even <https://github.com/n-e>
|
||||||
|
// Nicolas Voigt <https://github.com/octo-sniffle>
|
||||||
|
// Nikita Galkin <https://github.com/galkin>
|
||||||
|
// Parambir Singh <https://github.com/parambirs>
|
||||||
|
// Sebastian Silbermann <https://github.com/eps1lon>
|
||||||
|
// Simon Schick <https://github.com/SimonSchick>
|
||||||
|
// Thomas den Hollander <https://github.com/ThomasdenH>
|
||||||
|
// Wilco Bakker <https://github.com/WilcoBakker>
|
||||||
|
// wwwy3y3 <https://github.com/wwwy3y3>
|
||||||
|
// Zane Hannan AU <https://github.com/ZaneHannanAU>
|
||||||
|
// Samuel Ainsworth <https://github.com/samuela>
|
||||||
|
// Kyle Uehlein <https://github.com/kuehlein>
|
||||||
|
// Jordi Oliveras Rovira <https://github.com/j-oliveras>
|
||||||
|
// Thanik Bhongbhibhat <https://github.com/bhongy>
|
||||||
|
// Marcin Kopacz <https://github.com/chyzwar>
|
||||||
|
// Trivikram Kamat <https://github.com/trivikr>
|
||||||
|
// Minh Son Nguyen <https://github.com/nguymin4>
|
||||||
|
// Junxiao Shi <https://github.com/yoursunny>
|
||||||
|
// Ilia Baryshnikov <https://github.com/qwelias>
|
||||||
|
// ExE Boss <https://github.com/ExE-Boss>
|
||||||
|
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||||
|
|
||||||
|
// NOTE: These definitions support NodeJS and TypeScript 3.2.
|
||||||
|
|
||||||
|
// NOTE: TypeScript version-specific augmentations can be found in the following paths:
|
||||||
|
// - ~/base.d.ts - Shared definitions common to all TypeScript versions
|
||||||
|
// - ~/index.d.ts - Definitions specific to TypeScript 2.1
|
||||||
|
// - ~/ts3.2/index.d.ts - Definitions specific to TypeScript 3.2
|
||||||
|
|
||||||
|
// NOTE: Augmentations for TypeScript 3.2 and later should use individual files for overrides
|
||||||
|
// within the respective ~/ts3.2 (or later) folder. However, this is disallowed for versions
|
||||||
|
// prior to TypeScript 3.2, so the older definitions will be found here.
|
||||||
|
|
||||||
|
// Base definitions for all NodeJS modules that are not specific to any version of TypeScript:
|
||||||
|
/// <reference path="base.d.ts" />
|
||||||
|
|
||||||
|
// We can't include assert.d.ts in base.d.ts, as it'll cause duplication errors in +ts3.7
|
||||||
|
/// <reference path="assert.d.ts" />
|
||||||
|
|
||||||
|
// TypeScript 2.1-specific augmentations:
|
||||||
|
|
||||||
|
// Forward-declarations for needed types from es2015 and later (in case users are using `--lib es5`)
|
||||||
|
// Empty interfaces are used here which merge fine with the real declarations in the lib XXX files
|
||||||
|
// just to ensure the names are known and node typings can be used without importing these libs.
|
||||||
|
// if someone really needs these types the libs need to be added via --lib or in tsconfig.json
|
||||||
|
interface MapConstructor { }
|
||||||
|
interface WeakMapConstructor { }
|
||||||
|
interface SetConstructor { }
|
||||||
|
interface WeakSetConstructor { }
|
||||||
|
interface Set<T> {}
|
||||||
|
interface Map<K, V> {}
|
||||||
|
interface ReadonlySet<T> {}
|
||||||
|
interface Iterable<T> { }
|
||||||
|
interface IteratorResult<T> { }
|
||||||
|
interface AsyncIterable<T> { }
|
||||||
|
interface Iterator<T> {
|
||||||
|
next(value?: any): IteratorResult<T>;
|
||||||
|
}
|
||||||
|
interface IterableIterator<T> { }
|
||||||
|
interface AsyncIterableIterator<T> {}
|
||||||
|
interface SymbolConstructor {
|
||||||
|
readonly iterator: symbol;
|
||||||
|
readonly asyncIterator: symbol;
|
||||||
|
}
|
||||||
|
declare var Symbol: SymbolConstructor;
|
||||||
|
// even this is just a forward declaration some properties are added otherwise
|
||||||
|
// it would be allowed to pass anything to e.g. Buffer.from()
|
||||||
|
interface SharedArrayBuffer {
|
||||||
|
readonly byteLength: number;
|
||||||
|
slice(begin?: number, end?: number): SharedArrayBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module "util" {
|
||||||
|
namespace inspect {
|
||||||
|
const custom: symbol;
|
||||||
|
}
|
||||||
|
namespace promisify {
|
||||||
|
const custom: symbol;
|
||||||
|
}
|
||||||
|
namespace types {
|
||||||
|
function isBigInt64Array(value: any): boolean;
|
||||||
|
function isBigUint64Array(value: any): boolean;
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,3 @@
|
||||||
|
declare module "module" {
|
||||||
|
export = NodeJS.Module;
|
||||||
|
}
|
|
@ -0,0 +1,268 @@
|
||||||
|
declare module "net" {
|
||||||
|
import * as stream from "stream";
|
||||||
|
import * as events from "events";
|
||||||
|
import * as dns from "dns";
|
||||||
|
|
||||||
|
type LookupFunction = (hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void;
|
||||||
|
|
||||||
|
interface AddressInfo {
|
||||||
|
address: string;
|
||||||
|
family: string;
|
||||||
|
port: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SocketConstructorOpts {
|
||||||
|
fd?: number;
|
||||||
|
allowHalfOpen?: boolean;
|
||||||
|
readable?: boolean;
|
||||||
|
writable?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface OnReadOpts {
|
||||||
|
buffer: Uint8Array | (() => Uint8Array);
|
||||||
|
/**
|
||||||
|
* This function is called for every chunk of incoming data.
|
||||||
|
* Two arguments are passed to it: the number of bytes written to buffer and a reference to buffer.
|
||||||
|
* Return false from this function to implicitly pause() the socket.
|
||||||
|
*/
|
||||||
|
callback(bytesWritten: number, buf: Uint8Array): boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ConnectOpts {
|
||||||
|
/**
|
||||||
|
* If specified, incoming data is stored in a single buffer and passed to the supplied callback when data arrives on the socket.
|
||||||
|
* Note: this will cause the streaming functionality to not provide any data, however events like 'error', 'end', and 'close' will
|
||||||
|
* still be emitted as normal and methods like pause() and resume() will also behave as expected.
|
||||||
|
*/
|
||||||
|
onread?: OnReadOpts;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TcpSocketConnectOpts extends ConnectOpts {
|
||||||
|
port: number;
|
||||||
|
host?: string;
|
||||||
|
localAddress?: string;
|
||||||
|
localPort?: number;
|
||||||
|
hints?: number;
|
||||||
|
family?: number;
|
||||||
|
lookup?: LookupFunction;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IpcSocketConnectOpts extends ConnectOpts {
|
||||||
|
path: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts;
|
||||||
|
|
||||||
|
class Socket extends stream.Duplex {
|
||||||
|
constructor(options?: SocketConstructorOpts);
|
||||||
|
|
||||||
|
// Extended base methods
|
||||||
|
write(buffer: Uint8Array | string, cb?: (err?: Error) => void): boolean;
|
||||||
|
write(str: Uint8Array | string, encoding?: string, cb?: (err?: Error) => void): boolean;
|
||||||
|
|
||||||
|
connect(options: SocketConnectOpts, connectionListener?: () => void): this;
|
||||||
|
connect(port: number, host: string, connectionListener?: () => void): this;
|
||||||
|
connect(port: number, connectionListener?: () => void): this;
|
||||||
|
connect(path: string, connectionListener?: () => void): this;
|
||||||
|
|
||||||
|
setEncoding(encoding?: string): this;
|
||||||
|
pause(): this;
|
||||||
|
resume(): this;
|
||||||
|
setTimeout(timeout: number, callback?: () => void): this;
|
||||||
|
setNoDelay(noDelay?: boolean): this;
|
||||||
|
setKeepAlive(enable?: boolean, initialDelay?: number): this;
|
||||||
|
address(): AddressInfo | string;
|
||||||
|
unref(): void;
|
||||||
|
ref(): void;
|
||||||
|
|
||||||
|
readonly bufferSize: number;
|
||||||
|
readonly bytesRead: number;
|
||||||
|
readonly bytesWritten: number;
|
||||||
|
readonly connecting: boolean;
|
||||||
|
readonly destroyed: boolean;
|
||||||
|
readonly localAddress: string;
|
||||||
|
readonly localPort: number;
|
||||||
|
readonly remoteAddress?: string;
|
||||||
|
readonly remoteFamily?: string;
|
||||||
|
readonly remotePort?: number;
|
||||||
|
|
||||||
|
// Extended base methods
|
||||||
|
end(cb?: () => void): void;
|
||||||
|
end(buffer: Uint8Array | string, cb?: () => void): void;
|
||||||
|
end(str: Uint8Array | string, encoding?: string, cb?: () => void): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* events.EventEmitter
|
||||||
|
* 1. close
|
||||||
|
* 2. connect
|
||||||
|
* 3. data
|
||||||
|
* 4. drain
|
||||||
|
* 5. end
|
||||||
|
* 6. error
|
||||||
|
* 7. lookup
|
||||||
|
* 8. timeout
|
||||||
|
*/
|
||||||
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
addListener(event: "close", listener: (had_error: boolean) => void): this;
|
||||||
|
addListener(event: "connect", listener: () => void): this;
|
||||||
|
addListener(event: "data", listener: (data: Buffer) => void): this;
|
||||||
|
addListener(event: "drain", listener: () => void): this;
|
||||||
|
addListener(event: "end", listener: () => void): this;
|
||||||
|
addListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
addListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
|
||||||
|
addListener(event: "timeout", listener: () => void): this;
|
||||||
|
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
emit(event: "close", had_error: boolean): boolean;
|
||||||
|
emit(event: "connect"): boolean;
|
||||||
|
emit(event: "data", data: Buffer): boolean;
|
||||||
|
emit(event: "drain"): boolean;
|
||||||
|
emit(event: "end"): boolean;
|
||||||
|
emit(event: "error", err: Error): boolean;
|
||||||
|
emit(event: "lookup", err: Error, address: string, family: string | number, host: string): boolean;
|
||||||
|
emit(event: "timeout"): boolean;
|
||||||
|
|
||||||
|
on(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: "close", listener: (had_error: boolean) => void): this;
|
||||||
|
on(event: "connect", listener: () => void): this;
|
||||||
|
on(event: "data", listener: (data: Buffer) => void): this;
|
||||||
|
on(event: "drain", listener: () => void): this;
|
||||||
|
on(event: "end", listener: () => void): this;
|
||||||
|
on(event: "error", listener: (err: Error) => void): this;
|
||||||
|
on(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
|
||||||
|
on(event: "timeout", listener: () => void): this;
|
||||||
|
|
||||||
|
once(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: "close", listener: (had_error: boolean) => void): this;
|
||||||
|
once(event: "connect", listener: () => void): this;
|
||||||
|
once(event: "data", listener: (data: Buffer) => void): this;
|
||||||
|
once(event: "drain", listener: () => void): this;
|
||||||
|
once(event: "end", listener: () => void): this;
|
||||||
|
once(event: "error", listener: (err: Error) => void): this;
|
||||||
|
once(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
|
||||||
|
once(event: "timeout", listener: () => void): this;
|
||||||
|
|
||||||
|
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: "close", listener: (had_error: boolean) => void): this;
|
||||||
|
prependListener(event: "connect", listener: () => void): this;
|
||||||
|
prependListener(event: "data", listener: (data: Buffer) => void): this;
|
||||||
|
prependListener(event: "drain", listener: () => void): this;
|
||||||
|
prependListener(event: "end", listener: () => void): this;
|
||||||
|
prependListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
|
||||||
|
prependListener(event: "timeout", listener: () => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: "close", listener: (had_error: boolean) => void): this;
|
||||||
|
prependOnceListener(event: "connect", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "data", listener: (data: Buffer) => void): this;
|
||||||
|
prependOnceListener(event: "drain", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "end", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
|
||||||
|
prependOnceListener(event: "timeout", listener: () => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ListenOptions {
|
||||||
|
port?: number;
|
||||||
|
host?: string;
|
||||||
|
backlog?: number;
|
||||||
|
path?: string;
|
||||||
|
exclusive?: boolean;
|
||||||
|
readableAll?: boolean;
|
||||||
|
writableAll?: boolean;
|
||||||
|
/**
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
ipv6Only?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/nodejs/node/blob/master/lib/net.js
|
||||||
|
class Server extends events.EventEmitter {
|
||||||
|
constructor(connectionListener?: (socket: Socket) => void);
|
||||||
|
constructor(options?: { allowHalfOpen?: boolean, pauseOnConnect?: boolean }, connectionListener?: (socket: Socket) => void);
|
||||||
|
|
||||||
|
listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;
|
||||||
|
listen(port?: number, hostname?: string, listeningListener?: () => void): this;
|
||||||
|
listen(port?: number, backlog?: number, listeningListener?: () => void): this;
|
||||||
|
listen(port?: number, listeningListener?: () => void): this;
|
||||||
|
listen(path: string, backlog?: number, listeningListener?: () => void): this;
|
||||||
|
listen(path: string, listeningListener?: () => void): this;
|
||||||
|
listen(options: ListenOptions, listeningListener?: () => void): this;
|
||||||
|
listen(handle: any, backlog?: number, listeningListener?: () => void): this;
|
||||||
|
listen(handle: any, listeningListener?: () => void): this;
|
||||||
|
close(callback?: (err?: Error) => void): this;
|
||||||
|
address(): AddressInfo | string | null;
|
||||||
|
getConnections(cb: (error: Error | null, count: number) => void): void;
|
||||||
|
ref(): this;
|
||||||
|
unref(): this;
|
||||||
|
maxConnections: number;
|
||||||
|
connections: number;
|
||||||
|
listening: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* events.EventEmitter
|
||||||
|
* 1. close
|
||||||
|
* 2. connection
|
||||||
|
* 3. error
|
||||||
|
* 4. listening
|
||||||
|
*/
|
||||||
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
addListener(event: "close", listener: () => void): this;
|
||||||
|
addListener(event: "connection", listener: (socket: Socket) => void): this;
|
||||||
|
addListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
addListener(event: "listening", listener: () => void): this;
|
||||||
|
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
emit(event: "close"): boolean;
|
||||||
|
emit(event: "connection", socket: Socket): boolean;
|
||||||
|
emit(event: "error", err: Error): boolean;
|
||||||
|
emit(event: "listening"): boolean;
|
||||||
|
|
||||||
|
on(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: "close", listener: () => void): this;
|
||||||
|
on(event: "connection", listener: (socket: Socket) => void): this;
|
||||||
|
on(event: "error", listener: (err: Error) => void): this;
|
||||||
|
on(event: "listening", listener: () => void): this;
|
||||||
|
|
||||||
|
once(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: "close", listener: () => void): this;
|
||||||
|
once(event: "connection", listener: (socket: Socket) => void): this;
|
||||||
|
once(event: "error", listener: (err: Error) => void): this;
|
||||||
|
once(event: "listening", listener: () => void): this;
|
||||||
|
|
||||||
|
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: "close", listener: () => void): this;
|
||||||
|
prependListener(event: "connection", listener: (socket: Socket) => void): this;
|
||||||
|
prependListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: "listening", listener: () => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: "close", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "connection", listener: (socket: Socket) => void): this;
|
||||||
|
prependOnceListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: "listening", listener: () => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts {
|
||||||
|
timeout?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts {
|
||||||
|
timeout?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts;
|
||||||
|
|
||||||
|
function createServer(connectionListener?: (socket: Socket) => void): Server;
|
||||||
|
function createServer(options?: { allowHalfOpen?: boolean, pauseOnConnect?: boolean }, connectionListener?: (socket: Socket) => void): Server;
|
||||||
|
function connect(options: NetConnectOpts, connectionListener?: () => void): Socket;
|
||||||
|
function connect(port: number, host?: string, connectionListener?: () => void): Socket;
|
||||||
|
function connect(path: string, connectionListener?: () => void): Socket;
|
||||||
|
function createConnection(options: NetConnectOpts, connectionListener?: () => void): Socket;
|
||||||
|
function createConnection(port: number, host?: string, connectionListener?: () => void): Socket;
|
||||||
|
function createConnection(path: string, connectionListener?: () => void): Socket;
|
||||||
|
function isIP(input: string): number;
|
||||||
|
function isIPv4(input: string): boolean;
|
||||||
|
function isIPv6(input: string): boolean;
|
||||||
|
}
|
|
@ -0,0 +1,263 @@
|
||||||
|
declare module "os" {
|
||||||
|
interface CpuInfo {
|
||||||
|
model: string;
|
||||||
|
speed: number;
|
||||||
|
times: {
|
||||||
|
user: number;
|
||||||
|
nice: number;
|
||||||
|
sys: number;
|
||||||
|
idle: number;
|
||||||
|
irq: number;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
interface NetworkInterfaceBase {
|
||||||
|
address: string;
|
||||||
|
netmask: string;
|
||||||
|
mac: string;
|
||||||
|
internal: boolean;
|
||||||
|
cidr: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase {
|
||||||
|
family: "IPv4";
|
||||||
|
}
|
||||||
|
|
||||||
|
interface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase {
|
||||||
|
family: "IPv6";
|
||||||
|
scopeid: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface UserInfo<T> {
|
||||||
|
username: T;
|
||||||
|
uid: number;
|
||||||
|
gid: number;
|
||||||
|
shell: T;
|
||||||
|
homedir: T;
|
||||||
|
}
|
||||||
|
|
||||||
|
type NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6;
|
||||||
|
|
||||||
|
function hostname(): string;
|
||||||
|
function loadavg(): number[];
|
||||||
|
function uptime(): number;
|
||||||
|
function freemem(): number;
|
||||||
|
function totalmem(): number;
|
||||||
|
function cpus(): CpuInfo[];
|
||||||
|
function type(): string;
|
||||||
|
function release(): string;
|
||||||
|
function networkInterfaces(): { [index: string]: NetworkInterfaceInfo[] };
|
||||||
|
function homedir(): string;
|
||||||
|
function userInfo(options: { encoding: 'buffer' }): UserInfo<Buffer>;
|
||||||
|
function userInfo(options?: { encoding: string }): UserInfo<string>;
|
||||||
|
const constants: {
|
||||||
|
UV_UDP_REUSEADDR: number;
|
||||||
|
// signals: { [key in NodeJS.Signals]: number; }; @todo: change after migration to typescript 2.1
|
||||||
|
signals: {
|
||||||
|
SIGHUP: number;
|
||||||
|
SIGINT: number;
|
||||||
|
SIGQUIT: number;
|
||||||
|
SIGILL: number;
|
||||||
|
SIGTRAP: number;
|
||||||
|
SIGABRT: number;
|
||||||
|
SIGIOT: number;
|
||||||
|
SIGBUS: number;
|
||||||
|
SIGFPE: number;
|
||||||
|
SIGKILL: number;
|
||||||
|
SIGUSR1: number;
|
||||||
|
SIGSEGV: number;
|
||||||
|
SIGUSR2: number;
|
||||||
|
SIGPIPE: number;
|
||||||
|
SIGALRM: number;
|
||||||
|
SIGTERM: number;
|
||||||
|
SIGCHLD: number;
|
||||||
|
SIGSTKFLT: number;
|
||||||
|
SIGCONT: number;
|
||||||
|
SIGSTOP: number;
|
||||||
|
SIGTSTP: number;
|
||||||
|
SIGBREAK: number;
|
||||||
|
SIGTTIN: number;
|
||||||
|
SIGTTOU: number;
|
||||||
|
SIGURG: number;
|
||||||
|
SIGXCPU: number;
|
||||||
|
SIGXFSZ: number;
|
||||||
|
SIGVTALRM: number;
|
||||||
|
SIGPROF: number;
|
||||||
|
SIGWINCH: number;
|
||||||
|
SIGIO: number;
|
||||||
|
SIGPOLL: number;
|
||||||
|
SIGLOST: number;
|
||||||
|
SIGPWR: number;
|
||||||
|
SIGINFO: number;
|
||||||
|
SIGSYS: number;
|
||||||
|
SIGUNUSED: number;
|
||||||
|
};
|
||||||
|
errno: {
|
||||||
|
E2BIG: number;
|
||||||
|
EACCES: number;
|
||||||
|
EADDRINUSE: number;
|
||||||
|
EADDRNOTAVAIL: number;
|
||||||
|
EAFNOSUPPORT: number;
|
||||||
|
EAGAIN: number;
|
||||||
|
EALREADY: number;
|
||||||
|
EBADF: number;
|
||||||
|
EBADMSG: number;
|
||||||
|
EBUSY: number;
|
||||||
|
ECANCELED: number;
|
||||||
|
ECHILD: number;
|
||||||
|
ECONNABORTED: number;
|
||||||
|
ECONNREFUSED: number;
|
||||||
|
ECONNRESET: number;
|
||||||
|
EDEADLK: number;
|
||||||
|
EDESTADDRREQ: number;
|
||||||
|
EDOM: number;
|
||||||
|
EDQUOT: number;
|
||||||
|
EEXIST: number;
|
||||||
|
EFAULT: number;
|
||||||
|
EFBIG: number;
|
||||||
|
EHOSTUNREACH: number;
|
||||||
|
EIDRM: number;
|
||||||
|
EILSEQ: number;
|
||||||
|
EINPROGRESS: number;
|
||||||
|
EINTR: number;
|
||||||
|
EINVAL: number;
|
||||||
|
EIO: number;
|
||||||
|
EISCONN: number;
|
||||||
|
EISDIR: number;
|
||||||
|
ELOOP: number;
|
||||||
|
EMFILE: number;
|
||||||
|
EMLINK: number;
|
||||||
|
EMSGSIZE: number;
|
||||||
|
EMULTIHOP: number;
|
||||||
|
ENAMETOOLONG: number;
|
||||||
|
ENETDOWN: number;
|
||||||
|
ENETRESET: number;
|
||||||
|
ENETUNREACH: number;
|
||||||
|
ENFILE: number;
|
||||||
|
ENOBUFS: number;
|
||||||
|
ENODATA: number;
|
||||||
|
ENODEV: number;
|
||||||
|
ENOENT: number;
|
||||||
|
ENOEXEC: number;
|
||||||
|
ENOLCK: number;
|
||||||
|
ENOLINK: number;
|
||||||
|
ENOMEM: number;
|
||||||
|
ENOMSG: number;
|
||||||
|
ENOPROTOOPT: number;
|
||||||
|
ENOSPC: number;
|
||||||
|
ENOSR: number;
|
||||||
|
ENOSTR: number;
|
||||||
|
ENOSYS: number;
|
||||||
|
ENOTCONN: number;
|
||||||
|
ENOTDIR: number;
|
||||||
|
ENOTEMPTY: number;
|
||||||
|
ENOTSOCK: number;
|
||||||
|
ENOTSUP: number;
|
||||||
|
ENOTTY: number;
|
||||||
|
ENXIO: number;
|
||||||
|
EOPNOTSUPP: number;
|
||||||
|
EOVERFLOW: number;
|
||||||
|
EPERM: number;
|
||||||
|
EPIPE: number;
|
||||||
|
EPROTO: number;
|
||||||
|
EPROTONOSUPPORT: number;
|
||||||
|
EPROTOTYPE: number;
|
||||||
|
ERANGE: number;
|
||||||
|
EROFS: number;
|
||||||
|
ESPIPE: number;
|
||||||
|
ESRCH: number;
|
||||||
|
ESTALE: number;
|
||||||
|
ETIME: number;
|
||||||
|
ETIMEDOUT: number;
|
||||||
|
ETXTBSY: number;
|
||||||
|
EWOULDBLOCK: number;
|
||||||
|
EXDEV: number;
|
||||||
|
WSAEINTR: number;
|
||||||
|
WSAEBADF: number;
|
||||||
|
WSAEACCES: number;
|
||||||
|
WSAEFAULT: number;
|
||||||
|
WSAEINVAL: number;
|
||||||
|
WSAEMFILE: number;
|
||||||
|
WSAEWOULDBLOCK: number;
|
||||||
|
WSAEINPROGRESS: number;
|
||||||
|
WSAEALREADY: number;
|
||||||
|
WSAENOTSOCK: number;
|
||||||
|
WSAEDESTADDRREQ: number;
|
||||||
|
WSAEMSGSIZE: number;
|
||||||
|
WSAEPROTOTYPE: number;
|
||||||
|
WSAENOPROTOOPT: number;
|
||||||
|
WSAEPROTONOSUPPORT: number;
|
||||||
|
WSAESOCKTNOSUPPORT: number;
|
||||||
|
WSAEOPNOTSUPP: number;
|
||||||
|
WSAEPFNOSUPPORT: number;
|
||||||
|
WSAEAFNOSUPPORT: number;
|
||||||
|
WSAEADDRINUSE: number;
|
||||||
|
WSAEADDRNOTAVAIL: number;
|
||||||
|
WSAENETDOWN: number;
|
||||||
|
WSAENETUNREACH: number;
|
||||||
|
WSAENETRESET: number;
|
||||||
|
WSAECONNABORTED: number;
|
||||||
|
WSAECONNRESET: number;
|
||||||
|
WSAENOBUFS: number;
|
||||||
|
WSAEISCONN: number;
|
||||||
|
WSAENOTCONN: number;
|
||||||
|
WSAESHUTDOWN: number;
|
||||||
|
WSAETOOMANYREFS: number;
|
||||||
|
WSAETIMEDOUT: number;
|
||||||
|
WSAECONNREFUSED: number;
|
||||||
|
WSAELOOP: number;
|
||||||
|
WSAENAMETOOLONG: number;
|
||||||
|
WSAEHOSTDOWN: number;
|
||||||
|
WSAEHOSTUNREACH: number;
|
||||||
|
WSAENOTEMPTY: number;
|
||||||
|
WSAEPROCLIM: number;
|
||||||
|
WSAEUSERS: number;
|
||||||
|
WSAEDQUOT: number;
|
||||||
|
WSAESTALE: number;
|
||||||
|
WSAEREMOTE: number;
|
||||||
|
WSASYSNOTREADY: number;
|
||||||
|
WSAVERNOTSUPPORTED: number;
|
||||||
|
WSANOTINITIALISED: number;
|
||||||
|
WSAEDISCON: number;
|
||||||
|
WSAENOMORE: number;
|
||||||
|
WSAECANCELLED: number;
|
||||||
|
WSAEINVALIDPROCTABLE: number;
|
||||||
|
WSAEINVALIDPROVIDER: number;
|
||||||
|
WSAEPROVIDERFAILEDINIT: number;
|
||||||
|
WSASYSCALLFAILURE: number;
|
||||||
|
WSASERVICE_NOT_FOUND: number;
|
||||||
|
WSATYPE_NOT_FOUND: number;
|
||||||
|
WSA_E_NO_MORE: number;
|
||||||
|
WSA_E_CANCELLED: number;
|
||||||
|
WSAEREFUSED: number;
|
||||||
|
};
|
||||||
|
priority: {
|
||||||
|
PRIORITY_LOW: number;
|
||||||
|
PRIORITY_BELOW_NORMAL: number;
|
||||||
|
PRIORITY_NORMAL: number;
|
||||||
|
PRIORITY_ABOVE_NORMAL: number;
|
||||||
|
PRIORITY_HIGH: number;
|
||||||
|
PRIORITY_HIGHEST: number;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function arch(): string;
|
||||||
|
function platform(): NodeJS.Platform;
|
||||||
|
function tmpdir(): string;
|
||||||
|
const EOL: string;
|
||||||
|
function endianness(): "BE" | "LE";
|
||||||
|
/**
|
||||||
|
* Gets the priority of a process.
|
||||||
|
* Defaults to current process.
|
||||||
|
*/
|
||||||
|
function getPriority(pid?: number): number;
|
||||||
|
/**
|
||||||
|
* Sets the priority of the current process.
|
||||||
|
* @param priority Must be in range of -20 to 19
|
||||||
|
*/
|
||||||
|
function setPriority(priority: number): void;
|
||||||
|
/**
|
||||||
|
* Sets the priority of the process specified process.
|
||||||
|
* @param priority Must be in range of -20 to 19
|
||||||
|
*/
|
||||||
|
function setPriority(pid: number, priority: number): void;
|
||||||
|
}
|
|
@ -0,0 +1,230 @@
|
||||||
|
{
|
||||||
|
"_from": "@types/node@12.12.38",
|
||||||
|
"_id": "@types/node@12.12.38",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-75eLjX0pFuTcUXnnWmALMzzkYorjND0ezNEycaKesbUBg9eGZp4GHPuDmkRc4mQQvIpe29zrzATNRA6hkYqwmA==",
|
||||||
|
"_location": "/@types/node",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "version",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@types/node@12.12.38",
|
||||||
|
"name": "@types/node",
|
||||||
|
"escapedName": "@types%2fnode",
|
||||||
|
"scope": "@types",
|
||||||
|
"rawSpec": "12.12.38",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "12.12.38"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"#DEV:/",
|
||||||
|
"#USER"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.38.tgz",
|
||||||
|
"_shasum": "58841a382f231ad005dbb935c36d44aa1118a26b",
|
||||||
|
"_spec": "@types/node@12.12.38",
|
||||||
|
"_where": "/Users/dbrock/Google Drive/appleiigs/install-merlin32-action",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"name": "Microsoft TypeScript",
|
||||||
|
"url": "https://github.com/Microsoft"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "DefinitelyTyped",
|
||||||
|
"url": "https://github.com/DefinitelyTyped"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Alberto Schiabel",
|
||||||
|
"url": "https://github.com/jkomyno"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Alexander T.",
|
||||||
|
"url": "https://github.com/a-tarasyuk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Alvis HT Tang",
|
||||||
|
"url": "https://github.com/alvis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Andrew Makarov",
|
||||||
|
"url": "https://github.com/r3nya"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Benjamin Toueg",
|
||||||
|
"url": "https://github.com/btoueg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Bruno Scheufler",
|
||||||
|
"url": "https://github.com/brunoscheufler"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Chigozirim C.",
|
||||||
|
"url": "https://github.com/smac89"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Christian Vaagland Tellnes",
|
||||||
|
"url": "https://github.com/tellnes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "David Junger",
|
||||||
|
"url": "https://github.com/touffy"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Deividas Bakanas",
|
||||||
|
"url": "https://github.com/DeividasBakanas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Eugene Y. Q. Shen",
|
||||||
|
"url": "https://github.com/eyqs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Flarna",
|
||||||
|
"url": "https://github.com/Flarna"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Hannes Magnusson",
|
||||||
|
"url": "https://github.com/Hannes-Magnusson-CK"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Hoàng Văn Khải",
|
||||||
|
"url": "https://github.com/KSXGitHub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Huw",
|
||||||
|
"url": "https://github.com/hoo29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Kelvin Jin",
|
||||||
|
"url": "https://github.com/kjin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Klaus Meinhardt",
|
||||||
|
"url": "https://github.com/ajafff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Lishude",
|
||||||
|
"url": "https://github.com/islishude"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mariusz Wiktorczyk",
|
||||||
|
"url": "https://github.com/mwiktorczyk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mohsen Azimi",
|
||||||
|
"url": "https://github.com/mohsen1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Nicolas Even",
|
||||||
|
"url": "https://github.com/n-e"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Nicolas Voigt",
|
||||||
|
"url": "https://github.com/octo-sniffle"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Nikita Galkin",
|
||||||
|
"url": "https://github.com/galkin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Parambir Singh",
|
||||||
|
"url": "https://github.com/parambirs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Sebastian Silbermann",
|
||||||
|
"url": "https://github.com/eps1lon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Simon Schick",
|
||||||
|
"url": "https://github.com/SimonSchick"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Thomas den Hollander",
|
||||||
|
"url": "https://github.com/ThomasdenH"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Wilco Bakker",
|
||||||
|
"url": "https://github.com/WilcoBakker"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wwwy3y3",
|
||||||
|
"url": "https://github.com/wwwy3y3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Zane Hannan AU",
|
||||||
|
"url": "https://github.com/ZaneHannanAU"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Samuel Ainsworth",
|
||||||
|
"url": "https://github.com/samuela"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Kyle Uehlein",
|
||||||
|
"url": "https://github.com/kuehlein"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jordi Oliveras Rovira",
|
||||||
|
"url": "https://github.com/j-oliveras"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Thanik Bhongbhibhat",
|
||||||
|
"url": "https://github.com/bhongy"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Marcin Kopacz",
|
||||||
|
"url": "https://github.com/chyzwar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Trivikram Kamat",
|
||||||
|
"url": "https://github.com/trivikr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Minh Son Nguyen",
|
||||||
|
"url": "https://github.com/nguymin4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Junxiao Shi",
|
||||||
|
"url": "https://github.com/yoursunny"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ilia Baryshnikov",
|
||||||
|
"url": "https://github.com/qwelias"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ExE Boss",
|
||||||
|
"url": "https://github.com/ExE-Boss"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dependencies": {},
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "TypeScript definitions for Node.js",
|
||||||
|
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped#readme",
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "",
|
||||||
|
"name": "@types/node",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git",
|
||||||
|
"directory": "types/node"
|
||||||
|
},
|
||||||
|
"scripts": {},
|
||||||
|
"typeScriptVersion": "2.9",
|
||||||
|
"types": "index.d.ts",
|
||||||
|
"typesPublisherContentHash": "60af7847c220cd00dcfa9ee4b9b43f1565a9d903a9bed927acda212b644fca65",
|
||||||
|
"typesVersions": {
|
||||||
|
">=3.7.0-0": {
|
||||||
|
"*": [
|
||||||
|
"ts3.7/*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
">=3.2.0-0": {
|
||||||
|
"*": [
|
||||||
|
"ts3.2/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version": "12.12.38"
|
||||||
|
}
|
|
@ -0,0 +1,159 @@
|
||||||
|
declare module "path" {
|
||||||
|
/**
|
||||||
|
* A parsed path object generated by path.parse() or consumed by path.format().
|
||||||
|
*/
|
||||||
|
interface ParsedPath {
|
||||||
|
/**
|
||||||
|
* The root of the path such as '/' or 'c:\'
|
||||||
|
*/
|
||||||
|
root: string;
|
||||||
|
/**
|
||||||
|
* The full directory path such as '/home/user/dir' or 'c:\path\dir'
|
||||||
|
*/
|
||||||
|
dir: string;
|
||||||
|
/**
|
||||||
|
* The file name including extension (if any) such as 'index.html'
|
||||||
|
*/
|
||||||
|
base: string;
|
||||||
|
/**
|
||||||
|
* The file extension (if any) such as '.html'
|
||||||
|
*/
|
||||||
|
ext: string;
|
||||||
|
/**
|
||||||
|
* The file name without extension (if any) such as 'index'
|
||||||
|
*/
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
interface FormatInputPathObject {
|
||||||
|
/**
|
||||||
|
* The root of the path such as '/' or 'c:\'
|
||||||
|
*/
|
||||||
|
root?: string;
|
||||||
|
/**
|
||||||
|
* The full directory path such as '/home/user/dir' or 'c:\path\dir'
|
||||||
|
*/
|
||||||
|
dir?: string;
|
||||||
|
/**
|
||||||
|
* The file name including extension (if any) such as 'index.html'
|
||||||
|
*/
|
||||||
|
base?: string;
|
||||||
|
/**
|
||||||
|
* The file extension (if any) such as '.html'
|
||||||
|
*/
|
||||||
|
ext?: string;
|
||||||
|
/**
|
||||||
|
* The file name without extension (if any) such as 'index'
|
||||||
|
*/
|
||||||
|
name?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalize a string path, reducing '..' and '.' parts.
|
||||||
|
* When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used.
|
||||||
|
*
|
||||||
|
* @param p string path to normalize.
|
||||||
|
*/
|
||||||
|
function normalize(p: string): string;
|
||||||
|
/**
|
||||||
|
* Join all arguments together and normalize the resulting path.
|
||||||
|
* Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown.
|
||||||
|
*
|
||||||
|
* @param paths paths to join.
|
||||||
|
*/
|
||||||
|
function join(...paths: string[]): string;
|
||||||
|
/**
|
||||||
|
* The right-most parameter is considered {to}. Other parameters are considered an array of {from}.
|
||||||
|
*
|
||||||
|
* Starting from leftmost {from} parameter, resolves {to} to an absolute path.
|
||||||
|
*
|
||||||
|
* If {to} isn't already absolute, {from} arguments are prepended in right to left order,
|
||||||
|
* until an absolute path is found. If after using all {from} paths still no absolute path is found,
|
||||||
|
* the current working directory is used as well. The resulting path is normalized,
|
||||||
|
* and trailing slashes are removed unless the path gets resolved to the root directory.
|
||||||
|
*
|
||||||
|
* @param pathSegments string paths to join. Non-string arguments are ignored.
|
||||||
|
*/
|
||||||
|
function resolve(...pathSegments: string[]): string;
|
||||||
|
/**
|
||||||
|
* Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory.
|
||||||
|
*
|
||||||
|
* @param path path to test.
|
||||||
|
*/
|
||||||
|
function isAbsolute(path: string): boolean;
|
||||||
|
/**
|
||||||
|
* Solve the relative path from {from} to {to}.
|
||||||
|
* At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve.
|
||||||
|
*/
|
||||||
|
function relative(from: string, to: string): string;
|
||||||
|
/**
|
||||||
|
* Return the directory name of a path. Similar to the Unix dirname command.
|
||||||
|
*
|
||||||
|
* @param p the path to evaluate.
|
||||||
|
*/
|
||||||
|
function dirname(p: string): string;
|
||||||
|
/**
|
||||||
|
* Return the last portion of a path. Similar to the Unix basename command.
|
||||||
|
* Often used to extract the file name from a fully qualified path.
|
||||||
|
*
|
||||||
|
* @param p the path to evaluate.
|
||||||
|
* @param ext optionally, an extension to remove from the result.
|
||||||
|
*/
|
||||||
|
function basename(p: string, ext?: string): string;
|
||||||
|
/**
|
||||||
|
* Return the extension of the path, from the last '.' to end of string in the last portion of the path.
|
||||||
|
* If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string
|
||||||
|
*
|
||||||
|
* @param p the path to evaluate.
|
||||||
|
*/
|
||||||
|
function extname(p: string): string;
|
||||||
|
/**
|
||||||
|
* The platform-specific file separator. '\\' or '/'.
|
||||||
|
*/
|
||||||
|
const sep: '\\' | '/';
|
||||||
|
/**
|
||||||
|
* The platform-specific file delimiter. ';' or ':'.
|
||||||
|
*/
|
||||||
|
const delimiter: ';' | ':';
|
||||||
|
/**
|
||||||
|
* Returns an object from a path string - the opposite of format().
|
||||||
|
*
|
||||||
|
* @param pathString path to evaluate.
|
||||||
|
*/
|
||||||
|
function parse(pathString: string): ParsedPath;
|
||||||
|
/**
|
||||||
|
* Returns a path string from an object - the opposite of parse().
|
||||||
|
*
|
||||||
|
* @param pathString path to evaluate.
|
||||||
|
*/
|
||||||
|
function format(pathObject: FormatInputPathObject): string;
|
||||||
|
|
||||||
|
namespace posix {
|
||||||
|
function normalize(p: string): string;
|
||||||
|
function join(...paths: string[]): string;
|
||||||
|
function resolve(...pathSegments: string[]): string;
|
||||||
|
function isAbsolute(p: string): boolean;
|
||||||
|
function relative(from: string, to: string): string;
|
||||||
|
function dirname(p: string): string;
|
||||||
|
function basename(p: string, ext?: string): string;
|
||||||
|
function extname(p: string): string;
|
||||||
|
const sep: string;
|
||||||
|
const delimiter: string;
|
||||||
|
function parse(p: string): ParsedPath;
|
||||||
|
function format(pP: FormatInputPathObject): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace win32 {
|
||||||
|
function normalize(p: string): string;
|
||||||
|
function join(...paths: string[]): string;
|
||||||
|
function resolve(...pathSegments: string[]): string;
|
||||||
|
function isAbsolute(p: string): boolean;
|
||||||
|
function relative(from: string, to: string): string;
|
||||||
|
function dirname(p: string): string;
|
||||||
|
function basename(p: string, ext?: string): string;
|
||||||
|
function extname(p: string): string;
|
||||||
|
const sep: string;
|
||||||
|
const delimiter: string;
|
||||||
|
function parse(p: string): ParsedPath;
|
||||||
|
function format(pP: FormatInputPathObject): string;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,304 @@
|
||||||
|
declare module "perf_hooks" {
|
||||||
|
import { AsyncResource } from "async_hooks";
|
||||||
|
|
||||||
|
interface PerformanceEntry {
|
||||||
|
/**
|
||||||
|
* The total number of milliseconds elapsed for this entry.
|
||||||
|
* This value will not be meaningful for all Performance Entry types.
|
||||||
|
*/
|
||||||
|
readonly duration: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the performance entry.
|
||||||
|
*/
|
||||||
|
readonly name: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp marking the starting time of the Performance Entry.
|
||||||
|
*/
|
||||||
|
readonly startTime: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type of the performance entry.
|
||||||
|
* Currently it may be one of: 'node', 'mark', 'measure', 'gc', or 'function'.
|
||||||
|
*/
|
||||||
|
readonly entryType: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When performanceEntry.entryType is equal to 'gc', the performance.kind property identifies
|
||||||
|
* the type of garbage collection operation that occurred.
|
||||||
|
* The value may be one of perf_hooks.constants.
|
||||||
|
*/
|
||||||
|
readonly kind?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PerformanceNodeTiming extends PerformanceEntry {
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which the Node.js process completed bootstrap.
|
||||||
|
*/
|
||||||
|
readonly bootstrapComplete: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which cluster processing ended.
|
||||||
|
*/
|
||||||
|
readonly clusterSetupEnd: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which cluster processing started.
|
||||||
|
*/
|
||||||
|
readonly clusterSetupStart: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which the Node.js event loop exited.
|
||||||
|
*/
|
||||||
|
readonly loopExit: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which the Node.js event loop started.
|
||||||
|
*/
|
||||||
|
readonly loopStart: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which main module load ended.
|
||||||
|
*/
|
||||||
|
readonly moduleLoadEnd: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which main module load started.
|
||||||
|
*/
|
||||||
|
readonly moduleLoadStart: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which the Node.js process was initialized.
|
||||||
|
*/
|
||||||
|
readonly nodeStart: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which preload module load ended.
|
||||||
|
*/
|
||||||
|
readonly preloadModuleLoadEnd: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which preload module load started.
|
||||||
|
*/
|
||||||
|
readonly preloadModuleLoadStart: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which third_party_main processing ended.
|
||||||
|
*/
|
||||||
|
readonly thirdPartyMainEnd: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which third_party_main processing started.
|
||||||
|
*/
|
||||||
|
readonly thirdPartyMainStart: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The high resolution millisecond timestamp at which the V8 platform was initialized.
|
||||||
|
*/
|
||||||
|
readonly v8Start: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Performance {
|
||||||
|
/**
|
||||||
|
* If name is not provided, removes all PerformanceFunction objects from the Performance Timeline.
|
||||||
|
* If name is provided, removes entries with name.
|
||||||
|
* @param name
|
||||||
|
*/
|
||||||
|
clearFunctions(name?: string): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If name is not provided, removes all PerformanceMark objects from the Performance Timeline.
|
||||||
|
* If name is provided, removes only the named mark.
|
||||||
|
* @param name
|
||||||
|
*/
|
||||||
|
clearMarks(name?: string): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If name is not provided, removes all PerformanceMeasure objects from the Performance Timeline.
|
||||||
|
* If name is provided, removes only objects whose performanceEntry.name matches name.
|
||||||
|
*/
|
||||||
|
clearMeasures(name?: string): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all PerformanceEntry objects in chronological order with respect to performanceEntry.startTime.
|
||||||
|
* @return list of all PerformanceEntry objects
|
||||||
|
*/
|
||||||
|
getEntries(): PerformanceEntry[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all PerformanceEntry objects in chronological order with respect to performanceEntry.startTime
|
||||||
|
* whose performanceEntry.name is equal to name, and optionally, whose performanceEntry.entryType is equal to type.
|
||||||
|
* @param name
|
||||||
|
* @param type
|
||||||
|
* @return list of all PerformanceEntry objects
|
||||||
|
*/
|
||||||
|
getEntriesByName(name: string, type?: string): PerformanceEntry[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all PerformanceEntry objects in chronological order with respect to performanceEntry.startTime
|
||||||
|
* whose performanceEntry.entryType is equal to type.
|
||||||
|
* @param type
|
||||||
|
* @return list of all PerformanceEntry objects
|
||||||
|
*/
|
||||||
|
getEntriesByType(type: string): PerformanceEntry[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new PerformanceMark entry in the Performance Timeline.
|
||||||
|
* A PerformanceMark is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'mark',
|
||||||
|
* and whose performanceEntry.duration is always 0.
|
||||||
|
* Performance marks are used to mark specific significant moments in the Performance Timeline.
|
||||||
|
* @param name
|
||||||
|
*/
|
||||||
|
mark(name?: string): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new PerformanceMeasure entry in the Performance Timeline.
|
||||||
|
* A PerformanceMeasure is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'measure',
|
||||||
|
* and whose performanceEntry.duration measures the number of milliseconds elapsed since startMark and endMark.
|
||||||
|
*
|
||||||
|
* The startMark argument may identify any existing PerformanceMark in the the Performance Timeline, or may identify
|
||||||
|
* any of the timestamp properties provided by the PerformanceNodeTiming class. If the named startMark does not exist,
|
||||||
|
* then startMark is set to timeOrigin by default.
|
||||||
|
*
|
||||||
|
* The endMark argument must identify any existing PerformanceMark in the the Performance Timeline or any of the timestamp
|
||||||
|
* properties provided by the PerformanceNodeTiming class. If the named endMark does not exist, an error will be thrown.
|
||||||
|
* @param name
|
||||||
|
* @param startMark
|
||||||
|
* @param endMark
|
||||||
|
*/
|
||||||
|
measure(name: string, startMark: string, endMark: string): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instance of the PerformanceNodeTiming class that provides performance metrics for specific Node.js operational milestones.
|
||||||
|
*/
|
||||||
|
readonly nodeTiming: PerformanceNodeTiming;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the current high resolution millisecond timestamp
|
||||||
|
*/
|
||||||
|
now(): number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The timeOrigin specifies the high resolution millisecond timestamp from which all performance metric durations are measured.
|
||||||
|
*/
|
||||||
|
readonly timeOrigin: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wraps a function within a new function that measures the running time of the wrapped function.
|
||||||
|
* A PerformanceObserver must be subscribed to the 'function' event type in order for the timing details to be accessed.
|
||||||
|
* @param fn
|
||||||
|
*/
|
||||||
|
timerify<T extends (...optionalParams: any[]) => any>(fn: T): T;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PerformanceObserverEntryList {
|
||||||
|
/**
|
||||||
|
* @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime.
|
||||||
|
*/
|
||||||
|
getEntries(): PerformanceEntry[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime
|
||||||
|
* whose performanceEntry.name is equal to name, and optionally, whose performanceEntry.entryType is equal to type.
|
||||||
|
*/
|
||||||
|
getEntriesByName(name: string, type?: string): PerformanceEntry[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Returns a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime
|
||||||
|
* whose performanceEntry.entryType is equal to type.
|
||||||
|
*/
|
||||||
|
getEntriesByType(type: string): PerformanceEntry[];
|
||||||
|
}
|
||||||
|
|
||||||
|
type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void;
|
||||||
|
|
||||||
|
class PerformanceObserver extends AsyncResource {
|
||||||
|
constructor(callback: PerformanceObserverCallback);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects the PerformanceObserver instance from all notifications.
|
||||||
|
*/
|
||||||
|
disconnect(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subscribes the PerformanceObserver instance to notifications of new PerformanceEntry instances identified by options.entryTypes.
|
||||||
|
* When options.buffered is false, the callback will be invoked once for every PerformanceEntry instance.
|
||||||
|
* Property buffered defaults to false.
|
||||||
|
* @param options
|
||||||
|
*/
|
||||||
|
observe(options: { entryTypes: string[], buffered?: boolean }): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace constants {
|
||||||
|
const NODE_PERFORMANCE_GC_MAJOR: number;
|
||||||
|
const NODE_PERFORMANCE_GC_MINOR: number;
|
||||||
|
const NODE_PERFORMANCE_GC_INCREMENTAL: number;
|
||||||
|
const NODE_PERFORMANCE_GC_WEAKCB: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
const performance: Performance;
|
||||||
|
|
||||||
|
interface EventLoopMonitorOptions {
|
||||||
|
/**
|
||||||
|
* The sampling rate in milliseconds.
|
||||||
|
* Must be greater than zero.
|
||||||
|
* @default 10
|
||||||
|
*/
|
||||||
|
resolution?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface EventLoopDelayMonitor {
|
||||||
|
/**
|
||||||
|
* Enables the event loop delay sample timer. Returns `true` if the timer was started, `false` if it was already started.
|
||||||
|
*/
|
||||||
|
enable(): boolean;
|
||||||
|
/**
|
||||||
|
* Disables the event loop delay sample timer. Returns `true` if the timer was stopped, `false` if it was already stopped.
|
||||||
|
*/
|
||||||
|
disable(): boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the collected histogram data.
|
||||||
|
*/
|
||||||
|
reset(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value at the given percentile.
|
||||||
|
* @param percentile A percentile value between 1 and 100.
|
||||||
|
*/
|
||||||
|
percentile(percentile: number): number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A `Map` object detailing the accumulated percentile distribution.
|
||||||
|
*/
|
||||||
|
readonly percentiles: Map<number, number>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of times the event loop delay exceeded the maximum 1 hour eventloop delay threshold.
|
||||||
|
*/
|
||||||
|
readonly exceeds: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The minimum recorded event loop delay.
|
||||||
|
*/
|
||||||
|
readonly min: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum recorded event loop delay.
|
||||||
|
*/
|
||||||
|
readonly max: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The mean of the recorded event loop delays.
|
||||||
|
*/
|
||||||
|
readonly mean: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The standard deviation of the recorded event loop delays.
|
||||||
|
*/
|
||||||
|
readonly stddev: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
function monitorEventLoopDelay(options?: EventLoopMonitorOptions): EventLoopDelayMonitor;
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
declare module "process" {
|
||||||
|
import * as tty from "tty";
|
||||||
|
|
||||||
|
global {
|
||||||
|
namespace NodeJS {
|
||||||
|
// this namespace merge is here because these are specifically used
|
||||||
|
// as the type for process.stdin, process.stdout, and process.stderr.
|
||||||
|
// they can't live in tty.d.ts because we need to disambiguate the imported name.
|
||||||
|
interface ReadStream extends tty.ReadStream {}
|
||||||
|
interface WriteStream extends tty.WriteStream {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export = process;
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
declare module "punycode" {
|
||||||
|
function decode(string: string): string;
|
||||||
|
function encode(string: string): string;
|
||||||
|
function toUnicode(domain: string): string;
|
||||||
|
function toASCII(domain: string): string;
|
||||||
|
const ucs2: ucs2;
|
||||||
|
interface ucs2 {
|
||||||
|
decode(string: string): number[];
|
||||||
|
encode(codePoints: number[]): string;
|
||||||
|
}
|
||||||
|
const version: string;
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
declare module "querystring" {
|
||||||
|
interface StringifyOptions {
|
||||||
|
encodeURIComponent?: (str: string) => string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ParseOptions {
|
||||||
|
maxKeys?: number;
|
||||||
|
decodeURIComponent?: (str: string) => string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ParsedUrlQuery { [key: string]: string | string[]; }
|
||||||
|
|
||||||
|
interface ParsedUrlQueryInput {
|
||||||
|
[key: string]: string | number | boolean | string[] | number[] | boolean[] | undefined | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function stringify(obj?: ParsedUrlQueryInput, sep?: string, eq?: string, options?: StringifyOptions): string;
|
||||||
|
function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): ParsedUrlQuery;
|
||||||
|
/**
|
||||||
|
* The querystring.encode() function is an alias for querystring.stringify().
|
||||||
|
*/
|
||||||
|
const encode: typeof stringify;
|
||||||
|
/**
|
||||||
|
* The querystring.decode() function is an alias for querystring.parse().
|
||||||
|
*/
|
||||||
|
const decode: typeof parse;
|
||||||
|
function escape(str: string): string;
|
||||||
|
function unescape(str: string): string;
|
||||||
|
}
|
|
@ -0,0 +1,158 @@
|
||||||
|
declare module "readline" {
|
||||||
|
import * as events from "events";
|
||||||
|
import * as stream from "stream";
|
||||||
|
|
||||||
|
interface Key {
|
||||||
|
sequence?: string;
|
||||||
|
name?: string;
|
||||||
|
ctrl?: boolean;
|
||||||
|
meta?: boolean;
|
||||||
|
shift?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Interface extends events.EventEmitter {
|
||||||
|
readonly terminal: boolean;
|
||||||
|
|
||||||
|
// Need direct access to line/cursor data, for use in external processes
|
||||||
|
// see: https://github.com/nodejs/node/issues/30347
|
||||||
|
/** The current input data */
|
||||||
|
readonly line: string;
|
||||||
|
/** The current cursor position in the input line */
|
||||||
|
readonly cursor: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NOTE: According to the documentation:
|
||||||
|
*
|
||||||
|
* > Instances of the `readline.Interface` class are constructed using the
|
||||||
|
* > `readline.createInterface()` method.
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface
|
||||||
|
*/
|
||||||
|
protected constructor(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean);
|
||||||
|
/**
|
||||||
|
* NOTE: According to the documentation:
|
||||||
|
*
|
||||||
|
* > Instances of the `readline.Interface` class are constructed using the
|
||||||
|
* > `readline.createInterface()` method.
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface
|
||||||
|
*/
|
||||||
|
protected constructor(options: ReadLineOptions);
|
||||||
|
|
||||||
|
setPrompt(prompt: string): void;
|
||||||
|
prompt(preserveCursor?: boolean): void;
|
||||||
|
question(query: string, callback: (answer: string) => void): void;
|
||||||
|
pause(): this;
|
||||||
|
resume(): this;
|
||||||
|
close(): void;
|
||||||
|
write(data: string | Buffer, key?: Key): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* events.EventEmitter
|
||||||
|
* 1. close
|
||||||
|
* 2. line
|
||||||
|
* 3. pause
|
||||||
|
* 4. resume
|
||||||
|
* 5. SIGCONT
|
||||||
|
* 6. SIGINT
|
||||||
|
* 7. SIGTSTP
|
||||||
|
*/
|
||||||
|
|
||||||
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
addListener(event: "close", listener: () => void): this;
|
||||||
|
addListener(event: "line", listener: (input: string) => void): this;
|
||||||
|
addListener(event: "pause", listener: () => void): this;
|
||||||
|
addListener(event: "resume", listener: () => void): this;
|
||||||
|
addListener(event: "SIGCONT", listener: () => void): this;
|
||||||
|
addListener(event: "SIGINT", listener: () => void): this;
|
||||||
|
addListener(event: "SIGTSTP", listener: () => void): this;
|
||||||
|
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
emit(event: "close"): boolean;
|
||||||
|
emit(event: "line", input: string): boolean;
|
||||||
|
emit(event: "pause"): boolean;
|
||||||
|
emit(event: "resume"): boolean;
|
||||||
|
emit(event: "SIGCONT"): boolean;
|
||||||
|
emit(event: "SIGINT"): boolean;
|
||||||
|
emit(event: "SIGTSTP"): boolean;
|
||||||
|
|
||||||
|
on(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: "close", listener: () => void): this;
|
||||||
|
on(event: "line", listener: (input: string) => void): this;
|
||||||
|
on(event: "pause", listener: () => void): this;
|
||||||
|
on(event: "resume", listener: () => void): this;
|
||||||
|
on(event: "SIGCONT", listener: () => void): this;
|
||||||
|
on(event: "SIGINT", listener: () => void): this;
|
||||||
|
on(event: "SIGTSTP", listener: () => void): this;
|
||||||
|
|
||||||
|
once(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: "close", listener: () => void): this;
|
||||||
|
once(event: "line", listener: (input: string) => void): this;
|
||||||
|
once(event: "pause", listener: () => void): this;
|
||||||
|
once(event: "resume", listener: () => void): this;
|
||||||
|
once(event: "SIGCONT", listener: () => void): this;
|
||||||
|
once(event: "SIGINT", listener: () => void): this;
|
||||||
|
once(event: "SIGTSTP", listener: () => void): this;
|
||||||
|
|
||||||
|
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: "close", listener: () => void): this;
|
||||||
|
prependListener(event: "line", listener: (input: string) => void): this;
|
||||||
|
prependListener(event: "pause", listener: () => void): this;
|
||||||
|
prependListener(event: "resume", listener: () => void): this;
|
||||||
|
prependListener(event: "SIGCONT", listener: () => void): this;
|
||||||
|
prependListener(event: "SIGINT", listener: () => void): this;
|
||||||
|
prependListener(event: "SIGTSTP", listener: () => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: "close", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "line", listener: (input: string) => void): this;
|
||||||
|
prependOnceListener(event: "pause", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "resume", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "SIGCONT", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "SIGINT", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "SIGTSTP", listener: () => void): this;
|
||||||
|
[Symbol.asyncIterator](): AsyncIterableIterator<string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReadLine = Interface; // type forwarded for backwards compatiblity
|
||||||
|
|
||||||
|
type Completer = (line: string) => CompleterResult;
|
||||||
|
type AsyncCompleter = (line: string, callback: (err?: null | Error, result?: CompleterResult) => void) => any;
|
||||||
|
|
||||||
|
type CompleterResult = [string[], string];
|
||||||
|
|
||||||
|
interface ReadLineOptions {
|
||||||
|
input: NodeJS.ReadableStream;
|
||||||
|
output?: NodeJS.WritableStream;
|
||||||
|
completer?: Completer | AsyncCompleter;
|
||||||
|
terminal?: boolean;
|
||||||
|
historySize?: number;
|
||||||
|
prompt?: string;
|
||||||
|
crlfDelay?: number;
|
||||||
|
removeHistoryDuplicates?: boolean;
|
||||||
|
escapeCodeTimeout?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createInterface(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean): Interface;
|
||||||
|
function createInterface(options: ReadLineOptions): Interface;
|
||||||
|
function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void;
|
||||||
|
|
||||||
|
type Direction = -1 | 0 | 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the current line of this WriteStream in a direction identified by `dir`.
|
||||||
|
*/
|
||||||
|
function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean;
|
||||||
|
/**
|
||||||
|
* Clears this `WriteStream` from the current cursor down.
|
||||||
|
*/
|
||||||
|
function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean;
|
||||||
|
/**
|
||||||
|
* Moves this WriteStream's cursor to the specified position.
|
||||||
|
*/
|
||||||
|
function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean;
|
||||||
|
/**
|
||||||
|
* Moves this WriteStream's cursor relative to its current position.
|
||||||
|
*/
|
||||||
|
function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean;
|
||||||
|
}
|
|
@ -0,0 +1,382 @@
|
||||||
|
declare module "repl" {
|
||||||
|
import { Interface, Completer, AsyncCompleter } from "readline";
|
||||||
|
import { Context } from "vm";
|
||||||
|
import { InspectOptions } from "util";
|
||||||
|
|
||||||
|
interface ReplOptions {
|
||||||
|
/**
|
||||||
|
* The input prompt to display.
|
||||||
|
* Default: `"> "`
|
||||||
|
*/
|
||||||
|
prompt?: string;
|
||||||
|
/**
|
||||||
|
* The `Readable` stream from which REPL input will be read.
|
||||||
|
* Default: `process.stdin`
|
||||||
|
*/
|
||||||
|
input?: NodeJS.ReadableStream;
|
||||||
|
/**
|
||||||
|
* The `Writable` stream to which REPL output will be written.
|
||||||
|
* Default: `process.stdout`
|
||||||
|
*/
|
||||||
|
output?: NodeJS.WritableStream;
|
||||||
|
/**
|
||||||
|
* If `true`, specifies that the output should be treated as a TTY terminal, and have
|
||||||
|
* ANSI/VT100 escape codes written to it.
|
||||||
|
* Default: checking the value of the `isTTY` property on the output stream upon
|
||||||
|
* instantiation.
|
||||||
|
*/
|
||||||
|
terminal?: boolean;
|
||||||
|
/**
|
||||||
|
* The function to be used when evaluating each given line of input.
|
||||||
|
* Default: an async wrapper for the JavaScript `eval()` function. An `eval` function can
|
||||||
|
* error with `repl.Recoverable` to indicate the input was incomplete and prompt for
|
||||||
|
* additional lines.
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_default_evaluation
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_custom_evaluation_functions
|
||||||
|
*/
|
||||||
|
eval?: REPLEval;
|
||||||
|
/**
|
||||||
|
* If `true`, specifies that the default `writer` function should include ANSI color
|
||||||
|
* styling to REPL output. If a custom `writer` function is provided then this has no
|
||||||
|
* effect.
|
||||||
|
* Default: the REPL instance's `terminal` value.
|
||||||
|
*/
|
||||||
|
useColors?: boolean;
|
||||||
|
/**
|
||||||
|
* If `true`, specifies that the default evaluation function will use the JavaScript
|
||||||
|
* `global` as the context as opposed to creating a new separate context for the REPL
|
||||||
|
* instance. The node CLI REPL sets this value to `true`.
|
||||||
|
* Default: `false`.
|
||||||
|
*/
|
||||||
|
useGlobal?: boolean;
|
||||||
|
/**
|
||||||
|
* If `true`, specifies that the default writer will not output the return value of a
|
||||||
|
* command if it evaluates to `undefined`.
|
||||||
|
* Default: `false`.
|
||||||
|
*/
|
||||||
|
ignoreUndefined?: boolean;
|
||||||
|
/**
|
||||||
|
* The function to invoke to format the output of each command before writing to `output`.
|
||||||
|
* Default: a wrapper for `util.inspect`.
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_customizing_repl_output
|
||||||
|
*/
|
||||||
|
writer?: REPLWriter;
|
||||||
|
/**
|
||||||
|
* An optional function used for custom Tab auto completion.
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v11.x/docs/api/readline.html#readline_use_of_the_completer_function
|
||||||
|
*/
|
||||||
|
completer?: Completer | AsyncCompleter;
|
||||||
|
/**
|
||||||
|
* A flag that specifies whether the default evaluator executes all JavaScript commands in
|
||||||
|
* strict mode or default (sloppy) mode.
|
||||||
|
* Accepted values are:
|
||||||
|
* - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode.
|
||||||
|
* - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to
|
||||||
|
* prefacing every repl statement with `'use strict'`.
|
||||||
|
*/
|
||||||
|
replMode?: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT;
|
||||||
|
/**
|
||||||
|
* Stop evaluating the current piece of code when `SIGINT` is received, i.e. `Ctrl+C` is
|
||||||
|
* pressed. This cannot be used together with a custom `eval` function.
|
||||||
|
* Default: `false`.
|
||||||
|
*/
|
||||||
|
breakEvalOnSigint?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
type REPLEval = (this: REPLServer, evalCmd: string, context: Context, file: string, cb: (err: Error | null, result: any) => void) => void;
|
||||||
|
type REPLWriter = (this: REPLServer, obj: any) => string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the default "writer" value, if none is passed in the REPL options,
|
||||||
|
* and it can be overridden by custom print functions.
|
||||||
|
*/
|
||||||
|
const writer: REPLWriter & { options: InspectOptions };
|
||||||
|
|
||||||
|
type REPLCommandAction = (this: REPLServer, text: string) => void;
|
||||||
|
|
||||||
|
interface REPLCommand {
|
||||||
|
/**
|
||||||
|
* Help text to be displayed when `.help` is entered.
|
||||||
|
*/
|
||||||
|
help?: string;
|
||||||
|
/**
|
||||||
|
* The function to execute, optionally accepting a single string argument.
|
||||||
|
*/
|
||||||
|
action: REPLCommandAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a customizable Read-Eval-Print-Loop (REPL).
|
||||||
|
*
|
||||||
|
* Instances of `repl.REPLServer` will accept individual lines of user input, evaluate those
|
||||||
|
* according to a user-defined evaluation function, then output the result. Input and output
|
||||||
|
* may be from `stdin` and `stdout`, respectively, or may be connected to any Node.js `stream`.
|
||||||
|
*
|
||||||
|
* Instances of `repl.REPLServer` support automatic completion of inputs, simplistic Emacs-style
|
||||||
|
* line editing, multi-line inputs, ANSI-styled output, saving and restoring current REPL session
|
||||||
|
* state, error recovery, and customizable evaluation functions.
|
||||||
|
*
|
||||||
|
* Instances of `repl.REPLServer` are created using the `repl.start()` method and _should not_
|
||||||
|
* be created directly using the JavaScript `new` keyword.
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_repl
|
||||||
|
*/
|
||||||
|
class REPLServer extends Interface {
|
||||||
|
/**
|
||||||
|
* The `vm.Context` provided to the `eval` function to be used for JavaScript
|
||||||
|
* evaluation.
|
||||||
|
*/
|
||||||
|
readonly context: Context;
|
||||||
|
/**
|
||||||
|
* The `Readable` stream from which REPL input will be read.
|
||||||
|
*/
|
||||||
|
readonly inputStream: NodeJS.ReadableStream;
|
||||||
|
/**
|
||||||
|
* The `Writable` stream to which REPL output will be written.
|
||||||
|
*/
|
||||||
|
readonly outputStream: NodeJS.WritableStream;
|
||||||
|
/**
|
||||||
|
* The commands registered via `replServer.defineCommand()`.
|
||||||
|
*/
|
||||||
|
readonly commands: { readonly [name: string]: REPLCommand | undefined };
|
||||||
|
/**
|
||||||
|
* A value indicating whether the REPL is currently in "editor mode".
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_commands_and_special_keys
|
||||||
|
*/
|
||||||
|
readonly editorMode: boolean;
|
||||||
|
/**
|
||||||
|
* A value indicating whether the `_` variable has been assigned.
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable
|
||||||
|
*/
|
||||||
|
readonly underscoreAssigned: boolean;
|
||||||
|
/**
|
||||||
|
* The last evaluation result from the REPL (assigned to the `_` variable inside of the REPL).
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable
|
||||||
|
*/
|
||||||
|
readonly last: any;
|
||||||
|
/**
|
||||||
|
* A value indicating whether the `_error` variable has been assigned.
|
||||||
|
*
|
||||||
|
* @since v9.8.0
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable
|
||||||
|
*/
|
||||||
|
readonly underscoreErrAssigned: boolean;
|
||||||
|
/**
|
||||||
|
* The last error raised inside the REPL (assigned to the `_error` variable inside of the REPL).
|
||||||
|
*
|
||||||
|
* @since v9.8.0
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable
|
||||||
|
*/
|
||||||
|
readonly lastError: any;
|
||||||
|
/**
|
||||||
|
* Specified in the REPL options, this is the function to be used when evaluating each
|
||||||
|
* given line of input. If not specified in the REPL options, this is an async wrapper
|
||||||
|
* for the JavaScript `eval()` function.
|
||||||
|
*/
|
||||||
|
readonly eval: REPLEval;
|
||||||
|
/**
|
||||||
|
* Specified in the REPL options, this is a value indicating whether the default
|
||||||
|
* `writer` function should include ANSI color styling to REPL output.
|
||||||
|
*/
|
||||||
|
readonly useColors: boolean;
|
||||||
|
/**
|
||||||
|
* Specified in the REPL options, this is a value indicating whether the default `eval`
|
||||||
|
* function will use the JavaScript `global` as the context as opposed to creating a new
|
||||||
|
* separate context for the REPL instance.
|
||||||
|
*/
|
||||||
|
readonly useGlobal: boolean;
|
||||||
|
/**
|
||||||
|
* Specified in the REPL options, this is a value indicating whether the default `writer`
|
||||||
|
* function should output the result of a command if it evaluates to `undefined`.
|
||||||
|
*/
|
||||||
|
readonly ignoreUndefined: boolean;
|
||||||
|
/**
|
||||||
|
* Specified in the REPL options, this is the function to invoke to format the output of
|
||||||
|
* each command before writing to `outputStream`. If not specified in the REPL options,
|
||||||
|
* this will be a wrapper for `util.inspect`.
|
||||||
|
*/
|
||||||
|
readonly writer: REPLWriter;
|
||||||
|
/**
|
||||||
|
* Specified in the REPL options, this is the function to use for custom Tab auto-completion.
|
||||||
|
*/
|
||||||
|
readonly completer: Completer | AsyncCompleter;
|
||||||
|
/**
|
||||||
|
* Specified in the REPL options, this is a flag that specifies whether the default `eval`
|
||||||
|
* function should execute all JavaScript commands in strict mode or default (sloppy) mode.
|
||||||
|
* Possible values are:
|
||||||
|
* - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode.
|
||||||
|
* - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to
|
||||||
|
* prefacing every repl statement with `'use strict'`.
|
||||||
|
*/
|
||||||
|
readonly replMode: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NOTE: According to the documentation:
|
||||||
|
*
|
||||||
|
* > Instances of `repl.REPLServer` are created using the `repl.start()` method and
|
||||||
|
* > _should not_ be created directly using the JavaScript `new` keyword.
|
||||||
|
*
|
||||||
|
* `REPLServer` cannot be subclassed due to implementation specifics in NodeJS.
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_class_replserver
|
||||||
|
*/
|
||||||
|
private constructor();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to add new `.`-prefixed commands to the REPL instance. Such commands are invoked
|
||||||
|
* by typing a `.` followed by the `keyword`.
|
||||||
|
*
|
||||||
|
* @param keyword The command keyword (_without_ a leading `.` character).
|
||||||
|
* @param cmd The function to invoke when the command is processed.
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_replserver_definecommand_keyword_cmd
|
||||||
|
*/
|
||||||
|
defineCommand(keyword: string, cmd: REPLCommandAction | REPLCommand): void;
|
||||||
|
/**
|
||||||
|
* Readies the REPL instance for input from the user, printing the configured `prompt` to a
|
||||||
|
* new line in the `output` and resuming the `input` to accept new input.
|
||||||
|
*
|
||||||
|
* When multi-line input is being entered, an ellipsis is printed rather than the 'prompt'.
|
||||||
|
*
|
||||||
|
* This method is primarily intended to be called from within the action function for
|
||||||
|
* commands registered using the `replServer.defineCommand()` method.
|
||||||
|
*
|
||||||
|
* @param preserveCursor When `true`, the cursor placement will not be reset to `0`.
|
||||||
|
*/
|
||||||
|
displayPrompt(preserveCursor?: boolean): void;
|
||||||
|
/**
|
||||||
|
* Clears any command that has been buffered but not yet executed.
|
||||||
|
*
|
||||||
|
* This method is primarily intended to be called from within the action function for
|
||||||
|
* commands registered using the `replServer.defineCommand()` method.
|
||||||
|
*
|
||||||
|
* @since v9.0.0
|
||||||
|
*/
|
||||||
|
clearBufferedCommand(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a history log file for the REPL instance. When executing the
|
||||||
|
* Node.js binary and using the command line REPL, a history file is initialized
|
||||||
|
* by default. However, this is not the case when creating a REPL
|
||||||
|
* programmatically. Use this method to initialize a history log file when working
|
||||||
|
* with REPL instances programmatically.
|
||||||
|
* @param path The path to the history file
|
||||||
|
*/
|
||||||
|
setupHistory(path: string, cb: (err: Error | null, repl: this) => void): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* events.EventEmitter
|
||||||
|
* 1. close - inherited from `readline.Interface`
|
||||||
|
* 2. line - inherited from `readline.Interface`
|
||||||
|
* 3. pause - inherited from `readline.Interface`
|
||||||
|
* 4. resume - inherited from `readline.Interface`
|
||||||
|
* 5. SIGCONT - inherited from `readline.Interface`
|
||||||
|
* 6. SIGINT - inherited from `readline.Interface`
|
||||||
|
* 7. SIGTSTP - inherited from `readline.Interface`
|
||||||
|
* 8. exit
|
||||||
|
* 9. reset
|
||||||
|
*/
|
||||||
|
|
||||||
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
addListener(event: "close", listener: () => void): this;
|
||||||
|
addListener(event: "line", listener: (input: string) => void): this;
|
||||||
|
addListener(event: "pause", listener: () => void): this;
|
||||||
|
addListener(event: "resume", listener: () => void): this;
|
||||||
|
addListener(event: "SIGCONT", listener: () => void): this;
|
||||||
|
addListener(event: "SIGINT", listener: () => void): this;
|
||||||
|
addListener(event: "SIGTSTP", listener: () => void): this;
|
||||||
|
addListener(event: "exit", listener: () => void): this;
|
||||||
|
addListener(event: "reset", listener: (context: Context) => void): this;
|
||||||
|
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
emit(event: "close"): boolean;
|
||||||
|
emit(event: "line", input: string): boolean;
|
||||||
|
emit(event: "pause"): boolean;
|
||||||
|
emit(event: "resume"): boolean;
|
||||||
|
emit(event: "SIGCONT"): boolean;
|
||||||
|
emit(event: "SIGINT"): boolean;
|
||||||
|
emit(event: "SIGTSTP"): boolean;
|
||||||
|
emit(event: "exit"): boolean;
|
||||||
|
emit(event: "reset", context: Context): boolean;
|
||||||
|
|
||||||
|
on(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: "close", listener: () => void): this;
|
||||||
|
on(event: "line", listener: (input: string) => void): this;
|
||||||
|
on(event: "pause", listener: () => void): this;
|
||||||
|
on(event: "resume", listener: () => void): this;
|
||||||
|
on(event: "SIGCONT", listener: () => void): this;
|
||||||
|
on(event: "SIGINT", listener: () => void): this;
|
||||||
|
on(event: "SIGTSTP", listener: () => void): this;
|
||||||
|
on(event: "exit", listener: () => void): this;
|
||||||
|
on(event: "reset", listener: (context: Context) => void): this;
|
||||||
|
|
||||||
|
once(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: "close", listener: () => void): this;
|
||||||
|
once(event: "line", listener: (input: string) => void): this;
|
||||||
|
once(event: "pause", listener: () => void): this;
|
||||||
|
once(event: "resume", listener: () => void): this;
|
||||||
|
once(event: "SIGCONT", listener: () => void): this;
|
||||||
|
once(event: "SIGINT", listener: () => void): this;
|
||||||
|
once(event: "SIGTSTP", listener: () => void): this;
|
||||||
|
once(event: "exit", listener: () => void): this;
|
||||||
|
once(event: "reset", listener: (context: Context) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: "close", listener: () => void): this;
|
||||||
|
prependListener(event: "line", listener: (input: string) => void): this;
|
||||||
|
prependListener(event: "pause", listener: () => void): this;
|
||||||
|
prependListener(event: "resume", listener: () => void): this;
|
||||||
|
prependListener(event: "SIGCONT", listener: () => void): this;
|
||||||
|
prependListener(event: "SIGINT", listener: () => void): this;
|
||||||
|
prependListener(event: "SIGTSTP", listener: () => void): this;
|
||||||
|
prependListener(event: "exit", listener: () => void): this;
|
||||||
|
prependListener(event: "reset", listener: (context: Context) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: "close", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "line", listener: (input: string) => void): this;
|
||||||
|
prependOnceListener(event: "pause", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "resume", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "SIGCONT", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "SIGINT", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "SIGTSTP", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "exit", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "reset", listener: (context: Context) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A flag passed in the REPL options. Evaluates expressions in sloppy mode.
|
||||||
|
*/
|
||||||
|
const REPL_MODE_SLOPPY: symbol; // TODO: unique symbol
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A flag passed in the REPL options. Evaluates expressions in strict mode.
|
||||||
|
* This is equivalent to prefacing every repl statement with `'use strict'`.
|
||||||
|
*/
|
||||||
|
const REPL_MODE_STRICT: symbol; // TODO: unique symbol
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and starts a `repl.REPLServer` instance.
|
||||||
|
*
|
||||||
|
* @param options The options for the `REPLServer`. If `options` is a string, then it specifies
|
||||||
|
* the input prompt.
|
||||||
|
*/
|
||||||
|
function start(options?: string | ReplOptions): REPLServer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates a recoverable error that a `REPLServer` can use to support multi-line input.
|
||||||
|
*
|
||||||
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_recoverable_errors
|
||||||
|
*/
|
||||||
|
class Recoverable extends SyntaxError {
|
||||||
|
err: Error;
|
||||||
|
|
||||||
|
constructor(err: Error);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,327 @@
|
||||||
|
declare module "stream" {
|
||||||
|
import * as events from "events";
|
||||||
|
|
||||||
|
class internal extends events.EventEmitter {
|
||||||
|
pipe<T extends NodeJS.WritableStream>(destination: T, options?: { end?: boolean; }): T;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace internal {
|
||||||
|
class Stream extends internal { }
|
||||||
|
|
||||||
|
interface ReadableOptions {
|
||||||
|
highWaterMark?: number;
|
||||||
|
encoding?: string;
|
||||||
|
objectMode?: boolean;
|
||||||
|
read?(this: Readable, size: number): void;
|
||||||
|
destroy?(this: Readable, error: Error | null, callback: (error: Error | null) => void): void;
|
||||||
|
autoDestroy?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Readable extends Stream implements NodeJS.ReadableStream {
|
||||||
|
/**
|
||||||
|
* A utility method for creating Readable Streams out of iterators.
|
||||||
|
*/
|
||||||
|
static from(iterable: Iterable<any> | AsyncIterable<any>, options?: ReadableOptions): Readable;
|
||||||
|
|
||||||
|
readable: boolean;
|
||||||
|
readonly readableHighWaterMark: number;
|
||||||
|
readonly readableLength: number;
|
||||||
|
readonly readableObjectMode: boolean;
|
||||||
|
destroyed: boolean;
|
||||||
|
constructor(opts?: ReadableOptions);
|
||||||
|
_read(size: number): void;
|
||||||
|
read(size?: number): any;
|
||||||
|
setEncoding(encoding: string): this;
|
||||||
|
pause(): this;
|
||||||
|
resume(): this;
|
||||||
|
isPaused(): boolean;
|
||||||
|
unpipe(destination?: NodeJS.WritableStream): this;
|
||||||
|
unshift(chunk: any, encoding?: BufferEncoding): void;
|
||||||
|
wrap(oldStream: NodeJS.ReadableStream): this;
|
||||||
|
push(chunk: any, encoding?: string): boolean;
|
||||||
|
_destroy(error: Error | null, callback: (error?: Error | null) => void): void;
|
||||||
|
destroy(error?: Error): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event emitter
|
||||||
|
* The defined events on documents including:
|
||||||
|
* 1. close
|
||||||
|
* 2. data
|
||||||
|
* 3. end
|
||||||
|
* 4. readable
|
||||||
|
* 5. error
|
||||||
|
*/
|
||||||
|
addListener(event: "close", listener: () => void): this;
|
||||||
|
addListener(event: "data", listener: (chunk: any) => void): this;
|
||||||
|
addListener(event: "end", listener: () => void): this;
|
||||||
|
addListener(event: "readable", listener: () => void): this;
|
||||||
|
addListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
emit(event: "close"): boolean;
|
||||||
|
emit(event: "data", chunk: any): boolean;
|
||||||
|
emit(event: "end"): boolean;
|
||||||
|
emit(event: "readable"): boolean;
|
||||||
|
emit(event: "error", err: Error): boolean;
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
|
||||||
|
on(event: "close", listener: () => void): this;
|
||||||
|
on(event: "data", listener: (chunk: any) => void): this;
|
||||||
|
on(event: "end", listener: () => void): this;
|
||||||
|
on(event: "readable", listener: () => void): this;
|
||||||
|
on(event: "error", listener: (err: Error) => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: "close", listener: () => void): this;
|
||||||
|
once(event: "data", listener: (chunk: any) => void): this;
|
||||||
|
once(event: "end", listener: () => void): this;
|
||||||
|
once(event: "readable", listener: () => void): this;
|
||||||
|
once(event: "error", listener: (err: Error) => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: "close", listener: () => void): this;
|
||||||
|
prependListener(event: "data", listener: (chunk: any) => void): this;
|
||||||
|
prependListener(event: "end", listener: () => void): this;
|
||||||
|
prependListener(event: "readable", listener: () => void): this;
|
||||||
|
prependListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: "close", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "data", listener: (chunk: any) => void): this;
|
||||||
|
prependOnceListener(event: "end", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "readable", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
removeListener(event: "close", listener: () => void): this;
|
||||||
|
removeListener(event: "data", listener: (chunk: any) => void): this;
|
||||||
|
removeListener(event: "end", listener: () => void): this;
|
||||||
|
removeListener(event: "readable", listener: () => void): this;
|
||||||
|
removeListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
[Symbol.asyncIterator](): AsyncIterableIterator<any>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface WritableOptions {
|
||||||
|
highWaterMark?: number;
|
||||||
|
decodeStrings?: boolean;
|
||||||
|
defaultEncoding?: string;
|
||||||
|
objectMode?: boolean;
|
||||||
|
emitClose?: boolean;
|
||||||
|
write?(this: Writable, chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
|
||||||
|
writev?(this: Writable, chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void;
|
||||||
|
destroy?(this: Writable, error: Error | null, callback: (error: Error | null) => void): void;
|
||||||
|
final?(this: Writable, callback: (error?: Error | null) => void): void;
|
||||||
|
autoDestroy?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Writable extends Stream implements NodeJS.WritableStream {
|
||||||
|
readonly writable: boolean;
|
||||||
|
readonly writableEnded: boolean;
|
||||||
|
readonly writableFinished: boolean;
|
||||||
|
readonly writableHighWaterMark: number;
|
||||||
|
readonly writableLength: number;
|
||||||
|
readonly writableObjectMode: boolean;
|
||||||
|
destroyed: boolean;
|
||||||
|
constructor(opts?: WritableOptions);
|
||||||
|
_write(chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
|
||||||
|
_writev?(chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void;
|
||||||
|
_destroy(error: Error | null, callback: (error?: Error | null) => void): void;
|
||||||
|
_final(callback: (error?: Error | null) => void): void;
|
||||||
|
write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean;
|
||||||
|
write(chunk: any, encoding: string, cb?: (error: Error | null | undefined) => void): boolean;
|
||||||
|
setDefaultEncoding(encoding: string): this;
|
||||||
|
end(cb?: () => void): void;
|
||||||
|
end(chunk: any, cb?: () => void): void;
|
||||||
|
end(chunk: any, encoding: string, cb?: () => void): void;
|
||||||
|
cork(): void;
|
||||||
|
uncork(): void;
|
||||||
|
destroy(error?: Error): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event emitter
|
||||||
|
* The defined events on documents including:
|
||||||
|
* 1. close
|
||||||
|
* 2. drain
|
||||||
|
* 3. error
|
||||||
|
* 4. finish
|
||||||
|
* 5. pipe
|
||||||
|
* 6. unpipe
|
||||||
|
*/
|
||||||
|
addListener(event: "close", listener: () => void): this;
|
||||||
|
addListener(event: "drain", listener: () => void): this;
|
||||||
|
addListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
addListener(event: "finish", listener: () => void): this;
|
||||||
|
addListener(event: "pipe", listener: (src: Readable) => void): this;
|
||||||
|
addListener(event: "unpipe", listener: (src: Readable) => void): this;
|
||||||
|
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
emit(event: "close"): boolean;
|
||||||
|
emit(event: "drain"): boolean;
|
||||||
|
emit(event: "error", err: Error): boolean;
|
||||||
|
emit(event: "finish"): boolean;
|
||||||
|
emit(event: "pipe", src: Readable): boolean;
|
||||||
|
emit(event: "unpipe", src: Readable): boolean;
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
|
||||||
|
on(event: "close", listener: () => void): this;
|
||||||
|
on(event: "drain", listener: () => void): this;
|
||||||
|
on(event: "error", listener: (err: Error) => void): this;
|
||||||
|
on(event: "finish", listener: () => void): this;
|
||||||
|
on(event: "pipe", listener: (src: Readable) => void): this;
|
||||||
|
on(event: "unpipe", listener: (src: Readable) => void): this;
|
||||||
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
once(event: "close", listener: () => void): this;
|
||||||
|
once(event: "drain", listener: () => void): this;
|
||||||
|
once(event: "error", listener: (err: Error) => void): this;
|
||||||
|
once(event: "finish", listener: () => void): this;
|
||||||
|
once(event: "pipe", listener: (src: Readable) => void): this;
|
||||||
|
once(event: "unpipe", listener: (src: Readable) => void): this;
|
||||||
|
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: "close", listener: () => void): this;
|
||||||
|
prependListener(event: "drain", listener: () => void): this;
|
||||||
|
prependListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependListener(event: "finish", listener: () => void): this;
|
||||||
|
prependListener(event: "pipe", listener: (src: Readable) => void): this;
|
||||||
|
prependListener(event: "unpipe", listener: (src: Readable) => void): this;
|
||||||
|
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: "close", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "drain", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
prependOnceListener(event: "finish", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "pipe", listener: (src: Readable) => void): this;
|
||||||
|
prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this;
|
||||||
|
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
|
||||||
|
removeListener(event: "close", listener: () => void): this;
|
||||||
|
removeListener(event: "drain", listener: () => void): this;
|
||||||
|
removeListener(event: "error", listener: (err: Error) => void): this;
|
||||||
|
removeListener(event: "finish", listener: () => void): this;
|
||||||
|
removeListener(event: "pipe", listener: (src: Readable) => void): this;
|
||||||
|
removeListener(event: "unpipe", listener: (src: Readable) => void): this;
|
||||||
|
removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface DuplexOptions extends ReadableOptions, WritableOptions {
|
||||||
|
allowHalfOpen?: boolean;
|
||||||
|
readableObjectMode?: boolean;
|
||||||
|
writableObjectMode?: boolean;
|
||||||
|
readableHighWaterMark?: number;
|
||||||
|
writableHighWaterMark?: number;
|
||||||
|
read?(this: Duplex, size: number): void;
|
||||||
|
write?(this: Duplex, chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
|
||||||
|
writev?(this: Duplex, chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void;
|
||||||
|
final?(this: Duplex, callback: (error?: Error | null) => void): void;
|
||||||
|
destroy?(this: Duplex, error: Error | null, callback: (error: Error | null) => void): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note: Duplex extends both Readable and Writable.
|
||||||
|
class Duplex extends Readable implements Writable {
|
||||||
|
readonly writable: boolean;
|
||||||
|
readonly writableEnded: boolean;
|
||||||
|
readonly writableFinished: boolean;
|
||||||
|
readonly writableHighWaterMark: number;
|
||||||
|
readonly writableLength: number;
|
||||||
|
readonly writableObjectMode: boolean;
|
||||||
|
constructor(opts?: DuplexOptions);
|
||||||
|
_write(chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
|
||||||
|
_writev?(chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void;
|
||||||
|
_destroy(error: Error | null, callback: (error: Error | null) => void): void;
|
||||||
|
_final(callback: (error?: Error | null) => void): void;
|
||||||
|
write(chunk: any, encoding?: string, cb?: (error: Error | null | undefined) => void): boolean;
|
||||||
|
write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean;
|
||||||
|
setDefaultEncoding(encoding: string): this;
|
||||||
|
end(cb?: () => void): void;
|
||||||
|
end(chunk: any, cb?: () => void): void;
|
||||||
|
end(chunk: any, encoding?: string, cb?: () => void): void;
|
||||||
|
cork(): void;
|
||||||
|
uncork(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
type TransformCallback = (error?: Error | null, data?: any) => void;
|
||||||
|
|
||||||
|
interface TransformOptions extends DuplexOptions {
|
||||||
|
read?(this: Transform, size: number): void;
|
||||||
|
write?(this: Transform, chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
|
||||||
|
writev?(this: Transform, chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void;
|
||||||
|
final?(this: Transform, callback: (error?: Error | null) => void): void;
|
||||||
|
destroy?(this: Transform, error: Error | null, callback: (error: Error | null) => void): void;
|
||||||
|
transform?(this: Transform, chunk: any, encoding: string, callback: TransformCallback): void;
|
||||||
|
flush?(this: Transform, callback: TransformCallback): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Transform extends Duplex {
|
||||||
|
constructor(opts?: TransformOptions);
|
||||||
|
_transform(chunk: any, encoding: string, callback: TransformCallback): void;
|
||||||
|
_flush(callback: TransformCallback): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
class PassThrough extends Transform { }
|
||||||
|
|
||||||
|
interface FinishedOptions {
|
||||||
|
error?: boolean;
|
||||||
|
readable?: boolean;
|
||||||
|
writable?: boolean;
|
||||||
|
}
|
||||||
|
function finished(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, options: FinishedOptions, callback: (err?: NodeJS.ErrnoException | null) => void): () => void;
|
||||||
|
function finished(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, callback: (err?: NodeJS.ErrnoException | null) => void): () => void;
|
||||||
|
namespace finished {
|
||||||
|
function __promisify__(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, options?: FinishedOptions): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function pipeline<T extends NodeJS.WritableStream>(stream1: NodeJS.ReadableStream, stream2: T, callback?: (err: NodeJS.ErrnoException | null) => void): T;
|
||||||
|
function pipeline<T extends NodeJS.WritableStream>(stream1: NodeJS.ReadableStream, stream2: NodeJS.ReadWriteStream, stream3: T, callback?: (err: NodeJS.ErrnoException | null) => void): T;
|
||||||
|
function pipeline<T extends NodeJS.WritableStream>(
|
||||||
|
stream1: NodeJS.ReadableStream,
|
||||||
|
stream2: NodeJS.ReadWriteStream,
|
||||||
|
stream3: NodeJS.ReadWriteStream,
|
||||||
|
stream4: T,
|
||||||
|
callback?: (err: NodeJS.ErrnoException | null) => void,
|
||||||
|
): T;
|
||||||
|
function pipeline<T extends NodeJS.WritableStream>(
|
||||||
|
stream1: NodeJS.ReadableStream,
|
||||||
|
stream2: NodeJS.ReadWriteStream,
|
||||||
|
stream3: NodeJS.ReadWriteStream,
|
||||||
|
stream4: NodeJS.ReadWriteStream,
|
||||||
|
stream5: T,
|
||||||
|
callback?: (err: NodeJS.ErrnoException | null) => void,
|
||||||
|
): T;
|
||||||
|
function pipeline(streams: Array<NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream>, callback?: (err: NodeJS.ErrnoException | null) => void): NodeJS.WritableStream;
|
||||||
|
function pipeline(
|
||||||
|
stream1: NodeJS.ReadableStream,
|
||||||
|
stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream,
|
||||||
|
...streams: Array<NodeJS.ReadWriteStream | NodeJS.WritableStream | ((err: NodeJS.ErrnoException | null) => void)>,
|
||||||
|
): NodeJS.WritableStream;
|
||||||
|
namespace pipeline {
|
||||||
|
function __promisify__(stream1: NodeJS.ReadableStream, stream2: NodeJS.WritableStream): Promise<void>;
|
||||||
|
function __promisify__(stream1: NodeJS.ReadableStream, stream2: NodeJS.ReadWriteStream, stream3: NodeJS.WritableStream): Promise<void>;
|
||||||
|
function __promisify__(stream1: NodeJS.ReadableStream, stream2: NodeJS.ReadWriteStream, stream3: NodeJS.ReadWriteStream, stream4: NodeJS.WritableStream): Promise<void>;
|
||||||
|
function __promisify__(
|
||||||
|
stream1: NodeJS.ReadableStream,
|
||||||
|
stream2: NodeJS.ReadWriteStream,
|
||||||
|
stream3: NodeJS.ReadWriteStream,
|
||||||
|
stream4: NodeJS.ReadWriteStream,
|
||||||
|
stream5: NodeJS.WritableStream,
|
||||||
|
): Promise<void>;
|
||||||
|
function __promisify__(streams: Array<NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream>): Promise<void>;
|
||||||
|
function __promisify__(
|
||||||
|
stream1: NodeJS.ReadableStream,
|
||||||
|
stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream,
|
||||||
|
...streams: Array<NodeJS.ReadWriteStream | NodeJS.WritableStream>,
|
||||||
|
): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Pipe {
|
||||||
|
close(): void;
|
||||||
|
hasRef(): boolean;
|
||||||
|
ref(): void;
|
||||||
|
unref(): void;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export = internal;
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
declare module "string_decoder" {
|
||||||
|
class StringDecoder {
|
||||||
|
constructor(encoding?: string);
|
||||||
|
write(buffer: Buffer): string;
|
||||||
|
end(buffer?: Buffer): string;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
declare module "timers" {
|
||||||
|
function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout;
|
||||||
|
namespace setTimeout {
|
||||||
|
function __promisify__(ms: number): Promise<void>;
|
||||||
|
function __promisify__<T>(ms: number, value: T): Promise<T>;
|
||||||
|
}
|
||||||
|
function clearTimeout(timeoutId: NodeJS.Timeout): void;
|
||||||
|
function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout;
|
||||||
|
function clearInterval(intervalId: NodeJS.Timeout): void;
|
||||||
|
function setImmediate(callback: (...args: any[]) => void, ...args: any[]): NodeJS.Immediate;
|
||||||
|
namespace setImmediate {
|
||||||
|
function __promisify__(): Promise<void>;
|
||||||
|
function __promisify__<T>(value: T): Promise<T>;
|
||||||
|
}
|
||||||
|
function clearImmediate(immediateId: NodeJS.Immediate): void;
|
||||||
|
}
|
|
@ -0,0 +1,703 @@
|
||||||
|
declare module "tls" {
|
||||||
|
import * as crypto from "crypto";
|
||||||
|
import * as dns from "dns";
|
||||||
|
import * as net from "net";
|
||||||
|
import * as stream from "stream";
|
||||||
|
|
||||||
|
const CLIENT_RENEG_LIMIT: number;
|
||||||
|
const CLIENT_RENEG_WINDOW: number;
|
||||||
|
|
||||||
|
interface Certificate {
|
||||||
|
/**
|
||||||
|
* Country code.
|
||||||
|
*/
|
||||||
|
C: string;
|
||||||
|
/**
|
||||||
|
* Street.
|
||||||
|
*/
|
||||||
|
ST: string;
|
||||||
|
/**
|
||||||
|
* Locality.
|
||||||
|
*/
|
||||||
|
L: string;
|
||||||
|
/**
|
||||||
|
* Organization.
|
||||||
|
*/
|
||||||
|
O: string;
|
||||||
|
/**
|
||||||
|
* Organizational unit.
|
||||||
|
*/
|
||||||
|
OU: string;
|
||||||
|
/**
|
||||||
|
* Common name.
|
||||||
|
*/
|
||||||
|
CN: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PeerCertificate {
|
||||||
|
subject: Certificate;
|
||||||
|
issuer: Certificate;
|
||||||
|
subjectaltname: string;
|
||||||
|
infoAccess: { [index: string]: string[] | undefined };
|
||||||
|
modulus: string;
|
||||||
|
exponent: string;
|
||||||
|
valid_from: string;
|
||||||
|
valid_to: string;
|
||||||
|
fingerprint: string;
|
||||||
|
fingerprint256: string;
|
||||||
|
ext_key_usage: string[];
|
||||||
|
serialNumber: string;
|
||||||
|
raw: Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface DetailedPeerCertificate extends PeerCertificate {
|
||||||
|
issuerCertificate: DetailedPeerCertificate;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CipherNameAndProtocol {
|
||||||
|
/**
|
||||||
|
* The cipher name.
|
||||||
|
*/
|
||||||
|
name: string;
|
||||||
|
/**
|
||||||
|
* SSL/TLS protocol version.
|
||||||
|
*/
|
||||||
|
version: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface EphemeralKeyInfo {
|
||||||
|
/**
|
||||||
|
* The supported types are 'DH' and 'ECDH'.
|
||||||
|
*/
|
||||||
|
type: string;
|
||||||
|
/**
|
||||||
|
* The name property is available only when type is 'ECDH'.
|
||||||
|
*/
|
||||||
|
name?: string;
|
||||||
|
/**
|
||||||
|
* The size of parameter of an ephemeral key exchange.
|
||||||
|
*/
|
||||||
|
size: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface KeyObject {
|
||||||
|
/**
|
||||||
|
* Private keys in PEM format.
|
||||||
|
*/
|
||||||
|
pem: string | Buffer;
|
||||||
|
/**
|
||||||
|
* Optional passphrase.
|
||||||
|
*/
|
||||||
|
passphrase?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PxfObject {
|
||||||
|
/**
|
||||||
|
* PFX or PKCS12 encoded private key and certificate chain.
|
||||||
|
*/
|
||||||
|
buf: string | Buffer;
|
||||||
|
/**
|
||||||
|
* Optional passphrase.
|
||||||
|
*/
|
||||||
|
passphrase?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TLSSocketOptions extends SecureContextOptions, CommonConnectionOptions {
|
||||||
|
/**
|
||||||
|
* If true the TLS socket will be instantiated in server-mode.
|
||||||
|
* Defaults to false.
|
||||||
|
*/
|
||||||
|
isServer?: boolean;
|
||||||
|
/**
|
||||||
|
* An optional net.Server instance.
|
||||||
|
*/
|
||||||
|
server?: net.Server;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An optional Buffer instance containing a TLS session.
|
||||||
|
*/
|
||||||
|
session?: Buffer;
|
||||||
|
/**
|
||||||
|
* If true, specifies that the OCSP status request extension will be
|
||||||
|
* added to the client hello and an 'OCSPResponse' event will be
|
||||||
|
* emitted on the socket before establishing a secure communication
|
||||||
|
*/
|
||||||
|
requestOCSP?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
class TLSSocket extends net.Socket {
|
||||||
|
/**
|
||||||
|
* Construct a new tls.TLSSocket object from an existing TCP socket.
|
||||||
|
*/
|
||||||
|
constructor(socket: net.Socket, options?: TLSSocketOptions);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A boolean that is true if the peer certificate was signed by one of the specified CAs, otherwise false.
|
||||||
|
*/
|
||||||
|
authorized: boolean;
|
||||||
|
/**
|
||||||
|
* The reason why the peer's certificate has not been verified.
|
||||||
|
* This property becomes available only when tlsSocket.authorized === false.
|
||||||
|
*/
|
||||||
|
authorizationError: Error;
|
||||||
|
/**
|
||||||
|
* Static boolean value, always true.
|
||||||
|
* May be used to distinguish TLS sockets from regular ones.
|
||||||
|
*/
|
||||||
|
encrypted: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String containing the selected ALPN protocol.
|
||||||
|
* When ALPN has no selected protocol, tlsSocket.alpnProtocol equals false.
|
||||||
|
*/
|
||||||
|
alpnProtocol?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an object representing the local certificate. The returned
|
||||||
|
* object has some properties corresponding to the fields of the
|
||||||
|
* certificate.
|
||||||
|
*
|
||||||
|
* See tls.TLSSocket.getPeerCertificate() for an example of the
|
||||||
|
* certificate structure.
|
||||||
|
*
|
||||||
|
* If there is no local certificate, an empty object will be returned.
|
||||||
|
* If the socket has been destroyed, null will be returned.
|
||||||
|
*/
|
||||||
|
getCertificate(): PeerCertificate | object | null;
|
||||||
|
/**
|
||||||
|
* Returns an object representing the cipher name and the SSL/TLS protocol version of the current connection.
|
||||||
|
* @returns Returns an object representing the cipher name
|
||||||
|
* and the SSL/TLS protocol version of the current connection.
|
||||||
|
*/
|
||||||
|
getCipher(): CipherNameAndProtocol;
|
||||||
|
/**
|
||||||
|
* Returns an object representing the type, name, and size of parameter
|
||||||
|
* of an ephemeral key exchange in Perfect Forward Secrecy on a client
|
||||||
|
* connection. It returns an empty object when the key exchange is not
|
||||||
|
* ephemeral. As this is only supported on a client socket; null is
|
||||||
|
* returned if called on a server socket. The supported types are 'DH'
|
||||||
|
* and 'ECDH'. The name property is available only when type is 'ECDH'.
|
||||||
|
*
|
||||||
|
* For example: { type: 'ECDH', name: 'prime256v1', size: 256 }.
|
||||||
|
*/
|
||||||
|
getEphemeralKeyInfo(): EphemeralKeyInfo | object | null;
|
||||||
|
/**
|
||||||
|
* Returns the latest Finished message that has
|
||||||
|
* been sent to the socket as part of a SSL/TLS handshake, or undefined
|
||||||
|
* if no Finished message has been sent yet.
|
||||||
|
*
|
||||||
|
* As the Finished messages are message digests of the complete
|
||||||
|
* handshake (with a total of 192 bits for TLS 1.0 and more for SSL
|
||||||
|
* 3.0), they can be used for external authentication procedures when
|
||||||
|
* the authentication provided by SSL/TLS is not desired or is not
|
||||||
|
* enough.
|
||||||
|
*
|
||||||
|
* Corresponds to the SSL_get_finished routine in OpenSSL and may be
|
||||||
|
* used to implement the tls-unique channel binding from RFC 5929.
|
||||||
|
*/
|
||||||
|
getFinished(): Buffer | undefined;
|
||||||
|
/**
|
||||||
|
* Returns an object representing the peer's certificate.
|
||||||
|
* The returned object has some properties corresponding to the field of the certificate.
|
||||||
|
* If detailed argument is true the full chain with issuer property will be returned,
|
||||||
|
* if false only the top certificate without issuer property.
|
||||||
|
* If the peer does not provide a certificate, it returns null or an empty object.
|
||||||
|
* @param detailed - If true; the full chain with issuer property will be returned.
|
||||||
|
* @returns An object representing the peer's certificate.
|
||||||
|
*/
|
||||||
|
getPeerCertificate(detailed: true): DetailedPeerCertificate;
|
||||||
|
getPeerCertificate(detailed?: false): PeerCertificate;
|
||||||
|
getPeerCertificate(detailed?: boolean): PeerCertificate | DetailedPeerCertificate;
|
||||||
|
/**
|
||||||
|
* Returns the latest Finished message that is expected or has actually
|
||||||
|
* been received from the socket as part of a SSL/TLS handshake, or
|
||||||
|
* undefined if there is no Finished message so far.
|
||||||
|
*
|
||||||
|
* As the Finished messages are message digests of the complete
|
||||||
|
* handshake (with a total of 192 bits for TLS 1.0 and more for SSL
|
||||||
|
* 3.0), they can be used for external authentication procedures when
|
||||||
|
* the authentication provided by SSL/TLS is not desired or is not
|
||||||
|
* enough.
|
||||||
|
*
|
||||||
|
* Corresponds to the SSL_get_peer_finished routine in OpenSSL and may
|
||||||
|
* be used to implement the tls-unique channel binding from RFC 5929.
|
||||||
|
*/
|
||||||
|
getPeerFinished(): Buffer | undefined;
|
||||||
|
/**
|
||||||
|
* Returns a string containing the negotiated SSL/TLS protocol version of the current connection.
|
||||||
|
* The value `'unknown'` will be returned for connected sockets that have not completed the handshaking process.
|
||||||
|
* The value `null` will be returned for server sockets or disconnected client sockets.
|
||||||
|
* See https://www.openssl.org/docs/man1.0.2/ssl/SSL_get_version.html for more information.
|
||||||
|
* @returns negotiated SSL/TLS protocol version of the current connection
|
||||||
|
*/
|
||||||
|
getProtocol(): string | null;
|
||||||
|
/**
|
||||||
|
* Could be used to speed up handshake establishment when reconnecting to the server.
|
||||||
|
* @returns ASN.1 encoded TLS session or undefined if none was negotiated.
|
||||||
|
*/
|
||||||
|
getSession(): Buffer | undefined;
|
||||||
|
/**
|
||||||
|
* Returns a list of signature algorithms shared between the server and
|
||||||
|
* the client in the order of decreasing preference.
|
||||||
|
*/
|
||||||
|
getSharedSigalgs(): string[];
|
||||||
|
/**
|
||||||
|
* NOTE: Works only with client TLS sockets.
|
||||||
|
* Useful only for debugging, for session reuse provide session option to tls.connect().
|
||||||
|
* @returns TLS session ticket or undefined if none was negotiated.
|
||||||
|
*/
|
||||||
|
getTLSTicket(): Buffer | undefined;
|
||||||
|
/**
|
||||||
|
* Returns true if the session was reused, false otherwise.
|
||||||
|
*/
|
||||||
|
isSessionReused(): boolean;
|
||||||
|
/**
|
||||||
|
* Initiate TLS renegotiation process.
|
||||||
|
*
|
||||||
|
* NOTE: Can be used to request peer's certificate after the secure connection has been established.
|
||||||
|
* ANOTHER NOTE: When running as the server, socket will be destroyed with an error after handshakeTimeout timeout.
|
||||||
|
* @param options - The options may contain the following fields: rejectUnauthorized,
|
||||||
|
* requestCert (See tls.createServer() for details).
|
||||||
|
* @param callback - callback(err) will be executed with null as err, once the renegotiation
|
||||||
|
* is successfully completed.
|
||||||
|
* @return `undefined` when socket is destroy, `false` if negotiaion can't be initiated.
|
||||||
|
*/
|
||||||
|
renegotiate(options: { rejectUnauthorized?: boolean, requestCert?: boolean }, callback: (err: Error | null) => void): undefined | boolean;
|
||||||
|
/**
|
||||||
|
* Set maximum TLS fragment size (default and maximum value is: 16384, minimum is: 512).
|
||||||
|
* Smaller fragment size decreases buffering latency on the client: large fragments are buffered by
|
||||||
|
* the TLS layer until the entire fragment is received and its integrity is verified;
|
||||||
|
* large fragments can span multiple roundtrips, and their processing can be delayed due to packet
|
||||||
|
* loss or reordering. However, smaller fragments add extra TLS framing bytes and CPU overhead,
|
||||||
|
* which may decrease overall server throughput.
|
||||||
|
* @param size - TLS fragment size (default and maximum value is: 16384, minimum is: 512).
|
||||||
|
* @returns Returns true on success, false otherwise.
|
||||||
|
*/
|
||||||
|
setMaxSendFragment(size: number): boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disables TLS renegotiation for this TLSSocket instance. Once called,
|
||||||
|
* attempts to renegotiate will trigger an 'error' event on the
|
||||||
|
* TLSSocket.
|
||||||
|
*/
|
||||||
|
disableRenegotiation(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When enabled, TLS packet trace information is written to `stderr`. This can be
|
||||||
|
* used to debug TLS connection problems.
|
||||||
|
*
|
||||||
|
* Note: The format of the output is identical to the output of `openssl s_client
|
||||||
|
* -trace` or `openssl s_server -trace`. While it is produced by OpenSSL's
|
||||||
|
* `SSL_trace()` function, the format is undocumented, can change without notice,
|
||||||
|
* and should not be relied on.
|
||||||
|
*/
|
||||||
|
enableTrace(): void;
|
||||||
|
|
||||||
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
addListener(event: "OCSPResponse", listener: (response: Buffer) => void): this;
|
||||||
|
addListener(event: "secureConnect", listener: () => void): this;
|
||||||
|
addListener(event: "session", listener: (session: Buffer) => void): this;
|
||||||
|
addListener(event: "keylog", listener: (line: Buffer) => void): this;
|
||||||
|
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
emit(event: "OCSPResponse", response: Buffer): boolean;
|
||||||
|
emit(event: "secureConnect"): boolean;
|
||||||
|
emit(event: "session", session: Buffer): boolean;
|
||||||
|
emit(event: "keylog", line: Buffer): boolean;
|
||||||
|
|
||||||
|
on(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: "OCSPResponse", listener: (response: Buffer) => void): this;
|
||||||
|
on(event: "secureConnect", listener: () => void): this;
|
||||||
|
on(event: "session", listener: (session: Buffer) => void): this;
|
||||||
|
on(event: "keylog", listener: (line: Buffer) => void): this;
|
||||||
|
|
||||||
|
once(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: "OCSPResponse", listener: (response: Buffer) => void): this;
|
||||||
|
once(event: "secureConnect", listener: () => void): this;
|
||||||
|
once(event: "session", listener: (session: Buffer) => void): this;
|
||||||
|
once(event: "keylog", listener: (line: Buffer) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: "OCSPResponse", listener: (response: Buffer) => void): this;
|
||||||
|
prependListener(event: "secureConnect", listener: () => void): this;
|
||||||
|
prependListener(event: "session", listener: (session: Buffer) => void): this;
|
||||||
|
prependListener(event: "keylog", listener: (line: Buffer) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: "OCSPResponse", listener: (response: Buffer) => void): this;
|
||||||
|
prependOnceListener(event: "secureConnect", listener: () => void): this;
|
||||||
|
prependOnceListener(event: "session", listener: (session: Buffer) => void): this;
|
||||||
|
prependOnceListener(event: "keylog", listener: (line: Buffer) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CommonConnectionOptions {
|
||||||
|
/**
|
||||||
|
* An optional TLS context object from tls.createSecureContext()
|
||||||
|
*/
|
||||||
|
secureContext?: SecureContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When enabled, TLS packet trace information is written to `stderr`. This can be
|
||||||
|
* used to debug TLS connection problems.
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
enableTrace?: boolean;
|
||||||
|
/**
|
||||||
|
* If true the server will request a certificate from clients that
|
||||||
|
* connect and attempt to verify that certificate. Defaults to
|
||||||
|
* false.
|
||||||
|
*/
|
||||||
|
requestCert?: boolean;
|
||||||
|
/**
|
||||||
|
* An array of strings or a Buffer naming possible ALPN protocols.
|
||||||
|
* (Protocols should be ordered by their priority.)
|
||||||
|
*/
|
||||||
|
ALPNProtocols?: string[] | Uint8Array[] | Uint8Array;
|
||||||
|
/**
|
||||||
|
* SNICallback(servername, cb) <Function> A function that will be
|
||||||
|
* called if the client supports SNI TLS extension. Two arguments
|
||||||
|
* will be passed when called: servername and cb. SNICallback should
|
||||||
|
* invoke cb(null, ctx), where ctx is a SecureContext instance.
|
||||||
|
* (tls.createSecureContext(...) can be used to get a proper
|
||||||
|
* SecureContext.) If SNICallback wasn't provided the default callback
|
||||||
|
* with high-level API will be used (see below).
|
||||||
|
*/
|
||||||
|
SNICallback?: (servername: string, cb: (err: Error | null, ctx: SecureContext) => void) => void;
|
||||||
|
/**
|
||||||
|
* If true the server will reject any connection which is not
|
||||||
|
* authorized with the list of supplied CAs. This option only has an
|
||||||
|
* effect if requestCert is true.
|
||||||
|
* @default true
|
||||||
|
*/
|
||||||
|
rejectUnauthorized?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TlsOptions extends SecureContextOptions, CommonConnectionOptions {
|
||||||
|
/**
|
||||||
|
* Abort the connection if the SSL/TLS handshake does not finish in the
|
||||||
|
* specified number of milliseconds. A 'tlsClientError' is emitted on
|
||||||
|
* the tls.Server object whenever a handshake times out. Default:
|
||||||
|
* 120000 (120 seconds).
|
||||||
|
*/
|
||||||
|
handshakeTimeout?: number;
|
||||||
|
/**
|
||||||
|
* The number of seconds after which a TLS session created by the
|
||||||
|
* server will no longer be resumable. See Session Resumption for more
|
||||||
|
* information. Default: 300.
|
||||||
|
*/
|
||||||
|
sessionTimeout?: number;
|
||||||
|
/**
|
||||||
|
* 48-bytes of cryptographically strong pseudo-random data.
|
||||||
|
*/
|
||||||
|
ticketKeys?: Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ConnectionOptions extends SecureContextOptions, CommonConnectionOptions {
|
||||||
|
host?: string;
|
||||||
|
port?: number;
|
||||||
|
path?: string; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored.
|
||||||
|
socket?: net.Socket; // Establish secure connection on a given socket rather than creating a new socket
|
||||||
|
checkServerIdentity?: typeof checkServerIdentity;
|
||||||
|
servername?: string; // SNI TLS Extension
|
||||||
|
session?: Buffer;
|
||||||
|
minDHSize?: number;
|
||||||
|
lookup?: net.LookupFunction;
|
||||||
|
timeout?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Server extends net.Server {
|
||||||
|
/**
|
||||||
|
* The server.addContext() method adds a secure context that will be
|
||||||
|
* used if the client request's SNI name matches the supplied hostname
|
||||||
|
* (or wildcard).
|
||||||
|
*/
|
||||||
|
addContext(hostName: string, credentials: SecureContextOptions): void;
|
||||||
|
/**
|
||||||
|
* Returns the session ticket keys.
|
||||||
|
*/
|
||||||
|
getTicketKeys(): Buffer;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* The server.setSecureContext() method replaces the
|
||||||
|
* secure context of an existing server. Existing connections to the
|
||||||
|
* server are not interrupted.
|
||||||
|
*/
|
||||||
|
setSecureContext(details: SecureContextOptions): void;
|
||||||
|
/**
|
||||||
|
* The server.setSecureContext() method replaces the secure context of
|
||||||
|
* an existing server. Existing connections to the server are not
|
||||||
|
* interrupted.
|
||||||
|
*/
|
||||||
|
setTicketKeys(keys: Buffer): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* events.EventEmitter
|
||||||
|
* 1. tlsClientError
|
||||||
|
* 2. newSession
|
||||||
|
* 3. OCSPRequest
|
||||||
|
* 4. resumeSession
|
||||||
|
* 5. secureConnection
|
||||||
|
* 6. keylog
|
||||||
|
*/
|
||||||
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this;
|
||||||
|
addListener(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
|
||||||
|
addListener(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
|
||||||
|
addListener(event: "resumeSession", listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
|
||||||
|
addListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this;
|
||||||
|
addListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this;
|
||||||
|
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
emit(event: "tlsClientError", err: Error, tlsSocket: TLSSocket): boolean;
|
||||||
|
emit(event: "newSession", sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void): boolean;
|
||||||
|
emit(event: "OCSPRequest", certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void): boolean;
|
||||||
|
emit(event: "resumeSession", sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void): boolean;
|
||||||
|
emit(event: "secureConnection", tlsSocket: TLSSocket): boolean;
|
||||||
|
emit(event: "keylog", line: Buffer, tlsSocket: TLSSocket): boolean;
|
||||||
|
|
||||||
|
on(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this;
|
||||||
|
on(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
|
||||||
|
on(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
|
||||||
|
on(event: "resumeSession", listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
|
||||||
|
on(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this;
|
||||||
|
on(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this;
|
||||||
|
|
||||||
|
once(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this;
|
||||||
|
once(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
|
||||||
|
once(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
|
||||||
|
once(event: "resumeSession", listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
|
||||||
|
once(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this;
|
||||||
|
once(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this;
|
||||||
|
|
||||||
|
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this;
|
||||||
|
prependListener(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
|
||||||
|
prependListener(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
|
||||||
|
prependListener(event: "resumeSession", listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
|
||||||
|
prependListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this;
|
||||||
|
prependListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this;
|
||||||
|
prependOnceListener(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
|
||||||
|
prependOnceListener(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
|
||||||
|
prependOnceListener(event: "resumeSession", listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
|
||||||
|
prependOnceListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this;
|
||||||
|
prependOnceListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SecurePair {
|
||||||
|
encrypted: TLSSocket;
|
||||||
|
cleartext: TLSSocket;
|
||||||
|
}
|
||||||
|
|
||||||
|
type SecureVersion = 'TLSv1.3' | 'TLSv1.2' | 'TLSv1.1' | 'TLSv1';
|
||||||
|
|
||||||
|
interface SecureContextOptions {
|
||||||
|
/**
|
||||||
|
* Optionally override the trusted CA certificates. Default is to trust
|
||||||
|
* the well-known CAs curated by Mozilla. Mozilla's CAs are completely
|
||||||
|
* replaced when CAs are explicitly specified using this option.
|
||||||
|
*/
|
||||||
|
ca?: string | Buffer | Array<string | Buffer>;
|
||||||
|
/**
|
||||||
|
* Cert chains in PEM format. One cert chain should be provided per
|
||||||
|
* private key. Each cert chain should consist of the PEM formatted
|
||||||
|
* certificate for a provided private key, followed by the PEM
|
||||||
|
* formatted intermediate certificates (if any), in order, and not
|
||||||
|
* including the root CA (the root CA must be pre-known to the peer,
|
||||||
|
* see ca). When providing multiple cert chains, they do not have to
|
||||||
|
* be in the same order as their private keys in key. If the
|
||||||
|
* intermediate certificates are not provided, the peer will not be
|
||||||
|
* able to validate the certificate, and the handshake will fail.
|
||||||
|
*/
|
||||||
|
cert?: string | Buffer | Array<string | Buffer>;
|
||||||
|
/**
|
||||||
|
* Colon-separated list of supported signature algorithms. The list
|
||||||
|
* can contain digest algorithms (SHA256, MD5 etc.), public key
|
||||||
|
* algorithms (RSA-PSS, ECDSA etc.), combination of both (e.g
|
||||||
|
* 'RSA+SHA384') or TLS v1.3 scheme names (e.g. rsa_pss_pss_sha512).
|
||||||
|
*/
|
||||||
|
sigalgs?: string;
|
||||||
|
/**
|
||||||
|
* Cipher suite specification, replacing the default. For more
|
||||||
|
* information, see modifying the default cipher suite. Permitted
|
||||||
|
* ciphers can be obtained via tls.getCiphers(). Cipher names must be
|
||||||
|
* uppercased in order for OpenSSL to accept them.
|
||||||
|
*/
|
||||||
|
ciphers?: string;
|
||||||
|
/**
|
||||||
|
* Name of an OpenSSL engine which can provide the client certificate.
|
||||||
|
*/
|
||||||
|
clientCertEngine?: string;
|
||||||
|
/**
|
||||||
|
* PEM formatted CRLs (Certificate Revocation Lists).
|
||||||
|
*/
|
||||||
|
crl?: string | Buffer | Array<string | Buffer>;
|
||||||
|
/**
|
||||||
|
* Diffie Hellman parameters, required for Perfect Forward Secrecy. Use
|
||||||
|
* openssl dhparam to create the parameters. The key length must be
|
||||||
|
* greater than or equal to 1024 bits or else an error will be thrown.
|
||||||
|
* Although 1024 bits is permissible, use 2048 bits or larger for
|
||||||
|
* stronger security. If omitted or invalid, the parameters are
|
||||||
|
* silently discarded and DHE ciphers will not be available.
|
||||||
|
*/
|
||||||
|
dhparam?: string | Buffer;
|
||||||
|
/**
|
||||||
|
* A string describing a named curve or a colon separated list of curve
|
||||||
|
* NIDs or names, for example P-521:P-384:P-256, to use for ECDH key
|
||||||
|
* agreement. Set to auto to select the curve automatically. Use
|
||||||
|
* crypto.getCurves() to obtain a list of available curve names. On
|
||||||
|
* recent releases, openssl ecparam -list_curves will also display the
|
||||||
|
* name and description of each available elliptic curve. Default:
|
||||||
|
* tls.DEFAULT_ECDH_CURVE.
|
||||||
|
*/
|
||||||
|
ecdhCurve?: string;
|
||||||
|
/**
|
||||||
|
* Attempt to use the server's cipher suite preferences instead of the
|
||||||
|
* client's. When true, causes SSL_OP_CIPHER_SERVER_PREFERENCE to be
|
||||||
|
* set in secureOptions
|
||||||
|
*/
|
||||||
|
honorCipherOrder?: boolean;
|
||||||
|
/**
|
||||||
|
* Private keys in PEM format. PEM allows the option of private keys
|
||||||
|
* being encrypted. Encrypted keys will be decrypted with
|
||||||
|
* options.passphrase. Multiple keys using different algorithms can be
|
||||||
|
* provided either as an array of unencrypted key strings or buffers,
|
||||||
|
* or an array of objects in the form {pem: <string|buffer>[,
|
||||||
|
* passphrase: <string>]}. The object form can only occur in an array.
|
||||||
|
* object.passphrase is optional. Encrypted keys will be decrypted with
|
||||||
|
* object.passphrase if provided, or options.passphrase if it is not.
|
||||||
|
*/
|
||||||
|
key?: string | Buffer | Array<Buffer | KeyObject>;
|
||||||
|
/**
|
||||||
|
* Name of an OpenSSL engine to get private key from. Should be used
|
||||||
|
* together with privateKeyIdentifier.
|
||||||
|
*/
|
||||||
|
privateKeyEngine?: string;
|
||||||
|
/**
|
||||||
|
* Identifier of a private key managed by an OpenSSL engine. Should be
|
||||||
|
* used together with privateKeyEngine. Should not be set together with
|
||||||
|
* key, because both options define a private key in different ways.
|
||||||
|
*/
|
||||||
|
privateKeyIdentifier?: string;
|
||||||
|
/**
|
||||||
|
* Optionally set the maximum TLS version to allow. One
|
||||||
|
* of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the
|
||||||
|
* `secureProtocol` option, use one or the other.
|
||||||
|
* **Default:** `'TLSv1.3'`, unless changed using CLI options. Using
|
||||||
|
* `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using `--tls-max-v1.3` sets the default to
|
||||||
|
* `'TLSv1.3'`. If multiple of the options are provided, the highest maximum is used.
|
||||||
|
*/
|
||||||
|
maxVersion?: SecureVersion;
|
||||||
|
/**
|
||||||
|
* Optionally set the minimum TLS version to allow. One
|
||||||
|
* of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the
|
||||||
|
* `secureProtocol` option, use one or the other. It is not recommended to use
|
||||||
|
* less than TLSv1.2, but it may be required for interoperability.
|
||||||
|
* **Default:** `'TLSv1.2'`, unless changed using CLI options. Using
|
||||||
|
* `--tls-v1.0` sets the default to `'TLSv1'`. Using `--tls-v1.1` sets the default to
|
||||||
|
* `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to
|
||||||
|
* 'TLSv1.3'. If multiple of the options are provided, the lowest minimum is used.
|
||||||
|
*/
|
||||||
|
minVersion?: SecureVersion;
|
||||||
|
/**
|
||||||
|
* Shared passphrase used for a single private key and/or a PFX.
|
||||||
|
*/
|
||||||
|
passphrase?: string;
|
||||||
|
/**
|
||||||
|
* PFX or PKCS12 encoded private key and certificate chain. pfx is an
|
||||||
|
* alternative to providing key and cert individually. PFX is usually
|
||||||
|
* encrypted, if it is, passphrase will be used to decrypt it. Multiple
|
||||||
|
* PFX can be provided either as an array of unencrypted PFX buffers,
|
||||||
|
* or an array of objects in the form {buf: <string|buffer>[,
|
||||||
|
* passphrase: <string>]}. The object form can only occur in an array.
|
||||||
|
* object.passphrase is optional. Encrypted PFX will be decrypted with
|
||||||
|
* object.passphrase if provided, or options.passphrase if it is not.
|
||||||
|
*/
|
||||||
|
pfx?: string | Buffer | Array<string | Buffer | PxfObject>;
|
||||||
|
/**
|
||||||
|
* Optionally affect the OpenSSL protocol behavior, which is not
|
||||||
|
* usually necessary. This should be used carefully if at all! Value is
|
||||||
|
* a numeric bitmask of the SSL_OP_* options from OpenSSL Options
|
||||||
|
*/
|
||||||
|
secureOptions?: number; // Value is a numeric bitmask of the `SSL_OP_*` options
|
||||||
|
/**
|
||||||
|
* Legacy mechanism to select the TLS protocol version to use, it does
|
||||||
|
* not support independent control of the minimum and maximum version,
|
||||||
|
* and does not support limiting the protocol to TLSv1.3. Use
|
||||||
|
* minVersion and maxVersion instead. The possible values are listed as
|
||||||
|
* SSL_METHODS, use the function names as strings. For example, use
|
||||||
|
* 'TLSv1_1_method' to force TLS version 1.1, or 'TLS_method' to allow
|
||||||
|
* any TLS protocol version up to TLSv1.3. It is not recommended to use
|
||||||
|
* TLS versions less than 1.2, but it may be required for
|
||||||
|
* interoperability. Default: none, see minVersion.
|
||||||
|
*/
|
||||||
|
secureProtocol?: string;
|
||||||
|
/**
|
||||||
|
* Opaque identifier used by servers to ensure session state is not
|
||||||
|
* shared between applications. Unused by clients.
|
||||||
|
*/
|
||||||
|
sessionIdContext?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SecureContext {
|
||||||
|
context: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verifies the certificate `cert` is issued to host `host`.
|
||||||
|
* @host The hostname to verify the certificate against
|
||||||
|
* @cert PeerCertificate representing the peer's certificate
|
||||||
|
*
|
||||||
|
* Returns Error object, populating it with the reason, host and cert on failure. On success, returns undefined.
|
||||||
|
*/
|
||||||
|
function checkServerIdentity(host: string, cert: PeerCertificate): Error | undefined;
|
||||||
|
function createServer(secureConnectionListener?: (socket: TLSSocket) => void): Server;
|
||||||
|
function createServer(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void): Server;
|
||||||
|
function connect(options: ConnectionOptions, secureConnectListener?: () => void): TLSSocket;
|
||||||
|
function connect(port: number, host?: string, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket;
|
||||||
|
function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket;
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
function createSecurePair(credentials?: SecureContext, isServer?: boolean, requestCert?: boolean, rejectUnauthorized?: boolean): SecurePair;
|
||||||
|
function createSecureContext(details: SecureContextOptions): SecureContext;
|
||||||
|
function getCiphers(): string[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default curve name to use for ECDH key agreement in a tls server.
|
||||||
|
* The default value is 'auto'. See tls.createSecureContext() for further
|
||||||
|
* information.
|
||||||
|
*/
|
||||||
|
let DEFAULT_ECDH_CURVE: string;
|
||||||
|
/**
|
||||||
|
* The default value of the maxVersion option of
|
||||||
|
* tls.createSecureContext(). It can be assigned any of the supported TLS
|
||||||
|
* protocol versions, 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default:
|
||||||
|
* 'TLSv1.3', unless changed using CLI options. Using --tls-max-v1.2 sets
|
||||||
|
* the default to 'TLSv1.2'. Using --tls-max-v1.3 sets the default to
|
||||||
|
* 'TLSv1.3'. If multiple of the options are provided, the highest maximum
|
||||||
|
* is used.
|
||||||
|
*/
|
||||||
|
let DEFAULT_MAX_VERSION: SecureVersion;
|
||||||
|
/**
|
||||||
|
* The default value of the minVersion option of tls.createSecureContext().
|
||||||
|
* It can be assigned any of the supported TLS protocol versions,
|
||||||
|
* 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default: 'TLSv1.2', unless
|
||||||
|
* changed using CLI options. Using --tls-min-v1.0 sets the default to
|
||||||
|
* 'TLSv1'. Using --tls-min-v1.1 sets the default to 'TLSv1.1'. Using
|
||||||
|
* --tls-min-v1.3 sets the default to 'TLSv1.3'. If multiple of the options
|
||||||
|
* are provided, the lowest minimum is used.
|
||||||
|
*/
|
||||||
|
let DEFAULT_MIN_VERSION: SecureVersion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An immutable array of strings representing the root certificates (in PEM
|
||||||
|
* format) used for verifying peer certificates. This is the default value
|
||||||
|
* of the ca option to tls.createSecureContext().
|
||||||
|
*/
|
||||||
|
const rootCertificates: ReadonlyArray<string>;
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
declare module "trace_events" {
|
||||||
|
/**
|
||||||
|
* The `Tracing` object is used to enable or disable tracing for sets of
|
||||||
|
* categories. Instances are created using the
|
||||||
|
* `trace_events.createTracing()` method.
|
||||||
|
*
|
||||||
|
* When created, the `Tracing` object is disabled. Calling the
|
||||||
|
* `tracing.enable()` method adds the categories to the set of enabled trace
|
||||||
|
* event categories. Calling `tracing.disable()` will remove the categories
|
||||||
|
* from the set of enabled trace event categories.
|
||||||
|
*/
|
||||||
|
interface Tracing {
|
||||||
|
/**
|
||||||
|
* A comma-separated list of the trace event categories covered by this
|
||||||
|
* `Tracing` object.
|
||||||
|
*/
|
||||||
|
readonly categories: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disables this `Tracing` object.
|
||||||
|
*
|
||||||
|
* Only trace event categories _not_ covered by other enabled `Tracing`
|
||||||
|
* objects and _not_ specified by the `--trace-event-categories` flag
|
||||||
|
* will be disabled.
|
||||||
|
*/
|
||||||
|
disable(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables this `Tracing` object for the set of categories covered by
|
||||||
|
* the `Tracing` object.
|
||||||
|
*/
|
||||||
|
enable(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `true` only if the `Tracing` object has been enabled.
|
||||||
|
*/
|
||||||
|
readonly enabled: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CreateTracingOptions {
|
||||||
|
/**
|
||||||
|
* An array of trace category names. Values included in the array are
|
||||||
|
* coerced to a string when possible. An error will be thrown if the
|
||||||
|
* value cannot be coerced.
|
||||||
|
*/
|
||||||
|
categories: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and returns a Tracing object for the given set of categories.
|
||||||
|
*/
|
||||||
|
function createTracing(options: CreateTracingOptions): Tracing;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a comma-separated list of all currently-enabled trace event
|
||||||
|
* categories. The current set of enabled trace event categories is
|
||||||
|
* determined by the union of all currently-enabled `Tracing` objects and
|
||||||
|
* any categories enabled using the `--trace-event-categories` flag.
|
||||||
|
*/
|
||||||
|
function getEnabledCategories(): string | undefined;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
// NOTE: These definitions support NodeJS and TypeScript 3.2.
|
||||||
|
|
||||||
|
// NOTE: TypeScript version-specific augmentations can be found in the following paths:
|
||||||
|
// - ~/base.d.ts - Shared definitions common to all TypeScript versions
|
||||||
|
// - ~/index.d.ts - Definitions specific to TypeScript 2.1
|
||||||
|
// - ~/ts3.2/base.d.ts - Definitions specific to TypeScript 3.2
|
||||||
|
// - ~/ts3.2/index.d.ts - Definitions specific to TypeScript 3.2 with assert pulled in
|
||||||
|
|
||||||
|
// Reference required types from the default lib:
|
||||||
|
/// <reference lib="es2018" />
|
||||||
|
/// <reference lib="esnext.asynciterable" />
|
||||||
|
/// <reference lib="esnext.intl" />
|
||||||
|
/// <reference lib="esnext.bigint" />
|
||||||
|
|
||||||
|
// Base definitions for all NodeJS modules that are not specific to any version of TypeScript:
|
||||||
|
// tslint:disable-next-line:no-bad-reference
|
||||||
|
/// <reference path="../base.d.ts" />
|
||||||
|
|
||||||
|
// TypeScript 3.2-specific augmentations:
|
||||||
|
/// <reference path="fs.d.ts" />
|
||||||
|
/// <reference path="util.d.ts" />
|
||||||
|
/// <reference path="globals.d.ts" />
|
|
@ -0,0 +1,33 @@
|
||||||
|
// tslint:disable-next-line:no-bad-reference
|
||||||
|
/// <reference path="../fs.d.ts" />
|
||||||
|
|
||||||
|
declare module 'fs' {
|
||||||
|
interface BigIntStats extends StatsBase<bigint> {
|
||||||
|
}
|
||||||
|
|
||||||
|
class BigIntStats {
|
||||||
|
atimeNs: bigint;
|
||||||
|
mtimeNs: bigint;
|
||||||
|
ctimeNs: bigint;
|
||||||
|
birthtimeNs: bigint;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface BigIntOptions {
|
||||||
|
bigint: true;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface StatOptions {
|
||||||
|
bigint: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
function stat(path: PathLike, options: BigIntOptions, callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void): void;
|
||||||
|
function stat(path: PathLike, options: StatOptions, callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void): void;
|
||||||
|
|
||||||
|
namespace stat {
|
||||||
|
function __promisify__(path: PathLike, options: BigIntOptions): Promise<BigIntStats>;
|
||||||
|
function __promisify__(path: PathLike, options: StatOptions): Promise<Stats | BigIntStats>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function statSync(path: PathLike, options: BigIntOptions): BigIntStats;
|
||||||
|
function statSync(path: PathLike, options: StatOptions): Stats | BigIntStats;
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
// tslint:disable-next-line:no-bad-reference
|
||||||
|
/// <reference path="../globals.d.ts" />
|
||||||
|
|
||||||
|
declare namespace NodeJS {
|
||||||
|
interface HRTime {
|
||||||
|
bigint(): bigint;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Buffer extends Uint8Array {
|
||||||
|
readBigUInt64BE(offset?: number): bigint;
|
||||||
|
readBigUInt64LE(offset?: number): bigint;
|
||||||
|
readBigInt64BE(offset?: number): bigint;
|
||||||
|
readBigInt64LE(offset?: number): bigint;
|
||||||
|
writeBigInt64BE(value: bigint, offset?: number): number;
|
||||||
|
writeBigInt64LE(value: bigint, offset?: number): number;
|
||||||
|
writeBigUInt64BE(value: bigint, offset?: number): number;
|
||||||
|
writeBigUInt64LE(value: bigint, offset?: number): number;
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
// NOTE: These definitions support NodeJS and TypeScript 3.2.
|
||||||
|
// This is requried to enable typing assert in ts3.7 without causing errors
|
||||||
|
// Typically type modifiations should be made in base.d.ts instead of here
|
||||||
|
|
||||||
|
/// <reference path="base.d.ts" />
|
||||||
|
|
||||||
|
// tslint:disable-next-line:no-bad-reference
|
||||||
|
/// <reference path="../assert.d.ts" />
|
|
@ -0,0 +1,15 @@
|
||||||
|
// tslint:disable-next-line:no-bad-reference
|
||||||
|
/// <reference path="../util.d.ts" />
|
||||||
|
|
||||||
|
declare module "util" {
|
||||||
|
namespace inspect {
|
||||||
|
const custom: unique symbol;
|
||||||
|
}
|
||||||
|
namespace promisify {
|
||||||
|
const custom: unique symbol;
|
||||||
|
}
|
||||||
|
namespace types {
|
||||||
|
function isBigInt64Array(value: any): value is BigInt64Array;
|
||||||
|
function isBigUint64Array(value: any): value is BigUint64Array;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
declare module "assert" {
|
||||||
|
function assert(value: any, message?: string | Error): asserts value;
|
||||||
|
namespace assert {
|
||||||
|
class AssertionError implements Error {
|
||||||
|
name: string;
|
||||||
|
message: string;
|
||||||
|
actual: any;
|
||||||
|
expected: any;
|
||||||
|
operator: string;
|
||||||
|
generatedMessage: boolean;
|
||||||
|
code: 'ERR_ASSERTION';
|
||||||
|
|
||||||
|
constructor(options?: {
|
||||||
|
message?: string; actual?: any; expected?: any;
|
||||||
|
operator?: string; stackStartFn?: Function
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function fail(message?: string | Error): never;
|
||||||
|
/** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */
|
||||||
|
function fail(actual: any, expected: any, message?: string | Error, operator?: string, stackStartFn?: Function): never;
|
||||||
|
function ok(value: any, message?: string | Error): asserts value;
|
||||||
|
/** @deprecated since v9.9.0 - use strictEqual() instead. */
|
||||||
|
function equal(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
/** @deprecated since v9.9.0 - use notStrictEqual() instead. */
|
||||||
|
function notEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
/** @deprecated since v9.9.0 - use deepStrictEqual() instead. */
|
||||||
|
function deepEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
/** @deprecated since v9.9.0 - use notDeepStrictEqual() instead. */
|
||||||
|
function notDeepEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
function strictEqual<T>(actual: any, expected: T, message?: string | Error): asserts actual is T;
|
||||||
|
function notStrictEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
function deepStrictEqual<T>(actual: any, expected: T, message?: string | Error): asserts actual is T;
|
||||||
|
function notDeepStrictEqual(actual: any, expected: any, message?: string | Error): void;
|
||||||
|
|
||||||
|
function throws(block: () => any, message?: string | Error): void;
|
||||||
|
function throws(block: () => any, error: RegExp | Function | Object | Error, message?: string | Error): void;
|
||||||
|
function doesNotThrow(block: () => any, message?: string | Error): void;
|
||||||
|
function doesNotThrow(block: () => any, error: RegExp | Function, message?: string | Error): void;
|
||||||
|
|
||||||
|
function ifError(value: any): asserts value is null | undefined;
|
||||||
|
|
||||||
|
function rejects(block: (() => Promise<any>) | Promise<any>, message?: string | Error): Promise<void>;
|
||||||
|
function rejects(block: (() => Promise<any>) | Promise<any>, error: RegExp | Function | Object | Error, message?: string | Error): Promise<void>;
|
||||||
|
function doesNotReject(block: (() => Promise<any>) | Promise<any>, message?: string | Error): Promise<void>;
|
||||||
|
function doesNotReject(block: (() => Promise<any>) | Promise<any>, error: RegExp | Function, message?: string | Error): Promise<void>;
|
||||||
|
|
||||||
|
const strict: typeof assert;
|
||||||
|
}
|
||||||
|
|
||||||
|
export = assert;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
// NOTE: These definitions support NodeJS and TypeScript 3.7.
|
||||||
|
|
||||||
|
// NOTE: TypeScript version-specific augmentations can be found in the following paths:
|
||||||
|
// - ~/base.d.ts - Shared definitions common to all TypeScript versions
|
||||||
|
// - ~/index.d.ts - Definitions specific to TypeScript 2.1
|
||||||
|
// - ~/ts3.7/base.d.ts - Definitions specific to TypeScript 3.7
|
||||||
|
// - ~/ts3.7/index.d.ts - Definitions specific to TypeScript 3.7 with assert pulled in
|
||||||
|
|
||||||
|
// Reference required types from the default lib:
|
||||||
|
/// <reference lib="es2018" />
|
||||||
|
/// <reference lib="esnext.asynciterable" />
|
||||||
|
/// <reference lib="esnext.intl" />
|
||||||
|
/// <reference lib="esnext.bigint" />
|
||||||
|
|
||||||
|
// Base definitions for all NodeJS modules that are not specific to any version of TypeScript:
|
||||||
|
// tslint:disable-next-line:no-bad-reference
|
||||||
|
/// <reference path="../ts3.2/base.d.ts" />
|
||||||
|
|
||||||
|
// TypeScript 3.7-specific augmentations:
|
||||||
|
/// <reference path="assert.d.ts" />
|
|
@ -0,0 +1,5 @@
|
||||||
|
// NOTE: These definitions support NodeJS and TypeScript 3.7.
|
||||||
|
// This isn't strictly needed since 3.7 has the assert module, but this way we're consistent.
|
||||||
|
// Typically type modificatons should be made in base.d.ts instead of here
|
||||||
|
|
||||||
|
/// <reference path="base.d.ts" />
|
|
@ -0,0 +1,66 @@
|
||||||
|
declare module "tty" {
|
||||||
|
import * as net from "net";
|
||||||
|
|
||||||
|
function isatty(fd: number): boolean;
|
||||||
|
class ReadStream extends net.Socket {
|
||||||
|
constructor(fd: number, options?: net.SocketConstructorOpts);
|
||||||
|
isRaw: boolean;
|
||||||
|
setRawMode(mode: boolean): this;
|
||||||
|
isTTY: boolean;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* -1 - to the left from cursor
|
||||||
|
* 0 - the entire line
|
||||||
|
* 1 - to the right from cursor
|
||||||
|
*/
|
||||||
|
type Direction = -1 | 0 | 1;
|
||||||
|
class WriteStream extends net.Socket {
|
||||||
|
constructor(fd: number);
|
||||||
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
addListener(event: "resize", listener: () => void): this;
|
||||||
|
|
||||||
|
emit(event: string | symbol, ...args: any[]): boolean;
|
||||||
|
emit(event: "resize"): boolean;
|
||||||
|
|
||||||
|
on(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
on(event: "resize", listener: () => void): this;
|
||||||
|
|
||||||
|
once(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
once(event: "resize", listener: () => void): this;
|
||||||
|
|
||||||
|
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependListener(event: "resize", listener: () => void): this;
|
||||||
|
|
||||||
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||||
|
prependOnceListener(event: "resize", listener: () => void): this;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the current line of this WriteStream in a direction identified by `dir`.
|
||||||
|
*/
|
||||||
|
clearLine(dir: Direction, callback?: () => void): boolean;
|
||||||
|
/**
|
||||||
|
* Clears this `WriteStream` from the current cursor down.
|
||||||
|
*/
|
||||||
|
clearScreenDown(callback?: () => void): boolean;
|
||||||
|
/**
|
||||||
|
* Moves this WriteStream's cursor to the specified position.
|
||||||
|
*/
|
||||||
|
cursorTo(x: number, y?: number, callback?: () => void): boolean;
|
||||||
|
cursorTo(x: number, callback: () => void): boolean;
|
||||||
|
/**
|
||||||
|
* Moves this WriteStream's cursor relative to its current position.
|
||||||
|
*/
|
||||||
|
moveCursor(dx: number, dy: number, callback?: () => void): boolean;
|
||||||
|
/**
|
||||||
|
* @default `process.env`
|
||||||
|
*/
|
||||||
|
getColorDepth(env?: {}): number;
|
||||||
|
hasColors(depth?: number): boolean;
|
||||||
|
hasColors(env?: {}): boolean;
|
||||||
|
hasColors(depth: number, env?: {}): boolean;
|
||||||
|
getWindowSize(): [number, number];
|
||||||
|
columns: number;
|
||||||
|
rows: number;
|
||||||
|
isTTY: boolean;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,111 @@
|
||||||
|
declare module "url" {
|
||||||
|
import { ParsedUrlQuery, ParsedUrlQueryInput } from 'querystring';
|
||||||
|
|
||||||
|
// Input to `url.format`
|
||||||
|
interface UrlObject {
|
||||||
|
auth?: string | null;
|
||||||
|
hash?: string | null;
|
||||||
|
host?: string | null;
|
||||||
|
hostname?: string | null;
|
||||||
|
href?: string | null;
|
||||||
|
path?: string | null;
|
||||||
|
pathname?: string | null;
|
||||||
|
protocol?: string | null;
|
||||||
|
search?: string | null;
|
||||||
|
slashes?: boolean | null;
|
||||||
|
port?: string | number | null;
|
||||||
|
query?: string | null | ParsedUrlQueryInput;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Output of `url.parse`
|
||||||
|
interface Url {
|
||||||
|
auth: string | null;
|
||||||
|
hash: string | null;
|
||||||
|
host: string | null;
|
||||||
|
hostname: string | null;
|
||||||
|
href: string;
|
||||||
|
path: string | null;
|
||||||
|
pathname: string | null;
|
||||||
|
protocol: string | null;
|
||||||
|
search: string | null;
|
||||||
|
slashes: boolean | null;
|
||||||
|
port: string | null;
|
||||||
|
query: string | null | ParsedUrlQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface UrlWithParsedQuery extends Url {
|
||||||
|
query: ParsedUrlQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface UrlWithStringQuery extends Url {
|
||||||
|
query: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parse(urlStr: string): UrlWithStringQuery;
|
||||||
|
function parse(urlStr: string, parseQueryString: false | undefined, slashesDenoteHost?: boolean): UrlWithStringQuery;
|
||||||
|
function parse(urlStr: string, parseQueryString: true, slashesDenoteHost?: boolean): UrlWithParsedQuery;
|
||||||
|
function parse(urlStr: string, parseQueryString: boolean, slashesDenoteHost?: boolean): Url;
|
||||||
|
|
||||||
|
function format(URL: URL, options?: URLFormatOptions): string;
|
||||||
|
function format(urlObject: UrlObject | string): string;
|
||||||
|
function resolve(from: string, to: string): string;
|
||||||
|
|
||||||
|
function domainToASCII(domain: string): string;
|
||||||
|
function domainToUnicode(domain: string): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function ensures the correct decodings of percent-encoded characters as
|
||||||
|
* well as ensuring a cross-platform valid absolute path string.
|
||||||
|
* @param url The file URL string or URL object to convert to a path.
|
||||||
|
*/
|
||||||
|
function fileURLToPath(url: string | URL): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function ensures that path is resolved absolutely, and that the URL
|
||||||
|
* control characters are correctly encoded when converting into a File URL.
|
||||||
|
* @param url The path to convert to a File URL.
|
||||||
|
*/
|
||||||
|
function pathToFileURL(url: string): URL;
|
||||||
|
|
||||||
|
interface URLFormatOptions {
|
||||||
|
auth?: boolean;
|
||||||
|
fragment?: boolean;
|
||||||
|
search?: boolean;
|
||||||
|
unicode?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
class URL {
|
||||||
|
constructor(input: string, base?: string | URL);
|
||||||
|
hash: string;
|
||||||
|
host: string;
|
||||||
|
hostname: string;
|
||||||
|
href: string;
|
||||||
|
readonly origin: string;
|
||||||
|
password: string;
|
||||||
|
pathname: string;
|
||||||
|
port: string;
|
||||||
|
protocol: string;
|
||||||
|
search: string;
|
||||||
|
readonly searchParams: URLSearchParams;
|
||||||
|
username: string;
|
||||||
|
toString(): string;
|
||||||
|
toJSON(): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
class URLSearchParams implements Iterable<[string, string]> {
|
||||||
|
constructor(init?: URLSearchParams | string | { [key: string]: string | string[] | undefined } | Iterable<[string, string]> | Array<[string, string]>);
|
||||||
|
append(name: string, value: string): void;
|
||||||
|
delete(name: string): void;
|
||||||
|
entries(): IterableIterator<[string, string]>;
|
||||||
|
forEach(callback: (value: string, name: string, searchParams: this) => void): void;
|
||||||
|
get(name: string): string | null;
|
||||||
|
getAll(name: string): string[];
|
||||||
|
has(name: string): boolean;
|
||||||
|
keys(): IterableIterator<string>;
|
||||||
|
set(name: string, value: string): void;
|
||||||
|
sort(): void;
|
||||||
|
toString(): string;
|
||||||
|
values(): IterableIterator<string>;
|
||||||
|
[Symbol.iterator](): IterableIterator<[string, string]>;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,180 @@
|
||||||
|
declare module "util" {
|
||||||
|
interface InspectOptions extends NodeJS.InspectOptions { }
|
||||||
|
function format(format: any, ...param: any[]): string;
|
||||||
|
function formatWithOptions(inspectOptions: InspectOptions, format: string, ...param: any[]): string;
|
||||||
|
/** @deprecated since v0.11.3 - use a third party module instead. */
|
||||||
|
function log(string: string): void;
|
||||||
|
function inspect(object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string;
|
||||||
|
function inspect(object: any, options: InspectOptions): string;
|
||||||
|
namespace inspect {
|
||||||
|
let colors: {
|
||||||
|
[color: string]: [number, number] | undefined
|
||||||
|
};
|
||||||
|
let styles: {
|
||||||
|
[style: string]: string | undefined
|
||||||
|
};
|
||||||
|
let defaultOptions: InspectOptions;
|
||||||
|
/**
|
||||||
|
* Allows changing inspect settings from the repl.
|
||||||
|
*/
|
||||||
|
let replDefaults: InspectOptions;
|
||||||
|
}
|
||||||
|
/** @deprecated since v4.0.0 - use `Array.isArray()` instead. */
|
||||||
|
function isArray(object: any): object is any[];
|
||||||
|
/** @deprecated since v4.0.0 - use `util.types.isRegExp()` instead. */
|
||||||
|
function isRegExp(object: any): object is RegExp;
|
||||||
|
/** @deprecated since v4.0.0 - use `util.types.isDate()` instead. */
|
||||||
|
function isDate(object: any): object is Date;
|
||||||
|
/** @deprecated since v4.0.0 - use `util.types.isNativeError()` instead. */
|
||||||
|
function isError(object: any): object is Error;
|
||||||
|
function inherits(constructor: any, superConstructor: any): void;
|
||||||
|
function debuglog(key: string): (msg: string, ...param: any[]) => void;
|
||||||
|
/** @deprecated since v4.0.0 - use `typeof value === 'boolean'` instead. */
|
||||||
|
function isBoolean(object: any): object is boolean;
|
||||||
|
/** @deprecated since v4.0.0 - use `Buffer.isBuffer()` instead. */
|
||||||
|
function isBuffer(object: any): object is Buffer;
|
||||||
|
/** @deprecated since v4.0.0 - use `typeof value === 'function'` instead. */
|
||||||
|
function isFunction(object: any): boolean;
|
||||||
|
/** @deprecated since v4.0.0 - use `value === null` instead. */
|
||||||
|
function isNull(object: any): object is null;
|
||||||
|
/** @deprecated since v4.0.0 - use `value === null || value === undefined` instead. */
|
||||||
|
function isNullOrUndefined(object: any): object is null | undefined;
|
||||||
|
/** @deprecated since v4.0.0 - use `typeof value === 'number'` instead. */
|
||||||
|
function isNumber(object: any): object is number;
|
||||||
|
/** @deprecated since v4.0.0 - use `value !== null && typeof value === 'object'` instead. */
|
||||||
|
function isObject(object: any): boolean;
|
||||||
|
/** @deprecated since v4.0.0 - use `(typeof value !== 'object' && typeof value !== 'function') || value === null` instead. */
|
||||||
|
function isPrimitive(object: any): boolean;
|
||||||
|
/** @deprecated since v4.0.0 - use `typeof value === 'string'` instead. */
|
||||||
|
function isString(object: any): object is string;
|
||||||
|
/** @deprecated since v4.0.0 - use `typeof value === 'symbol'` instead. */
|
||||||
|
function isSymbol(object: any): object is symbol;
|
||||||
|
/** @deprecated since v4.0.0 - use `value === undefined` instead. */
|
||||||
|
function isUndefined(object: any): object is undefined;
|
||||||
|
function deprecate<T extends Function>(fn: T, message: string, code?: string): T;
|
||||||
|
function isDeepStrictEqual(val1: any, val2: any): boolean;
|
||||||
|
|
||||||
|
interface CustomPromisify<TCustom extends Function> extends Function {
|
||||||
|
__promisify__: TCustom;
|
||||||
|
}
|
||||||
|
|
||||||
|
function callbackify(fn: () => Promise<void>): (callback: (err: NodeJS.ErrnoException) => void) => void;
|
||||||
|
function callbackify<TResult>(fn: () => Promise<TResult>): (callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void;
|
||||||
|
function callbackify<T1>(fn: (arg1: T1) => Promise<void>): (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void;
|
||||||
|
function callbackify<T1, TResult>(fn: (arg1: T1) => Promise<TResult>): (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void;
|
||||||
|
function callbackify<T1, T2>(fn: (arg1: T1, arg2: T2) => Promise<void>): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void;
|
||||||
|
function callbackify<T1, T2, TResult>(fn: (arg1: T1, arg2: T2) => Promise<TResult>): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void;
|
||||||
|
function callbackify<T1, T2, T3>(fn: (arg1: T1, arg2: T2, arg3: T3) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void;
|
||||||
|
function callbackify<T1, T2, T3, TResult>(
|
||||||
|
fn: (arg1: T1, arg2: T2, arg3: T3) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void;
|
||||||
|
function callbackify<T1, T2, T3, T4>(
|
||||||
|
fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void;
|
||||||
|
function callbackify<T1, T2, T3, T4, TResult>(
|
||||||
|
fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void;
|
||||||
|
function callbackify<T1, T2, T3, T4, T5>(
|
||||||
|
fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void;
|
||||||
|
function callbackify<T1, T2, T3, T4, T5, TResult>(
|
||||||
|
fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<TResult>,
|
||||||
|
): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void;
|
||||||
|
function callbackify<T1, T2, T3, T4, T5, T6>(
|
||||||
|
fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<void>,
|
||||||
|
): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException) => void) => void;
|
||||||
|
function callbackify<T1, T2, T3, T4, T5, T6, TResult>(
|
||||||
|
fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<TResult>
|
||||||
|
): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void;
|
||||||
|
|
||||||
|
function promisify<TCustom extends Function>(fn: CustomPromisify<TCustom>): TCustom;
|
||||||
|
function promisify<TResult>(fn: (callback: (err: any, result: TResult) => void) => void): () => Promise<TResult>;
|
||||||
|
function promisify(fn: (callback: (err?: any) => void) => void): () => Promise<void>;
|
||||||
|
function promisify<T1, TResult>(fn: (arg1: T1, callback: (err: any, result: TResult) => void) => void): (arg1: T1) => Promise<TResult>;
|
||||||
|
function promisify<T1>(fn: (arg1: T1, callback: (err?: any) => void) => void): (arg1: T1) => Promise<void>;
|
||||||
|
function promisify<T1, T2, TResult>(fn: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void): (arg1: T1, arg2: T2) => Promise<TResult>;
|
||||||
|
function promisify<T1, T2>(fn: (arg1: T1, arg2: T2, callback: (err?: any) => void) => void): (arg1: T1, arg2: T2) => Promise<void>;
|
||||||
|
function promisify<T1, T2, T3, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void):
|
||||||
|
(arg1: T1, arg2: T2, arg3: T3) => Promise<TResult>;
|
||||||
|
function promisify<T1, T2, T3>(fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void): (arg1: T1, arg2: T2, arg3: T3) => Promise<void>;
|
||||||
|
function promisify<T1, T2, T3, T4, TResult>(
|
||||||
|
fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void,
|
||||||
|
): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<TResult>;
|
||||||
|
function promisify<T1, T2, T3, T4>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void):
|
||||||
|
(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<void>;
|
||||||
|
function promisify<T1, T2, T3, T4, T5, TResult>(
|
||||||
|
fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void,
|
||||||
|
): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<TResult>;
|
||||||
|
function promisify<T1, T2, T3, T4, T5>(
|
||||||
|
fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void,
|
||||||
|
): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<void>;
|
||||||
|
function promisify(fn: Function): Function;
|
||||||
|
|
||||||
|
namespace types {
|
||||||
|
function isAnyArrayBuffer(object: any): boolean;
|
||||||
|
function isArgumentsObject(object: any): object is IArguments;
|
||||||
|
function isArrayBuffer(object: any): object is ArrayBuffer;
|
||||||
|
function isAsyncFunction(object: any): boolean;
|
||||||
|
function isBooleanObject(object: any): object is Boolean;
|
||||||
|
function isBoxedPrimitive(object: any): object is (Number | Boolean | String | Symbol /* | Object(BigInt) | Object(Symbol) */);
|
||||||
|
function isDataView(object: any): object is DataView;
|
||||||
|
function isDate(object: any): object is Date;
|
||||||
|
function isExternal(object: any): boolean;
|
||||||
|
function isFloat32Array(object: any): object is Float32Array;
|
||||||
|
function isFloat64Array(object: any): object is Float64Array;
|
||||||
|
function isGeneratorFunction(object: any): boolean;
|
||||||
|
function isGeneratorObject(object: any): boolean;
|
||||||
|
function isInt8Array(object: any): object is Int8Array;
|
||||||
|
function isInt16Array(object: any): object is Int16Array;
|
||||||
|
function isInt32Array(object: any): object is Int32Array;
|
||||||
|
function isMap(object: any): boolean;
|
||||||
|
function isMapIterator(object: any): boolean;
|
||||||
|
function isModuleNamespaceObject(value: any): boolean;
|
||||||
|
function isNativeError(object: any): object is Error;
|
||||||
|
function isNumberObject(object: any): object is Number;
|
||||||
|
function isPromise(object: any): boolean;
|
||||||
|
function isProxy(object: any): boolean;
|
||||||
|
function isRegExp(object: any): object is RegExp;
|
||||||
|
function isSet(object: any): boolean;
|
||||||
|
function isSetIterator(object: any): boolean;
|
||||||
|
function isSharedArrayBuffer(object: any): boolean;
|
||||||
|
function isStringObject(object: any): boolean;
|
||||||
|
function isSymbolObject(object: any): boolean;
|
||||||
|
function isTypedArray(object: any): object is NodeJS.TypedArray;
|
||||||
|
function isUint8Array(object: any): object is Uint8Array;
|
||||||
|
function isUint8ClampedArray(object: any): object is Uint8ClampedArray;
|
||||||
|
function isUint16Array(object: any): object is Uint16Array;
|
||||||
|
function isUint32Array(object: any): object is Uint32Array;
|
||||||
|
function isWeakMap(object: any): boolean;
|
||||||
|
function isWeakSet(object: any): boolean;
|
||||||
|
function isWebAssemblyCompiledModule(object: any): boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
class TextDecoder {
|
||||||
|
readonly encoding: string;
|
||||||
|
readonly fatal: boolean;
|
||||||
|
readonly ignoreBOM: boolean;
|
||||||
|
constructor(
|
||||||
|
encoding?: string,
|
||||||
|
options?: { fatal?: boolean; ignoreBOM?: boolean }
|
||||||
|
);
|
||||||
|
decode(
|
||||||
|
input?: NodeJS.ArrayBufferView | ArrayBuffer | null,
|
||||||
|
options?: { stream?: boolean }
|
||||||
|
): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface EncodeIntoResult {
|
||||||
|
/**
|
||||||
|
* The read Unicode code units of input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
read: number;
|
||||||
|
/**
|
||||||
|
* The written UTF-8 bytes of output.
|
||||||
|
*/
|
||||||
|
written: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
class TextEncoder {
|
||||||
|
readonly encoding: string;
|
||||||
|
encode(input?: string): Uint8Array;
|
||||||
|
encodeInto(input: string, output: Uint8Array): EncodeIntoResult;
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue