commit
bff31a0b26
1601 changed files with 360314 additions and 0 deletions
-
65app.js
-
1node_modules/.bin/mime
-
21node_modules/@types/node/LICENSE
-
16node_modules/@types/node/README.md
-
912node_modules/@types/node/assert.d.ts
-
8node_modules/@types/node/assert/strict.d.ts
-
501node_modules/@types/node/async_hooks.d.ts
-
2232node_modules/@types/node/buffer.d.ts
-
1366node_modules/@types/node/child_process.d.ts
-
414node_modules/@types/node/cluster.d.ts
-
412node_modules/@types/node/console.d.ts
-
18node_modules/@types/node/constants.d.ts
-
3307node_modules/@types/node/crypto.d.ts
-
545node_modules/@types/node/dgram.d.ts
-
134node_modules/@types/node/diagnostics_channel.d.ts
-
659node_modules/@types/node/dns.d.ts
-
370node_modules/@types/node/dns/promises.d.ts
-
169node_modules/@types/node/domain.d.ts
-
651node_modules/@types/node/events.d.ts
-
3835node_modules/@types/node/fs.d.ts
-
1091node_modules/@types/node/fs/promises.d.ts
-
284node_modules/@types/node/globals.d.ts
-
1node_modules/@types/node/globals.global.d.ts
-
1396node_modules/@types/node/http.d.ts
-
2100node_modules/@types/node/http2.d.ts
-
391node_modules/@types/node/https.d.ts
-
129node_modules/@types/node/index.d.ts
-
2744node_modules/@types/node/inspector.d.ts
-
114node_modules/@types/node/module.d.ts
-
784node_modules/@types/node/net.d.ts
-
455node_modules/@types/node/os.d.ts
-
209node_modules/@types/node/package.json
-
180node_modules/@types/node/path.d.ts
-
557node_modules/@types/node/perf_hooks.d.ts
-
1481node_modules/@types/node/process.d.ts
-
117node_modules/@types/node/punycode.d.ts
-
131node_modules/@types/node/querystring.d.ts
-
650node_modules/@types/node/readline.d.ts
-
424node_modules/@types/node/repl.d.ts
-
1249node_modules/@types/node/stream.d.ts
-
24node_modules/@types/node/stream/consumers.d.ts
-
42node_modules/@types/node/stream/promises.d.ts
-
330node_modules/@types/node/stream/web.d.ts
-
67node_modules/@types/node/string_decoder.d.ts
-
94node_modules/@types/node/timers.d.ts
-
68node_modules/@types/node/timers/promises.d.ts
-
1020node_modules/@types/node/tls.d.ts
-
161node_modules/@types/node/trace_events.d.ts
-
204node_modules/@types/node/tty.d.ts
-
891node_modules/@types/node/url.d.ts
-
1594node_modules/@types/node/util.d.ts
-
378node_modules/@types/node/v8.d.ts
-
507node_modules/@types/node/vm.d.ts
-
158node_modules/@types/node/wasi.d.ts
-
649node_modules/@types/node/worker_threads.d.ts
-
517node_modules/@types/node/zlib.d.ts
-
21node_modules/@types/webidl-conversions/LICENSE
-
16node_modules/@types/webidl-conversions/README.md
-
103node_modules/@types/webidl-conversions/index.d.ts
-
53node_modules/@types/webidl-conversions/package.json
-
21node_modules/@types/whatwg-url/LICENSE
-
16node_modules/@types/whatwg-url/README.md
-
23node_modules/@types/whatwg-url/dist/URL-impl.d.ts
-
76node_modules/@types/whatwg-url/dist/URL.d.ts
-
23node_modules/@types/whatwg-url/dist/URLSearchParams-impl.d.ts
-
91node_modules/@types/whatwg-url/dist/URLSearchParams.d.ts
-
162node_modules/@types/whatwg-url/index.d.ts
-
67node_modules/@types/whatwg-url/package.json
-
23node_modules/@types/whatwg-url/ts3.9/dist/URL-impl.d.ts
-
76node_modules/@types/whatwg-url/ts3.9/dist/URL.d.ts
-
24node_modules/@types/whatwg-url/ts3.9/dist/URLSearchParams-impl.d.ts
-
94node_modules/@types/whatwg-url/ts3.9/dist/URLSearchParams.d.ts
-
155node_modules/@types/whatwg-url/ts3.9/index.d.ts
-
4node_modules/@types/whatwg-url/ts3.9/webidl2js-wrapper.d.ts
-
4node_modules/@types/whatwg-url/webidl2js-wrapper.d.ts
-
243node_modules/accepts/HISTORY.md
-
23node_modules/accepts/LICENSE
-
140node_modules/accepts/README.md
-
238node_modules/accepts/index.js
-
86node_modules/accepts/package.json
-
21node_modules/array-flatten/LICENSE
-
43node_modules/array-flatten/README.md
-
64node_modules/array-flatten/array-flatten.js
-
64node_modules/array-flatten/package.json
-
21node_modules/base64-js/LICENSE
-
34node_modules/base64-js/README.md
-
1node_modules/base64-js/base64js.min.js
-
3node_modules/base64-js/index.d.ts
-
150node_modules/base64-js/index.js
-
75node_modules/base64-js/package.json
-
633node_modules/body-parser/HISTORY.md
-
23node_modules/body-parser/LICENSE
-
456node_modules/body-parser/README.md
-
157node_modules/body-parser/index.js
-
181node_modules/body-parser/lib/read.js
-
230node_modules/body-parser/lib/types/json.js
-
101node_modules/body-parser/lib/types/raw.js
-
121node_modules/body-parser/lib/types/text.js
-
284node_modules/body-parser/lib/types/urlencoded.js
-
93node_modules/body-parser/package.json
@ -0,0 +1,65 @@ |
|||
var createError = require('http-errors'); |
|||
const mongoose = require('mongoose'); |
|||
var express = require('express'); |
|||
var path = require('path'); |
|||
bodyParser = require('body-parser'); |
|||
var app = express(); |
|||
app.use(bodyParser.json()); |
|||
app.use(bodyParser.urlencoded({ extended: true })); |
|||
port = process.env.PORT || 3500; |
|||
app.listen(port); |
|||
console.log('Server started on: ' + port); |
|||
|
|||
app.get('/', (req, res) => { |
|||
res.send('Hello World!') |
|||
}) |
|||
|
|||
app.get('/home', (req, res) => { |
|||
res.send('Hello Home!') |
|||
}) |
|||
|
|||
main().catch(err => console.log(err)); |
|||
|
|||
async function main() { |
|||
mongoose.connect('mongodb://localhost:27017/ekam').then(() => { |
|||
console.log('mongodb connected'); |
|||
}); |
|||
} |
|||
|
|||
var conn = mongoose.connection; |
|||
|
|||
conn.on('connected', function () { |
|||
console.log('database is connected successfully'); |
|||
}); |
|||
|
|||
conn.on('disconnected',function(){ |
|||
console.log('database is disconnected successfully'); |
|||
}); |
|||
|
|||
conn.once('open', function () { |
|||
console.log('connection open successfully'); |
|||
}); |
|||
|
|||
// Add headers
|
|||
app.use(function (req, res, next) { |
|||
// Website you wish to allow to connect
|
|||
res.setHeader('Access-Control-Allow-Origin', '*'); |
|||
// Request methods you wish to allow
|
|||
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); |
|||
// Request headers you wish to allow
|
|||
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); |
|||
// Set to true if you need the website to include cookies in the requests sent
|
|||
// to the API (e.g. in case you use sessions)
|
|||
res.setHeader('Access-Control-Allow-Credentials', true); |
|||
// Pass to next layer of middleware
|
|||
next(); |
|||
}); |
|||
|
|||
app.get('/scheduleAppointmentAPI', (req, res) => { |
|||
const collections = conn.db.collection("ahc"); |
|||
collections.find({}).toArray(function (err, data) { |
|||
res.send(data); |
|||
}) |
|||
}); |
|||
|
|||
|
|||
@ -0,0 +1 @@ |
|||
../mime/cli.js |
|||
@ -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 (https://nodejs.org/). |
|||
|
|||
# Details |
|||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node. |
|||
|
|||
### Additional Details |
|||
* Last updated: Wed, 23 Feb 2022 16:31:42 GMT |
|||
* Dependencies: none |
|||
* Global values: `AbortController`, `AbortSignal`, `__dirname`, `__filename`, `console`, `exports`, `gc`, `global`, `module`, `process`, `require` |
|||
|
|||
# Credits |
|||
These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [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), [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), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), and [wafuwafu13](https://github.com/wafuwafu13). |
|||
@ -0,0 +1,912 @@ |
|||
/** |
|||
* The `assert` module provides a set of assertion functions for verifying |
|||
* invariants. |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/assert.js)
|
|||
*/ |
|||
declare module 'assert' { |
|||
/** |
|||
* An alias of {@link ok}. |
|||
* @since v0.5.9 |
|||
* @param value The input that is checked for being truthy. |
|||
*/ |
|||
function assert(value: unknown, message?: string | Error): asserts value; |
|||
namespace assert { |
|||
/** |
|||
* Indicates the failure of an assertion. All errors thrown by the `assert` module |
|||
* will be instances of the `AssertionError` class. |
|||
*/ |
|||
class AssertionError extends Error { |
|||
actual: unknown; |
|||
expected: unknown; |
|||
operator: string; |
|||
generatedMessage: boolean; |
|||
code: 'ERR_ASSERTION'; |
|||
constructor(options?: { |
|||
/** If provided, the error message is set to this value. */ |
|||
message?: string | undefined; |
|||
/** The `actual` property on the error instance. */ |
|||
actual?: unknown | undefined; |
|||
/** The `expected` property on the error instance. */ |
|||
expected?: unknown | undefined; |
|||
/** The `operator` property on the error instance. */ |
|||
operator?: string | undefined; |
|||
/** If provided, the generated stack trace omits frames before this function. */ |
|||
// tslint:disable-next-line:ban-types
|
|||
stackStartFn?: Function | undefined; |
|||
}); |
|||
} |
|||
/** |
|||
* This feature is currently experimental and behavior might still change. |
|||
* @since v14.2.0, v12.19.0 |
|||
* @experimental |
|||
*/ |
|||
class CallTracker { |
|||
/** |
|||
* The wrapper function is expected to be called exactly `exact` times. If the |
|||
* function has not been called exactly `exact` times when `tracker.verify()` is called, then `tracker.verify()` will throw an |
|||
* error. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert'; |
|||
* |
|||
* // Creates call tracker.
|
|||
* const tracker = new assert.CallTracker(); |
|||
* |
|||
* function func() {} |
|||
* |
|||
* // Returns a function that wraps func() that must be called exact times
|
|||
* // before tracker.verify().
|
|||
* const callsfunc = tracker.calls(func); |
|||
* ```
|
|||
* @since v14.2.0, v12.19.0 |
|||
* @param [fn='A no-op function'] |
|||
* @param [exact=1] |
|||
* @return that wraps `fn`. |
|||
*/ |
|||
calls(exact?: number): () => void; |
|||
calls<Func extends (...args: any[]) => any>(fn?: Func, exact?: number): Func; |
|||
/** |
|||
* The arrays contains information about the expected and actual number of calls of |
|||
* the functions that have not been called the expected number of times. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert'; |
|||
* |
|||
* // Creates call tracker.
|
|||
* const tracker = new assert.CallTracker(); |
|||
* |
|||
* function func() {} |
|||
* |
|||
* function foo() {} |
|||
* |
|||
* // Returns a function that wraps func() that must be called exact times
|
|||
* // before tracker.verify().
|
|||
* const callsfunc = tracker.calls(func, 2); |
|||
* |
|||
* // Returns an array containing information on callsfunc()
|
|||
* tracker.report(); |
|||
* // [
|
|||
* // {
|
|||
* // message: 'Expected the func function to be executed 2 time(s) but was
|
|||
* // executed 0 time(s).',
|
|||
* // actual: 0,
|
|||
* // expected: 2,
|
|||
* // operator: 'func',
|
|||
* // stack: stack trace
|
|||
* // }
|
|||
* // ]
|
|||
* ```
|
|||
* @since v14.2.0, v12.19.0 |
|||
* @return of objects containing information about the wrapper functions returned by `calls`. |
|||
*/ |
|||
report(): CallTrackerReportInformation[]; |
|||
/** |
|||
* Iterates through the list of functions passed to `tracker.calls()` and will throw an error for functions that |
|||
* have not been called the expected number of times. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert'; |
|||
* |
|||
* // Creates call tracker.
|
|||
* const tracker = new assert.CallTracker(); |
|||
* |
|||
* function func() {} |
|||
* |
|||
* // Returns a function that wraps func() that must be called exact times
|
|||
* // before tracker.verify().
|
|||
* const callsfunc = tracker.calls(func, 2); |
|||
* |
|||
* callsfunc(); |
|||
* |
|||
* // Will throw an error since callsfunc() was only called once.
|
|||
* tracker.verify(); |
|||
* ```
|
|||
* @since v14.2.0, v12.19.0 |
|||
*/ |
|||
verify(): void; |
|||
} |
|||
interface CallTrackerReportInformation { |
|||
message: string; |
|||
/** The actual number of times the function was called. */ |
|||
actual: number; |
|||
/** The number of times the function was expected to be called. */ |
|||
expected: number; |
|||
/** The name of the function that is wrapped. */ |
|||
operator: string; |
|||
/** A stack trace of the function. */ |
|||
stack: object; |
|||
} |
|||
type AssertPredicate = RegExp | (new () => object) | ((thrown: unknown) => boolean) | object | Error; |
|||
/** |
|||
* Throws an `AssertionError` with the provided error message or a default |
|||
* error message. If the `message` parameter is an instance of an `Error` then |
|||
* it will be thrown instead of the `AssertionError`. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.fail(); |
|||
* // AssertionError [ERR_ASSERTION]: Failed
|
|||
* |
|||
* assert.fail('boom'); |
|||
* // AssertionError [ERR_ASSERTION]: boom
|
|||
* |
|||
* assert.fail(new TypeError('need array')); |
|||
* // TypeError: need array
|
|||
* ```
|
|||
* |
|||
* Using `assert.fail()` with more than two arguments is possible but deprecated. |
|||
* See below for further details. |
|||
* @since v0.1.21 |
|||
* @param [message='Failed'] |
|||
*/ |
|||
function fail(message?: string | Error): never; |
|||
/** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */ |
|||
function fail( |
|||
actual: unknown, |
|||
expected: unknown, |
|||
message?: string | Error, |
|||
operator?: string, |
|||
// tslint:disable-next-line:ban-types
|
|||
stackStartFn?: Function |
|||
): never; |
|||
/** |
|||
* Tests if `value` is truthy. It is equivalent to`assert.equal(!!value, true, message)`. |
|||
* |
|||
* If `value` is not truthy, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is `undefined`, a default |
|||
* error message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. |
|||
* If no arguments are passed in at all `message` will be set to the string:`` 'No value argument passed to `assert.ok()`' ``. |
|||
* |
|||
* Be aware that in the `repl` the error message will be different to the one |
|||
* thrown in a file! See below for further details. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.ok(true); |
|||
* // OK
|
|||
* assert.ok(1); |
|||
* // OK
|
|||
* |
|||
* assert.ok(); |
|||
* // AssertionError: No value argument passed to `assert.ok()`
|
|||
* |
|||
* assert.ok(false, 'it\'s false'); |
|||
* // AssertionError: it's false
|
|||
* |
|||
* // In the repl:
|
|||
* assert.ok(typeof 123 === 'string'); |
|||
* // AssertionError: false == true
|
|||
* |
|||
* // In a file (e.g. test.js):
|
|||
* assert.ok(typeof 123 === 'string'); |
|||
* // AssertionError: The expression evaluated to a falsy value:
|
|||
* //
|
|||
* // assert.ok(typeof 123 === 'string')
|
|||
* |
|||
* assert.ok(false); |
|||
* // AssertionError: The expression evaluated to a falsy value:
|
|||
* //
|
|||
* // assert.ok(false)
|
|||
* |
|||
* assert.ok(0); |
|||
* // AssertionError: The expression evaluated to a falsy value:
|
|||
* //
|
|||
* // assert.ok(0)
|
|||
* ```
|
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* // Using `assert()` works the same:
|
|||
* assert(0); |
|||
* // AssertionError: The expression evaluated to a falsy value:
|
|||
* //
|
|||
* // assert(0)
|
|||
* ```
|
|||
* @since v0.1.21 |
|||
*/ |
|||
function ok(value: unknown, message?: string | Error): asserts value; |
|||
/** |
|||
* **Strict assertion mode** |
|||
* |
|||
* An alias of {@link strictEqual}. |
|||
* |
|||
* **Legacy assertion mode** |
|||
* |
|||
* > Stability: 3 - Legacy: Use {@link strictEqual} instead. |
|||
* |
|||
* Tests shallow, coercive equality between the `actual` and `expected` parameters |
|||
* using the [Abstract Equality Comparison](https://tc39.github.io/ecma262/#sec-abstract-equality-comparison) ( `==` ). `NaN` is special handled
|
|||
* and treated as being identical in case both sides are `NaN`. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert'; |
|||
* |
|||
* assert.equal(1, 1); |
|||
* // OK, 1 == 1
|
|||
* assert.equal(1, '1'); |
|||
* // OK, 1 == '1'
|
|||
* assert.equal(NaN, NaN); |
|||
* // OK
|
|||
* |
|||
* assert.equal(1, 2); |
|||
* // AssertionError: 1 == 2
|
|||
* assert.equal({ a: { b: 1 } }, { a: { b: 1 } }); |
|||
* // AssertionError: { a: { b: 1 } } == { a: { b: 1 } }
|
|||
* ```
|
|||
* |
|||
* If the values are not equal, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is undefined, a default |
|||
* error message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. |
|||
* @since v0.1.21 |
|||
*/ |
|||
function equal(actual: unknown, expected: unknown, message?: string | Error): void; |
|||
/** |
|||
* **Strict assertion mode** |
|||
* |
|||
* An alias of {@link notStrictEqual}. |
|||
* |
|||
* **Legacy assertion mode** |
|||
* |
|||
* > Stability: 3 - Legacy: Use {@link notStrictEqual} instead. |
|||
* |
|||
* Tests shallow, coercive inequality with the [Abstract Equality Comparison](https://tc39.github.io/ecma262/#sec-abstract-equality-comparison)(`!=` ). `NaN` is special handled and treated as
|
|||
* being identical in case both |
|||
* sides are `NaN`. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert'; |
|||
* |
|||
* assert.notEqual(1, 2); |
|||
* // OK
|
|||
* |
|||
* assert.notEqual(1, 1); |
|||
* // AssertionError: 1 != 1
|
|||
* |
|||
* assert.notEqual(1, '1'); |
|||
* // AssertionError: 1 != '1'
|
|||
* ```
|
|||
* |
|||
* If the values are equal, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is undefined, a default error |
|||
* message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. |
|||
* @since v0.1.21 |
|||
*/ |
|||
function notEqual(actual: unknown, expected: unknown, message?: string | Error): void; |
|||
/** |
|||
* **Strict assertion mode** |
|||
* |
|||
* An alias of {@link deepStrictEqual}. |
|||
* |
|||
* **Legacy assertion mode** |
|||
* |
|||
* > Stability: 3 - Legacy: Use {@link deepStrictEqual} instead. |
|||
* |
|||
* Tests for deep equality between the `actual` and `expected` parameters. Consider |
|||
* using {@link deepStrictEqual} instead. {@link deepEqual} can have |
|||
* surprising results. |
|||
* |
|||
* _Deep equality_ means that the enumerable "own" properties of child objects |
|||
* are also recursively evaluated by the following rules. |
|||
* @since v0.1.21 |
|||
*/ |
|||
function deepEqual(actual: unknown, expected: unknown, message?: string | Error): void; |
|||
/** |
|||
* **Strict assertion mode** |
|||
* |
|||
* An alias of {@link notDeepStrictEqual}. |
|||
* |
|||
* **Legacy assertion mode** |
|||
* |
|||
* > Stability: 3 - Legacy: Use {@link notDeepStrictEqual} instead. |
|||
* |
|||
* Tests for any deep inequality. Opposite of {@link deepEqual}. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert'; |
|||
* |
|||
* const obj1 = { |
|||
* a: { |
|||
* b: 1 |
|||
* } |
|||
* }; |
|||
* const obj2 = { |
|||
* a: { |
|||
* b: 2 |
|||
* } |
|||
* }; |
|||
* const obj3 = { |
|||
* a: { |
|||
* b: 1 |
|||
* } |
|||
* }; |
|||
* const obj4 = Object.create(obj1); |
|||
* |
|||
* assert.notDeepEqual(obj1, obj1); |
|||
* // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
|
|||
* |
|||
* assert.notDeepEqual(obj1, obj2); |
|||
* // OK
|
|||
* |
|||
* assert.notDeepEqual(obj1, obj3); |
|||
* // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
|
|||
* |
|||
* assert.notDeepEqual(obj1, obj4); |
|||
* // OK
|
|||
* ```
|
|||
* |
|||
* If the values are deeply equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a default |
|||
* error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown |
|||
* instead of the `AssertionError`. |
|||
* @since v0.1.21 |
|||
*/ |
|||
function notDeepEqual(actual: unknown, expected: unknown, message?: string | Error): void; |
|||
/** |
|||
* Tests strict equality between the `actual` and `expected` parameters as |
|||
* determined by the [SameValue Comparison](https://tc39.github.io/ecma262/#sec-samevalue).
|
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.strictEqual(1, 2); |
|||
* // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
|
|||
* //
|
|||
* // 1 !== 2
|
|||
* |
|||
* assert.strictEqual(1, 1); |
|||
* // OK
|
|||
* |
|||
* assert.strictEqual('Hello foobar', 'Hello World!'); |
|||
* // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
|
|||
* // + actual - expected
|
|||
* //
|
|||
* // + 'Hello foobar'
|
|||
* // - 'Hello World!'
|
|||
* // ^
|
|||
* |
|||
* const apples = 1; |
|||
* const oranges = 2; |
|||
* assert.strictEqual(apples, oranges, `apples ${apples} !== oranges ${oranges}`); |
|||
* // AssertionError [ERR_ASSERTION]: apples 1 !== oranges 2
|
|||
* |
|||
* assert.strictEqual(1, '1', new TypeError('Inputs are not identical')); |
|||
* // TypeError: Inputs are not identical
|
|||
* ```
|
|||
* |
|||
* If the values are not strictly equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a |
|||
* default error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown |
|||
* instead of the `AssertionError`. |
|||
* @since v0.1.21 |
|||
*/ |
|||
function strictEqual<T>(actual: unknown, expected: T, message?: string | Error): asserts actual is T; |
|||
/** |
|||
* Tests strict inequality between the `actual` and `expected` parameters as |
|||
* determined by the [SameValue Comparison](https://tc39.github.io/ecma262/#sec-samevalue).
|
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.notStrictEqual(1, 2); |
|||
* // OK
|
|||
* |
|||
* assert.notStrictEqual(1, 1); |
|||
* // AssertionError [ERR_ASSERTION]: Expected "actual" to be strictly unequal to:
|
|||
* //
|
|||
* // 1
|
|||
* |
|||
* assert.notStrictEqual(1, '1'); |
|||
* // OK
|
|||
* ```
|
|||
* |
|||
* If the values are strictly equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a |
|||
* default error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown |
|||
* instead of the `AssertionError`. |
|||
* @since v0.1.21 |
|||
*/ |
|||
function notStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void; |
|||
/** |
|||
* Tests for deep equality between the `actual` and `expected` parameters. |
|||
* "Deep" equality means that the enumerable "own" properties of child objects |
|||
* are recursively evaluated also by the following rules. |
|||
* @since v1.2.0 |
|||
*/ |
|||
function deepStrictEqual<T>(actual: unknown, expected: T, message?: string | Error): asserts actual is T; |
|||
/** |
|||
* Tests for deep strict inequality. Opposite of {@link deepStrictEqual}. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.notDeepStrictEqual({ a: 1 }, { a: '1' }); |
|||
* // OK
|
|||
* ```
|
|||
* |
|||
* If the values are deeply and strictly equal, an `AssertionError` is thrown |
|||
* with a `message` property set equal to the value of the `message` parameter. If |
|||
* the `message` parameter is undefined, a default error message is assigned. If |
|||
* the `message` parameter is an instance of an `Error` then it will be thrown |
|||
* instead of the `AssertionError`. |
|||
* @since v1.2.0 |
|||
*/ |
|||
function notDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void; |
|||
/** |
|||
* Expects the function `fn` to throw an error. |
|||
* |
|||
* If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
|
|||
* [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
|
|||
* a validation object where each property will be tested for strict deep equality, |
|||
* or an instance of error where each property will be tested for strict deep |
|||
* equality including the non-enumerable `message` and `name` properties. When |
|||
* using an object, it is also possible to use a regular expression, when |
|||
* validating against a string property. See below for examples. |
|||
* |
|||
* If specified, `message` will be appended to the message provided by the`AssertionError` if the `fn` call fails to throw or in case the error validation |
|||
* fails. |
|||
* |
|||
* Custom validation object/error instance: |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* const err = new TypeError('Wrong value'); |
|||
* err.code = 404; |
|||
* err.foo = 'bar'; |
|||
* err.info = { |
|||
* nested: true, |
|||
* baz: 'text' |
|||
* }; |
|||
* err.reg = /abc/i; |
|||
* |
|||
* assert.throws( |
|||
* () => { |
|||
* throw err; |
|||
* }, |
|||
* { |
|||
* name: 'TypeError', |
|||
* message: 'Wrong value', |
|||
* info: { |
|||
* nested: true, |
|||
* baz: 'text' |
|||
* } |
|||
* // Only properties on the validation object will be tested for.
|
|||
* // Using nested objects requires all properties to be present. Otherwise
|
|||
* // the validation is going to fail.
|
|||
* } |
|||
* ); |
|||
* |
|||
* // Using regular expressions to validate error properties:
|
|||
* throws( |
|||
* () => { |
|||
* throw err; |
|||
* }, |
|||
* { |
|||
* // The `name` and `message` properties are strings and using regular
|
|||
* // expressions on those will match against the string. If they fail, an
|
|||
* // error is thrown.
|
|||
* name: /^TypeError$/, |
|||
* message: /Wrong/, |
|||
* foo: 'bar', |
|||
* info: { |
|||
* nested: true, |
|||
* // It is not possible to use regular expressions for nested properties!
|
|||
* baz: 'text' |
|||
* }, |
|||
* // The `reg` property contains a regular expression and only if the
|
|||
* // validation object contains an identical regular expression, it is going
|
|||
* // to pass.
|
|||
* reg: /abc/i |
|||
* } |
|||
* ); |
|||
* |
|||
* // Fails due to the different `message` and `name` properties:
|
|||
* throws( |
|||
* () => { |
|||
* const otherErr = new Error('Not found'); |
|||
* // Copy all enumerable properties from `err` to `otherErr`.
|
|||
* for (const [key, value] of Object.entries(err)) { |
|||
* otherErr[key] = value; |
|||
* } |
|||
* throw otherErr; |
|||
* }, |
|||
* // The error's `message` and `name` properties will also be checked when using
|
|||
* // an error as validation object.
|
|||
* err |
|||
* ); |
|||
* ```
|
|||
* |
|||
* Validate instanceof using constructor: |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.throws( |
|||
* () => { |
|||
* throw new Error('Wrong value'); |
|||
* }, |
|||
* Error |
|||
* ); |
|||
* ```
|
|||
* |
|||
* Validate error message using [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions):
|
|||
* |
|||
* Using a regular expression runs `.toString` on the error object, and will |
|||
* therefore also include the error name. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.throws( |
|||
* () => { |
|||
* throw new Error('Wrong value'); |
|||
* }, |
|||
* /^Error: Wrong value$/ |
|||
* ); |
|||
* ```
|
|||
* |
|||
* Custom error validation: |
|||
* |
|||
* The function must return `true` to indicate all internal validations passed. |
|||
* It will otherwise fail with an `AssertionError`. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.throws( |
|||
* () => { |
|||
* throw new Error('Wrong value'); |
|||
* }, |
|||
* (err) => { |
|||
* assert(err instanceof Error); |
|||
* assert(/value/.test(err)); |
|||
* // Avoid returning anything from validation functions besides `true`.
|
|||
* // Otherwise, it's not clear what part of the validation failed. Instead,
|
|||
* // throw an error about the specific validation that failed (as done in this
|
|||
* // example) and add as much helpful debugging information to that error as
|
|||
* // possible.
|
|||
* return true; |
|||
* }, |
|||
* 'unexpected error' |
|||
* ); |
|||
* ```
|
|||
* |
|||
* `error` cannot be a string. If a string is provided as the second |
|||
* argument, then `error` is assumed to be omitted and the string will be used for`message` instead. This can lead to easy-to-miss mistakes. Using the same |
|||
* message as the thrown error message is going to result in an`ERR_AMBIGUOUS_ARGUMENT` error. Please read the example below carefully if using |
|||
* a string as the second argument gets considered: |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* function throwingFirst() { |
|||
* throw new Error('First'); |
|||
* } |
|||
* |
|||
* function throwingSecond() { |
|||
* throw new Error('Second'); |
|||
* } |
|||
* |
|||
* function notThrowing() {} |
|||
* |
|||
* // The second argument is a string and the input function threw an Error.
|
|||
* // The first case will not throw as it does not match for the error message
|
|||
* // thrown by the input function!
|
|||
* assert.throws(throwingFirst, 'Second'); |
|||
* // In the next example the message has no benefit over the message from the
|
|||
* // error and since it is not clear if the user intended to actually match
|
|||
* // against the error message, Node.js throws an `ERR_AMBIGUOUS_ARGUMENT` error.
|
|||
* assert.throws(throwingSecond, 'Second'); |
|||
* // TypeError [ERR_AMBIGUOUS_ARGUMENT]
|
|||
* |
|||
* // The string is only used (as message) in case the function does not throw:
|
|||
* assert.throws(notThrowing, 'Second'); |
|||
* // AssertionError [ERR_ASSERTION]: Missing expected exception: Second
|
|||
* |
|||
* // If it was intended to match for the error message do this instead:
|
|||
* // It does not throw because the error messages match.
|
|||
* assert.throws(throwingSecond, /Second$/); |
|||
* |
|||
* // If the error message does not match, an AssertionError is thrown.
|
|||
* assert.throws(throwingFirst, /Second$/); |
|||
* // AssertionError [ERR_ASSERTION]
|
|||
* ```
|
|||
* |
|||
* Due to the confusing error-prone notation, avoid a string as the second |
|||
* argument. |
|||
* @since v0.1.21 |
|||
*/ |
|||
function throws(block: () => unknown, message?: string | Error): void; |
|||
function throws(block: () => unknown, error: AssertPredicate, message?: string | Error): void; |
|||
/** |
|||
* Asserts that the function `fn` does not throw an error. |
|||
* |
|||
* Using `assert.doesNotThrow()` is actually not useful because there |
|||
* is no benefit in catching an error and then rethrowing it. Instead, consider |
|||
* adding a comment next to the specific code path that should not throw and keep |
|||
* error messages as expressive as possible. |
|||
* |
|||
* When `assert.doesNotThrow()` is called, it will immediately call the `fn`function. |
|||
* |
|||
* If an error is thrown and it is the same type as that specified by the `error`parameter, then an `AssertionError` is thrown. If the error is of a |
|||
* different type, or if the `error` parameter is undefined, the error is |
|||
* propagated back to the caller. |
|||
* |
|||
* If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
|
|||
* [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) or a validation
|
|||
* function. See {@link throws} for more details. |
|||
* |
|||
* The following, for instance, will throw the `TypeError` because there is no |
|||
* matching error type in the assertion: |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.doesNotThrow( |
|||
* () => { |
|||
* throw new TypeError('Wrong value'); |
|||
* }, |
|||
* SyntaxError |
|||
* ); |
|||
* ```
|
|||
* |
|||
* However, the following will result in an `AssertionError` with the message |
|||
* 'Got unwanted exception...': |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.doesNotThrow( |
|||
* () => { |
|||
* throw new TypeError('Wrong value'); |
|||
* }, |
|||
* TypeError |
|||
* ); |
|||
* ```
|
|||
* |
|||
* If an `AssertionError` is thrown and a value is provided for the `message`parameter, the value of `message` will be appended to the `AssertionError` message: |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.doesNotThrow( |
|||
* () => { |
|||
* throw new TypeError('Wrong value'); |
|||
* }, |
|||
* /Wrong value/, |
|||
* 'Whoops' |
|||
* ); |
|||
* // Throws: AssertionError: Got unwanted exception: Whoops
|
|||
* ```
|
|||
* @since v0.1.21 |
|||
*/ |
|||
function doesNotThrow(block: () => unknown, message?: string | Error): void; |
|||
function doesNotThrow(block: () => unknown, error: AssertPredicate, message?: string | Error): void; |
|||
/** |
|||
* Throws `value` if `value` is not `undefined` or `null`. This is useful when |
|||
* testing the `error` argument in callbacks. The stack trace contains all frames |
|||
* from the error passed to `ifError()` including the potential new frames for`ifError()` itself. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.ifError(null); |
|||
* // OK
|
|||
* assert.ifError(0); |
|||
* // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0
|
|||
* assert.ifError('error'); |
|||
* // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error'
|
|||
* assert.ifError(new Error()); |
|||
* // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: Error
|
|||
* |
|||
* // Create some random error frames.
|
|||
* let err; |
|||
* (function errorFrame() { |
|||
* err = new Error('test error'); |
|||
* })(); |
|||
* |
|||
* (function ifErrorFrame() { |
|||
* assert.ifError(err); |
|||
* })(); |
|||
* // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: test error
|
|||
* // at ifErrorFrame
|
|||
* // at errorFrame
|
|||
* ```
|
|||
* @since v0.1.97 |
|||
*/ |
|||
function ifError(value: unknown): asserts value is null | undefined; |
|||
/** |
|||
* Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately |
|||
* calls the function and awaits the returned promise to complete. It will then |
|||
* check that the promise is rejected. |
|||
* |
|||
* If `asyncFn` is a function and it throws an error synchronously,`assert.rejects()` will return a rejected `Promise` with that error. If the |
|||
* function does not return a promise, `assert.rejects()` will return a rejected`Promise` with an `ERR_INVALID_RETURN_VALUE` error. In both cases the error |
|||
* handler is skipped. |
|||
* |
|||
* Besides the async nature to await the completion behaves identically to {@link throws}. |
|||
* |
|||
* If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
|
|||
* [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
|
|||
* an object where each property will be tested for, or an instance of error where |
|||
* each property will be tested for including the non-enumerable `message` and`name` properties. |
|||
* |
|||
* If specified, `message` will be the message provided by the `AssertionError` if the `asyncFn` fails to reject. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* await assert.rejects( |
|||
* async () => { |
|||
* throw new TypeError('Wrong value'); |
|||
* }, |
|||
* { |
|||
* name: 'TypeError', |
|||
* message: 'Wrong value' |
|||
* } |
|||
* ); |
|||
* ```
|
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* await assert.rejects( |
|||
* async () => { |
|||
* throw new TypeError('Wrong value'); |
|||
* }, |
|||
* (err) => { |
|||
* assert.strictEqual(err.name, 'TypeError'); |
|||
* assert.strictEqual(err.message, 'Wrong value'); |
|||
* return true; |
|||
* } |
|||
* ); |
|||
* ```
|
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.rejects( |
|||
* Promise.reject(new Error('Wrong value')), |
|||
* Error |
|||
* ).then(() => { |
|||
* // ...
|
|||
* }); |
|||
* ```
|
|||
* |
|||
* `error` cannot be a string. If a string is provided as the second |
|||
* argument, then `error` is assumed to be omitted and the string will be used for`message` instead. This can lead to easy-to-miss mistakes. Please read the |
|||
* example in {@link throws} carefully if using a string as the second |
|||
* argument gets considered. |
|||
* @since v10.0.0 |
|||
*/ |
|||
function rejects(block: (() => Promise<unknown>) | Promise<unknown>, message?: string | Error): Promise<void>; |
|||
function rejects(block: (() => Promise<unknown>) | Promise<unknown>, error: AssertPredicate, message?: string | Error): Promise<void>; |
|||
/** |
|||
* Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately |
|||
* calls the function and awaits the returned promise to complete. It will then |
|||
* check that the promise is not rejected. |
|||
* |
|||
* If `asyncFn` is a function and it throws an error synchronously,`assert.doesNotReject()` will return a rejected `Promise` with that error. If |
|||
* the function does not return a promise, `assert.doesNotReject()` will return a |
|||
* rejected `Promise` with an `ERR_INVALID_RETURN_VALUE` error. In both cases |
|||
* the error handler is skipped. |
|||
* |
|||
* Using `assert.doesNotReject()` is actually not useful because there is little |
|||
* benefit in catching a rejection and then rejecting it again. Instead, consider |
|||
* adding a comment next to the specific code path that should not reject and keep |
|||
* error messages as expressive as possible. |
|||
* |
|||
* If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
|
|||
* [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) or a validation
|
|||
* function. See {@link throws} for more details. |
|||
* |
|||
* Besides the async nature to await the completion behaves identically to {@link doesNotThrow}. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* await assert.doesNotReject( |
|||
* async () => { |
|||
* throw new TypeError('Wrong value'); |
|||
* }, |
|||
* SyntaxError |
|||
* ); |
|||
* ```
|
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.doesNotReject(Promise.reject(new TypeError('Wrong value'))) |
|||
* .then(() => { |
|||
* // ...
|
|||
* }); |
|||
* ```
|
|||
* @since v10.0.0 |
|||
*/ |
|||
function doesNotReject(block: (() => Promise<unknown>) | Promise<unknown>, message?: string | Error): Promise<void>; |
|||
function doesNotReject(block: (() => Promise<unknown>) | Promise<unknown>, error: AssertPredicate, message?: string | Error): Promise<void>; |
|||
/** |
|||
* Expects the `string` input to match the regular expression. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.match('I will fail', /pass/); |
|||
* // AssertionError [ERR_ASSERTION]: The input did not match the regular ...
|
|||
* |
|||
* assert.match(123, /pass/); |
|||
* // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
|
|||
* |
|||
* assert.match('I will pass', /pass/); |
|||
* // OK
|
|||
* ```
|
|||
* |
|||
* If the values do not match, or if the `string` argument is of another type than`string`, an `AssertionError` is thrown with a `message` property set equal |
|||
* to the value of the `message` parameter. If the `message` parameter is |
|||
* undefined, a default error message is assigned. If the `message` parameter is an |
|||
* instance of an `Error` then it will be thrown instead of the `AssertionError`. |
|||
* @since v13.6.0, v12.16.0 |
|||
*/ |
|||
function match(value: string, regExp: RegExp, message?: string | Error): void; |
|||
/** |
|||
* Expects the `string` input not to match the regular expression. |
|||
* |
|||
* ```js
|
|||
* import assert from 'assert/strict'; |
|||
* |
|||
* assert.doesNotMatch('I will fail', /fail/); |
|||
* // AssertionError [ERR_ASSERTION]: The input was expected to not match the ...
|
|||
* |
|||
* assert.doesNotMatch(123, /pass/); |
|||
* // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
|
|||
* |
|||
* assert.doesNotMatch('I will pass', /different/); |
|||
* // OK
|
|||
* ```
|
|||
* |
|||
* If the values do match, or if the `string` argument is of another type than`string`, an `AssertionError` is thrown with a `message` property set equal |
|||
* to the value of the `message` parameter. If the `message` parameter is |
|||
* undefined, a default error message is assigned. If the `message` parameter is an |
|||
* instance of an `Error` then it will be thrown instead of the `AssertionError`. |
|||
* @since v13.6.0, v12.16.0 |
|||
*/ |
|||
function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void; |
|||
const strict: Omit<typeof assert, 'equal' | 'notEqual' | 'deepEqual' | 'notDeepEqual' | 'ok' | 'strictEqual' | 'deepStrictEqual' | 'ifError' | 'strict'> & { |
|||
(value: unknown, message?: string | Error): asserts value; |
|||
equal: typeof strictEqual; |
|||
notEqual: typeof notStrictEqual; |
|||
deepEqual: typeof deepStrictEqual; |
|||
notDeepEqual: typeof notDeepStrictEqual; |
|||
// Mapped types and assertion functions are incompatible?
|
|||
// TS2775: Assertions require every name in the call target
|
|||
// to be declared with an explicit type annotation.
|
|||
ok: typeof ok; |
|||
strictEqual: typeof strictEqual; |
|||
deepStrictEqual: typeof deepStrictEqual; |
|||
ifError: typeof ifError; |
|||
strict: typeof strict; |
|||
}; |
|||
} |
|||
export = assert; |
|||
} |
|||
declare module 'node:assert' { |
|||
import assert = require('assert'); |
|||
export = assert; |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
declare module 'assert/strict' { |
|||
import { strict } from 'node:assert'; |
|||
export = strict; |
|||
} |
|||
declare module 'node:assert/strict' { |
|||
import { strict } from 'node:assert'; |
|||
export = strict; |
|||
} |
|||
@ -0,0 +1,501 @@ |
|||
/** |
|||
* The `async_hooks` module provides an API to track asynchronous resources. It |
|||
* can be accessed using: |
|||
* |
|||
* ```js
|
|||
* import async_hooks from 'async_hooks'; |
|||
* ```
|
|||
* @experimental |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/async_hooks.js)
|
|||
*/ |
|||
declare module 'async_hooks' { |
|||
/** |
|||
* ```js
|
|||
* import { executionAsyncId } from 'async_hooks'; |
|||
* |
|||
* console.log(executionAsyncId()); // 1 - bootstrap
|
|||
* fs.open(path, 'r', (err, fd) => { |
|||
* console.log(executionAsyncId()); // 6 - open()
|
|||
* }); |
|||
* ```
|
|||
* |
|||
* The ID returned from `executionAsyncId()` is related to execution timing, not |
|||
* causality (which is covered by `triggerAsyncId()`): |
|||
* |
|||
* ```js
|
|||
* const server = net.createServer((conn) => { |
|||
* // Returns the ID of the server, not of the new connection, because the
|
|||
* // callback runs in the execution scope of the server's MakeCallback().
|
|||
* async_hooks.executionAsyncId(); |
|||
* |
|||
* }).listen(port, () => { |
|||
* // Returns the ID of a TickObject (process.nextTick()) because all
|
|||
* // callbacks passed to .listen() are wrapped in a nextTick().
|
|||
* async_hooks.executionAsyncId(); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Promise contexts may not get precise `executionAsyncIds` by default. |
|||
* See the section on `promise execution tracking`. |
|||
* @since v8.1.0 |
|||
* @return The `asyncId` of the current execution context. Useful to track when something calls. |
|||
*/ |
|||
function executionAsyncId(): number; |
|||
/** |
|||
* Resource objects returned by `executionAsyncResource()` are most often internal |
|||
* Node.js handle objects with undocumented APIs. Using any functions or properties |
|||
* on the object is likely to crash your application and should be avoided. |
|||
* |
|||
* Using `executionAsyncResource()` in the top-level execution context will |
|||
* return an empty object as there is no handle or request object to use, |
|||
* but having an object representing the top-level can be helpful. |
|||
* |
|||
* ```js
|
|||
* import { open } from 'fs'; |
|||
* import { executionAsyncId, executionAsyncResource } from 'async_hooks'; |
|||
* |
|||
* console.log(executionAsyncId(), executionAsyncResource()); // 1 {}
|
|||
* open(new URL(import.meta.url), 'r', (err, fd) => { |
|||
* console.log(executionAsyncId(), executionAsyncResource()); // 7 FSReqWrap
|
|||
* }); |
|||
* ```
|
|||
* |
|||
* This can be used to implement continuation local storage without the |
|||
* use of a tracking `Map` to store the metadata: |
|||
* |
|||
* ```js
|
|||
* import { createServer } from 'http'; |
|||
* import { |
|||
* executionAsyncId, |
|||
* executionAsyncResource, |
|||
* createHook |
|||
* } from 'async_hooks'; |
|||
* const sym = Symbol('state'); // Private symbol to avoid pollution
|
|||
* |
|||
* createHook({ |
|||
* init(asyncId, type, triggerAsyncId, resource) { |
|||
* const cr = executionAsyncResource(); |
|||
* if (cr) { |
|||
* resource[sym] = cr[sym]; |
|||
* } |
|||
* } |
|||
* }).enable(); |
|||
* |
|||
* const server = createServer((req, res) => { |
|||
* executionAsyncResource()[sym] = { state: req.url }; |
|||
* setTimeout(function() { |
|||
* res.end(JSON.stringify(executionAsyncResource()[sym])); |
|||
* }, 100); |
|||
* }).listen(3000); |
|||
* ```
|
|||
* @since v13.9.0, v12.17.0 |
|||
* @return The resource representing the current execution. Useful to store data within the resource. |
|||
*/ |
|||
function executionAsyncResource(): object; |
|||
/** |
|||
* ```js
|
|||
* const server = net.createServer((conn) => { |
|||
* // The resource that caused (or triggered) this callback to be called
|
|||
* // was that of the new connection. Thus the return value of triggerAsyncId()
|
|||
* // is the asyncId of "conn".
|
|||
* async_hooks.triggerAsyncId(); |
|||
* |
|||
* }).listen(port, () => { |
|||
* // Even though all callbacks passed to .listen() are wrapped in a nextTick()
|
|||
* // the callback itself exists because the call to the server's .listen()
|
|||
* // was made. So the return value would be the ID of the server.
|
|||
* async_hooks.triggerAsyncId(); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Promise contexts may not get valid `triggerAsyncId`s by default. See |
|||
* the section on `promise execution tracking`. |
|||
* @return 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. |
|||
* |
|||
* The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the |
|||
* respective asynchronous event during a resource's lifetime. |
|||
* |
|||
* All callbacks are optional. For example, if only resource cleanup needs to |
|||
* be tracked, then only the `destroy` callback needs to be passed. The |
|||
* specifics of all functions that can be passed to `callbacks` is in the `Hook Callbacks` section. |
|||
* |
|||
* ```js
|
|||
* import { createHook } from 'async_hooks'; |
|||
* |
|||
* const asyncHook = createHook({ |
|||
* init(asyncId, type, triggerAsyncId, resource) { }, |
|||
* destroy(asyncId) { } |
|||
* }); |
|||
* ```
|
|||
* |
|||
* The callbacks will be inherited via the prototype chain: |
|||
* |
|||
* ```js
|
|||
* class MyAsyncCallbacks { |
|||
* init(asyncId, type, triggerAsyncId, resource) { } |
|||
* destroy(asyncId) {} |
|||
* } |
|||
* |
|||
* class MyAddedCallbacks extends MyAsyncCallbacks { |
|||
* before(asyncId) { } |
|||
* after(asyncId) { } |
|||
* } |
|||
* |
|||
* const asyncHook = async_hooks.createHook(new MyAddedCallbacks()); |
|||
* ```
|
|||
* |
|||
* Because promises are asynchronous resources whose lifecycle is tracked |
|||
* via the async hooks mechanism, the `init()`, `before()`, `after()`, and`destroy()` callbacks _must not_ be async functions that return promises. |
|||
* @since v8.1.0 |
|||
* @param callbacks The `Hook Callbacks` to register |
|||
* @return Instance used for disabling and enabling hooks |
|||
*/ |
|||
function createHook(callbacks: HookCallbacks): AsyncHook; |
|||
interface AsyncResourceOptions { |
|||
/** |
|||
* The ID of the execution context that created this async event. |
|||
* @default executionAsyncId() |
|||
*/ |
|||
triggerAsyncId?: number | undefined; |
|||
/** |
|||
* 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 | undefined; |
|||
} |
|||
/** |
|||
* The class `AsyncResource` is designed to be extended by the embedder's async |
|||
* resources. Using this, users can easily trigger the lifetime events of their |
|||
* own resources. |
|||
* |
|||
* The `init` hook will trigger when an `AsyncResource` is instantiated. |
|||
* |
|||
* The following is an overview of the `AsyncResource` API. |
|||
* |
|||
* ```js
|
|||
* import { AsyncResource, executionAsyncId } from 'async_hooks'; |
|||
* |
|||
* // AsyncResource() is meant to be extended. Instantiating a
|
|||
* // new AsyncResource() also triggers init. If triggerAsyncId is omitted then
|
|||
* // async_hook.executionAsyncId() is used.
|
|||
* const asyncResource = new AsyncResource( |
|||
* type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false } |
|||
* ); |
|||
* |
|||
* // Run a function in the execution context of the resource. This will
|
|||
* // * establish the context of the resource
|
|||
* // * trigger the AsyncHooks before callbacks
|
|||
* // * call the provided function `fn` with the supplied arguments
|
|||
* // * trigger the AsyncHooks after callbacks
|
|||
* // * restore the original execution context
|
|||
* asyncResource.runInAsyncScope(fn, thisArg, ...args); |
|||
* |
|||
* // Call AsyncHooks destroy callbacks.
|
|||
* asyncResource.emitDestroy(); |
|||
* |
|||
* // Return the unique ID assigned to the AsyncResource instance.
|
|||
* asyncResource.asyncId(); |
|||
* |
|||
* // Return the trigger ID for the AsyncResource instance.
|
|||
* asyncResource.triggerAsyncId(); |
|||
* ```
|
|||
*/ |
|||
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); |
|||
/** |
|||
* Binds the given function to the current execution context. |
|||
* |
|||
* The returned function will have an `asyncResource` property referencing |
|||
* the `AsyncResource` to which the function is bound. |
|||
* @since v14.8.0, v12.19.0 |
|||
* @param fn The function to bind to the current execution context. |
|||
* @param type An optional name to associate with the underlying `AsyncResource`. |
|||
*/ |
|||
static bind<Func extends (this: ThisArg, ...args: any[]) => any, ThisArg>( |
|||
fn: Func, |
|||
type?: string, |
|||
thisArg?: ThisArg |
|||
): Func & { |
|||
asyncResource: AsyncResource; |
|||
}; |
|||
/** |
|||
* Binds the given function to execute to this `AsyncResource`'s scope. |
|||
* |
|||
* The returned function will have an `asyncResource` property referencing |
|||
* the `AsyncResource` to which the function is bound. |
|||
* @since v14.8.0, v12.19.0 |
|||
* @param fn The function to bind to the current `AsyncResource`. |
|||
*/ |
|||
bind<Func extends (...args: any[]) => any>( |
|||
fn: Func |
|||
): Func & { |
|||
asyncResource: AsyncResource; |
|||
}; |
|||
/** |
|||
* 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. |
|||
* @since v9.6.0 |
|||
* @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 all `destroy` hooks. This should only ever be called once. An error will |
|||
* be thrown if it is called more than once. This **must** be manually called. If |
|||
* the resource is left to be collected by the GC then the `destroy` hooks will |
|||
* never be called. |
|||
* @return A reference to `asyncResource`. |
|||
*/ |
|||
emitDestroy(): this; |
|||
/** |
|||
* @return The unique `asyncId` assigned to the resource. |
|||
*/ |
|||
asyncId(): number; |
|||
/** |
|||
* |
|||
* @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor. |
|||
*/ |
|||
triggerAsyncId(): number; |
|||
} |
|||
/** |
|||
* This class creates stores that stay coherent through asynchronous operations. |
|||
* |
|||
* While you can create your own implementation on top of the `async_hooks` module,`AsyncLocalStorage` should be preferred as it is a performant and memory safe |
|||
* implementation that involves significant optimizations that are non-obvious to |
|||
* implement. |
|||
* |
|||
* The following example uses `AsyncLocalStorage` to build a simple logger |
|||
* that assigns IDs to incoming HTTP requests and includes them in messages |
|||
* logged within each request. |
|||
* |
|||
* ```js
|
|||
* import http from 'http'; |
|||
* import { AsyncLocalStorage } from 'async_hooks'; |
|||
* |
|||
* const asyncLocalStorage = new AsyncLocalStorage(); |
|||
* |
|||
* function logWithId(msg) { |
|||
* const id = asyncLocalStorage.getStore(); |
|||
* console.log(`${id !== undefined ? id : '-'}:`, msg); |
|||
* } |
|||
* |
|||
* let idSeq = 0; |
|||
* http.createServer((req, res) => { |
|||
* asyncLocalStorage.run(idSeq++, () => { |
|||
* logWithId('start'); |
|||
* // Imagine any chain of async operations here
|
|||
* setImmediate(() => { |
|||
* logWithId('finish'); |
|||
* res.end(); |
|||
* }); |
|||
* }); |
|||
* }).listen(8080); |
|||
* |
|||
* http.get('http://localhost:8080'); |
|||
* http.get('http://localhost:8080'); |
|||
* // Prints:
|
|||
* // 0: start
|
|||
* // 1: start
|
|||
* // 0: finish
|
|||
* // 1: finish
|
|||
* ```
|
|||
* |
|||
* Each instance of `AsyncLocalStorage` maintains an independent storage context. |
|||
* Multiple instances can safely exist simultaneously without risk of interfering |
|||
* with each other data. |
|||
* @since v13.10.0, v12.17.0 |
|||
*/ |
|||
class AsyncLocalStorage<T> { |
|||
/** |
|||
* Disables the instance of `AsyncLocalStorage`. All subsequent calls |
|||
* to `asyncLocalStorage.getStore()` will return `undefined` until`asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again. |
|||
* |
|||
* When calling `asyncLocalStorage.disable()`, all current contexts linked to the |
|||
* instance will be exited. |
|||
* |
|||
* Calling `asyncLocalStorage.disable()` is required before the`asyncLocalStorage` can be garbage collected. This does not apply to stores |
|||
* provided by the `asyncLocalStorage`, as those objects are garbage collected |
|||
* along with the corresponding async resources. |
|||
* |
|||
* Use this method when the `asyncLocalStorage` is not in use anymore |
|||
* in the current process. |
|||
* @since v13.10.0, v12.17.0 |
|||
* @experimental |
|||
*/ |
|||
disable(): void; |
|||
/** |
|||
* Returns the current store. |
|||
* If called outside of an asynchronous context initialized by |
|||
* calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it |
|||
* returns `undefined`. |
|||
* @since v13.10.0, v12.17.0 |
|||
*/ |
|||
getStore(): T | undefined; |
|||
/** |
|||
* Runs a function synchronously within a context and returns its |
|||
* return value. The store is not accessible outside of the callback function. |
|||
* The store is accessible to any asynchronous operations created within the |
|||
* callback. |
|||
* |
|||
* The optional `args` are passed to the callback function. |
|||
* |
|||
* If the callback function throws an error, the error is thrown by `run()` too. |
|||
* The stacktrace is not impacted by this call and the context is exited. |
|||
* |
|||
* Example: |
|||
* |
|||
* ```js
|
|||
* const store = { id: 2 }; |
|||
* try { |
|||
* asyncLocalStorage.run(store, () => { |
|||
* asyncLocalStorage.getStore(); // Returns the store object
|
|||
* setTimeout(() => { |
|||
* asyncLocalStorage.getStore(); // Returns the store object
|
|||
* }, 200); |
|||
* throw new Error(); |
|||
* }); |
|||
* } catch (e) { |
|||
* asyncLocalStorage.getStore(); // Returns undefined
|
|||
* // The error will be caught here
|
|||
* } |
|||
* ```
|
|||
* @since v13.10.0, v12.17.0 |
|||
*/ |
|||
run<R, TArgs extends any[]>(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R; |
|||
/** |
|||
* Runs a function synchronously outside of a context and returns its |
|||
* return value. The store is not accessible within the callback function or |
|||
* the asynchronous operations created within the callback. Any `getStore()`call done within the callback function will always return `undefined`. |
|||
* |
|||
* The optional `args` are passed to the callback function. |
|||
* |
|||
* If the callback function throws an error, the error is thrown by `exit()` too. |
|||
* The stacktrace is not impacted by this call and the context is re-entered. |
|||
* |
|||
* Example: |
|||
* |
|||
* ```js
|
|||
* // Within a call to run
|
|||
* try { |
|||
* asyncLocalStorage.getStore(); // Returns the store object or value
|
|||
* asyncLocalStorage.exit(() => { |
|||
* asyncLocalStorage.getStore(); // Returns undefined
|
|||
* throw new Error(); |
|||
* }); |
|||
* } catch (e) { |
|||
* asyncLocalStorage.getStore(); // Returns the same object or value
|
|||
* // The error will be caught here
|
|||
* } |
|||
* ```
|
|||
* @since v13.10.0, v12.17.0 |
|||
* @experimental |
|||
*/ |
|||
exit<R, TArgs extends any[]>(callback: (...args: TArgs) => R, ...args: TArgs): R; |
|||
/** |
|||
* Transitions into the context for the remainder of the current |
|||
* synchronous execution and then persists the store through any following |
|||
* asynchronous calls. |
|||
* |
|||
* Example: |
|||
* |
|||
* ```js
|
|||
* const store = { id: 1 }; |
|||
* // Replaces previous store with the given store object
|
|||
* asyncLocalStorage.enterWith(store); |
|||
* asyncLocalStorage.getStore(); // Returns the store object
|
|||
* someAsyncOperation(() => { |
|||
* asyncLocalStorage.getStore(); // Returns the same object
|
|||
* }); |
|||
* ```
|
|||
* |
|||
* This transition will continue for the _entire_ synchronous execution. |
|||
* This means that if, for example, the context is entered within an event |
|||
* handler subsequent event handlers will also run within that context unless |
|||
* specifically bound to another context with an `AsyncResource`. That is why`run()` should be preferred over `enterWith()` unless there are strong reasons |
|||
* to use the latter method. |
|||
* |
|||
* ```js
|
|||
* const store = { id: 1 }; |
|||
* |
|||
* emitter.on('my-event', () => { |
|||
* asyncLocalStorage.enterWith(store); |
|||
* }); |
|||
* emitter.on('my-event', () => { |
|||
* asyncLocalStorage.getStore(); // Returns the same object
|
|||
* }); |
|||
* |
|||
* asyncLocalStorage.getStore(); // Returns undefined
|
|||
* emitter.emit('my-event'); |
|||
* asyncLocalStorage.getStore(); // Returns the same object
|
|||
* ```
|
|||
* @since v13.11.0, v12.17.0 |
|||
* @experimental |
|||
*/ |
|||
enterWith(store: T): void; |
|||
} |
|||
} |
|||
declare module 'node:async_hooks' { |
|||
export * from 'async_hooks'; |
|||
} |
|||
2232
node_modules/@types/node/buffer.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1366
node_modules/@types/node/child_process.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,414 @@ |
|||
/** |
|||
* A single instance of Node.js runs in a single thread. To take advantage of |
|||
* multi-core systems, the user will sometimes want to launch a cluster of Node.js |
|||
* processes to handle the load. |
|||
* |
|||
* The cluster module allows easy creation of child processes that all share |
|||
* server ports. |
|||
* |
|||
* ```js
|
|||
* import cluster from 'cluster'; |
|||
* import http from 'http'; |
|||
* import { cpus } from 'os'; |
|||
* import process from 'process'; |
|||
* |
|||
* const numCPUs = cpus().length; |
|||
* |
|||
* if (cluster.isPrimary) { |
|||
* console.log(`Primary ${process.pid} is running`); |
|||
* |
|||
* // Fork workers.
|
|||
* for (let i = 0; i < numCPUs; i++) { |
|||
* cluster.fork(); |
|||
* } |
|||
* |
|||
* cluster.on('exit', (worker, code, signal) => { |
|||
* console.log(`worker ${worker.process.pid} died`); |
|||
* }); |
|||
* } else { |
|||
* // Workers can share any TCP connection
|
|||
* // In this case it is an HTTP server
|
|||
* http.createServer((req, res) => { |
|||
* res.writeHead(200); |
|||
* res.end('hello world\n'); |
|||
* }).listen(8000); |
|||
* |
|||
* console.log(`Worker ${process.pid} started`); |
|||
* } |
|||
* ```
|
|||
* |
|||
* Running Node.js will now share port 8000 between the workers: |
|||
* |
|||
* ```console
|
|||
* $ node server.js |
|||
* Primary 3596 is running |
|||
* Worker 4324 started |
|||
* Worker 4520 started |
|||
* Worker 6056 started |
|||
* Worker 5644 started |
|||
* ```
|
|||
* |
|||
* On Windows, it is not yet possible to set up a named pipe server in a worker. |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/cluster.js)
|
|||
*/ |
|||
declare module 'cluster' { |
|||
import * as child from 'node:child_process'; |
|||
import EventEmitter = require('node:events'); |
|||
import * as net from 'node:net'; |
|||
export interface ClusterSettings { |
|||
execArgv?: string[] | undefined; // default: process.execArgv
|
|||
exec?: string | undefined; |
|||
args?: string[] | undefined; |
|||
silent?: boolean | undefined; |
|||
stdio?: any[] | undefined; |
|||
uid?: number | undefined; |
|||
gid?: number | undefined; |
|||
inspectPort?: number | (() => number) | undefined; |
|||
} |
|||
export interface Address { |
|||
address: string; |
|||
port: number; |
|||
addressType: number | 'udp4' | 'udp6'; // 4, 6, -1, "udp4", "udp6"
|
|||
} |
|||
/** |
|||
* A `Worker` object contains all public information and method about a worker. |
|||
* In the primary it can be obtained using `cluster.workers`. In a worker |
|||
* it can be obtained using `cluster.worker`. |
|||
* @since v0.7.0 |
|||
*/ |
|||
export class Worker extends EventEmitter { |
|||
/** |
|||
* Each new worker is given its own unique id, this id is stored in the`id`. |
|||
* |
|||
* While a worker is alive, this is the key that indexes it in`cluster.workers`. |
|||
* @since v0.8.0 |
|||
*/ |
|||
id: number; |
|||
/** |
|||
* All workers are created using `child_process.fork()`, the returned object |
|||
* from this function is stored as `.process`. In a worker, the global `process`is stored. |
|||
* |
|||
* See: `Child Process module`. |
|||
* |
|||
* Workers will call `process.exit(0)` if the `'disconnect'` event occurs |
|||
* on `process` and `.exitedAfterDisconnect` is not `true`. This protects against |
|||
* accidental disconnection. |
|||
* @since v0.7.0 |
|||
*/ |
|||
process: child.ChildProcess; |
|||
/** |
|||
* Send a message to a worker or primary, optionally with a handle. |
|||
* |
|||
* In the primary this sends a message to a specific worker. It is identical to `ChildProcess.send()`. |
|||
* |
|||
* In a worker this sends a message to the primary. It is identical to`process.send()`. |
|||
* |
|||
* This example will echo back all messages from the primary: |
|||
* |
|||
* ```js
|
|||
* if (cluster.isPrimary) { |
|||
* const worker = cluster.fork(); |
|||
* worker.send('hi there'); |
|||
* |
|||
* } else if (cluster.isWorker) { |
|||
* process.on('message', (msg) => { |
|||
* process.send(msg); |
|||
* }); |
|||
* } |
|||
* ```
|
|||
* @since v0.7.0 |
|||
* @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. `options` supports the following properties: |
|||
*/ |
|||
send(message: child.Serializable, callback?: (error: Error | null) => void): boolean; |
|||
send(message: child.Serializable, sendHandle: child.SendHandle, callback?: (error: Error | null) => void): boolean; |
|||
send(message: child.Serializable, sendHandle: child.SendHandle, options?: child.MessageOptions, callback?: (error: Error | null) => void): boolean; |
|||
/** |
|||
* This function will kill the worker. In the primary, it does this |
|||
* by disconnecting the `worker.process`, and once disconnected, killing |
|||
* with `signal`. In the worker, it does it by disconnecting the channel, |
|||
* and then exiting with code `0`. |
|||
* |
|||
* Because `kill()` attempts to gracefully disconnect the worker process, it is |
|||
* susceptible to waiting indefinitely for the disconnect to complete. For example, |
|||
* if the worker enters an infinite loop, a graceful disconnect will never occur. |
|||
* If the graceful disconnect behavior is not needed, use `worker.process.kill()`. |
|||
* |
|||
* Causes `.exitedAfterDisconnect` to be set. |
|||
* |
|||
* This method is aliased as `worker.destroy()` for backward compatibility. |
|||
* |
|||
* In a worker, `process.kill()` exists, but it is not this function; |
|||
* it is `kill()`. |
|||
* @since v0.9.12 |
|||
* @param [signal='SIGTERM'] Name of the kill signal to send to the worker process. |
|||
*/ |
|||
kill(signal?: string): void; |
|||
destroy(signal?: string): void; |
|||
/** |
|||
* In a worker, this function will close all servers, wait for the `'close'` event |
|||
* on those servers, and then disconnect the IPC channel. |
|||
* |
|||
* In the primary, an internal message is sent to the worker causing it to call`.disconnect()` on itself. |
|||
* |
|||
* Causes `.exitedAfterDisconnect` to be set. |
|||
* |
|||
* After a server is closed, it will no longer accept new connections, |
|||
* but connections may be accepted by any other listening worker. Existing |
|||
* connections will be allowed to close as usual. When no more connections exist, |
|||
* see `server.close()`, the IPC channel to the worker will close allowing it |
|||
* to die gracefully. |
|||
* |
|||
* The above applies _only_ to server connections, client connections are not |
|||
* automatically closed by workers, and disconnect does not wait for them to close |
|||
* before exiting. |
|||
* |
|||
* In a worker, `process.disconnect` exists, but it is not this function; |
|||
* it is `disconnect()`. |
|||
* |
|||
* Because long living server connections may block workers from disconnecting, it |
|||
* may be useful to send a message, so application specific actions may be taken to |
|||
* close them. It also may be useful to implement a timeout, killing a worker if |
|||
* the `'disconnect'` event has not been emitted after some time. |
|||
* |
|||
* ```js
|
|||
* if (cluster.isPrimary) { |
|||
* const worker = cluster.fork(); |
|||
* let timeout; |
|||
* |
|||
* worker.on('listening', (address) => { |
|||
* worker.send('shutdown'); |
|||
* worker.disconnect(); |
|||
* timeout = setTimeout(() => { |
|||
* worker.kill(); |
|||
* }, 2000); |
|||
* }); |
|||
* |
|||
* worker.on('disconnect', () => { |
|||
* clearTimeout(timeout); |
|||
* }); |
|||
* |
|||
* } else if (cluster.isWorker) { |
|||
* const net = require('net'); |
|||
* const server = net.createServer((socket) => { |
|||
* // Connections never end
|
|||
* }); |
|||
* |
|||
* server.listen(8000); |
|||
* |
|||
* process.on('message', (msg) => { |
|||
* if (msg === 'shutdown') { |
|||
* // Initiate graceful close of any connections to server
|
|||
* } |
|||
* }); |
|||
* } |
|||
* ```
|
|||
* @since v0.7.7 |
|||
* @return A reference to `worker`. |
|||
*/ |
|||
disconnect(): void; |
|||
/** |
|||
* This function returns `true` if the worker is connected to its primary via its |
|||
* IPC channel, `false` otherwise. A worker is connected to its primary after it |
|||
* has been created. It is disconnected after the `'disconnect'` event is emitted. |
|||
* @since v0.11.14 |
|||
*/ |
|||
isConnected(): boolean; |
|||
/** |
|||
* This function returns `true` if the worker's process has terminated (either |
|||
* because of exiting or being signaled). Otherwise, it returns `false`. |
|||
* |
|||
* ```js
|
|||
* import cluster from 'cluster'; |
|||
* import http from 'http'; |
|||
* import { cpus } from 'os'; |
|||
* import process from 'process'; |
|||
* |
|||
* const numCPUs = cpus().length; |
|||
* |
|||
* if (cluster.isPrimary) { |
|||
* console.log(`Primary ${process.pid} is running`); |
|||
* |
|||
* // Fork workers.
|
|||
* for (let i = 0; i < numCPUs; i++) { |
|||
* cluster.fork(); |
|||
* } |
|||
* |
|||
* cluster.on('fork', (worker) => { |
|||
* console.log('worker is dead:', worker.isDead()); |
|||
* }); |
|||
* |
|||
* cluster.on('exit', (worker, code, signal) => { |
|||
* console.log('worker is dead:', worker.isDead()); |
|||
* }); |
|||
* } else { |
|||
* // Workers can share any TCP connection. In this case, it is an HTTP server.
|
|||
* http.createServer((req, res) => { |
|||
* res.writeHead(200); |
|||
* res.end(`Current process\n ${process.pid}`); |
|||
* process.kill(process.pid); |
|||
* }).listen(8000); |
|||
* } |
|||
* ```
|
|||
* @since v0.11.14 |
|||
*/ |
|||
isDead(): boolean; |
|||
/** |
|||
* This property is `true` if the worker exited due to `.kill()` or`.disconnect()`. If the worker exited any other way, it is `false`. If the |
|||
* worker has not exited, it is `undefined`. |
|||
* |
|||
* The boolean `worker.exitedAfterDisconnect` allows distinguishing between |
|||
* voluntary and accidental exit, the primary may choose not to respawn a worker |
|||
* based on this value. |
|||
* |
|||
* ```js
|
|||
* cluster.on('exit', (worker, code, signal) => { |
|||
* if (worker.exitedAfterDisconnect === true) { |
|||
* console.log('Oh, it was just voluntary – no need to worry'); |
|||
* } |
|||
* }); |
|||
* |
|||
* // kill worker
|
|||
* worker.kill(); |
|||
* ```
|
|||
* @since v6.0.0 |
|||
*/ |
|||
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; |
|||
} |
|||
export interface Cluster extends EventEmitter { |
|||
disconnect(callback?: () => void): void; |
|||
fork(env?: any): Worker; |
|||
/** @deprecated since v16.0.0 - use isPrimary. */ |
|||
readonly isMaster: boolean; |
|||
readonly isPrimary: boolean; |
|||
readonly isWorker: boolean; |
|||
schedulingPolicy: number; |
|||
readonly settings: ClusterSettings; |
|||
/** @deprecated since v16.0.0 - use setupPrimary. */ |
|||
setupMaster(settings?: ClusterSettings): void; |
|||
/** |
|||
* `setupPrimary` is used to change the default 'fork' behavior. Once called, the settings will be present in cluster.settings. |
|||
*/ |
|||
setupPrimary(settings?: ClusterSettings): void; |
|||
readonly worker?: Worker | undefined; |
|||
readonly workers?: NodeJS.Dict<Worker> | undefined; |
|||
readonly SCHED_NONE: number; |
|||
readonly SCHED_RR: number; |
|||
/** |
|||
* 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; |
|||
// the handle is a net.Socket or net.Server object, or undefined.
|
|||
prependListener(event: 'message', listener: (worker: Worker, message: any, handle?: net.Socket | net.Server) => void): this; |
|||
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; |
|||
} |
|||
const cluster: Cluster; |
|||
export default cluster; |
|||
} |
|||
declare module 'node:cluster' { |
|||
export * from 'cluster'; |
|||
export { default as default } from 'cluster'; |
|||
} |
|||
@ -0,0 +1,412 @@ |
|||
/** |
|||
* The `console` module provides a simple debugging console that is similar to the |
|||
* JavaScript console mechanism provided by web browsers. |
|||
* |
|||
* The module exports two specific components: |
|||
* |
|||
* * A `Console` class with methods such as `console.log()`, `console.error()` and`console.warn()` that can be used to write to any Node.js stream. |
|||
* * A global `console` instance configured to write to `process.stdout` and `process.stderr`. The global `console` can be used without calling`require('console')`. |
|||
* |
|||
* _**Warning**_: The global console object's methods are neither consistently |
|||
* synchronous like the browser APIs they resemble, nor are they consistently |
|||
* asynchronous like all other Node.js streams. See the `note on process I/O` for |
|||
* more information. |
|||
* |
|||
* Example using the global `console`: |
|||
* |
|||
* ```js
|
|||
* console.log('hello world'); |
|||
* // Prints: hello world, to stdout
|
|||
* console.log('hello %s', 'world'); |
|||
* // Prints: hello world, to stdout
|
|||
* console.error(new Error('Whoops, something bad happened')); |
|||
* // Prints error message and stack trace to stderr:
|
|||
* // Error: Whoops, something bad happened
|
|||
* // at [eval]:5:15
|
|||
* // at Script.runInThisContext (node:vm:132:18)
|
|||
* // at Object.runInThisContext (node:vm:309:38)
|
|||
* // at node:internal/process/execution:77:19
|
|||
* // at [eval]-wrapper:6:22
|
|||
* // at evalScript (node:internal/process/execution:76:60)
|
|||
* // at node:internal/main/eval_string:23:3
|
|||
* |
|||
* const name = 'Will Robinson'; |
|||
* console.warn(`Danger ${name}! Danger!`); |
|||
* // Prints: Danger Will Robinson! Danger!, to stderr
|
|||
* ```
|
|||
* |
|||
* Example using the `Console` class: |
|||
* |
|||
* ```js
|
|||
* const out = getStreamSomehow(); |
|||
* const err = getStreamSomehow(); |
|||
* const myConsole = new console.Console(out, err); |
|||
* |
|||
* myConsole.log('hello world'); |
|||
* // Prints: hello world, to out
|
|||
* myConsole.log('hello %s', 'world'); |
|||
* // Prints: hello world, to out
|
|||
* myConsole.error(new Error('Whoops, something bad happened')); |
|||
* // Prints: [Error: Whoops, something bad happened], to err
|
|||
* |
|||
* const name = 'Will Robinson'; |
|||
* myConsole.warn(`Danger ${name}! Danger!`); |
|||
* // Prints: Danger Will Robinson! Danger!, to err
|
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/console.js)
|
|||
*/ |
|||
declare module 'console' { |
|||
import console = require('node:console'); |
|||
export = console; |
|||
} |
|||
declare module 'node:console' { |
|||
import { InspectOptions } from 'node:util'; |
|||
global { |
|||
// This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build
|
|||
interface Console { |
|||
Console: console.ConsoleConstructor; |
|||
/** |
|||
* `console.assert()` writes a message if `value` is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) or omitted. It only
|
|||
* writes a message and does not otherwise affect execution. The output always |
|||
* starts with `"Assertion failed"`. If provided, `message` is formatted using `util.format()`. |
|||
* |
|||
* If `value` is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy), nothing happens.
|
|||
* |
|||
* ```js
|
|||
* console.assert(true, 'does nothing'); |
|||
* |
|||
* console.assert(false, 'Whoops %s work', 'didn\'t'); |
|||
* // Assertion failed: Whoops didn't work
|
|||
* |
|||
* console.assert(); |
|||
* // Assertion failed
|
|||
* ```
|
|||
* @since v0.1.101 |
|||
* @param value The value tested for being truthy. |
|||
* @param message All arguments besides `value` are used as error message. |
|||
*/ |
|||
assert(value: any, message?: string, ...optionalParams: any[]): void; |
|||
/** |
|||
* When `stdout` is a TTY, calling `console.clear()` will attempt to clear the |
|||
* TTY. When `stdout` is not a TTY, this method does nothing. |
|||
* |
|||
* The specific operation of `console.clear()` can vary across operating systems |
|||
* and terminal types. For most Linux operating systems, `console.clear()`operates similarly to the `clear` shell command. On Windows, `console.clear()`will clear only the output in the |
|||
* current terminal viewport for the Node.js |
|||
* binary. |
|||
* @since v8.3.0 |
|||
*/ |
|||
clear(): void; |
|||
/** |
|||
* Maintains an internal counter specific to `label` and outputs to `stdout` the |
|||
* number of times `console.count()` has been called with the given `label`. |
|||
* |
|||
* ```js
|
|||
* > console.count() |
|||
* default: 1 |
|||
* undefined |
|||
* > console.count('default') |
|||
* default: 2 |
|||
* undefined |
|||
* > console.count('abc') |
|||
* abc: 1 |
|||
* undefined |
|||
* > console.count('xyz') |
|||
* xyz: 1 |
|||
* undefined |
|||
* > console.count('abc') |
|||
* abc: 2 |
|||
* undefined |
|||
* > console.count() |
|||
* default: 3 |
|||
* undefined |
|||
* > |
|||
* ```
|
|||
* @since v8.3.0 |
|||
* @param label The display label for the counter. |
|||
*/ |
|||
count(label?: string): void; |
|||
/** |
|||
* Resets the internal counter specific to `label`. |
|||
* |
|||
* ```js
|
|||
* > console.count('abc'); |
|||
* abc: 1 |
|||
* undefined |
|||
* > console.countReset('abc'); |
|||
* undefined |
|||
* > console.count('abc'); |
|||
* abc: 1 |
|||
* undefined |
|||
* > |
|||
* ```
|
|||
* @since v8.3.0 |
|||
* @param label The display label for the counter. |
|||
*/ |
|||
countReset(label?: string): void; |
|||
/** |
|||
* The `console.debug()` function is an alias for {@link log}. |
|||
* @since v8.0.0 |
|||
*/ |
|||
debug(message?: any, ...optionalParams: any[]): void; |
|||
/** |
|||
* Uses `util.inspect()` on `obj` and prints the resulting string to `stdout`. |
|||
* This function bypasses any custom `inspect()` function defined on `obj`. |
|||
* @since v0.1.101 |
|||
*/ |
|||
dir(obj: any, options?: InspectOptions): void; |
|||
/** |
|||
* This method calls `console.log()` passing it the arguments received. |
|||
* This method does not produce any XML formatting. |
|||
* @since v8.0.0 |
|||
*/ |
|||
dirxml(...data: any[]): void; |
|||
/** |
|||
* Prints to `stderr` with newline. Multiple arguments can be passed, with the |
|||
* first used as the primary message and all additional used as substitution |
|||
* values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to `util.format()`).
|
|||
* |
|||
* ```js
|
|||
* const code = 5; |
|||
* console.error('error #%d', code); |
|||
* // Prints: error #5, to stderr
|
|||
* console.error('error', code); |
|||
* // Prints: error 5, to stderr
|
|||
* ```
|
|||
* |
|||
* If formatting elements (e.g. `%d`) are not found in the first string then `util.inspect()` is called on each argument and the resulting string |
|||
* values are concatenated. See `util.format()` for more information. |
|||
* @since v0.1.100 |
|||
*/ |
|||
error(message?: any, ...optionalParams: any[]): void; |
|||
/** |
|||
* Increases indentation of subsequent lines by spaces for `groupIndentation`length. |
|||
* |
|||
* If one or more `label`s are provided, those are printed first without the |
|||
* additional indentation. |
|||
* @since v8.5.0 |
|||
*/ |
|||
group(...label: any[]): void; |
|||
/** |
|||
* An alias for {@link group}. |
|||
* @since v8.5.0 |
|||
*/ |
|||
groupCollapsed(...label: any[]): void; |
|||
/** |
|||
* Decreases indentation of subsequent lines by spaces for `groupIndentation`length. |
|||
* @since v8.5.0 |
|||
*/ |
|||
groupEnd(): void; |
|||
/** |
|||
* The `console.info()` function is an alias for {@link log}. |
|||
* @since v0.1.100 |
|||
*/ |
|||
info(message?: any, ...optionalParams: any[]): void; |
|||
/** |
|||
* Prints to `stdout` with newline. Multiple arguments can be passed, with the |
|||
* first used as the primary message and all additional used as substitution |
|||
* values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to `util.format()`).
|
|||
* |
|||
* ```js
|
|||
* const count = 5; |
|||
* console.log('count: %d', count); |
|||
* // Prints: count: 5, to stdout
|
|||
* console.log('count:', count); |
|||
* // Prints: count: 5, to stdout
|
|||
* ```
|
|||
* |
|||
* See `util.format()` for more information. |
|||
* @since v0.1.100 |
|||
*/ |
|||
log(message?: any, ...optionalParams: any[]): void; |
|||
/** |
|||
* Try to construct a table with the columns of the properties of `tabularData`(or use `properties`) and rows of `tabularData` and log it. Falls back to just |
|||
* logging the argument if it can’t be parsed as tabular. |
|||
* |
|||
* ```js
|
|||
* // These can't be parsed as tabular data
|
|||
* console.table(Symbol()); |
|||
* // Symbol()
|
|||
* |
|||
* console.table(undefined); |
|||
* // undefined
|
|||
* |
|||
* console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }]); |
|||
* // ┌─────────┬─────┬─────┐
|
|||
* // │ (index) │ a │ b │
|
|||
* // ├─────────┼─────┼─────┤
|
|||
* // │ 0 │ 1 │ 'Y' │
|
|||
* // │ 1 │ 'Z' │ 2 │
|
|||
* // └─────────┴─────┴─────┘
|
|||
* |
|||
* console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }], ['a']); |
|||
* // ┌─────────┬─────┐
|
|||
* // │ (index) │ a │
|
|||
* // ├─────────┼─────┤
|
|||
* // │ 0 │ 1 │
|
|||
* // │ 1 │ 'Z' │
|
|||
* // └─────────┴─────┘
|
|||
* ```
|
|||
* @since v10.0.0 |
|||
* @param properties Alternate properties for constructing the table. |
|||
*/ |
|||
table(tabularData: any, properties?: ReadonlyArray<string>): void; |
|||
/** |
|||
* Starts a timer that can be used to compute the duration of an operation. Timers |
|||
* are identified by a unique `label`. Use the same `label` when calling {@link timeEnd} to stop the timer and output the elapsed time in |
|||
* suitable time units to `stdout`. For example, if the elapsed |
|||
* time is 3869ms, `console.timeEnd()` displays "3.869s". |
|||
* @since v0.1.104 |
|||
*/ |
|||
time(label?: string): void; |
|||
/** |
|||
* Stops a timer that was previously started by calling {@link time} and |
|||
* prints the result to `stdout`: |
|||
* |
|||
* ```js
|
|||
* console.time('100-elements'); |
|||
* for (let i = 0; i < 100; i++) {} |
|||
* console.timeEnd('100-elements'); |
|||
* // prints 100-elements: 225.438ms
|
|||
* ```
|
|||
* @since v0.1.104 |
|||
*/ |
|||
timeEnd(label?: string): void; |
|||
/** |
|||
* For a timer that was previously started by calling {@link time}, prints |
|||
* the elapsed time and other `data` arguments to `stdout`: |
|||
* |
|||
* ```js
|
|||
* console.time('process'); |
|||
* const value = expensiveProcess1(); // Returns 42
|
|||
* console.timeLog('process', value); |
|||
* // Prints "process: 365.227ms 42".
|
|||
* doExpensiveProcess2(value); |
|||
* console.timeEnd('process'); |
|||
* ```
|
|||
* @since v10.7.0 |
|||
*/ |
|||
timeLog(label?: string, ...data: any[]): void; |
|||
/** |
|||
* Prints to `stderr` the string `'Trace: '`, followed by the `util.format()` formatted message and stack trace to the current position in the code. |
|||
* |
|||
* ```js
|
|||
* console.trace('Show me'); |
|||
* // Prints: (stack trace will vary based on where trace is called)
|
|||
* // Trace: Show me
|
|||
* // at repl:2:9
|
|||
* // at REPLServer.defaultEval (repl.js:248:27)
|
|||
* // at bound (domain.js:287:14)
|
|||
* // at REPLServer.runBound [as eval] (domain.js:300:12)
|
|||
* // at REPLServer.<anonymous> (repl.js:412:12)
|
|||
* // at emitOne (events.js:82:20)
|
|||
* // at REPLServer.emit (events.js:169:7)
|
|||
* // at REPLServer.Interface._onLine (readline.js:210:10)
|
|||
* // at REPLServer.Interface._line (readline.js:549:8)
|
|||
* // at REPLServer.Interface._ttyWrite (readline.js:826:14)
|
|||
* ```
|
|||
* @since v0.1.104 |
|||
*/ |
|||
trace(message?: any, ...optionalParams: any[]): void; |
|||
/** |
|||
* The `console.warn()` function is an alias for {@link error}. |
|||
* @since v0.1.100 |
|||
*/ |
|||
warn(message?: any, ...optionalParams: any[]): void; |
|||
// --- Inspector mode only ---
|
|||
/** |
|||
* This method does not display anything unless used in the inspector. |
|||
* Starts a JavaScript CPU profile with an optional label. |
|||
*/ |
|||
profile(label?: string): void; |
|||
/** |
|||
* This method does not display anything unless used in the inspector. |
|||
* Stops the current JavaScript CPU profiling session if one has been started and prints the report to the Profiles panel of the inspector. |
|||
*/ |
|||
profileEnd(label?: string): void; |
|||
/** |
|||
* This method does not display anything unless used in the inspector. |
|||
* Adds an event with the label `label` to the Timeline panel of the inspector. |
|||
*/ |
|||
timeStamp(label?: string): void; |
|||
} |
|||
/** |
|||
* The `console` module provides a simple debugging console that is similar to the |
|||
* JavaScript console mechanism provided by web browsers. |
|||
* |
|||
* The module exports two specific components: |
|||
* |
|||
* * A `Console` class with methods such as `console.log()`, `console.error()` and`console.warn()` that can be used to write to any Node.js stream. |
|||
* * A global `console` instance configured to write to `process.stdout` and `process.stderr`. The global `console` can be used without calling`require('console')`. |
|||
* |
|||
* _**Warning**_: The global console object's methods are neither consistently |
|||
* synchronous like the browser APIs they resemble, nor are they consistently |
|||
* asynchronous like all other Node.js streams. See the `note on process I/O` for |
|||
* more information. |
|||
* |
|||
* Example using the global `console`: |
|||
* |
|||
* ```js
|
|||
* console.log('hello world'); |
|||
* // Prints: hello world, to stdout
|
|||
* console.log('hello %s', 'world'); |
|||
* // Prints: hello world, to stdout
|
|||
* console.error(new Error('Whoops, something bad happened')); |
|||
* // Prints error message and stack trace to stderr:
|
|||
* // Error: Whoops, something bad happened
|
|||
* // at [eval]:5:15
|
|||
* // at Script.runInThisContext (node:vm:132:18)
|
|||
* // at Object.runInThisContext (node:vm:309:38)
|
|||
* // at node:internal/process/execution:77:19
|
|||
* // at [eval]-wrapper:6:22
|
|||
* // at evalScript (node:internal/process/execution:76:60)
|
|||
* // at node:internal/main/eval_string:23:3
|
|||
* |
|||
* const name = 'Will Robinson'; |
|||
* console.warn(`Danger ${name}! Danger!`); |
|||
* // Prints: Danger Will Robinson! Danger!, to stderr
|
|||
* ```
|
|||
* |
|||
* Example using the `Console` class: |
|||
* |
|||
* ```js
|
|||
* const out = getStreamSomehow(); |
|||
* const err = getStreamSomehow(); |
|||
* const myConsole = new console.Console(out, err); |
|||
* |
|||
* myConsole.log('hello world'); |
|||
* // Prints: hello world, to out
|
|||
* myConsole.log('hello %s', 'world'); |
|||
* // Prints: hello world, to out
|
|||
* myConsole.error(new Error('Whoops, something bad happened')); |
|||
* // Prints: [Error: Whoops, something bad happened], to err
|
|||
* |
|||
* const name = 'Will Robinson'; |
|||
* myConsole.warn(`Danger ${name}! Danger!`); |
|||
* // Prints: Danger Will Robinson! Danger!, to err
|
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v16.4.2/lib/console.js)
|
|||
*/ |
|||
namespace console { |
|||
interface ConsoleConstructorOptions { |
|||
stdout: NodeJS.WritableStream; |
|||
stderr?: NodeJS.WritableStream | undefined; |
|||
ignoreErrors?: boolean | undefined; |
|||
colorMode?: boolean | 'auto' | undefined; |
|||
inspectOptions?: InspectOptions | undefined; |
|||
/** |
|||
* Set group indentation |
|||
* @default 2 |
|||
*/ |
|||
groupIndentation?: number | undefined; |
|||
} |
|||
interface ConsoleConstructor { |
|||
prototype: Console; |
|||
new (stdout: NodeJS.WritableStream, stderr?: NodeJS.WritableStream, ignoreErrors?: boolean): Console; |
|||
new (options: ConsoleConstructorOptions): Console; |
|||
} |
|||
} |
|||
var console: Console; |
|||
} |
|||
export = globalThis.console; |
|||
} |
|||
@ -0,0 +1,18 @@ |
|||
/** @deprecated since v6.3.0 - use constants property exposed by the relevant module instead. */ |
|||
declare module 'constants' { |
|||
import { constants as osConstants, SignalConstants } from 'node:os'; |
|||
import { constants as cryptoConstants } from 'node:crypto'; |
|||
import { constants as fsConstants } from 'node:fs'; |
|||
|
|||
const exp: typeof osConstants.errno & |
|||
typeof osConstants.priority & |
|||
SignalConstants & |
|||
typeof cryptoConstants & |
|||
typeof fsConstants; |
|||
export = exp; |
|||
} |
|||
|
|||
declare module 'node:constants' { |
|||
import constants = require('constants'); |
|||
export = constants; |
|||
} |
|||
3307
node_modules/@types/node/crypto.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,545 @@ |
|||
/** |
|||
* The `dgram` module provides an implementation of UDP datagram sockets. |
|||
* |
|||
* ```js
|
|||
* import dgram from 'dgram'; |
|||
* |
|||
* const server = dgram.createSocket('udp4'); |
|||
* |
|||
* server.on('error', (err) => { |
|||
* console.log(`server error:\n${err.stack}`); |
|||
* server.close(); |
|||
* }); |
|||
* |
|||
* server.on('message', (msg, rinfo) => { |
|||
* console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); |
|||
* }); |
|||
* |
|||
* server.on('listening', () => { |
|||
* const address = server.address(); |
|||
* console.log(`server listening ${address.address}:${address.port}`); |
|||
* }); |
|||
* |
|||
* server.bind(41234); |
|||
* // Prints: server listening 0.0.0.0:41234
|
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/dgram.js)
|
|||
*/ |
|||
declare module 'dgram' { |
|||
import { AddressInfo } from 'node:net'; |
|||
import * as dns from 'node:dns'; |
|||
import { EventEmitter, Abortable } from 'node:events'; |
|||
interface RemoteInfo { |
|||
address: string; |
|||
family: 'IPv4' | 'IPv6'; |
|||
port: number; |
|||
size: number; |
|||
} |
|||
interface BindOptions { |
|||
port?: number | undefined; |
|||
address?: string | undefined; |
|||
exclusive?: boolean | undefined; |
|||
fd?: number | undefined; |
|||
} |
|||
type SocketType = 'udp4' | 'udp6'; |
|||
interface SocketOptions extends Abortable { |
|||
type: SocketType; |
|||
reuseAddr?: boolean | undefined; |
|||
/** |
|||
* @default false |
|||
*/ |
|||
ipv6Only?: boolean | undefined; |
|||
recvBufferSize?: number | undefined; |
|||
sendBufferSize?: number | undefined; |
|||
lookup?: ((hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void) | undefined; |
|||
} |
|||
/** |
|||
* Creates a `dgram.Socket` object. Once the socket is created, calling `socket.bind()` will instruct the socket to begin listening for datagram |
|||
* messages. When `address` and `port` are not passed to `socket.bind()` the |
|||
* method will bind the socket to the "all interfaces" address on a random port |
|||
* (it does the right thing for both `udp4` and `udp6` sockets). The bound address |
|||
* and port can be retrieved using `socket.address().address` and `socket.address().port`. |
|||
* |
|||
* If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.close()` on the socket: |
|||
* |
|||
* ```js
|
|||
* const controller = new AbortController(); |
|||
* const { signal } = controller; |
|||
* const server = dgram.createSocket({ type: 'udp4', signal }); |
|||
* server.on('message', (msg, rinfo) => { |
|||
* console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); |
|||
* }); |
|||
* // Later, when you want to close the server.
|
|||
* controller.abort(); |
|||
* ```
|
|||
* @since v0.11.13 |
|||
* @param options Available options are: |
|||
* @param callback Attached as a listener for `'message'` events. Optional. |
|||
*/ |
|||
function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; |
|||
function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; |
|||
/** |
|||
* Encapsulates the datagram functionality. |
|||
* |
|||
* New instances of `dgram.Socket` are created using {@link createSocket}. |
|||
* The `new` keyword is not to be used to create `dgram.Socket` instances. |
|||
* @since v0.1.99 |
|||
*/ |
|||
class Socket extends EventEmitter { |
|||
/** |
|||
* Tells the kernel to join a multicast group at the given `multicastAddress` and`multicastInterface` using the `IP_ADD_MEMBERSHIP` socket option. If the`multicastInterface` argument is not |
|||
* specified, the operating system will choose |
|||
* one interface and will add membership to it. To add membership to every |
|||
* available interface, call `addMembership` multiple times, once per interface. |
|||
* |
|||
* When called on an unbound socket, this method will implicitly bind to a random |
|||
* port, listening on all interfaces. |
|||
* |
|||
* When sharing a UDP socket across multiple `cluster` workers, the`socket.addMembership()` function must be called only once or an`EADDRINUSE` error will occur: |
|||
* |
|||
* ```js
|
|||
* import cluster from 'cluster'; |
|||
* import dgram from 'dgram'; |
|||
* |
|||
* if (cluster.isPrimary) { |
|||
* cluster.fork(); // Works ok.
|
|||
* cluster.fork(); // Fails with EADDRINUSE.
|
|||
* } else { |
|||
* const s = dgram.createSocket('udp4'); |
|||
* s.bind(1234, () => { |
|||
* s.addMembership('224.0.0.114'); |
|||
* }); |
|||
* } |
|||
* ```
|
|||
* @since v0.6.9 |
|||
*/ |
|||
addMembership(multicastAddress: string, multicastInterface?: string): void; |
|||
/** |
|||
* Returns an object containing the address information for a socket. |
|||
* For UDP sockets, this object will contain `address`, `family` and `port`properties. |
|||
* |
|||
* This method throws `EBADF` if called on an unbound socket. |
|||
* @since v0.1.99 |
|||
*/ |
|||
address(): AddressInfo; |
|||
/** |
|||
* For UDP sockets, causes the `dgram.Socket` to listen for datagram |
|||
* messages on a named `port` and optional `address`. If `port` is not |
|||
* specified or is `0`, the operating system will attempt to bind to a |
|||
* random port. If `address` is not specified, the operating system will |
|||
* attempt to listen on all addresses. Once binding is complete, a`'listening'` event is emitted and the optional `callback` function is |
|||
* called. |
|||
* |
|||
* Specifying both a `'listening'` event listener and passing a`callback` to the `socket.bind()` method is not harmful but not very |
|||
* useful. |
|||
* |
|||
* A bound datagram socket keeps the Node.js process running to receive |
|||
* datagram messages. |
|||
* |
|||
* If binding fails, an `'error'` event is generated. In rare case (e.g. |
|||
* attempting to bind with a closed socket), an `Error` may be thrown. |
|||
* |
|||
* Example of a UDP server listening on port 41234: |
|||
* |
|||
* ```js
|
|||
* import dgram from 'dgram'; |
|||
* |
|||
* const server = dgram.createSocket('udp4'); |
|||
* |
|||
* server.on('error', (err) => { |
|||
* console.log(`server error:\n${err.stack}`); |
|||
* server.close(); |
|||
* }); |
|||
* |
|||
* server.on('message', (msg, rinfo) => { |
|||
* console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); |
|||
* }); |
|||
* |
|||
* server.on('listening', () => { |
|||
* const address = server.address(); |
|||
* console.log(`server listening ${address.address}:${address.port}`); |
|||
* }); |
|||
* |
|||
* server.bind(41234); |
|||
* // Prints: server listening 0.0.0.0:41234
|
|||
* ```
|
|||
* @since v0.1.99 |
|||
* @param callback with no parameters. Called when binding is complete. |
|||
*/ |
|||
bind(port?: number, address?: string, callback?: () => void): this; |
|||
bind(port?: number, callback?: () => void): this; |
|||
bind(callback?: () => void): this; |
|||
bind(options: BindOptions, callback?: () => void): this; |
|||
/** |
|||
* Close the underlying socket and stop listening for data on it. If a callback is |
|||
* provided, it is added as a listener for the `'close'` event. |
|||
* @since v0.1.99 |
|||
* @param callback Called when the socket has been closed. |
|||
*/ |
|||
close(callback?: () => void): this; |
|||
/** |
|||
* Associates the `dgram.Socket` to a remote address and port. Every |
|||
* message sent by this handle is automatically sent to that destination. Also, |
|||
* the socket will only receive messages from that remote peer. |
|||
* Trying to call `connect()` on an already connected socket will result |
|||
* in an `ERR_SOCKET_DGRAM_IS_CONNECTED` exception. If `address` is not |
|||
* provided, `'127.0.0.1'` (for `udp4` sockets) or `'::1'` (for `udp6` sockets) |
|||
* will be used by default. Once the connection is complete, a `'connect'` event |
|||
* is emitted and the optional `callback` function is called. In case of failure, |
|||
* the `callback` is called or, failing this, an `'error'` event is emitted. |
|||
* @since v12.0.0 |
|||
* @param callback Called when the connection is completed or on error. |
|||
*/ |
|||
connect(port: number, address?: string, callback?: () => void): void; |
|||
connect(port: number, callback: () => void): void; |
|||
/** |
|||
* A synchronous function that disassociates a connected `dgram.Socket` from |
|||
* its remote address. Trying to call `disconnect()` on an unbound or already |
|||
* disconnected socket will result in an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception. |
|||
* @since v12.0.0 |
|||
*/ |
|||
disconnect(): void; |
|||
/** |
|||
* Instructs the kernel to leave a multicast group at `multicastAddress` using the`IP_DROP_MEMBERSHIP` socket option. This method is automatically called by the |
|||
* kernel when the socket is closed or the process terminates, so most apps will |
|||
* never have reason to call this. |
|||
* |
|||
* If `multicastInterface` is not specified, the operating system will attempt to |
|||
* drop membership on all valid interfaces. |
|||
* @since v0.6.9 |
|||
*/ |
|||
dropMembership(multicastAddress: string, multicastInterface?: string): void; |
|||
/** |
|||
* This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. |
|||
* @since v8.7.0 |
|||
* @return the `SO_RCVBUF` socket receive buffer size in bytes. |
|||
*/ |
|||
getRecvBufferSize(): number; |
|||
/** |
|||
* This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. |
|||
* @since v8.7.0 |
|||
* @return the `SO_SNDBUF` socket send buffer size in bytes. |
|||
*/ |
|||
getSendBufferSize(): number; |
|||
/** |
|||
* By default, binding a socket will cause it to block the Node.js process from |
|||
* exiting as long as the socket is open. The `socket.unref()` method can be used |
|||
* to exclude the socket from the reference counting that keeps the Node.js |
|||
* process active. The `socket.ref()` method adds the socket back to the reference |
|||
* counting and restores the default behavior. |
|||
* |
|||
* Calling `socket.ref()` multiples times will have no additional effect. |
|||
* |
|||
* The `socket.ref()` method returns a reference to the socket so calls can be |
|||
* chained. |
|||
* @since v0.9.1 |
|||
*/ |
|||
ref(): this; |
|||
/** |
|||
* Returns an object containing the `address`, `family`, and `port` of the remote |
|||
* endpoint. This method throws an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception |
|||
* if the socket is not connected. |
|||
* @since v12.0.0 |
|||
*/ |
|||
remoteAddress(): AddressInfo; |
|||
/** |
|||
* Broadcasts a datagram on the socket. |
|||
* For connectionless sockets, the destination `port` and `address` must be |
|||
* specified. Connected sockets, on the other hand, will use their associated |
|||
* remote endpoint, so the `port` and `address` arguments must not be set. |
|||
* |
|||
* The `msg` argument contains the message to be sent. |
|||
* Depending on its type, different behavior can apply. If `msg` is a `Buffer`, |
|||
* any `TypedArray` or a `DataView`, |
|||
* the `offset` and `length` specify the offset within the `Buffer` where the |
|||
* message begins and the number of bytes in the message, respectively. |
|||
* If `msg` is a `String`, then it is automatically converted to a `Buffer`with `'utf8'` encoding. With messages that |
|||
* contain multi-byte characters, `offset` and `length` will be calculated with |
|||
* respect to `byte length` and not the character position. |
|||
* If `msg` is an array, `offset` and `length` must not be specified. |
|||
* |
|||
* The `address` argument is a string. If the value of `address` is a host name, |
|||
* DNS will be used to resolve the address of the host. If `address` is not |
|||
* provided or otherwise nullish, `'127.0.0.1'` (for `udp4` sockets) or `'::1'`(for `udp6` sockets) will be used by default. |
|||
* |
|||
* If the socket has not been previously bound with a call to `bind`, the socket |
|||
* is assigned a random port number and is bound to the "all interfaces" address |
|||
* (`'0.0.0.0'` for `udp4` sockets, `'::0'` for `udp6` sockets.) |
|||
* |
|||
* An optional `callback` function may be specified to as a way of reporting |
|||
* DNS errors or for determining when it is safe to reuse the `buf` object. |
|||
* DNS lookups delay the time to send for at least one tick of the |
|||
* Node.js event loop. |
|||
* |
|||
* The only way to know for sure that the datagram has been sent is by using a`callback`. If an error occurs and a `callback` is given, the error will be |
|||
* passed as the first argument to the `callback`. If a `callback` is not given, |
|||
* the error is emitted as an `'error'` event on the `socket` object. |
|||
* |
|||
* Offset and length are optional but both _must_ be set if either are used. |
|||
* They are supported only when the first argument is a `Buffer`, a `TypedArray`, |
|||
* or a `DataView`. |
|||
* |
|||
* This method throws `ERR_SOCKET_BAD_PORT` if called on an unbound socket. |
|||
* |
|||
* Example of sending a UDP packet to a port on `localhost`; |
|||
* |
|||
* ```js
|
|||
* import dgram from 'dgram'; |
|||
* import { Buffer } from 'buffer'; |
|||
* |
|||
* const message = Buffer.from('Some bytes'); |
|||
* const client = dgram.createSocket('udp4'); |
|||
* client.send(message, 41234, 'localhost', (err) => { |
|||
* client.close(); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Example of sending a UDP packet composed of multiple buffers to a port on`127.0.0.1`; |
|||
* |
|||
* ```js
|
|||
* import dgram from 'dgram'; |
|||
* import { Buffer } from 'buffer'; |
|||
* |
|||
* const buf1 = Buffer.from('Some '); |
|||
* const buf2 = Buffer.from('bytes'); |
|||
* const client = dgram.createSocket('udp4'); |
|||
* client.send([buf1, buf2], 41234, (err) => { |
|||
* client.close(); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Sending multiple buffers might be faster or slower depending on the |
|||
* application and operating system. Run benchmarks to |
|||
* determine the optimal strategy on a case-by-case basis. Generally speaking, |
|||
* however, sending multiple buffers is faster. |
|||
* |
|||
* Example of sending a UDP packet using a socket connected to a port on`localhost`: |
|||
* |
|||
* ```js
|
|||
* import dgram from 'dgram'; |
|||
* import { Buffer } from 'buffer'; |
|||
* |
|||
* const message = Buffer.from('Some bytes'); |
|||
* const client = dgram.createSocket('udp4'); |
|||
* client.connect(41234, 'localhost', (err) => { |
|||
* client.send(message, (err) => { |
|||
* client.close(); |
|||
* }); |
|||
* }); |
|||
* ```
|
|||
* @since v0.1.99 |
|||
* @param msg Message to be sent. |
|||
* @param offset Offset in the buffer where the message starts. |
|||
* @param length Number of bytes in the message. |
|||
* @param port Destination port. |
|||
* @param address Destination host name or IP address. |
|||
* @param callback Called when the message has been sent. |
|||
*/ |
|||
send(msg: string | Uint8Array | ReadonlyArray<any>, port?: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void; |
|||
send(msg: string | Uint8Array | ReadonlyArray<any>, port?: number, callback?: (error: Error | null, bytes: number) => void): void; |
|||
send(msg: string | Uint8Array | ReadonlyArray<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; |
|||
/** |
|||
* Sets or clears the `SO_BROADCAST` socket option. When set to `true`, UDP |
|||
* packets may be sent to a local interface's broadcast address. |
|||
* |
|||
* This method throws `EBADF` if called on an unbound socket. |
|||
* @since v0.6.9 |
|||
*/ |
|||
setBroadcast(flag: boolean): void; |
|||
/** |
|||
* _All references to scope in this section are referring to [IPv6 Zone Indices](https://en.wikipedia.org/wiki/IPv6_address#Scoped_literal_IPv6_addresses), which are defined by [RFC
|
|||
* 4007](https://tools.ietf.org/html/rfc4007). In string form, an IP_
|
|||
* _with a scope index is written as `'IP%scope'` where scope is an interface name_ |
|||
* _or interface number._ |
|||
* |
|||
* Sets the default outgoing multicast interface of the socket to a chosen |
|||
* interface or back to system interface selection. The `multicastInterface` must |
|||
* be a valid string representation of an IP from the socket's family. |
|||
* |
|||
* For IPv4 sockets, this should be the IP configured for the desired physical |
|||
* interface. All packets sent to multicast on the socket will be sent on the |
|||
* interface determined by the most recent successful use of this call. |
|||
* |
|||
* For IPv6 sockets, `multicastInterface` should include a scope to indicate the |
|||
* interface as in the examples that follow. In IPv6, individual `send` calls can |
|||
* also use explicit scope in addresses, so only packets sent to a multicast |
|||
* address without specifying an explicit scope are affected by the most recent |
|||
* successful use of this call. |
|||
* |
|||
* This method throws `EBADF` if called on an unbound socket. |
|||
* |
|||
* #### Example: IPv6 outgoing multicast interface |
|||
* |
|||
* On most systems, where scope format uses the interface name: |
|||
* |
|||
* ```js
|
|||
* const socket = dgram.createSocket('udp6'); |
|||
* |
|||
* socket.bind(1234, () => { |
|||
* socket.setMulticastInterface('::%eth1'); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* On Windows, where scope format uses an interface number: |
|||
* |
|||
* ```js
|
|||
* const socket = dgram.createSocket('udp6'); |
|||
* |
|||
* socket.bind(1234, () => { |
|||
* socket.setMulticastInterface('::%2'); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* #### Example: IPv4 outgoing multicast interface |
|||
* |
|||
* All systems use an IP of the host on the desired physical interface: |
|||
* |
|||
* ```js
|
|||
* const socket = dgram.createSocket('udp4'); |
|||
* |
|||
* socket.bind(1234, () => { |
|||
* socket.setMulticastInterface('10.0.0.2'); |
|||
* }); |
|||
* ```
|
|||
* @since v8.6.0 |
|||
*/ |
|||
setMulticastInterface(multicastInterface: string): void; |
|||
/** |
|||
* Sets or clears the `IP_MULTICAST_LOOP` socket option. When set to `true`, |
|||
* multicast packets will also be received on the local interface. |
|||
* |
|||
* This method throws `EBADF` if called on an unbound socket. |
|||
* @since v0.3.8 |
|||
*/ |
|||
setMulticastLoopback(flag: boolean): boolean; |
|||
/** |
|||
* Sets the `IP_MULTICAST_TTL` socket option. While TTL generally stands for |
|||
* "Time to Live", in this context it specifies the number of IP hops that a |
|||
* packet is allowed to travel through, specifically for multicast traffic. Each |
|||
* router or gateway that forwards a packet decrements the TTL. If the TTL is |
|||
* decremented to 0 by a router, it will not be forwarded. |
|||
* |
|||
* The `ttl` argument may be between 0 and 255\. The default on most systems is `1`. |
|||
* |
|||
* This method throws `EBADF` if called on an unbound socket. |
|||
* @since v0.3.8 |
|||
*/ |
|||
setMulticastTTL(ttl: number): number; |
|||
/** |
|||
* Sets the `SO_RCVBUF` socket option. Sets the maximum socket receive buffer |
|||
* in bytes. |
|||
* |
|||
* This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. |
|||
* @since v8.7.0 |
|||
*/ |
|||
setRecvBufferSize(size: number): void; |
|||
/** |
|||
* Sets the `SO_SNDBUF` socket option. Sets the maximum socket send buffer |
|||
* in bytes. |
|||
* |
|||
* This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. |
|||
* @since v8.7.0 |
|||
*/ |
|||
setSendBufferSize(size: number): void; |
|||
/** |
|||
* Sets the `IP_TTL` socket option. While TTL generally stands for "Time to Live", |
|||
* in this context it specifies the number of IP hops that a packet is allowed to |
|||
* travel through. Each router or gateway that forwards a packet decrements the |
|||
* TTL. If the TTL is decremented to 0 by a router, it will not be forwarded. |
|||
* Changing TTL values is typically done for network probes or when multicasting. |
|||
* |
|||
* The `ttl` argument may be between between 1 and 255\. The default on most systems |
|||
* is 64. |
|||
* |
|||
* This method throws `EBADF` if called on an unbound socket. |
|||
* @since v0.1.101 |
|||
*/ |
|||
setTTL(ttl: number): number; |
|||
/** |
|||
* By default, binding a socket will cause it to block the Node.js process from |
|||
* exiting as long as the socket is open. The `socket.unref()` method can be used |
|||
* to exclude the socket from the reference counting that keeps the Node.js |
|||
* process active, allowing the process to exit even if the socket is still |
|||
* listening. |
|||
* |
|||
* Calling `socket.unref()` multiple times will have no addition effect. |
|||
* |
|||
* The `socket.unref()` method returns a reference to the socket so calls can be |
|||
* chained. |
|||
* @since v0.9.1 |
|||
*/ |
|||
unref(): this; |
|||
/** |
|||
* Tells the kernel to join a source-specific multicast channel at the given`sourceAddress` and `groupAddress`, using the `multicastInterface` with the`IP_ADD_SOURCE_MEMBERSHIP` socket |
|||
* option. If the `multicastInterface` argument |
|||
* is not specified, the operating system will choose one interface and will add |
|||
* membership to it. To add membership to every available interface, call`socket.addSourceSpecificMembership()` multiple times, once per interface. |
|||
* |
|||
* When called on an unbound socket, this method will implicitly bind to a random |
|||
* port, listening on all interfaces. |
|||
* @since v13.1.0, v12.16.0 |
|||
*/ |
|||
addSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; |
|||
/** |
|||
* Instructs the kernel to leave a source-specific multicast channel at the given`sourceAddress` and `groupAddress` using the `IP_DROP_SOURCE_MEMBERSHIP`socket option. This method is |
|||
* automatically called by the kernel when the |
|||
* socket is closed or the process terminates, so most apps will never have |
|||
* reason to call this. |
|||
* |
|||
* If `multicastInterface` is not specified, the operating system will attempt to |
|||
* drop membership on all valid interfaces. |
|||
* @since v13.1.0, v12.16.0 |
|||
*/ |
|||
dropSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; |
|||
/** |
|||
* 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; |
|||
} |
|||
} |
|||
declare module 'node:dgram' { |
|||
export * from 'dgram'; |
|||
} |
|||
@ -0,0 +1,134 @@ |
|||
/** |
|||
* The `diagnostics_channel` module provides an API to create named channels |
|||
* to report arbitrary message data for diagnostics purposes. |
|||
* |
|||
* It can be accessed using: |
|||
* |
|||
* ```js
|
|||
* import diagnostics_channel from 'diagnostics_channel'; |
|||
* ```
|
|||
* |
|||
* It is intended that a module writer wanting to report diagnostics messages |
|||
* will create one or many top-level channels to report messages through. |
|||
* Channels may also be acquired at runtime but it is not encouraged |
|||
* due to the additional overhead of doing so. Channels may be exported for |
|||
* convenience, but as long as the name is known it can be acquired anywhere. |
|||
* |
|||
* If you intend for your module to produce diagnostics data for others to |
|||
* consume it is recommended that you include documentation of what named |
|||
* channels are used along with the shape of the message data. Channel names |
|||
* should generally include the module name to avoid collisions with data from |
|||
* other modules. |
|||
* @experimental |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/diagnostics_channel.js)
|
|||
*/ |
|||
declare module 'diagnostics_channel' { |
|||
/** |
|||
* Check if there are active subscribers to the named channel. This is helpful if |
|||
* the message you want to send might be expensive to prepare. |
|||
* |
|||
* This API is optional but helpful when trying to publish messages from very |
|||
* performance-sensitive code. |
|||
* |
|||
* ```js
|
|||
* import diagnostics_channel from 'diagnostics_channel'; |
|||
* |
|||
* if (diagnostics_channel.hasSubscribers('my-channel')) { |
|||
* // There are subscribers, prepare and publish message
|
|||
* } |
|||
* ```
|
|||
* @since v15.1.0, v14.17.0 |
|||
* @param name The channel name |
|||
* @return If there are active subscribers |
|||
*/ |
|||
function hasSubscribers(name: string): boolean; |
|||
/** |
|||
* This is the primary entry-point for anyone wanting to interact with a named |
|||
* channel. It produces a channel object which is optimized to reduce overhead at |
|||
* publish time as much as possible. |
|||
* |
|||
* ```js
|
|||
* import diagnostics_channel from 'diagnostics_channel'; |
|||
* |
|||
* const channel = diagnostics_channel.channel('my-channel'); |
|||
* ```
|
|||
* @since v15.1.0, v14.17.0 |
|||
* @param name The channel name |
|||
* @return The named channel object |
|||
*/ |
|||
function channel(name: string): Channel; |
|||
type ChannelListener = (name: string, message: unknown) => void; |
|||
/** |
|||
* The class `Channel` represents an individual named channel within the data |
|||
* pipeline. It is use to track subscribers and to publish messages when there |
|||
* are subscribers present. It exists as a separate object to avoid channel |
|||
* lookups at publish time, enabling very fast publish speeds and allowing |
|||
* for heavy use while incurring very minimal cost. Channels are created with {@link channel}, constructing a channel directly |
|||
* with `new Channel(name)` is not supported. |
|||
* @since v15.1.0, v14.17.0 |
|||
*/ |
|||
class Channel { |
|||
readonly name: string; |
|||
/** |
|||
* Check if there are active subscribers to this channel. This is helpful if |
|||
* the message you want to send might be expensive to prepare. |
|||
* |
|||
* This API is optional but helpful when trying to publish messages from very |
|||
* performance-sensitive code. |
|||
* |
|||
* ```js
|
|||
* import diagnostics_channel from 'diagnostics_channel'; |
|||
* |
|||
* const channel = diagnostics_channel.channel('my-channel'); |
|||
* |
|||
* if (channel.hasSubscribers) { |
|||
* // There are subscribers, prepare and publish message
|
|||
* } |
|||
* ```
|
|||
* @since v15.1.0, v14.17.0 |
|||
*/ |
|||
readonly hasSubscribers: boolean; |
|||
private constructor(name: string); |
|||
/** |
|||
* Register a message handler to subscribe to this channel. This message handler |
|||
* will be run synchronously whenever a message is published to the channel. Any |
|||
* errors thrown in the message handler will trigger an `'uncaughtException'`. |
|||
* |
|||
* ```js
|
|||
* import diagnostics_channel from 'diagnostics_channel'; |
|||
* |
|||
* const channel = diagnostics_channel.channel('my-channel'); |
|||
* |
|||
* channel.subscribe((message, name) => { |
|||
* // Received data
|
|||
* }); |
|||
* ```
|
|||
* @since v15.1.0, v14.17.0 |
|||
* @param onMessage The handler to receive channel messages |
|||
*/ |
|||
subscribe(onMessage: ChannelListener): void; |
|||
/** |
|||
* Remove a message handler previously registered to this channel with `channel.subscribe(onMessage)`. |
|||
* |
|||
* ```js
|
|||
* import diagnostics_channel from 'diagnostics_channel'; |
|||
* |
|||
* const channel = diagnostics_channel.channel('my-channel'); |
|||
* |
|||
* function onMessage(message, name) { |
|||
* // Received data
|
|||
* } |
|||
* |
|||
* channel.subscribe(onMessage); |
|||
* |
|||
* channel.unsubscribe(onMessage); |
|||
* ```
|
|||
* @since v15.1.0, v14.17.0 |
|||
* @param onMessage The previous subscribed handler to remove |
|||
*/ |
|||
unsubscribe(onMessage: ChannelListener): void; |
|||
} |
|||
} |
|||
declare module 'node:diagnostics_channel' { |
|||
export * from 'diagnostics_channel'; |
|||
} |
|||
@ -0,0 +1,659 @@ |
|||
/** |
|||
* The `dns` module enables name resolution. For example, use it to look up IP |
|||
* addresses of host names. |
|||
* |
|||
* Although named for the [Domain Name System (DNS)](https://en.wikipedia.org/wiki/Domain_Name_System), it does not always use the
|
|||
* DNS protocol for lookups. {@link lookup} uses the operating system |
|||
* facilities to perform name resolution. It may not need to perform any network |
|||
* communication. To perform name resolution the way other applications on the same |
|||
* system do, use {@link lookup}. |
|||
* |
|||
* ```js
|
|||
* const dns = require('dns'); |
|||
* |
|||
* dns.lookup('example.org', (err, address, family) => { |
|||
* console.log('address: %j family: IPv%s', address, family); |
|||
* }); |
|||
* // address: "93.184.216.34" family: IPv4
|
|||
* ```
|
|||
* |
|||
* All other functions in the `dns` module connect to an actual DNS server to |
|||
* perform name resolution. They will always use the network to perform DNS |
|||
* queries. These functions do not use the same set of configuration files used by {@link lookup} (e.g. `/etc/hosts`). Use these functions to always perform |
|||
* DNS queries, bypassing other name-resolution facilities. |
|||
* |
|||
* ```js
|
|||
* const dns = require('dns'); |
|||
* |
|||
* dns.resolve4('archive.org', (err, addresses) => { |
|||
* if (err) throw err; |
|||
* |
|||
* console.log(`addresses: ${JSON.stringify(addresses)}`); |
|||
* |
|||
* addresses.forEach((a) => { |
|||
* dns.reverse(a, (err, hostnames) => { |
|||
* if (err) { |
|||
* throw err; |
|||
* } |
|||
* console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`); |
|||
* }); |
|||
* }); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* See the `Implementation considerations section` for more information. |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/dns.js)
|
|||
*/ |
|||
declare module 'dns' { |
|||
import * as dnsPromises from 'node:dns/promises'; |
|||
// Supported getaddrinfo flags.
|
|||
export const ADDRCONFIG: number; |
|||
export const V4MAPPED: number; |
|||
/** |
|||
* If `dns.V4MAPPED` is specified, return resolved IPv6 addresses as |
|||
* well as IPv4 mapped IPv6 addresses. |
|||
*/ |
|||
export const ALL: number; |
|||
export interface LookupOptions { |
|||
family?: number | undefined; |
|||
hints?: number | undefined; |
|||
all?: boolean | undefined; |
|||
/** |
|||
* @default true |
|||
*/ |
|||
verbatim?: boolean | undefined; |
|||
} |
|||
export interface LookupOneOptions extends LookupOptions { |
|||
all?: false | undefined; |
|||
} |
|||
export interface LookupAllOptions extends LookupOptions { |
|||
all: true; |
|||
} |
|||
export interface LookupAddress { |
|||
address: string; |
|||
family: number; |
|||
} |
|||
/** |
|||
* Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or |
|||
* AAAA (IPv6) record. All `option` properties are optional. If `options` is an |
|||
* integer, then it must be `4` or `6` – if `options` is not provided, then IPv4 |
|||
* and IPv6 addresses are both returned if found. |
|||
* |
|||
* With the `all` option set to `true`, the arguments for `callback` change to`(err, addresses)`, with `addresses` being an array of objects with the |
|||
* properties `address` and `family`. |
|||
* |
|||
* On error, `err` is an `Error` object, where `err.code` is the error code. |
|||
* Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when |
|||
* the host name does not exist but also when the lookup fails in other ways |
|||
* such as no available file descriptors. |
|||
* |
|||
* `dns.lookup()` does not necessarily have anything to do with the DNS protocol. |
|||
* The implementation uses an operating system facility that can associate names |
|||
* with addresses, and vice versa. This implementation can have subtle but |
|||
* important consequences on the behavior of any Node.js program. Please take some |
|||
* time to consult the `Implementation considerations section` before using`dns.lookup()`. |
|||
* |
|||
* Example usage: |
|||
* |
|||
* ```js
|
|||
* const dns = require('dns'); |
|||
* const options = { |
|||
* family: 6, |
|||
* hints: dns.ADDRCONFIG | dns.V4MAPPED, |
|||
* }; |
|||
* dns.lookup('example.com', options, (err, address, family) => |
|||
* console.log('address: %j family: IPv%s', address, family)); |
|||
* // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6
|
|||
* |
|||
* // When options.all is true, the result will be an Array.
|
|||
* options.all = true; |
|||
* dns.lookup('example.com', options, (err, addresses) => |
|||
* console.log('addresses: %j', addresses)); |
|||
* // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}]
|
|||
* ```
|
|||
* |
|||
* If this method is invoked as its `util.promisify()` ed version, and `all`is not set to `true`, it returns a `Promise` for an `Object` with `address` and`family` properties. |
|||
* @since v0.1.90 |
|||
*/ |
|||
export function lookup(hostname: string, family: number, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; |
|||
export function lookup(hostname: string, options: LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; |
|||
export function lookup(hostname: string, options: LookupAllOptions, callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void): void; |
|||
export function lookup(hostname: string, options: LookupOptions, callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void): void; |
|||
export function lookup(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; |
|||
export 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[]>; |
|||
} |
|||
/** |
|||
* Resolves the given `address` and `port` into a host name and service using |
|||
* the operating system's underlying `getnameinfo` implementation. |
|||
* |
|||
* If `address` is not a valid IP address, a `TypeError` will be thrown. |
|||
* The `port` will be coerced to a number. If it is not a legal port, a `TypeError`will be thrown. |
|||
* |
|||
* On an error, `err` is an `Error` object, where `err.code` is the error code. |
|||
* |
|||
* ```js
|
|||
* const dns = require('dns'); |
|||
* dns.lookupService('127.0.0.1', 22, (err, hostname, service) => { |
|||
* console.log(hostname, service); |
|||
* // Prints: localhost ssh
|
|||
* }); |
|||
* ```
|
|||
* |
|||
* If this method is invoked as its `util.promisify()` ed version, it returns a`Promise` for an `Object` with `hostname` and `service` properties. |
|||
* @since v0.11.14 |
|||
*/ |
|||
export function lookupService(address: string, port: number, callback: (err: NodeJS.ErrnoException | null, hostname: string, service: string) => void): void; |
|||
export namespace lookupService { |
|||
function __promisify__( |
|||
address: string, |
|||
port: number |
|||
): Promise<{ |
|||
hostname: string; |
|||
service: string; |
|||
}>; |
|||
} |
|||
export interface ResolveOptions { |
|||
ttl: boolean; |
|||
} |
|||
export interface ResolveWithTtlOptions extends ResolveOptions { |
|||
ttl: true; |
|||
} |
|||
export interface RecordWithTtl { |
|||
address: string; |
|||
ttl: number; |
|||
} |
|||
/** @deprecated Use `AnyARecord` or `AnyAaaaRecord` instead. */ |
|||
export type AnyRecordWithTtl = AnyARecord | AnyAaaaRecord; |
|||
export interface AnyARecord extends RecordWithTtl { |
|||
type: 'A'; |
|||
} |
|||
export interface AnyAaaaRecord extends RecordWithTtl { |
|||
type: 'AAAA'; |
|||
} |
|||
export interface CaaRecord { |
|||
critial: number; |
|||
issue?: string | undefined; |
|||
issuewild?: string | undefined; |
|||
iodef?: string | undefined; |
|||
contactemail?: string | undefined; |
|||
contactphone?: string | undefined; |
|||
} |
|||
export interface MxRecord { |
|||
priority: number; |
|||
exchange: string; |
|||
} |
|||
export interface AnyMxRecord extends MxRecord { |
|||
type: 'MX'; |
|||
} |
|||
export interface NaptrRecord { |
|||
flags: string; |
|||
service: string; |
|||
regexp: string; |
|||
replacement: string; |
|||
order: number; |
|||
preference: number; |
|||
} |
|||
export interface AnyNaptrRecord extends NaptrRecord { |
|||
type: 'NAPTR'; |
|||
} |
|||
export interface SoaRecord { |
|||
nsname: string; |
|||
hostmaster: string; |
|||
serial: number; |
|||
refresh: number; |
|||
retry: number; |
|||
expire: number; |
|||
minttl: number; |
|||
} |
|||
export interface AnySoaRecord extends SoaRecord { |
|||
type: 'SOA'; |
|||
} |
|||
export interface SrvRecord { |
|||
priority: number; |
|||
weight: number; |
|||
port: number; |
|||
name: string; |
|||
} |
|||
export interface AnySrvRecord extends SrvRecord { |
|||
type: 'SRV'; |
|||
} |
|||
export interface AnyTxtRecord { |
|||
type: 'TXT'; |
|||
entries: string[]; |
|||
} |
|||
export interface AnyNsRecord { |
|||
type: 'NS'; |
|||
value: string; |
|||
} |
|||
export interface AnyPtrRecord { |
|||
type: 'PTR'; |
|||
value: string; |
|||
} |
|||
export interface AnyCnameRecord { |
|||
type: 'CNAME'; |
|||
value: string; |
|||
} |
|||
export type AnyRecord = AnyARecord | AnyAaaaRecord | AnyCnameRecord | AnyMxRecord | AnyNaptrRecord | AnyNsRecord | AnyPtrRecord | AnySoaRecord | AnySrvRecord | AnyTxtRecord; |
|||
/** |
|||
* Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array |
|||
* of the resource records. The `callback` function has arguments`(err, records)`. When successful, `records` will be an array of resource |
|||
* records. The type and structure of individual results varies based on `rrtype`: |
|||
* |
|||
* <omitted> |
|||
* |
|||
* On error, `err` is an `Error` object, where `err.code` is one of theDNS error codes. |
|||
* @since v0.1.27 |
|||
* @param hostname Host name to resolve. |
|||
* @param [rrtype='A'] Resource record type. |
|||
*/ |
|||
export function resolve(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; |
|||
export function resolve(hostname: string, rrtype: 'A', callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; |
|||
export function resolve(hostname: string, rrtype: 'AAAA', callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; |
|||
export function resolve(hostname: string, rrtype: 'ANY', callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void): void; |
|||
export function resolve(hostname: string, rrtype: 'CNAME', callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; |
|||
export function resolve(hostname: string, rrtype: 'MX', callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void): void; |
|||
export function resolve(hostname: string, rrtype: 'NAPTR', callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void): void; |
|||
export function resolve(hostname: string, rrtype: 'NS', callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; |
|||
export function resolve(hostname: string, rrtype: 'PTR', callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; |
|||
export function resolve(hostname: string, rrtype: 'SOA', callback: (err: NodeJS.ErrnoException | null, addresses: SoaRecord) => void): void; |
|||
export function resolve(hostname: string, rrtype: 'SRV', callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void): void; |
|||
export function resolve(hostname: string, rrtype: 'TXT', callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void): void; |
|||
export function resolve( |
|||
hostname: string, |
|||
rrtype: string, |
|||
callback: (err: NodeJS.ErrnoException | null, addresses: string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]) => void |
|||
): void; |
|||
export 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[]>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve a IPv4 addresses (`A` records) for the`hostname`. The `addresses` argument passed to the `callback` function |
|||
* will contain an array of IPv4 addresses (e.g.`['74.125.79.104', '74.125.79.105', '74.125.79.106']`). |
|||
* @since v0.1.16 |
|||
* @param hostname Host name to resolve. |
|||
*/ |
|||
export function resolve4(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; |
|||
export function resolve4(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void): void; |
|||
export function resolve4(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void): void; |
|||
export 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[]>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve a IPv6 addresses (`AAAA` records) for the`hostname`. The `addresses` argument passed to the `callback` function |
|||
* will contain an array of IPv6 addresses. |
|||
* @since v0.1.16 |
|||
* @param hostname Host name to resolve. |
|||
*/ |
|||
export function resolve6(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; |
|||
export function resolve6(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void): void; |
|||
export function resolve6(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void): void; |
|||
export 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[]>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve `CNAME` records for the `hostname`. The`addresses` argument passed to the `callback` function |
|||
* will contain an array of canonical name records available for the `hostname`(e.g. `['bar.example.com']`). |
|||
* @since v0.3.2 |
|||
*/ |
|||
export function resolveCname(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; |
|||
export namespace resolveCname { |
|||
function __promisify__(hostname: string): Promise<string[]>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve `CAA` records for the `hostname`. The`addresses` argument passed to the `callback` function |
|||
* will contain an array of certification authority authorization records |
|||
* available for the `hostname` (e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'}, {critical: 128, issue: 'pki.example.com'}]`). |
|||
* @since v15.0.0, v14.17.0 |
|||
*/ |
|||
export function resolveCaa(hostname: string, callback: (err: NodeJS.ErrnoException | null, records: CaaRecord[]) => void): void; |
|||
export namespace resolveCaa { |
|||
function __promisify__(hostname: string): Promise<CaaRecord[]>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. The `addresses` argument passed to the `callback` function will |
|||
* contain an array of objects containing both a `priority` and `exchange`property (e.g. `[{priority: 10, exchange: 'mx.example.com'}, ...]`). |
|||
* @since v0.1.27 |
|||
*/ |
|||
export function resolveMx(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void): void; |
|||
export namespace resolveMx { |
|||
function __promisify__(hostname: string): Promise<MxRecord[]>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve regular expression based records (`NAPTR`records) for the `hostname`. The `addresses` argument passed to the `callback`function will contain an array of |
|||
* objects with the following properties: |
|||
* |
|||
* * `flags` |
|||
* * `service` |
|||
* * `regexp` |
|||
* * `replacement` |
|||
* * `order` |
|||
* * `preference` |
|||
* |
|||
* ```js
|
|||
* { |
|||
* flags: 's', |
|||
* service: 'SIP+D2U', |
|||
* regexp: '', |
|||
* replacement: '_sip._udp.example.com', |
|||
* order: 30, |
|||
* preference: 100 |
|||
* } |
|||
* ```
|
|||
* @since v0.9.12 |
|||
*/ |
|||
export function resolveNaptr(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void): void; |
|||
export namespace resolveNaptr { |
|||
function __promisify__(hostname: string): Promise<NaptrRecord[]>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve name server records (`NS` records) for the`hostname`. The `addresses` argument passed to the `callback` function will |
|||
* contain an array of name server records available for `hostname`(e.g. `['ns1.example.com', 'ns2.example.com']`). |
|||
* @since v0.1.90 |
|||
*/ |
|||
export function resolveNs(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; |
|||
export namespace resolveNs { |
|||
function __promisify__(hostname: string): Promise<string[]>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve pointer records (`PTR` records) for the`hostname`. The `addresses` argument passed to the `callback` function will |
|||
* be an array of strings containing the reply records. |
|||
* @since v6.0.0 |
|||
*/ |
|||
export function resolvePtr(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; |
|||
export namespace resolvePtr { |
|||
function __promisify__(hostname: string): Promise<string[]>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve a start of authority record (`SOA` record) for |
|||
* the `hostname`. The `address` argument passed to the `callback` function will |
|||
* be an object with the following properties: |
|||
* |
|||
* * `nsname` |
|||
* * `hostmaster` |
|||
* * `serial` |
|||
* * `refresh` |
|||
* * `retry` |
|||
* * `expire` |
|||
* * `minttl` |
|||
* |
|||
* ```js
|
|||
* { |
|||
* nsname: 'ns.example.com', |
|||
* hostmaster: 'root.example.com', |
|||
* serial: 2013101809, |
|||
* refresh: 10000, |
|||
* retry: 2400, |
|||
* expire: 604800, |
|||
* minttl: 3600 |
|||
* } |
|||
* ```
|
|||
* @since v0.11.10 |
|||
*/ |
|||
export function resolveSoa(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: SoaRecord) => void): void; |
|||
export namespace resolveSoa { |
|||
function __promisify__(hostname: string): Promise<SoaRecord>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve service records (`SRV` records) for the`hostname`. The `addresses` argument passed to the `callback` function will |
|||
* be an array of objects with the following properties: |
|||
* |
|||
* * `priority` |
|||
* * `weight` |
|||
* * `port` |
|||
* * `name` |
|||
* |
|||
* ```js
|
|||
* { |
|||
* priority: 10, |
|||
* weight: 5, |
|||
* port: 21223, |
|||
* name: 'service.example.com' |
|||
* } |
|||
* ```
|
|||
* @since v0.1.27 |
|||
*/ |
|||
export function resolveSrv(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void): void; |
|||
export namespace resolveSrv { |
|||
function __promisify__(hostname: string): Promise<SrvRecord[]>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve text queries (`TXT` records) for the`hostname`. The `records` argument passed to the `callback` function is a |
|||
* two-dimensional array of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of |
|||
* one record. Depending on the use case, these could be either joined together or |
|||
* treated separately. |
|||
* @since v0.1.27 |
|||
*/ |
|||
export function resolveTxt(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void): void; |
|||
export namespace resolveTxt { |
|||
function __promisify__(hostname: string): Promise<string[][]>; |
|||
} |
|||
/** |
|||
* Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query). |
|||
* The `ret` argument passed to the `callback` function will be an array containing |
|||
* various types of records. Each object has a property `type` that indicates the |
|||
* type of the current record. And depending on the `type`, additional properties |
|||
* will be present on the object: |
|||
* |
|||
* <omitted> |
|||
* |
|||
* Here is an example of the `ret` object passed to the callback: |
|||
* |
|||
* ```js
|
|||
* [ { type: 'A', address: '127.0.0.1', ttl: 299 }, |
|||
* { type: 'CNAME', value: 'example.com' }, |
|||
* { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 }, |
|||
* { type: 'NS', value: 'ns1.example.com' }, |
|||
* { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] }, |
|||
* { type: 'SOA', |
|||
* nsname: 'ns1.example.com', |
|||
* hostmaster: 'admin.example.com', |
|||
* serial: 156696742, |
|||
* refresh: 900, |
|||
* retry: 900, |
|||
* expire: 1800, |
|||
* minttl: 60 } ] |
|||
* ```
|
|||
* |
|||
* DNS server operators may choose not to respond to `ANY`queries. It may be better to call individual methods like {@link resolve4},{@link resolveMx}, and so on. For more details, see [RFC |
|||
* 8482](https://tools.ietf.org/html/rfc8482).
|
|||
*/ |
|||
export function resolveAny(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void): void; |
|||
export namespace resolveAny { |
|||
function __promisify__(hostname: string): Promise<AnyRecord[]>; |
|||
} |
|||
/** |
|||
* Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an |
|||
* array of host names. |
|||
* |
|||
* On error, `err` is an `Error` object, where `err.code` is |
|||
* one of the `DNS error codes`. |
|||
* @since v0.1.16 |
|||
*/ |
|||
export function reverse(ip: string, callback: (err: NodeJS.ErrnoException | null, hostnames: string[]) => void): void; |
|||
/** |
|||
* Sets the IP address and port of servers to be used when performing DNS |
|||
* resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted
|
|||
* addresses. If the port is the IANA default DNS port (53) it can be omitted. |
|||
* |
|||
* ```js
|
|||
* dns.setServers([ |
|||
* '4.4.4.4', |
|||
* '[2001:4860:4860::8888]', |
|||
* '4.4.4.4:1053', |
|||
* '[2001:4860:4860::8888]:1053', |
|||
* ]); |
|||
* ```
|
|||
* |
|||
* An error will be thrown if an invalid address is provided. |
|||
* |
|||
* The `dns.setServers()` method must not be called while a DNS query is in |
|||
* progress. |
|||
* |
|||
* The {@link setServers} method affects only {@link resolve},`dns.resolve*()` and {@link reverse} (and specifically _not_ {@link lookup}). |
|||
* |
|||
* This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html).
|
|||
* That is, if attempting to resolve with the first server provided results in a`NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with |
|||
* subsequent servers provided. Fallback DNS servers will only be used if the |
|||
* earlier ones time out or result in some other error. |
|||
* @since v0.11.3 |
|||
* @param servers array of `RFC 5952` formatted addresses |
|||
*/ |
|||
export function setServers(servers: ReadonlyArray<string>): void; |
|||
/** |
|||
* Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6),
|
|||
* that are currently configured for DNS resolution. A string will include a port |
|||
* section if a custom port is used. |
|||
* |
|||
* ```js
|
|||
* [ |
|||
* '4.4.4.4', |
|||
* '2001:4860:4860::8888', |
|||
* '4.4.4.4:1053', |
|||
* '[2001:4860:4860::8888]:1053', |
|||
* ] |
|||
* ```
|
|||
* @since v0.11.3 |
|||
*/ |
|||
export function getServers(): string[]; |
|||
/** |
|||
* Set the default value of `verbatim` in {@link lookup} and `dnsPromises.lookup()`. The value could be: |
|||
* |
|||
* * `ipv4first`: sets default `verbatim` `false`. |
|||
* * `verbatim`: sets default `verbatim` `true`. |
|||
* |
|||
* The default is `ipv4first` and {@link setDefaultResultOrder} have higher |
|||
* priority than `--dns-result-order`. When using `worker threads`,{@link setDefaultResultOrder} from the main thread won't affect the default |
|||
* dns orders in workers. |
|||
* @since v16.4.0, v14.18.0 |
|||
* @param order must be `'ipv4first'` or `'verbatim'`. |
|||
*/ |
|||
export function setDefaultResultOrder(order: 'ipv4first' | 'verbatim'): void; |
|||
// Error codes
|
|||
export const NODATA: string; |
|||
export const FORMERR: string; |
|||
export const SERVFAIL: string; |
|||
export const NOTFOUND: string; |
|||
export const NOTIMP: string; |
|||
export const REFUSED: string; |
|||
export const BADQUERY: string; |
|||
export const BADNAME: string; |
|||
export const BADFAMILY: string; |
|||
export const BADRESP: string; |
|||
export const CONNREFUSED: string; |
|||
export const TIMEOUT: string; |
|||
export const EOF: string; |
|||
export const FILE: string; |
|||
export const NOMEM: string; |
|||
export const DESTRUCTION: string; |
|||
export const BADSTR: string; |
|||
export const BADFLAGS: string; |
|||
export const NONAME: string; |
|||
export const BADHINTS: string; |
|||
export const NOTINITIALIZED: string; |
|||
export const LOADIPHLPAPI: string; |
|||
export const ADDRGETNETWORKPARAMS: string; |
|||
export const CANCELLED: string; |
|||
export interface ResolverOptions { |
|||
timeout?: number | undefined; |
|||
/** |
|||
* @default 4 |
|||
*/ |
|||
tries?: number; |
|||
} |
|||
/** |
|||
* An independent resolver for DNS requests. |
|||
* |
|||
* Creating a new resolver uses the default server settings. Setting |
|||
* the servers used for a resolver using `resolver.setServers()` does not affect |
|||
* other resolvers: |
|||
* |
|||
* ```js
|
|||
* const { Resolver } = require('dns'); |
|||
* const resolver = new Resolver(); |
|||
* resolver.setServers(['4.4.4.4']); |
|||
* |
|||
* // This request will use the server at 4.4.4.4, independent of global settings.
|
|||
* resolver.resolve4('example.org', (err, addresses) => { |
|||
* // ...
|
|||
* }); |
|||
* ```
|
|||
* |
|||
* The following methods from the `dns` module are available: |
|||
* |
|||
* * `resolver.getServers()` |
|||
* * `resolver.resolve()` |
|||
* * `resolver.resolve4()` |
|||
* * `resolver.resolve6()` |
|||
* * `resolver.resolveAny()` |
|||
* * `resolver.resolveCaa()` |
|||
* * `resolver.resolveCname()` |
|||
* * `resolver.resolveMx()` |
|||
* * `resolver.resolveNaptr()` |
|||
* * `resolver.resolveNs()` |
|||
* * `resolver.resolvePtr()` |
|||
* * `resolver.resolveSoa()` |
|||
* * `resolver.resolveSrv()` |
|||
* * `resolver.resolveTxt()` |
|||
* * `resolver.reverse()` |
|||
* * `resolver.setServers()` |
|||
* @since v8.3.0 |
|||
*/ |
|||
export class Resolver { |
|||
constructor(options?: ResolverOptions); |
|||
/** |
|||
* Cancel all outstanding DNS queries made by this resolver. The corresponding |
|||
* callbacks will be called with an error with code `ECANCELLED`. |
|||
* @since v8.3.0 |
|||
*/ |
|||
cancel(): void; |
|||
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; |
|||
/** |
|||
* The resolver instance will send its requests from the specified IP address. |
|||
* This allows programs to specify outbound interfaces when used on multi-homed |
|||
* systems. |
|||
* |
|||
* If a v4 or v6 address is not specified, it is set to the default, and the |
|||
* operating system will choose a local address automatically. |
|||
* |
|||
* The resolver will use the v4 local address when making requests to IPv4 DNS |
|||
* servers, and the v6 local address when making requests to IPv6 DNS servers. |
|||
* The `rrtype` of resolution requests has no impact on the local address used. |
|||
* @since v15.1.0, v14.17.0 |
|||
* @param [ipv4='0.0.0.0'] A string representation of an IPv4 address. |
|||
* @param [ipv6='::0'] A string representation of an IPv6 address. |
|||
*/ |
|||
setLocalAddress(ipv4?: string, ipv6?: string): void; |
|||
setServers: typeof setServers; |
|||
} |
|||
export { dnsPromises as promises }; |
|||
} |
|||
declare module 'node:dns' { |
|||
export * from 'dns'; |
|||
} |
|||
@ -0,0 +1,370 @@ |
|||
/** |
|||
* The `dns.promises` API provides an alternative set of asynchronous DNS methods |
|||
* that return `Promise` objects rather than using callbacks. The API is accessible |
|||
* via `require('dns').promises` or `require('dns/promises')`. |
|||
* @since v10.6.0 |
|||
*/ |
|||
declare module 'dns/promises' { |
|||
import { |
|||
LookupAddress, |
|||
LookupOneOptions, |
|||
LookupAllOptions, |
|||
LookupOptions, |
|||
AnyRecord, |
|||
CaaRecord, |
|||
MxRecord, |
|||
NaptrRecord, |
|||
SoaRecord, |
|||
SrvRecord, |
|||
ResolveWithTtlOptions, |
|||
RecordWithTtl, |
|||
ResolveOptions, |
|||
ResolverOptions, |
|||
} from 'node:dns'; |
|||
/** |
|||
* Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6),
|
|||
* that are currently configured for DNS resolution. A string will include a port |
|||
* section if a custom port is used. |
|||
* |
|||
* ```js
|
|||
* [ |
|||
* '4.4.4.4', |
|||
* '2001:4860:4860::8888', |
|||
* '4.4.4.4:1053', |
|||
* '[2001:4860:4860::8888]:1053', |
|||
* ] |
|||
* ```
|
|||
* @since v10.6.0 |
|||
*/ |
|||
function getServers(): string[]; |
|||
/** |
|||
* Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or |
|||
* AAAA (IPv6) record. All `option` properties are optional. If `options` is an |
|||
* integer, then it must be `4` or `6` – if `options` is not provided, then IPv4 |
|||
* and IPv6 addresses are both returned if found. |
|||
* |
|||
* With the `all` option set to `true`, the `Promise` is resolved with `addresses`being an array of objects with the properties `address` and `family`. |
|||
* |
|||
* On error, the `Promise` is rejected with an `Error` object, where `err.code`is the error code. |
|||
* Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when |
|||
* the host name does not exist but also when the lookup fails in other ways |
|||
* such as no available file descriptors. |
|||
* |
|||
* `dnsPromises.lookup()` does not necessarily have anything to do with the DNS |
|||
* protocol. The implementation uses an operating system facility that can |
|||
* associate names with addresses, and vice versa. This implementation can have |
|||
* subtle but important consequences on the behavior of any Node.js program. Please |
|||
* take some time to consult the `Implementation considerations section` before |
|||
* using `dnsPromises.lookup()`. |
|||
* |
|||
* Example usage: |
|||
* |
|||
* ```js
|
|||
* const dns = require('dns'); |
|||
* const dnsPromises = dns.promises; |
|||
* const options = { |
|||
* family: 6, |
|||
* hints: dns.ADDRCONFIG | dns.V4MAPPED, |
|||
* }; |
|||
* |
|||
* dnsPromises.lookup('example.com', options).then((result) => { |
|||
* console.log('address: %j family: IPv%s', result.address, result.family); |
|||
* // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6
|
|||
* }); |
|||
* |
|||
* // When options.all is true, the result will be an Array.
|
|||
* options.all = true; |
|||
* dnsPromises.lookup('example.com', options).then((result) => { |
|||
* console.log('addresses: %j', result); |
|||
* // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}]
|
|||
* }); |
|||
* ```
|
|||
* @since v10.6.0 |
|||
*/ |
|||
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>; |
|||
/** |
|||
* Resolves the given `address` and `port` into a host name and service using |
|||
* the operating system's underlying `getnameinfo` implementation. |
|||
* |
|||
* If `address` is not a valid IP address, a `TypeError` will be thrown. |
|||
* The `port` will be coerced to a number. If it is not a legal port, a `TypeError`will be thrown. |
|||
* |
|||
* On error, the `Promise` is rejected with an `Error` object, where `err.code`is the error code. |
|||
* |
|||
* ```js
|
|||
* const dnsPromises = require('dns').promises; |
|||
* dnsPromises.lookupService('127.0.0.1', 22).then((result) => { |
|||
* console.log(result.hostname, result.service); |
|||
* // Prints: localhost ssh
|
|||
* }); |
|||
* ```
|
|||
* @since v10.6.0 |
|||
*/ |
|||
function lookupService( |
|||
address: string, |
|||
port: number |
|||
): Promise<{ |
|||
hostname: string; |
|||
service: string; |
|||
}>; |
|||
/** |
|||
* Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array |
|||
* of the resource records. When successful, the `Promise` is resolved with an |
|||
* array of resource records. The type and structure of individual results vary |
|||
* based on `rrtype`: |
|||
* |
|||
* <omitted> |
|||
* |
|||
* On error, the `Promise` is rejected with an `Error` object, where `err.code`is one of the DNS error codes. |
|||
* @since v10.6.0 |
|||
* @param hostname Host name to resolve. |
|||
* @param [rrtype='A'] Resource record type. |
|||
*/ |
|||
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: 'CAA'): Promise<CaaRecord[]>; |
|||
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[]>; |
|||
/** |
|||
* Uses the DNS protocol to resolve IPv4 addresses (`A` records) for the`hostname`. On success, the `Promise` is resolved with an array of IPv4 |
|||
* addresses (e.g. `['74.125.79.104', '74.125.79.105', '74.125.79.106']`). |
|||
* @since v10.6.0 |
|||
* @param hostname Host name to resolve. |
|||
*/ |
|||
function resolve4(hostname: string): Promise<string[]>; |
|||
function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>; |
|||
function resolve4(hostname: string, options: ResolveOptions): Promise<string[] | RecordWithTtl[]>; |
|||
/** |
|||
* Uses the DNS protocol to resolve IPv6 addresses (`AAAA` records) for the`hostname`. On success, the `Promise` is resolved with an array of IPv6 |
|||
* addresses. |
|||
* @since v10.6.0 |
|||
* @param hostname Host name to resolve. |
|||
*/ |
|||
function resolve6(hostname: string): Promise<string[]>; |
|||
function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>; |
|||
function resolve6(hostname: string, options: ResolveOptions): Promise<string[] | RecordWithTtl[]>; |
|||
/** |
|||
* Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query). |
|||
* On success, the `Promise` is resolved with an array containing various types of |
|||
* records. Each object has a property `type` that indicates the type of the |
|||
* current record. And depending on the `type`, additional properties will be |
|||
* present on the object: |
|||
* |
|||
* <omitted> |
|||
* |
|||
* Here is an example of the result object: |
|||
* |
|||
* ```js
|
|||
* [ { type: 'A', address: '127.0.0.1', ttl: 299 }, |
|||
* { type: 'CNAME', value: 'example.com' }, |
|||
* { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 }, |
|||
* { type: 'NS', value: 'ns1.example.com' }, |
|||
* { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] }, |
|||
* { type: 'SOA', |
|||
* nsname: 'ns1.example.com', |
|||
* hostmaster: 'admin.example.com', |
|||
* serial: 156696742, |
|||
* refresh: 900, |
|||
* retry: 900, |
|||
* expire: 1800, |
|||
* minttl: 60 } ] |
|||
* ```
|
|||
* @since v10.6.0 |
|||
*/ |
|||
function resolveAny(hostname: string): Promise<AnyRecord[]>; |
|||
/** |
|||
* Uses the DNS protocol to resolve `CAA` records for the `hostname`. On success, |
|||
* the `Promise` is resolved with an array of objects containing available |
|||
* certification authority authorization records available for the `hostname`(e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'},{critical: 128, issue: 'pki.example.com'}]`). |
|||
* @since v15.0.0, v14.17.0 |
|||
*/ |
|||
function resolveCaa(hostname: string): Promise<CaaRecord[]>; |
|||
/** |
|||
* Uses the DNS protocol to resolve `CNAME` records for the `hostname`. On success, |
|||
* the `Promise` is resolved with an array of canonical name records available for |
|||
* the `hostname` (e.g. `['bar.example.com']`). |
|||
* @since v10.6.0 |
|||
*/ |
|||
function resolveCname(hostname: string): Promise<string[]>; |
|||
/** |
|||
* Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects |
|||
* containing both a `priority` and `exchange` property (e.g.`[{priority: 10, exchange: 'mx.example.com'}, ...]`). |
|||
* @since v10.6.0 |
|||
*/ |
|||
function resolveMx(hostname: string): Promise<MxRecord[]>; |
|||
/** |
|||
* Uses the DNS protocol to resolve regular expression based records (`NAPTR`records) for the `hostname`. On success, the `Promise` is resolved with an array |
|||
* of objects with the following properties: |
|||
* |
|||
* * `flags` |
|||
* * `service` |
|||
* * `regexp` |
|||
* * `replacement` |
|||
* * `order` |
|||
* * `preference` |
|||
* |
|||
* ```js
|
|||
* { |
|||
* flags: 's', |
|||
* service: 'SIP+D2U', |
|||
* regexp: '', |
|||
* replacement: '_sip._udp.example.com', |
|||
* order: 30, |
|||
* preference: 100 |
|||
* } |
|||
* ```
|
|||
* @since v10.6.0 |
|||
*/ |
|||
function resolveNaptr(hostname: string): Promise<NaptrRecord[]>; |
|||
/** |
|||
* Uses the DNS protocol to resolve name server records (`NS` records) for the`hostname`. On success, the `Promise` is resolved with an array of name server |
|||
* records available for `hostname` (e.g.`['ns1.example.com', 'ns2.example.com']`). |
|||
* @since v10.6.0 |
|||
*/ |
|||
function resolveNs(hostname: string): Promise<string[]>; |
|||
/** |
|||
* Uses the DNS protocol to resolve pointer records (`PTR` records) for the`hostname`. On success, the `Promise` is resolved with an array of strings |
|||
* containing the reply records. |
|||
* @since v10.6.0 |
|||
*/ |
|||
function resolvePtr(hostname: string): Promise<string[]>; |
|||
/** |
|||
* Uses the DNS protocol to resolve a start of authority record (`SOA` record) for |
|||
* the `hostname`. On success, the `Promise` is resolved with an object with the |
|||
* following properties: |
|||
* |
|||
* * `nsname` |
|||
* * `hostmaster` |
|||
* * `serial` |
|||
* * `refresh` |
|||
* * `retry` |
|||
* * `expire` |
|||
* * `minttl` |
|||
* |
|||
* ```js
|
|||
* { |
|||
* nsname: 'ns.example.com', |
|||
* hostmaster: 'root.example.com', |
|||
* serial: 2013101809, |
|||
* refresh: 10000, |
|||
* retry: 2400, |
|||
* expire: 604800, |
|||
* minttl: 3600 |
|||
* } |
|||
* ```
|
|||
* @since v10.6.0 |
|||
*/ |
|||
function resolveSoa(hostname: string): Promise<SoaRecord>; |
|||
/** |
|||
* Uses the DNS protocol to resolve service records (`SRV` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects with |
|||
* the following properties: |
|||
* |
|||
* * `priority` |
|||
* * `weight` |
|||
* * `port` |
|||
* * `name` |
|||
* |
|||
* ```js
|
|||
* { |
|||
* priority: 10, |
|||
* weight: 5, |
|||
* port: 21223, |
|||
* name: 'service.example.com' |
|||
* } |
|||
* ```
|
|||
* @since v10.6.0 |
|||
*/ |
|||
function resolveSrv(hostname: string): Promise<SrvRecord[]>; |
|||
/** |
|||
* Uses the DNS protocol to resolve text queries (`TXT` records) for the`hostname`. On success, the `Promise` is resolved with a two-dimensional array |
|||
* of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of |
|||
* one record. Depending on the use case, these could be either joined together or |
|||
* treated separately. |
|||
* @since v10.6.0 |
|||
*/ |
|||
function resolveTxt(hostname: string): Promise<string[][]>; |
|||
/** |
|||
* Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an |
|||
* array of host names. |
|||
* |
|||
* On error, the `Promise` is rejected with an `Error` object, where `err.code`is one of the DNS error codes. |
|||
* @since v10.6.0 |
|||
*/ |
|||
function reverse(ip: string): Promise<string[]>; |
|||
/** |
|||
* Sets the IP address and port of servers to be used when performing DNS |
|||
* resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted
|
|||
* addresses. If the port is the IANA default DNS port (53) it can be omitted. |
|||
* |
|||
* ```js
|
|||
* dnsPromises.setServers([ |
|||
* '4.4.4.4', |
|||
* '[2001:4860:4860::8888]', |
|||
* '4.4.4.4:1053', |
|||
* '[2001:4860:4860::8888]:1053', |
|||
* ]); |
|||
* ```
|
|||
* |
|||
* An error will be thrown if an invalid address is provided. |
|||
* |
|||
* The `dnsPromises.setServers()` method must not be called while a DNS query is in |
|||
* progress. |
|||
* |
|||
* This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html).
|
|||
* That is, if attempting to resolve with the first server provided results in a`NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with |
|||
* subsequent servers provided. Fallback DNS servers will only be used if the |
|||
* earlier ones time out or result in some other error. |
|||
* @since v10.6.0 |
|||
* @param servers array of `RFC 5952` formatted addresses |
|||
*/ |
|||
function setServers(servers: ReadonlyArray<string>): void; |
|||
/** |
|||
* Set the default value of `verbatim` in `dns.lookup()` and `dnsPromises.lookup()`. The value could be: |
|||
* |
|||
* * `ipv4first`: sets default `verbatim` `false`. |
|||
* * `verbatim`: sets default `verbatim` `true`. |
|||
* |
|||
* The default is `ipv4first` and `dnsPromises.setDefaultResultOrder()` have |
|||
* higher priority than `--dns-result-order`. When using `worker threads`,`dnsPromises.setDefaultResultOrder()` from the main thread won't affect the |
|||
* default dns orders in workers. |
|||
* @since v16.4.0, v14.18.0 |
|||
* @param order must be `'ipv4first'` or `'verbatim'`. |
|||
*/ |
|||
function setDefaultResultOrder(order: 'ipv4first' | 'verbatim'): void; |
|||
class Resolver { |
|||
constructor(options?: ResolverOptions); |
|||
cancel(): void; |
|||
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; |
|||
setLocalAddress(ipv4?: string, ipv6?: string): void; |
|||
setServers: typeof setServers; |
|||
} |
|||
} |
|||
declare module 'node:dns/promises' { |
|||
export * from 'dns/promises'; |
|||
} |
|||
@ -0,0 +1,169 @@ |
|||
/** |
|||
* **This module is pending deprecation.** Once a replacement API has been |
|||
* finalized, this module will be fully deprecated. Most developers should**not** have cause to use this module. Users who absolutely must have |
|||
* the functionality that domains provide may rely on it for the time being |
|||
* but should expect to have to migrate to a different solution |
|||
* in the future. |
|||
* |
|||
* Domains provide a way to handle multiple different IO operations as a |
|||
* single group. If any of the event emitters or callbacks registered to a |
|||
* domain emit an `'error'` event, or throw an error, then the domain object |
|||
* will be notified, rather than losing the context of the error in the`process.on('uncaughtException')` handler, or causing the program to |
|||
* exit immediately with an error code. |
|||
* @deprecated Since v1.4.2 - Deprecated |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/domain.js)
|
|||
*/ |
|||
declare module 'domain' { |
|||
import EventEmitter = require('node:events'); |
|||
/** |
|||
* The `Domain` class encapsulates the functionality of routing errors and |
|||
* uncaught exceptions to the active `Domain` object. |
|||
* |
|||
* To handle the errors that it catches, listen to its `'error'` event. |
|||
*/ |
|||
class Domain extends EventEmitter { |
|||
/** |
|||
* An array of timers and event emitters that have been explicitly added |
|||
* to the domain. |
|||
*/ |
|||
members: Array<EventEmitter | NodeJS.Timer>; |
|||
/** |
|||
* The `enter()` method is plumbing used by the `run()`, `bind()`, and`intercept()` methods to set the active domain. It sets `domain.active` and`process.domain` to the domain, and implicitly |
|||
* pushes the domain onto the domain |
|||
* stack managed by the domain module (see {@link exit} for details on the |
|||
* domain stack). The call to `enter()` delimits the beginning of a chain of |
|||
* asynchronous calls and I/O operations bound to a domain. |
|||
* |
|||
* Calling `enter()` changes only the active domain, and does not alter the domain |
|||
* itself. `enter()` and `exit()` can be called an arbitrary number of times on a |
|||
* single domain. |
|||
*/ |
|||
enter(): void; |
|||
/** |
|||
* The `exit()` method exits the current domain, popping it off the domain stack. |
|||
* Any time execution is going to switch to the context of a different chain of |
|||
* asynchronous calls, it's important to ensure that the current domain is exited. |
|||
* The call to `exit()` delimits either the end of or an interruption to the chain |
|||
* of asynchronous calls and I/O operations bound to a domain. |
|||
* |
|||
* If there are multiple, nested domains bound to the current execution context,`exit()` will exit any domains nested within this domain. |
|||
* |
|||
* Calling `exit()` changes only the active domain, and does not alter the domain |
|||
* itself. `enter()` and `exit()` can be called an arbitrary number of times on a |
|||
* single domain. |
|||
*/ |
|||
exit(): void; |
|||
/** |
|||
* Run the supplied function in the context of the domain, implicitly |
|||
* binding all event emitters, timers, and lowlevel requests that are |
|||
* created in that context. Optionally, arguments can be passed to |
|||
* the function. |
|||
* |
|||
* This is the most basic way to use a domain. |
|||
* |
|||
* ```js
|
|||
* const domain = require('domain'); |
|||
* const fs = require('fs'); |
|||
* const d = domain.create(); |
|||
* d.on('error', (er) => { |
|||
* console.error('Caught error!', er); |
|||
* }); |
|||
* d.run(() => { |
|||
* process.nextTick(() => { |
|||
* setTimeout(() => { // Simulating some various async stuff
|
|||
* fs.open('non-existent file', 'r', (er, fd) => { |
|||
* if (er) throw er; |
|||
* // proceed...
|
|||
* }); |
|||
* }, 100); |
|||
* }); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* In this example, the `d.on('error')` handler will be triggered, rather |
|||
* than crashing the program. |
|||
*/ |
|||
run<T>(fn: (...args: any[]) => T, ...args: any[]): T; |
|||
/** |
|||
* Explicitly adds an emitter to the domain. If any event handlers called by |
|||
* the emitter throw an error, or if the emitter emits an `'error'` event, it |
|||
* will be routed to the domain's `'error'` event, just like with implicit
|
|||
* binding. |
|||
* |
|||
* This also works with timers that are returned from `setInterval()` and `setTimeout()`. If their callback function throws, it will be caught by |
|||
* the domain `'error'` handler. |
|||
* |
|||
* If the Timer or `EventEmitter` was already bound to a domain, it is removed |
|||
* from that one, and bound to this one instead. |
|||
* @param emitter emitter or timer to be added to the domain |
|||
*/ |
|||
add(emitter: EventEmitter | NodeJS.Timer): void; |
|||
/** |
|||
* The opposite of {@link add}. Removes domain handling from the |
|||
* specified emitter. |
|||
* @param emitter emitter or timer to be removed from the domain |
|||
*/ |
|||
remove(emitter: EventEmitter | NodeJS.Timer): void; |
|||
/** |
|||
* The returned function will be a wrapper around the supplied callback |
|||
* function. When the returned function is called, any errors that are |
|||
* thrown will be routed to the domain's `'error'` event.
|
|||
* |
|||
* ```js
|
|||
* const d = domain.create(); |
|||
* |
|||
* function readSomeFile(filename, cb) { |
|||
* fs.readFile(filename, 'utf8', d.bind((er, data) => { |
|||
* // If this throws, it will also be passed to the domain.
|
|||
* return cb(er, data ? JSON.parse(data) : null); |
|||
* })); |
|||
* } |
|||
* |
|||
* d.on('error', (er) => { |
|||
* // An error occurred somewhere. If we throw it now, it will crash the program
|
|||
* // with the normal line number and stack message.
|
|||
* }); |
|||
* ```
|
|||
* @param callback The callback function |
|||
* @return The bound function |
|||
*/ |
|||
bind<T extends Function>(callback: T): T; |
|||
/** |
|||
* This method is almost identical to {@link bind}. However, in |
|||
* addition to catching thrown errors, it will also intercept `Error` objects sent as the first argument to the function. |
|||
* |
|||
* In this way, the common `if (err) return callback(err);` pattern can be replaced |
|||
* with a single error handler in a single place. |
|||
* |
|||
* ```js
|
|||
* const d = domain.create(); |
|||
* |
|||
* function readSomeFile(filename, cb) { |
|||
* fs.readFile(filename, 'utf8', d.intercept((data) => { |
|||
* // Note, the first argument is never passed to the
|
|||
* // callback since it is assumed to be the 'Error' argument
|
|||
* // and thus intercepted by the domain.
|
|||
* |
|||
* // If this throws, it will also be passed to the domain
|
|||
* // so the error-handling logic can be moved to the 'error'
|
|||
* // event on the domain instead of being repeated throughout
|
|||
* // the program.
|
|||
* return cb(null, JSON.parse(data)); |
|||
* })); |
|||
* } |
|||
* |
|||
* d.on('error', (er) => { |
|||
* // An error occurred somewhere. If we throw it now, it will crash the program
|
|||
* // with the normal line number and stack message.
|
|||
* }); |
|||
* ```
|
|||
* @param callback The callback function |
|||
* @return The intercepted function |
|||
*/ |
|||
intercept<T extends Function>(callback: T): T; |
|||
} |
|||
function create(): Domain; |
|||
} |
|||
declare module 'node:domain' { |
|||
export * from 'domain'; |
|||
} |
|||
@ -0,0 +1,651 @@ |
|||
/** |
|||
* Much of the Node.js core API is built around an idiomatic asynchronous |
|||
* event-driven architecture in which certain kinds of objects (called "emitters") |
|||
* emit named events that cause `Function` objects ("listeners") to be called. |
|||
* |
|||
* For instance: a `net.Server` object emits an event each time a peer |
|||
* connects to it; a `fs.ReadStream` emits an event when the file is opened; |
|||
* a `stream` emits an event whenever data is available to be read. |
|||
* |
|||
* All objects that emit events are instances of the `EventEmitter` class. These |
|||
* objects expose an `eventEmitter.on()` function that allows one or more |
|||
* functions to be attached to named events emitted by the object. Typically, |
|||
* event names are camel-cased strings but any valid JavaScript property key |
|||
* can be used. |
|||
* |
|||
* When the `EventEmitter` object emits an event, all of the functions attached |
|||
* to that specific event are called _synchronously_. Any values returned by the |
|||
* called listeners are _ignored_ and discarded. |
|||
* |
|||
* The following example shows a simple `EventEmitter` instance with a single |
|||
* listener. The `eventEmitter.on()` method is used to register listeners, while |
|||
* the `eventEmitter.emit()` method is used to trigger the event. |
|||
* |
|||
* ```js
|
|||
* const EventEmitter = require('events'); |
|||
* |
|||
* class MyEmitter extends EventEmitter {} |
|||
* |
|||
* const myEmitter = new MyEmitter(); |
|||
* myEmitter.on('event', () => { |
|||
* console.log('an event occurred!'); |
|||
* }); |
|||
* myEmitter.emit('event'); |
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/events.js)
|
|||
*/ |
|||
declare module 'events' { |
|||
interface EventEmitterOptions { |
|||
/** |
|||
* Enables automatic capturing of promise rejection. |
|||
*/ |
|||
captureRejections?: boolean | undefined; |
|||
} |
|||
interface NodeEventTarget { |
|||
once(eventName: string | symbol, listener: (...args: any[]) => void): this; |
|||
} |
|||
interface DOMEventTarget { |
|||
addEventListener( |
|||
eventName: string, |
|||
listener: (...args: any[]) => void, |
|||
opts?: { |
|||
once: boolean; |
|||
}, |
|||
): any; |
|||
} |
|||
interface StaticEventEmitterOptions { |
|||
signal?: AbortSignal | undefined; |
|||
} |
|||
interface EventEmitter extends NodeJS.EventEmitter {} |
|||
/** |
|||
* The `EventEmitter` class is defined and exposed by the `events` module: |
|||
* |
|||
* ```js
|
|||
* const EventEmitter = require('events'); |
|||
* ```
|
|||
* |
|||
* All `EventEmitter`s emit the event `'newListener'` when new listeners are |
|||
* added and `'removeListener'` when existing listeners are removed. |
|||
* |
|||
* It supports the following option: |
|||
* @since v0.1.26 |
|||
*/ |
|||
class EventEmitter { |
|||
constructor(options?: EventEmitterOptions); |
|||
/** |
|||
* Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given |
|||
* event or that is rejected if the `EventEmitter` emits `'error'` while waiting. |
|||
* The `Promise` will resolve with an array of all the arguments emitted to the |
|||
* given event. |
|||
* |
|||
* This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
|
|||
* semantics and does not listen to the `'error'` event. |
|||
* |
|||
* ```js
|
|||
* const { once, EventEmitter } = require('events'); |
|||
* |
|||
* async function run() { |
|||
* const ee = new EventEmitter(); |
|||
* |
|||
* process.nextTick(() => { |
|||
* ee.emit('myevent', 42); |
|||
* }); |
|||
* |
|||
* const [value] = await once(ee, 'myevent'); |
|||
* console.log(value); |
|||
* |
|||
* const err = new Error('kaboom'); |
|||
* process.nextTick(() => { |
|||
* ee.emit('error', err); |
|||
* }); |
|||
* |
|||
* try { |
|||
* await once(ee, 'myevent'); |
|||
* } catch (err) { |
|||
* console.log('error happened', err); |
|||
* } |
|||
* } |
|||
* |
|||
* run(); |
|||
* ```
|
|||
* |
|||
* The special handling of the `'error'` event is only used when `events.once()`is used to wait for another event. If `events.once()` is used to wait for the |
|||
* '`error'` event itself, then it is treated as any other kind of event without
|
|||
* special handling: |
|||
* |
|||
* ```js
|
|||
* const { EventEmitter, once } = require('events'); |
|||
* |
|||
* const ee = new EventEmitter(); |
|||
* |
|||
* once(ee, 'error') |
|||
* .then(([err]) => console.log('ok', err.message)) |
|||
* .catch((err) => console.log('error', err.message)); |
|||
* |
|||
* ee.emit('error', new Error('boom')); |
|||
* |
|||
* // Prints: ok boom
|
|||
* ```
|
|||
* |
|||
* An `AbortSignal` can be used to cancel waiting for the event: |
|||
* |
|||
* ```js
|
|||
* const { EventEmitter, once } = require('events'); |
|||
* |
|||
* const ee = new EventEmitter(); |
|||
* const ac = new AbortController(); |
|||
* |
|||
* async function foo(emitter, event, signal) { |
|||
* try { |
|||
* await once(emitter, event, { signal }); |
|||
* console.log('event emitted!'); |
|||
* } catch (error) { |
|||
* if (error.name === 'AbortError') { |
|||
* console.error('Waiting for the event was canceled!'); |
|||
* } else { |
|||
* console.error('There was an error', error.message); |
|||
* } |
|||
* } |
|||
* } |
|||
* |
|||
* foo(ee, 'foo', ac.signal); |
|||
* ac.abort(); // Abort waiting for the event
|
|||
* ee.emit('foo'); // Prints: Waiting for the event was canceled!
|
|||
* ```
|
|||
* @since v11.13.0, v10.16.0 |
|||
*/ |
|||
static once( |
|||
emitter: NodeEventTarget, |
|||
eventName: string | symbol, |
|||
options?: StaticEventEmitterOptions, |
|||
): Promise<any[]>; |
|||
static once(emitter: DOMEventTarget, eventName: string, options?: StaticEventEmitterOptions): Promise<any[]>; |
|||
/** |
|||
* ```js
|
|||
* const { on, EventEmitter } = require('events'); |
|||
* |
|||
* (async () => { |
|||
* const ee = new EventEmitter(); |
|||
* |
|||
* // Emit later on
|
|||
* process.nextTick(() => { |
|||
* ee.emit('foo', 'bar'); |
|||
* ee.emit('foo', 42); |
|||
* }); |
|||
* |
|||
* for await (const event of on(ee, 'foo')) { |
|||
* // The execution of this inner block is synchronous and it
|
|||
* // processes one event at a time (even with await). Do not use
|
|||
* // if concurrent execution is required.
|
|||
* console.log(event); // prints ['bar'] [42]
|
|||
* } |
|||
* // Unreachable here
|
|||
* })(); |
|||
* ```
|
|||
* |
|||
* Returns an `AsyncIterator` that iterates `eventName` events. It will throw |
|||
* if the `EventEmitter` emits `'error'`. It removes all listeners when |
|||
* exiting the loop. The `value` returned by each iteration is an array |
|||
* composed of the emitted event arguments. |
|||
* |
|||
* An `AbortSignal` can be used to cancel waiting on events: |
|||
* |
|||
* ```js
|
|||
* const { on, EventEmitter } = require('events'); |
|||
* const ac = new AbortController(); |
|||
* |
|||
* (async () => { |
|||
* const ee = new EventEmitter(); |
|||
* |
|||
* // Emit later on
|
|||
* process.nextTick(() => { |
|||
* ee.emit('foo', 'bar'); |
|||
* ee.emit('foo', 42); |
|||
* }); |
|||
* |
|||
* for await (const event of on(ee, 'foo', { signal: ac.signal })) { |
|||
* // The execution of this inner block is synchronous and it
|
|||
* // processes one event at a time (even with await). Do not use
|
|||
* // if concurrent execution is required.
|
|||
* console.log(event); // prints ['bar'] [42]
|
|||
* } |
|||
* // Unreachable here
|
|||
* })(); |
|||
* |
|||
* process.nextTick(() => ac.abort()); |
|||
* ```
|
|||
* @since v13.6.0, v12.16.0 |
|||
* @param eventName The name of the event being listened for |
|||
* @return that iterates `eventName` events emitted by the `emitter` |
|||
*/ |
|||
static on( |
|||
emitter: NodeJS.EventEmitter, |
|||
eventName: string, |
|||
options?: StaticEventEmitterOptions, |
|||
): AsyncIterableIterator<any>; |
|||
/** |
|||
* A class method that returns the number of listeners for the given `eventName`registered on the given `emitter`. |
|||
* |
|||
* ```js
|
|||
* const { EventEmitter, listenerCount } = require('events'); |
|||
* const myEmitter = new EventEmitter(); |
|||
* myEmitter.on('event', () => {}); |
|||
* myEmitter.on('event', () => {}); |
|||
* console.log(listenerCount(myEmitter, 'event')); |
|||
* // Prints: 2
|
|||
* ```
|
|||
* @since v0.9.12 |
|||
* @deprecated Since v3.2.0 - Use `listenerCount` instead. |
|||
* @param emitter The emitter to query |
|||
* @param eventName The event name |
|||
*/ |
|||
static listenerCount(emitter: NodeJS.EventEmitter, eventName: string | symbol): number; |
|||
/** |
|||
* Returns a copy of the array of listeners for the event named `eventName`. |
|||
* |
|||
* For `EventEmitter`s this behaves exactly the same as calling `.listeners` on |
|||
* the emitter. |
|||
* |
|||
* For `EventTarget`s this is the only way to get the event listeners for the |
|||
* event target. This is useful for debugging and diagnostic purposes. |
|||
* |
|||
* ```js
|
|||
* const { getEventListeners, EventEmitter } = require('events'); |
|||
* |
|||
* { |
|||
* const ee = new EventEmitter(); |
|||
* const listener = () => console.log('Events are fun'); |
|||
* ee.on('foo', listener); |
|||
* getEventListeners(ee, 'foo'); // [listener]
|
|||
* } |
|||
* { |
|||
* const et = new EventTarget(); |
|||
* const listener = () => console.log('Events are fun'); |
|||
* et.addEventListener('foo', listener); |
|||
* getEventListeners(et, 'foo'); // [listener]
|
|||
* } |
|||
* ```
|
|||
* @since v15.2.0, v14.17.0 |
|||
*/ |
|||
static getEventListeners(emitter: DOMEventTarget | NodeJS.EventEmitter, name: string | symbol): Function[]; |
|||
/** |
|||
* By default `EventEmitter`s will print a warning if more than `10` listeners are |
|||
* added for a particular event. This is a useful default that helps finding |
|||
* memory leaks. The `EventEmitter.setMaxListeners()` method allows the default limit to be |
|||
* modified (if eventTargets is empty) or modify the limit specified in every `EventTarget` | `EventEmitter` passed as arguments. |
|||
* The value can be set to`Infinity` (or `0`) to indicate an unlimited number of listeners. |
|||
* |
|||
* ```js
|
|||
* EventEmitter.setMaxListeners(20); |
|||
* // Equivalent to
|
|||
* EventEmitter.defaultMaxListeners = 20; |
|||
* |
|||
* const eventTarget = new EventTarget(); |
|||
* // Only way to increase limit for `EventTarget` instances
|
|||
* // as these doesn't expose its own `setMaxListeners` method
|
|||
* EventEmitter.setMaxListeners(20, eventTarget); |
|||
* ```
|
|||
* @since v15.3.0, v14.17.0 |
|||
*/ |
|||
static setMaxListeners(n?: number, ...eventTargets: Array<DOMEventTarget | NodeJS.EventEmitter>): void; |
|||
/** |
|||
* This symbol shall be used to install a listener for only monitoring `'error'` |
|||
* events. Listeners installed using this symbol are called before the regular |
|||
* `'error'` listeners are called. |
|||
* |
|||
* Installing a listener using this symbol does not change the behavior once an |
|||
* `'error'` event is emitted, therefore the process will still crash if no |
|||
* regular `'error'` listener is installed. |
|||
*/ |
|||
static readonly errorMonitor: unique symbol; |
|||
static readonly captureRejectionSymbol: unique symbol; |
|||
/** |
|||
* Sets or gets the default captureRejection value for all emitters. |
|||
*/ |
|||
// TODO: These should be described using static getter/setter pairs:
|
|||
static captureRejections: boolean; |
|||
static defaultMaxListeners: number; |
|||
} |
|||
import internal = require('node:events'); |
|||
namespace EventEmitter { |
|||
// Should just be `export { EventEmitter }`, but that doesn't work in TypeScript 3.4
|
|||
export { internal as EventEmitter }; |
|||
export interface Abortable { |
|||
/** |
|||
* When provided the corresponding `AbortController` can be used to cancel an asynchronous action. |
|||
*/ |
|||
signal?: AbortSignal | undefined; |
|||
} |
|||
} |
|||
global { |
|||
namespace NodeJS { |
|||
interface EventEmitter { |
|||
/** |
|||
* Alias for `emitter.on(eventName, listener)`. |
|||
* @since v0.1.26 |
|||
*/ |
|||
addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; |
|||
/** |
|||
* Adds the `listener` function to the end of the listeners array for the |
|||
* event named `eventName`. No checks are made to see if the `listener` has |
|||
* already been added. Multiple calls passing the same combination of `eventName`and `listener` will result in the `listener` being added, and called, multiple |
|||
* times. |
|||
* |
|||
* ```js
|
|||
* server.on('connection', (stream) => { |
|||
* console.log('someone connected!'); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Returns a reference to the `EventEmitter`, so that calls can be chained. |
|||
* |
|||
* By default, event listeners are invoked in the order they are added. The`emitter.prependListener()` method can be used as an alternative to add the |
|||
* event listener to the beginning of the listeners array. |
|||
* |
|||
* ```js
|
|||
* const myEE = new EventEmitter(); |
|||
* myEE.on('foo', () => console.log('a')); |
|||
* myEE.prependListener('foo', () => console.log('b')); |
|||
* myEE.emit('foo'); |
|||
* // Prints:
|
|||
* // b
|
|||
* // a
|
|||
* ```
|
|||
* @since v0.1.101 |
|||
* @param eventName The name of the event. |
|||
* @param listener The callback function |
|||
*/ |
|||
on(eventName: string | symbol, listener: (...args: any[]) => void): this; |
|||
/** |
|||
* Adds a **one-time**`listener` function for the event named `eventName`. The |
|||
* next time `eventName` is triggered, this listener is removed and then invoked. |
|||
* |
|||
* ```js
|
|||
* server.once('connection', (stream) => { |
|||
* console.log('Ah, we have our first user!'); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Returns a reference to the `EventEmitter`, so that calls can be chained. |
|||
* |
|||
* By default, event listeners are invoked in the order they are added. The`emitter.prependOnceListener()` method can be used as an alternative to add the |
|||
* event listener to the beginning of the listeners array. |
|||
* |
|||
* ```js
|
|||
* const myEE = new EventEmitter(); |
|||
* myEE.once('foo', () => console.log('a')); |
|||
* myEE.prependOnceListener('foo', () => console.log('b')); |
|||
* myEE.emit('foo'); |
|||
* // Prints:
|
|||
* // b
|
|||
* // a
|
|||
* ```
|
|||
* @since v0.3.0 |
|||
* @param eventName The name of the event. |
|||
* @param listener The callback function |
|||
*/ |
|||
once(eventName: string | symbol, listener: (...args: any[]) => void): this; |
|||
/** |
|||
* Removes the specified `listener` from the listener array for the event named`eventName`. |
|||
* |
|||
* ```js
|
|||
* const callback = (stream) => { |
|||
* console.log('someone connected!'); |
|||
* }; |
|||
* server.on('connection', callback); |
|||
* // ...
|
|||
* server.removeListener('connection', callback); |
|||
* ```
|
|||
* |
|||
* `removeListener()` will remove, at most, one instance of a listener from the |
|||
* listener array. If any single listener has been added multiple times to the |
|||
* listener array for the specified `eventName`, then `removeListener()` must be |
|||
* called multiple times to remove each instance. |
|||
* |
|||
* Once an event is emitted, all listeners attached to it at the |
|||
* time of emitting are called in order. This implies that any`removeListener()` or `removeAllListeners()` calls _after_ emitting and_before_ the last listener finishes execution will |
|||
* not remove them from`emit()` in progress. Subsequent events behave as expected. |
|||
* |
|||
* ```js
|
|||
* const myEmitter = new MyEmitter(); |
|||
* |
|||
* const callbackA = () => { |
|||
* console.log('A'); |
|||
* myEmitter.removeListener('event', callbackB); |
|||
* }; |
|||
* |
|||
* const callbackB = () => { |
|||
* console.log('B'); |
|||
* }; |
|||
* |
|||
* myEmitter.on('event', callbackA); |
|||
* |
|||
* myEmitter.on('event', callbackB); |
|||
* |
|||
* // callbackA removes listener callbackB but it will still be called.
|
|||
* // Internal listener array at time of emit [callbackA, callbackB]
|
|||
* myEmitter.emit('event'); |
|||
* // Prints:
|
|||
* // A
|
|||
* // B
|
|||
* |
|||
* // callbackB is now removed.
|
|||
* // Internal listener array [callbackA]
|
|||
* myEmitter.emit('event'); |
|||
* // Prints:
|
|||
* // A
|
|||
* ```
|
|||
* |
|||
* Because listeners are managed using an internal array, calling this will |
|||
* change the position indices of any listener registered _after_ the listener |
|||
* being removed. This will not impact the order in which listeners are called, |
|||
* but it means that any copies of the listener array as returned by |
|||
* the `emitter.listeners()` method will need to be recreated. |
|||
* |
|||
* When a single function has been added as a handler multiple times for a single |
|||
* event (as in the example below), `removeListener()` will remove the most |
|||
* recently added instance. In the example the `once('ping')`listener is removed: |
|||
* |
|||
* ```js
|
|||
* const ee = new EventEmitter(); |
|||
* |
|||
* function pong() { |
|||
* console.log('pong'); |
|||
* } |
|||
* |
|||
* ee.on('ping', pong); |
|||
* ee.once('ping', pong); |
|||
* ee.removeListener('ping', pong); |
|||
* |
|||
* ee.emit('ping'); |
|||
* ee.emit('ping'); |
|||
* ```
|
|||
* |
|||
* Returns a reference to the `EventEmitter`, so that calls can be chained. |
|||
* @since v0.1.26 |
|||
*/ |
|||
removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; |
|||
/** |
|||
* Alias for `emitter.removeListener()`. |
|||
* @since v10.0.0 |
|||
*/ |
|||
off(eventName: string | symbol, listener: (...args: any[]) => void): this; |
|||
/** |
|||
* Removes all listeners, or those of the specified `eventName`. |
|||
* |
|||
* It is bad practice to remove listeners added elsewhere in the code, |
|||
* particularly when the `EventEmitter` instance was created by some other |
|||
* component or module (e.g. sockets or file streams). |
|||
* |
|||
* Returns a reference to the `EventEmitter`, so that calls can be chained. |
|||
* @since v0.1.26 |
|||
*/ |
|||
removeAllListeners(event?: string | symbol): this; |
|||
/** |
|||
* By default `EventEmitter`s will print a warning if more than `10` listeners are |
|||
* added for a particular event. This is a useful default that helps finding |
|||
* memory leaks. The `emitter.setMaxListeners()` method allows the limit to be |
|||
* modified for this specific `EventEmitter` instance. The value can be set to`Infinity` (or `0`) to indicate an unlimited number of listeners. |
|||
* |
|||
* Returns a reference to the `EventEmitter`, so that calls can be chained. |
|||
* @since v0.3.5 |
|||
*/ |
|||
setMaxListeners(n: number): this; |
|||
/** |
|||
* Returns the current max listener value for the `EventEmitter` which is either |
|||
* set by `emitter.setMaxListeners(n)` or defaults to {@link defaultMaxListeners}. |
|||
* @since v1.0.0 |
|||
*/ |
|||
getMaxListeners(): number; |
|||
/** |
|||
* Returns a copy of the array of listeners for the event named `eventName`. |
|||
* |
|||
* ```js
|
|||
* server.on('connection', (stream) => { |
|||
* console.log('someone connected!'); |
|||
* }); |
|||
* console.log(util.inspect(server.listeners('connection'))); |
|||
* // Prints: [ [Function] ]
|
|||
* ```
|
|||
* @since v0.1.26 |
|||
*/ |
|||
listeners(eventName: string | symbol): Function[]; |
|||
/** |
|||
* Returns a copy of the array of listeners for the event named `eventName`, |
|||
* including any wrappers (such as those created by `.once()`). |
|||
* |
|||
* ```js
|
|||
* const emitter = new EventEmitter(); |
|||
* emitter.once('log', () => console.log('log once')); |
|||
* |
|||
* // Returns a new Array with a function `onceWrapper` which has a property
|
|||
* // `listener` which contains the original listener bound above
|
|||
* const listeners = emitter.rawListeners('log'); |
|||
* const logFnWrapper = listeners[0]; |
|||
* |
|||
* // Logs "log once" to the console and does not unbind the `once` event
|
|||
* logFnWrapper.listener(); |
|||
* |
|||
* // Logs "log once" to the console and removes the listener
|
|||
* logFnWrapper(); |
|||
* |
|||
* emitter.on('log', () => console.log('log persistently')); |
|||
* // Will return a new Array with a single function bound by `.on()` above
|
|||
* const newListeners = emitter.rawListeners('log'); |
|||
* |
|||
* // Logs "log persistently" twice
|
|||
* newListeners[0](); |
|||
* emitter.emit('log'); |
|||
* ```
|
|||
* @since v9.4.0 |
|||
*/ |
|||
rawListeners(eventName: string | symbol): Function[]; |
|||
/** |
|||
* Synchronously calls each of the listeners registered for the event named`eventName`, in the order they were registered, passing the supplied arguments |
|||
* to each. |
|||
* |
|||
* Returns `true` if the event had listeners, `false` otherwise. |
|||
* |
|||
* ```js
|
|||
* const EventEmitter = require('events'); |
|||
* const myEmitter = new EventEmitter(); |
|||
* |
|||
* // First listener
|
|||
* myEmitter.on('event', function firstListener() { |
|||
* console.log('Helloooo! first listener'); |
|||
* }); |
|||
* // Second listener
|
|||
* myEmitter.on('event', function secondListener(arg1, arg2) { |
|||
* console.log(`event with parameters ${arg1}, ${arg2} in second listener`); |
|||
* }); |
|||
* // Third listener
|
|||
* myEmitter.on('event', function thirdListener(...args) { |
|||
* const parameters = args.join(', '); |
|||
* console.log(`event with parameters ${parameters} in third listener`); |
|||
* }); |
|||
* |
|||
* console.log(myEmitter.listeners('event')); |
|||
* |
|||
* myEmitter.emit('event', 1, 2, 3, 4, 5); |
|||
* |
|||
* // Prints:
|
|||
* // [
|
|||
* // [Function: firstListener],
|
|||
* // [Function: secondListener],
|
|||
* // [Function: thirdListener]
|
|||
* // ]
|
|||
* // Helloooo! first listener
|
|||
* // event with parameters 1, 2 in second listener
|
|||
* // event with parameters 1, 2, 3, 4, 5 in third listener
|
|||
* ```
|
|||
* @since v0.1.26 |
|||
*/ |
|||
emit(eventName: string | symbol, ...args: any[]): boolean; |
|||
/** |
|||
* Returns the number of listeners listening to the event named `eventName`. |
|||
* @since v3.2.0 |
|||
* @param eventName The name of the event being listened for |
|||
*/ |
|||
listenerCount(eventName: string | symbol): number; |
|||
/** |
|||
* Adds the `listener` function to the _beginning_ of the listeners array for the |
|||
* event named `eventName`. No checks are made to see if the `listener` has |
|||
* already been added. Multiple calls passing the same combination of `eventName`and `listener` will result in the `listener` being added, and called, multiple |
|||
* times. |
|||
* |
|||
* ```js
|
|||
* server.prependListener('connection', (stream) => { |
|||
* console.log('someone connected!'); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Returns a reference to the `EventEmitter`, so that calls can be chained. |
|||
* @since v6.0.0 |
|||
* @param eventName The name of the event. |
|||
* @param listener The callback function |
|||
*/ |
|||
prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; |
|||
/** |
|||
* Adds a **one-time**`listener` function for the event named `eventName` to the_beginning_ of the listeners array. The next time `eventName` is triggered, this |
|||
* listener is removed, and then invoked. |
|||
* |
|||
* ```js
|
|||
* server.prependOnceListener('connection', (stream) => { |
|||
* console.log('Ah, we have our first user!'); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Returns a reference to the `EventEmitter`, so that calls can be chained. |
|||
* @since v6.0.0 |
|||
* @param eventName The name of the event. |
|||
* @param listener The callback function |
|||
*/ |
|||
prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; |
|||
/** |
|||
* Returns an array listing the events for which the emitter has registered |
|||
* listeners. The values in the array are strings or `Symbol`s. |
|||
* |
|||
* ```js
|
|||
* const EventEmitter = require('events'); |
|||
* const myEE = new EventEmitter(); |
|||
* myEE.on('foo', () => {}); |
|||
* myEE.on('bar', () => {}); |
|||
* |
|||
* const sym = Symbol('symbol'); |
|||
* myEE.on(sym, () => {}); |
|||
* |
|||
* console.log(myEE.eventNames()); |
|||
* // Prints: [ 'foo', 'bar', Symbol(symbol) ]
|
|||
* ```
|
|||
* @since v6.0.0 |
|||
*/ |
|||
eventNames(): Array<string | symbol>; |
|||
} |
|||
} |
|||
} |
|||
export = EventEmitter; |
|||
} |
|||
declare module 'node:events' { |
|||
import events = require('events'); |
|||
export = events; |
|||
} |
|||
3835
node_modules/@types/node/fs.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1091
node_modules/@types/node/fs/promises.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,284 @@ |
|||
// Declare "static" methods in Error
|
|||
interface ErrorConstructor { |
|||
/** Create .stack property on a target object */ |
|||
captureStackTrace(targetObject: object, constructorOpt?: Function): void; |
|||
|
|||
/** |
|||
* Optional override for formatting stack traces |
|||
* |
|||
* @see https://v8.dev/docs/stack-trace-api#customizing-stack-traces
|
|||
*/ |
|||
prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined; |
|||
|
|||
stackTraceLimit: number; |
|||
} |
|||
|
|||
/*-----------------------------------------------* |
|||
* * |
|||
* GLOBAL * |
|||
* * |
|||
------------------------------------------------*/ |
|||
|
|||
// For backwards compability
|
|||
interface NodeRequire extends NodeJS.Require { } |
|||
interface RequireResolve extends NodeJS.RequireResolve { } |
|||
interface NodeModule extends NodeJS.Module { } |
|||
|
|||
declare var process: NodeJS.Process; |
|||
declare var console: Console; |
|||
|
|||
declare var __filename: string; |
|||
declare var __dirname: string; |
|||
|
|||
declare var require: NodeRequire; |
|||
declare var module: NodeModule; |
|||
|
|||
// Same as module.exports
|
|||
declare var exports: any; |
|||
|
|||
/** |
|||
* Only available if `--expose-gc` is passed to the process. |
|||
*/ |
|||
declare var gc: undefined | (() => void); |
|||
|
|||
//#region borrowed
|
|||
// from https://github.com/microsoft/TypeScript/blob/38da7c600c83e7b31193a62495239a0fe478cb67/lib/lib.webworker.d.ts#L633 until moved to separate lib
|
|||
/** A controller object that allows you to abort one or more DOM requests as and when desired. */ |
|||
interface AbortController { |
|||
/** |
|||
* Returns the AbortSignal object associated with this object. |
|||
*/ |
|||
|
|||
readonly signal: AbortSignal; |
|||
/** |
|||
* Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted. |
|||
*/ |
|||
abort(): void; |
|||
} |
|||
|
|||
/** A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object. */ |
|||
interface AbortSignal { |
|||
/** |
|||
* Returns true if this AbortSignal's AbortController has signaled to abort, and false otherwise. |
|||
*/ |
|||
readonly aborted: boolean; |
|||
} |
|||
|
|||
declare var AbortController: { |
|||
prototype: AbortController; |
|||
new(): AbortController; |
|||
}; |
|||
|
|||
declare var AbortSignal: { |
|||
prototype: AbortSignal; |
|||
new(): AbortSignal; |
|||
// TODO: Add abort() static
|
|||
}; |
|||
//#endregion borrowed
|
|||
|
|||
//#region ArrayLike.at()
|
|||
interface RelativeIndexable<T> { |
|||
/** |
|||
* Takes an integer value and returns the item at that index, |
|||
* allowing for positive and negative integers. |
|||
* Negative integers count back from the last item in the array. |
|||
*/ |
|||
at(index: number): T | undefined; |
|||
} |
|||
interface String extends RelativeIndexable<string> {} |
|||
interface Array<T> extends RelativeIndexable<T> {} |
|||
interface Int8Array extends RelativeIndexable<number> {} |
|||
interface Uint8Array extends RelativeIndexable<number> {} |
|||
interface Uint8ClampedArray extends RelativeIndexable<number> {} |
|||
interface Int16Array extends RelativeIndexable<number> {} |
|||
interface Uint16Array extends RelativeIndexable<number> {} |
|||
interface Int32Array extends RelativeIndexable<number> {} |
|||
interface Uint32Array extends RelativeIndexable<number> {} |
|||
interface Float32Array extends RelativeIndexable<number> {} |
|||
interface Float64Array extends RelativeIndexable<number> {} |
|||
interface BigInt64Array extends RelativeIndexable<bigint> {} |
|||
interface BigUint64Array extends RelativeIndexable<bigint> {} |
|||
//#endregion ArrayLike.at() end
|
|||
|
|||
/*----------------------------------------------* |
|||
* * |
|||
* GLOBAL INTERFACES * |
|||
* * |
|||
*-----------------------------------------------*/ |
|||
declare namespace NodeJS { |
|||
interface CallSite { |
|||
/** |
|||
* Value of "this" |
|||
*/ |
|||
getThis(): unknown; |
|||
|
|||
/** |
|||
* Type of "this" as a string. |
|||
* This is the name of the function stored in the constructor field of |
|||
* "this", if available. Otherwise the object's [[Class]] internal |
|||
* property. |
|||
*/ |
|||
getTypeName(): string | null; |
|||
|
|||
/** |
|||
* Current function |
|||
*/ |
|||
getFunction(): Function | undefined; |
|||
|
|||
/** |
|||
* Name of the current function, typically its name property. |
|||
* If a name property is not available an attempt will be made to try |
|||
* to infer a name from the function's context. |
|||
*/ |
|||
getFunctionName(): string | null; |
|||
|
|||
/** |
|||
* Name of the property [of "this" or one of its prototypes] that holds |
|||
* the current function |
|||
*/ |
|||
getMethodName(): string | null; |
|||
|
|||
/** |
|||
* Name of the script [if this function was defined in a script] |
|||
*/ |
|||
getFileName(): string | null; |
|||
|
|||
/** |
|||
* Current line number [if this function was defined in a script] |
|||
*/ |
|||
getLineNumber(): number | null; |
|||
|
|||
/** |
|||
* Current column number [if this function was defined in a script] |
|||
*/ |
|||
getColumnNumber(): number | null; |
|||
|
|||
/** |
|||
* A call site object representing the location where eval was called |
|||
* [if this function was created using a call to eval] |
|||
*/ |
|||
getEvalOrigin(): string | undefined; |
|||
|
|||
/** |
|||
* Is this a toplevel invocation, that is, is "this" the global object? |
|||
*/ |
|||
isToplevel(): boolean; |
|||
|
|||
/** |
|||
* Does this call take place in code defined by a call to eval? |
|||
*/ |
|||
isEval(): boolean; |
|||
|
|||
/** |
|||
* Is this call in native V8 code? |
|||
*/ |
|||
isNative(): boolean; |
|||
|
|||
/** |
|||
* Is this a constructor call? |
|||
*/ |
|||
isConstructor(): boolean; |
|||
} |
|||
|
|||
interface ErrnoException extends Error { |
|||
errno?: number | undefined; |
|||
code?: string | undefined; |
|||
path?: string | undefined; |
|||
syscall?: string | undefined; |
|||
} |
|||
|
|||
interface ReadableStream extends EventEmitter { |
|||
readable: boolean; |
|||
read(size?: number): string | Buffer; |
|||
setEncoding(encoding: BufferEncoding): this; |
|||
pause(): this; |
|||
resume(): this; |
|||
isPaused(): boolean; |
|||
pipe<T extends WritableStream>(destination: T, options?: { end?: boolean | undefined; }): T; |
|||
unpipe(destination?: WritableStream): this; |
|||
unshift(chunk: string | Uint8Array, encoding?: BufferEncoding): void; |
|||
wrap(oldStream: ReadableStream): this; |
|||
[Symbol.asyncIterator](): AsyncIterableIterator<string | Buffer>; |
|||
} |
|||
|
|||
interface WritableStream extends EventEmitter { |
|||
writable: boolean; |
|||
write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean; |
|||
write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean; |
|||
end(cb?: () => void): this; |
|||
end(data: string | Uint8Array, cb?: () => void): this; |
|||
end(str: string, encoding?: BufferEncoding, cb?: () => void): this; |
|||
} |
|||
|
|||
interface ReadWriteStream extends ReadableStream, WritableStream { } |
|||
|
|||
interface RefCounted { |
|||
ref(): this; |
|||
unref(): this; |
|||
} |
|||
|
|||
type TypedArray = |
|||
| Uint8Array |
|||
| Uint8ClampedArray |
|||
| Uint16Array |
|||
| Uint32Array |
|||
| Int8Array |
|||
| Int16Array |
|||
| Int32Array |
|||
| BigUint64Array |
|||
| BigInt64Array |
|||
| Float32Array |
|||
| Float64Array; |
|||
type ArrayBufferView = TypedArray | DataView; |
|||
|
|||
interface Require { |
|||
(id: string): any; |
|||
resolve: RequireResolve; |
|||
cache: Dict<NodeModule>; |
|||
/** |
|||
* @deprecated |
|||
*/ |
|||
extensions: RequireExtensions; |
|||
main: Module | undefined; |
|||
} |
|||
|
|||
interface RequireResolve { |
|||
(id: string, options?: { paths?: string[] | undefined; }): string; |
|||
paths(request: string): string[] | null; |
|||
} |
|||
|
|||
interface RequireExtensions extends Dict<(m: Module, filename: string) => any> { |
|||
'.js': (m: Module, filename: string) => any; |
|||
'.json': (m: Module, filename: string) => any; |
|||
'.node': (m: Module, filename: string) => any; |
|||
} |
|||
interface Module { |
|||
/** |
|||
* `true` if the module is running during the Node.js preload |
|||
*/ |
|||
isPreloading: boolean; |
|||
exports: any; |
|||
require: Require; |
|||
id: string; |
|||
filename: string; |
|||
loaded: boolean; |
|||
/** @deprecated since 14.6.0 Please use `require.main` and `module.children` instead. */ |
|||
parent: Module | null | undefined; |
|||
children: Module[]; |
|||
/** |
|||
* @since 11.14.0 |
|||
* |
|||
* The directory name of the module. This is usually the same as the path.dirname() of the module.id. |
|||
*/ |
|||
path: string; |
|||
paths: string[]; |
|||
} |
|||
|
|||
interface Dict<T> { |
|||
[key: string]: T | undefined; |
|||
} |
|||
|
|||
interface ReadOnlyDict<T> { |
|||
readonly [key: string]: T | undefined; |
|||
} |
|||
} |
|||
@ -0,0 +1 @@ |
|||
declare var global: typeof globalThis; |
|||
1396
node_modules/@types/node/http.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
2100
node_modules/@types/node/http2.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,391 @@ |
|||
/** |
|||
* HTTPS is the HTTP protocol over TLS/SSL. In Node.js this is implemented as a |
|||
* separate module. |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/https.js)
|
|||
*/ |
|||
declare module 'https' { |
|||
import { Duplex } from 'node:stream'; |
|||
import * as tls from 'node:tls'; |
|||
import * as http from 'node:http'; |
|||
import { URL } from 'node:url'; |
|||
type ServerOptions = tls.SecureContextOptions & tls.TlsOptions & http.ServerOptions; |
|||
type RequestOptions = http.RequestOptions & |
|||
tls.SecureContextOptions & { |
|||
rejectUnauthorized?: boolean | undefined; // Defaults to true
|
|||
servername?: string | undefined; // SNI TLS Extension
|
|||
}; |
|||
interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions { |
|||
rejectUnauthorized?: boolean | undefined; |
|||
maxCachedSessions?: number | undefined; |
|||
} |
|||
/** |
|||
* An `Agent` object for HTTPS similar to `http.Agent`. See {@link request} for more information. |
|||
* @since v0.4.5 |
|||
*/ |
|||
class Agent extends http.Agent { |
|||
constructor(options?: AgentOptions); |
|||
options: AgentOptions; |
|||
} |
|||
interface Server extends http.Server {} |
|||
/** |
|||
* See `http.Server` for more information. |
|||
* @since v0.3.4 |
|||
*/ |
|||
class Server extends tls.Server { |
|||
constructor(requestListener?: http.RequestListener); |
|||
constructor(options: ServerOptions, requestListener?: http.RequestListener); |
|||
addListener(event: string, listener: (...args: any[]) => void): this; |
|||
addListener(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.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: tls.TLSSocket) => void): this; |
|||
addListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; |
|||
addListener(event: 'close', listener: () => void): this; |
|||
addListener(event: 'connection', listener: (socket: Duplex) => void): this; |
|||
addListener(event: 'error', listener: (err: Error) => void): this; |
|||
addListener(event: 'listening', listener: () => void): this; |
|||
addListener(event: 'checkContinue', listener: http.RequestListener): this; |
|||
addListener(event: 'checkExpectation', listener: http.RequestListener): this; |
|||
addListener(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this; |
|||
addListener(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; |
|||
addListener(event: 'request', listener: http.RequestListener): this; |
|||
addListener(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; |
|||
emit(event: string, ...args: any[]): boolean; |
|||
emit(event: 'keylog', line: Buffer, tlsSocket: tls.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: tls.TLSSocket): boolean; |
|||
emit(event: 'tlsClientError', err: Error, tlsSocket: tls.TLSSocket): boolean; |
|||
emit(event: 'close'): boolean; |
|||
emit(event: 'connection', socket: Duplex): boolean; |
|||
emit(event: 'error', err: Error): boolean; |
|||
emit(event: 'listening'): boolean; |
|||
emit(event: 'checkContinue', req: http.IncomingMessage, res: http.ServerResponse): boolean; |
|||
emit(event: 'checkExpectation', req: http.IncomingMessage, res: http.ServerResponse): boolean; |
|||
emit(event: 'clientError', err: Error, socket: Duplex): boolean; |
|||
emit(event: 'connect', req: http.IncomingMessage, socket: Duplex, head: Buffer): boolean; |
|||
emit(event: 'request', req: http.IncomingMessage, res: http.ServerResponse): boolean; |
|||
emit(event: 'upgrade', req: http.IncomingMessage, socket: Duplex, head: Buffer): boolean; |
|||
on(event: string, listener: (...args: any[]) => void): this; |
|||
on(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.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: tls.TLSSocket) => void): this; |
|||
on(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; |
|||
on(event: 'close', listener: () => void): this; |
|||
on(event: 'connection', listener: (socket: Duplex) => void): this; |
|||
on(event: 'error', listener: (err: Error) => void): this; |
|||
on(event: 'listening', listener: () => void): this; |
|||
on(event: 'checkContinue', listener: http.RequestListener): this; |
|||
on(event: 'checkExpectation', listener: http.RequestListener): this; |
|||
on(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this; |
|||
on(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; |
|||
on(event: 'request', listener: http.RequestListener): this; |
|||
on(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; |
|||
once(event: string, listener: (...args: any[]) => void): this; |
|||
once(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.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: tls.TLSSocket) => void): this; |
|||
once(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; |
|||
once(event: 'close', listener: () => void): this; |
|||
once(event: 'connection', listener: (socket: Duplex) => void): this; |
|||
once(event: 'error', listener: (err: Error) => void): this; |
|||
once(event: 'listening', listener: () => void): this; |
|||
once(event: 'checkContinue', listener: http.RequestListener): this; |
|||
once(event: 'checkExpectation', listener: http.RequestListener): this; |
|||
once(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this; |
|||
once(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; |
|||
once(event: 'request', listener: http.RequestListener): this; |
|||
once(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; |
|||
prependListener(event: string, listener: (...args: any[]) => void): this; |
|||
prependListener(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.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: tls.TLSSocket) => void): this; |
|||
prependListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; |
|||
prependListener(event: 'close', listener: () => void): this; |
|||
prependListener(event: 'connection', listener: (socket: Duplex) => void): this; |
|||
prependListener(event: 'error', listener: (err: Error) => void): this; |
|||
prependListener(event: 'listening', listener: () => void): this; |
|||
prependListener(event: 'checkContinue', listener: http.RequestListener): this; |
|||
prependListener(event: 'checkExpectation', listener: http.RequestListener): this; |
|||
prependListener(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this; |
|||
prependListener(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; |
|||
prependListener(event: 'request', listener: http.RequestListener): this; |
|||
prependListener(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; |
|||
prependOnceListener(event: string, listener: (...args: any[]) => void): this; |
|||
prependOnceListener(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.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: tls.TLSSocket) => void): this; |
|||
prependOnceListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; |
|||
prependOnceListener(event: 'close', listener: () => void): this; |
|||
prependOnceListener(event: 'connection', listener: (socket: Duplex) => void): this; |
|||
prependOnceListener(event: 'error', listener: (err: Error) => void): this; |
|||
prependOnceListener(event: 'listening', listener: () => void): this; |
|||
prependOnceListener(event: 'checkContinue', listener: http.RequestListener): this; |
|||
prependOnceListener(event: 'checkExpectation', listener: http.RequestListener): this; |
|||
prependOnceListener(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this; |
|||
prependOnceListener(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; |
|||
prependOnceListener(event: 'request', listener: http.RequestListener): this; |
|||
prependOnceListener(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; |
|||
} |
|||
/** |
|||
* ```js
|
|||
* // curl -k https://localhost:8000/
|
|||
* const https = require('https'); |
|||
* const fs = require('fs'); |
|||
* |
|||
* const options = { |
|||
* key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), |
|||
* cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem') |
|||
* }; |
|||
* |
|||
* https.createServer(options, (req, res) => { |
|||
* res.writeHead(200); |
|||
* res.end('hello world\n'); |
|||
* }).listen(8000); |
|||
* ```
|
|||
* |
|||
* Or |
|||
* |
|||
* ```js
|
|||
* const https = require('https'); |
|||
* const fs = require('fs'); |
|||
* |
|||
* const options = { |
|||
* pfx: fs.readFileSync('test/fixtures/test_cert.pfx'), |
|||
* passphrase: 'sample' |
|||
* }; |
|||
* |
|||
* https.createServer(options, (req, res) => { |
|||
* res.writeHead(200); |
|||
* res.end('hello world\n'); |
|||
* }).listen(8000); |
|||
* ```
|
|||
* @since v0.3.4 |
|||
* @param options Accepts `options` from `createServer`, `createSecureContext` and `createServer`. |
|||
* @param requestListener A listener to be added to the `'request'` event. |
|||
*/ |
|||
function createServer(requestListener?: http.RequestListener): Server; |
|||
function createServer(options: ServerOptions, requestListener?: http.RequestListener): Server; |
|||
/** |
|||
* Makes a request to a secure web server. |
|||
* |
|||
* The following additional `options` from `tls.connect()` are also accepted:`ca`, `cert`, `ciphers`, `clientCertEngine`, `crl`, `dhparam`, `ecdhCurve`,`honorCipherOrder`, `key`, `passphrase`, |
|||
* `pfx`, `rejectUnauthorized`,`secureOptions`, `secureProtocol`, `servername`, `sessionIdContext`,`highWaterMark`. |
|||
* |
|||
* `options` can be an object, a string, or a `URL` object. If `options` is a |
|||
* string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. |
|||
* |
|||
* `https.request()` returns an instance of the `http.ClientRequest` class. The `ClientRequest` instance is a writable stream. If one needs to |
|||
* upload a file with a POST request, then write to the `ClientRequest` object. |
|||
* |
|||
* ```js
|
|||
* const https = require('https'); |
|||
* |
|||
* const options = { |
|||
* hostname: 'encrypted.google.com', |
|||
* port: 443, |
|||
* path: '/', |
|||
* method: 'GET' |
|||
* }; |
|||
* |
|||
* const req = https.request(options, (res) => { |
|||
* console.log('statusCode:', res.statusCode); |
|||
* console.log('headers:', res.headers); |
|||
* |
|||
* res.on('data', (d) => { |
|||
* process.stdout.write(d); |
|||
* }); |
|||
* }); |
|||
* |
|||
* req.on('error', (e) => { |
|||
* console.error(e); |
|||
* }); |
|||
* req.end(); |
|||
* ```
|
|||
* |
|||
* Example using options from `tls.connect()`: |
|||
* |
|||
* ```js
|
|||
* const options = { |
|||
* hostname: 'encrypted.google.com', |
|||
* port: 443, |
|||
* path: '/', |
|||
* method: 'GET', |
|||
* key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), |
|||
* cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem') |
|||
* }; |
|||
* options.agent = new https.Agent(options); |
|||
* |
|||
* const req = https.request(options, (res) => { |
|||
* // ...
|
|||
* }); |
|||
* ```
|
|||
* |
|||
* Alternatively, opt out of connection pooling by not using an `Agent`. |
|||
* |
|||
* ```js
|
|||
* const options = { |
|||
* hostname: 'encrypted.google.com', |
|||
* port: 443, |
|||
* path: '/', |
|||
* method: 'GET', |
|||
* key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), |
|||
* cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), |
|||
* agent: false |
|||
* }; |
|||
* |
|||
* const req = https.request(options, (res) => { |
|||
* // ...
|
|||
* }); |
|||
* ```
|
|||
* |
|||
* Example using a `URL` as `options`: |
|||
* |
|||
* ```js
|
|||
* const options = new URL('https://abc:xyz@example.com'); |
|||
* |
|||
* const req = https.request(options, (res) => { |
|||
* // ...
|
|||
* }); |
|||
* ```
|
|||
* |
|||
* Example pinning on certificate fingerprint, or the public key (similar to`pin-sha256`): |
|||
* |
|||
* ```js
|
|||
* const tls = require('tls'); |
|||
* const https = require('https'); |
|||
* const crypto = require('crypto'); |
|||
* |
|||
* function sha256(s) { |
|||
* return crypto.createHash('sha256').update(s).digest('base64'); |
|||
* } |
|||
* const options = { |
|||
* hostname: 'github.com', |
|||
* port: 443, |
|||
* path: '/', |
|||
* method: 'GET', |
|||
* checkServerIdentity: function(host, cert) { |
|||
* // Make sure the certificate is issued to the host we are connected to
|
|||
* const err = tls.checkServerIdentity(host, cert); |
|||
* if (err) { |
|||
* return err; |
|||
* } |
|||
* |
|||
* // Pin the public key, similar to HPKP pin-sha25 pinning
|
|||
* const pubkey256 = 'pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU='; |
|||
* if (sha256(cert.pubkey) !== pubkey256) { |
|||
* const msg = 'Certificate verification error: ' + |
|||
* `The public key of '${cert.subject.CN}' ` + |
|||
* 'does not match our pinned fingerprint'; |
|||
* return new Error(msg); |
|||
* } |
|||
* |
|||
* // Pin the exact certificate, rather than the pub key
|
|||
* const cert256 = '25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:' + |
|||
* 'D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16'; |
|||
* if (cert.fingerprint256 !== cert256) { |
|||
* const msg = 'Certificate verification error: ' + |
|||
* `The certificate of '${cert.subject.CN}' ` + |
|||
* 'does not match our pinned fingerprint'; |
|||
* return new Error(msg); |
|||
* } |
|||
* |
|||
* // This loop is informational only.
|
|||
* // Print the certificate and public key fingerprints of all certs in the
|
|||
* // chain. Its common to pin the public key of the issuer on the public
|
|||
* // internet, while pinning the public key of the service in sensitive
|
|||
* // environments.
|
|||
* do { |
|||
* console.log('Subject Common Name:', cert.subject.CN); |
|||
* console.log(' Certificate SHA256 fingerprint:', cert.fingerprint256); |
|||
* |
|||
* hash = crypto.createHash('sha256'); |
|||
* console.log(' Public key ping-sha256:', sha256(cert.pubkey)); |
|||
* |
|||
* lastprint256 = cert.fingerprint256; |
|||
* cert = cert.issuerCertificate; |
|||
* } while (cert.fingerprint256 !== lastprint256); |
|||
* |
|||
* }, |
|||
* }; |
|||
* |
|||
* options.agent = new https.Agent(options); |
|||
* const req = https.request(options, (res) => { |
|||
* console.log('All OK. Server matched our pinned cert or public key'); |
|||
* console.log('statusCode:', res.statusCode); |
|||
* // Print the HPKP values
|
|||
* console.log('headers:', res.headers['public-key-pins']); |
|||
* |
|||
* res.on('data', (d) => {}); |
|||
* }); |
|||
* |
|||
* req.on('error', (e) => { |
|||
* console.error(e.message); |
|||
* }); |
|||
* req.end(); |
|||
* ```
|
|||
* |
|||
* Outputs for example: |
|||
* |
|||
* ```text
|
|||
* Subject Common Name: github.com |
|||
* Certificate SHA256 fingerprint: 25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16 |
|||
* Public key ping-sha256: pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU= |
|||
* Subject Common Name: DigiCert SHA2 Extended Validation Server CA |
|||
* Certificate SHA256 fingerprint: 40:3E:06:2A:26:53:05:91:13:28:5B:AF:80:A0:D4:AE:42:2C:84:8C:9F:78:FA:D0:1F:C9:4B:C5:B8:7F:EF:1A |
|||
* Public key ping-sha256: RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho= |
|||
* Subject Common Name: DigiCert High Assurance EV Root CA |
|||
* Certificate SHA256 fingerprint: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF |
|||
* Public key ping-sha256: WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18= |
|||
* All OK. Server matched our pinned cert or public key |
|||
* statusCode: 200 |
|||
* headers: max-age=0; pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho="; |
|||
* pin-sha256="k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws="; pin-sha256="K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q="; pin-sha256="IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4="; |
|||
* pin-sha256="iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0="; pin-sha256="LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A="; includeSubDomains |
|||
* ```
|
|||
* @since v0.3.6 |
|||
* @param options Accepts all `options` from `request`, with some differences in default values: |
|||
*/ |
|||
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; |
|||
/** |
|||
* Like `http.get()` but for HTTPS. |
|||
* |
|||
* `options` can be an object, a string, or a `URL` object. If `options` is a |
|||
* string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. |
|||
* |
|||
* ```js
|
|||
* const https = require('https'); |
|||
* |
|||
* https.get('https://encrypted.google.com/', (res) => { |
|||
* console.log('statusCode:', res.statusCode); |
|||
* console.log('headers:', res.headers); |
|||
* |
|||
* res.on('data', (d) => { |
|||
* process.stdout.write(d); |
|||
* }); |
|||
* |
|||
* }).on('error', (e) => { |
|||
* console.error(e); |
|||
* }); |
|||
* ```
|
|||
* @since v0.3.6 |
|||
* @param options Accepts the same `options` as {@link request}, with the `method` always set to `GET`. |
|||
*/ |
|||
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; |
|||
} |
|||
declare module 'node:https' { |
|||
export * from 'https'; |
|||
} |
|||
@ -0,0 +1,129 @@ |
|||
// Type definitions for non-npm package Node.js 17.0
|
|||
// Project: https://nodejs.org/
|
|||
// Definitions by: Microsoft TypeScript <https://github.com/Microsoft>
|
|||
// DefinitelyTyped <https://github.com/DefinitelyTyped>
|
|||
// Alberto Schiabel <https://github.com/jkomyno>
|
|||
// Alvis HT Tang <https://github.com/alvis>
|
|||
// Andrew Makarov <https://github.com/r3nya>
|
|||
// Benjamin Toueg <https://github.com/btoueg>
|
|||
// Chigozirim C. <https://github.com/smac89>
|
|||
// David Junger <https://github.com/touffy>
|
|||
// Deividas Bakanas <https://github.com/DeividasBakanas>
|
|||
// Eugene Y. Q. Shen <https://github.com/eyqs>
|
|||
// Hannes Magnusson <https://github.com/Hannes-Magnusson-CK>
|
|||
// 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>
|
|||
// 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>
|
|||
// Samuel Ainsworth <https://github.com/samuela>
|
|||
// Kyle Uehlein <https://github.com/kuehlein>
|
|||
// Thanik Bhongbhibhat <https://github.com/bhongy>
|
|||
// Marcin Kopacz <https://github.com/chyzwar>
|
|||
// Trivikram Kamat <https://github.com/trivikr>
|
|||
// Junxiao Shi <https://github.com/yoursunny>
|
|||
// Ilia Baryshnikov <https://github.com/qwelias>
|
|||
// ExE Boss <https://github.com/ExE-Boss>
|
|||
// Piotr Błażejewicz <https://github.com/peterblazejewicz>
|
|||
// Anna Henningsen <https://github.com/addaleax>
|
|||
// Victor Perin <https://github.com/victorperin>
|
|||
// Yongsheng Zhang <https://github.com/ZYSzys>
|
|||
// NodeJS Contributors <https://github.com/NodeJS>
|
|||
// Linus Unnebäck <https://github.com/LinusU>
|
|||
// wafuwafu13 <https://github.com/wafuwafu13>
|
|||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
|||
|
|||
/** |
|||
* License for programmatically and manually incorporated |
|||
* documentation aka. `JSDoc` from https://github.com/nodejs/node/tree/master/doc
|
|||
* |
|||
* Copyright Node.js 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. |
|||
*/ |
|||
|
|||
// NOTE: These definitions support NodeJS and TypeScript 3.7+.
|
|||
|
|||
// Reference required types from the default lib:
|
|||
/// <reference lib="es2020" />
|
|||
/// <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:
|
|||
/// <reference path="assert.d.ts" />
|
|||
/// <reference path="assert/strict.d.ts" />
|
|||
/// <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="diagnostics_channel.d.ts" />
|
|||
/// <reference path="dns.d.ts" />
|
|||
/// <reference path="dns/promises.d.ts" />
|
|||
/// <reference path="dns/promises.d.ts" />
|
|||
/// <reference path="domain.d.ts" />
|
|||
/// <reference path="events.d.ts" />
|
|||
/// <reference path="fs.d.ts" />
|
|||
/// <reference path="fs/promises.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="stream/promises.d.ts" />
|
|||
/// <reference path="stream/consumers.d.ts" />
|
|||
/// <reference path="stream/web.d.ts" />
|
|||
/// <reference path="string_decoder.d.ts" />
|
|||
/// <reference path="timers.d.ts" />
|
|||
/// <reference path="timers/promises.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="wasi.d.ts" />
|
|||
/// <reference path="worker_threads.d.ts" />
|
|||
/// <reference path="zlib.d.ts" />
|
|||
|
|||
/// <reference path="globals.global.d.ts" />
|
|||
2744
node_modules/@types/node/inspector.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,114 @@ |
|||
/** |
|||
* @since v0.3.7 |
|||
*/ |
|||
declare module 'module' { |
|||
import { URL } from 'node:url'; |
|||
namespace Module { |
|||
/** |
|||
* The `module.syncBuiltinESMExports()` method updates all the live bindings for |
|||
* builtin `ES Modules` to match the properties of the `CommonJS` exports. It |
|||
* does not add or remove exported names from the `ES Modules`. |
|||
* |
|||
* ```js
|
|||
* const fs = require('fs'); |
|||
* const assert = require('assert'); |
|||
* const { syncBuiltinESMExports } = require('module'); |
|||
* |
|||
* fs.readFile = newAPI; |
|||
* |
|||
* delete fs.readFileSync; |
|||
* |
|||
* function newAPI() { |
|||
* // ...
|
|||
* } |
|||
* |
|||
* fs.newAPI = newAPI; |
|||
* |
|||
* syncBuiltinESMExports(); |
|||
* |
|||
* import('fs').then((esmFS) => { |
|||
* // It syncs the existing readFile property with the new value
|
|||
* assert.strictEqual(esmFS.readFile, newAPI); |
|||
* // readFileSync has been deleted from the required fs
|
|||
* assert.strictEqual('readFileSync' in fs, false); |
|||
* // syncBuiltinESMExports() does not remove readFileSync from esmFS
|
|||
* assert.strictEqual('readFileSync' in esmFS, true); |
|||
* // syncBuiltinESMExports() does not add names
|
|||
* assert.strictEqual(esmFS.newAPI, undefined); |
|||
* }); |
|||
* ```
|
|||
* @since v12.12.0 |
|||
*/ |
|||
function syncBuiltinESMExports(): void; |
|||
/** |
|||
* `path` is the resolved path for the file for which a corresponding source map |
|||
* should be fetched. |
|||
* @since v13.7.0, v12.17.0 |
|||
*/ |
|||
function findSourceMap(path: string, error?: Error): SourceMap; |
|||
interface SourceMapPayload { |
|||
file: string; |
|||
version: number; |
|||
sources: string[]; |
|||
sourcesContent: string[]; |
|||
names: string[]; |
|||
mappings: string; |
|||
sourceRoot: string; |
|||
} |
|||
interface SourceMapping { |
|||
generatedLine: number; |
|||
generatedColumn: number; |
|||
originalSource: string; |
|||
originalLine: number; |
|||
originalColumn: number; |
|||
} |
|||
/** |
|||
* @since v13.7.0, v12.17.0 |
|||
*/ |
|||
class SourceMap { |
|||
/** |
|||
* Getter for the payload used to construct the `SourceMap` instance. |
|||
*/ |
|||
readonly payload: SourceMapPayload; |
|||
constructor(payload: SourceMapPayload); |
|||
/** |
|||
* Given a line number and column number in the generated source file, returns |
|||
* an object representing the position in the original file. The object returned |
|||
* consists of the following keys: |
|||
*/ |
|||
findEntry(line: number, column: number): SourceMapping; |
|||
} |
|||
} |
|||
interface Module extends NodeModule {} |
|||
class Module { |
|||
static runMain(): void; |
|||
static wrap(code: string): string; |
|||
static createRequire(path: string | URL): NodeRequire; |
|||
static builtinModules: string[]; |
|||
static Module: typeof Module; |
|||
constructor(id: string, parent?: Module); |
|||
} |
|||
global { |
|||
interface ImportMeta { |
|||
url: string; |
|||
/** |
|||
* @experimental |
|||
* This feature is only available with the `--experimental-import-meta-resolve` |
|||
* command flag enabled. |
|||
* |
|||
* Provides a module-relative resolution function scoped to each module, returning |
|||
* the URL string. |
|||
* |
|||
* @param specified The module specifier to resolve relative to `parent`. |
|||
* @param parent The absolute parent module URL to resolve from. If none |
|||
* is specified, the value of `import.meta.url` is used as the default. |
|||
*/ |
|||
resolve?(specified: string, parent?: string | URL): Promise<string>; |
|||
} |
|||
} |
|||
export = Module; |
|||
} |
|||
declare module 'node:module' { |
|||
import module = require('module'); |
|||
export = module; |
|||
} |
|||
@ -0,0 +1,784 @@ |
|||
/** |
|||
* > Stability: 2 - Stable |
|||
* |
|||
* The `net` module provides an asynchronous network API for creating stream-based |
|||
* TCP or `IPC` servers ({@link createServer}) and clients |
|||
* ({@link createConnection}). |
|||
* |
|||
* It can be accessed using: |
|||
* |
|||
* ```js
|
|||
* const net = require('net'); |
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/net.js)
|
|||
*/ |
|||
declare module 'net' { |
|||
import * as stream from 'node:stream'; |
|||
import { Abortable, EventEmitter } from 'node:events'; |
|||
import * as dns from 'node: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 | undefined; |
|||
allowHalfOpen?: boolean | undefined; |
|||
readable?: boolean | undefined; |
|||
writable?: boolean | undefined; |
|||
signal?: AbortSignal; |
|||
} |
|||
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 | undefined; |
|||
} |
|||
interface TcpSocketConnectOpts extends ConnectOpts { |
|||
port: number; |
|||
host?: string | undefined; |
|||
localAddress?: string | undefined; |
|||
localPort?: number | undefined; |
|||
hints?: number | undefined; |
|||
family?: number | undefined; |
|||
lookup?: LookupFunction | undefined; |
|||
} |
|||
interface IpcSocketConnectOpts extends ConnectOpts { |
|||
path: string; |
|||
} |
|||
type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts; |
|||
/** |
|||
* This class is an abstraction of a TCP socket or a streaming `IPC` endpoint |
|||
* (uses named pipes on Windows, and Unix domain sockets otherwise). It is also |
|||
* an `EventEmitter`. |
|||
* |
|||
* A `net.Socket` can be created by the user and used directly to interact with |
|||
* a server. For example, it is returned by {@link createConnection}, |
|||
* so the user can use it to talk to the server. |
|||
* |
|||
* It can also be created by Node.js and passed to the user when a connection |
|||
* is received. For example, it is passed to the listeners of a `'connection'` event emitted on a {@link Server}, so the user can use |
|||
* it to interact with the client. |
|||
* @since v0.3.4 |
|||
*/ |
|||
class Socket extends stream.Duplex { |
|||
constructor(options?: SocketConstructorOpts); |
|||
/** |
|||
* Sends data on the socket. The second parameter specifies the encoding in the |
|||
* case of a string. It defaults to UTF8 encoding. |
|||
* |
|||
* Returns `true` if the entire data was flushed successfully to the kernel |
|||
* buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is again free. |
|||
* |
|||
* The optional `callback` parameter will be executed when the data is finally |
|||
* written out, which may not be immediately. |
|||
* |
|||
* See `Writable` stream `write()` method for more |
|||
* information. |
|||
* @since v0.1.90 |
|||
* @param [encoding='utf8'] Only used when data is `string`. |
|||
*/ |
|||
write(buffer: Uint8Array | string, cb?: (err?: Error) => void): boolean; |
|||
write(str: Uint8Array | string, encoding?: BufferEncoding, cb?: (err?: Error) => void): boolean; |
|||
/** |
|||
* Initiate a connection on a given socket. |
|||
* |
|||
* Possible signatures: |
|||
* |
|||
* * `socket.connect(options[, connectListener])` |
|||
* * `socket.connect(path[, connectListener])` for `IPC` connections. |
|||
* * `socket.connect(port[, host][, connectListener])` for TCP connections. |
|||
* * Returns: `net.Socket` The socket itself. |
|||
* |
|||
* This function is asynchronous. When the connection is established, the `'connect'` event will be emitted. If there is a problem connecting, |
|||
* instead of a `'connect'` event, an `'error'` event will be emitted with |
|||
* the error passed to the `'error'` listener. |
|||
* The last parameter `connectListener`, if supplied, will be added as a listener |
|||
* for the `'connect'` event **once**. |
|||
* |
|||
* This function should only be used for reconnecting a socket after`'close'` has been emitted or otherwise it may lead to undefined |
|||
* behavior. |
|||
*/ |
|||
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; |
|||
/** |
|||
* Set the encoding for the socket as a `Readable Stream`. See `readable.setEncoding()` for more information. |
|||
* @since v0.1.90 |
|||
* @return The socket itself. |
|||
*/ |
|||
setEncoding(encoding?: BufferEncoding): this; |
|||
/** |
|||
* Pauses the reading of data. That is, `'data'` events will not be emitted. |
|||
* Useful to throttle back an upload. |
|||
* @return The socket itself. |
|||
*/ |
|||
pause(): this; |
|||
/** |
|||
* Resumes reading after a call to `socket.pause()`. |
|||
* @return The socket itself. |
|||
*/ |
|||
resume(): this; |
|||
/** |
|||
* Sets the socket to timeout after `timeout` milliseconds of inactivity on |
|||
* the socket. By default `net.Socket` do not have a timeout. |
|||
* |
|||
* When an idle timeout is triggered the socket will receive a `'timeout'` event but the connection will not be severed. The user must manually call `socket.end()` or `socket.destroy()` to |
|||
* end the connection. |
|||
* |
|||
* ```js
|
|||
* socket.setTimeout(3000); |
|||
* socket.on('timeout', () => { |
|||
* console.log('socket timeout'); |
|||
* socket.end(); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* If `timeout` is 0, then the existing idle timeout is disabled. |
|||
* |
|||
* The optional `callback` parameter will be added as a one-time listener for the `'timeout'` event. |
|||
* @since v0.1.90 |
|||
* @return The socket itself. |
|||
*/ |
|||
setTimeout(timeout: number, callback?: () => void): this; |
|||
/** |
|||
* Enable/disable the use of Nagle's algorithm. |
|||
* |
|||
* When a TCP connection is created, it will have Nagle's algorithm enabled. |
|||
* |
|||
* Nagle's algorithm delays data before it is sent via the network. It attempts |
|||
* to optimize throughput at the expense of latency. |
|||
* |
|||
* Passing `true` for `noDelay` or not passing an argument will disable Nagle's |
|||
* algorithm for the socket. Passing `false` for `noDelay` will enable Nagle's |
|||
* algorithm. |
|||
* @since v0.1.90 |
|||
* @param [noDelay=true] |
|||
* @return The socket itself. |
|||
*/ |
|||
setNoDelay(noDelay?: boolean): this; |
|||
/** |
|||
* Enable/disable keep-alive functionality, and optionally set the initial |
|||
* delay before the first keepalive probe is sent on an idle socket. |
|||
* |
|||
* Set `initialDelay` (in milliseconds) to set the delay between the last |
|||
* data packet received and the first keepalive probe. Setting `0` for`initialDelay` will leave the value unchanged from the default |
|||
* (or previous) setting. |
|||
* |
|||
* Enabling the keep-alive functionality will set the following socket options: |
|||
* |
|||
* * `SO_KEEPALIVE=1` |
|||
* * `TCP_KEEPIDLE=initialDelay` |
|||
* * `TCP_KEEPCNT=10` |
|||
* * `TCP_KEEPINTVL=1` |
|||
* @since v0.1.92 |
|||
* @param [enable=false] |
|||
* @param [initialDelay=0] |
|||
* @return The socket itself. |
|||
*/ |
|||
setKeepAlive(enable?: boolean, initialDelay?: number): this; |
|||
/** |
|||
* Returns the bound `address`, the address `family` name and `port` of the |
|||
* socket as reported by the operating system:`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }` |
|||
* @since v0.1.90 |
|||
*/ |
|||
address(): AddressInfo | {}; |
|||
/** |
|||
* Calling `unref()` on a socket will allow the program to exit if this is the only |
|||
* active socket in the event system. If the socket is already `unref`ed calling`unref()` again will have no effect. |
|||
* @since v0.9.1 |
|||
* @return The socket itself. |
|||
*/ |
|||
unref(): this; |
|||
/** |
|||
* Opposite of `unref()`, calling `ref()` on a previously `unref`ed socket will_not_ let the program exit if it's the only socket left (the default behavior). |
|||
* If the socket is `ref`ed calling `ref` again will have no effect. |
|||
* @since v0.9.1 |
|||
* @return The socket itself. |
|||
*/ |
|||
ref(): this; |
|||
/** |
|||
* This property shows the number of characters buffered for writing. The buffer |
|||
* may contain strings whose length after encoding is not yet known. So this number |
|||
* is only an approximation of the number of bytes in the buffer. |
|||
* |
|||
* `net.Socket` has the property that `socket.write()` always works. This is to |
|||
* help users get up and running quickly. The computer cannot always keep up |
|||
* with the amount of data that is written to a socket. The network connection |
|||
* simply might be too slow. Node.js will internally queue up the data written to a |
|||
* socket and send it out over the wire when it is possible. |
|||
* |
|||
* The consequence of this internal buffering is that memory may grow. |
|||
* Users who experience large or growing `bufferSize` should attempt to |
|||
* "throttle" the data flows in their program with `socket.pause()` and `socket.resume()`. |
|||
* @since v0.3.8 |
|||
* @deprecated Since v14.6.0 - Use `writableLength` instead. |
|||
*/ |
|||
readonly bufferSize: number; |
|||
/** |
|||
* The amount of received bytes. |
|||
* @since v0.5.3 |
|||
*/ |
|||
readonly bytesRead: number; |
|||
/** |
|||
* The amount of bytes sent. |
|||
* @since v0.5.3 |
|||
*/ |
|||
readonly bytesWritten: number; |
|||
/** |
|||
* If `true`,`socket.connect(options[, connectListener])` was |
|||
* called and has not yet finished. It will stay `true` until the socket becomes |
|||
* connected, then it is set to `false` and the `'connect'` event is emitted. Note |
|||
* that the `socket.connect(options[, connectListener])` callback is a listener for the `'connect'` event. |
|||
* @since v6.1.0 |
|||
*/ |
|||
readonly connecting: boolean; |
|||
/** |
|||
* See `writable.destroyed` for further details. |
|||
*/ |
|||
readonly destroyed: boolean; |
|||
/** |
|||
* The string representation of the local IP address the remote client is |
|||
* connecting on. For example, in a server listening on `'0.0.0.0'`, if a client |
|||
* connects on `'192.168.1.1'`, the value of `socket.localAddress` would be`'192.168.1.1'`. |
|||
* @since v0.9.6 |
|||
*/ |
|||
readonly localAddress?: string; |
|||
/** |
|||
* The numeric representation of the local port. For example, `80` or `21`. |
|||
* @since v0.9.6 |
|||
*/ |
|||
readonly localPort?: number; |
|||
/** |
|||
* The string representation of the remote IP address. For example,`'74.125.127.100'` or `'2001:4860:a005::68'`. Value may be `undefined` if |
|||
* the socket is destroyed (for example, if the client disconnected). |
|||
* @since v0.5.10 |
|||
*/ |
|||
readonly remoteAddress?: string | undefined; |
|||
/** |
|||
* The string representation of the remote IP family. `'IPv4'` or `'IPv6'`. |
|||
* @since v0.11.14 |
|||
*/ |
|||
readonly remoteFamily?: string | undefined; |
|||
/** |
|||
* The numeric representation of the remote port. For example, `80` or `21`. |
|||
* @since v0.5.10 |
|||
*/ |
|||
readonly remotePort?: number | undefined; |
|||
/** |
|||
* Half-closes the socket. i.e., it sends a FIN packet. It is possible the |
|||
* server will still send some data. |
|||
* |
|||
* See `writable.end()` for further details. |
|||
* @since v0.1.90 |
|||
* @param [encoding='utf8'] Only used when data is `string`. |
|||
* @param callback Optional callback for when the socket is finished. |
|||
* @return The socket itself. |
|||
*/ |
|||
end(callback?: () => void): this; |
|||
end(buffer: Uint8Array | string, callback?: () => void): this; |
|||
end(str: Uint8Array | string, encoding?: BufferEncoding, callback?: () => void): this; |
|||
/** |
|||
* 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: (hadError: 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: 'ready', listener: () => void): this; |
|||
addListener(event: 'timeout', listener: () => void): this; |
|||
emit(event: string | symbol, ...args: any[]): boolean; |
|||
emit(event: 'close', hadError: 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: 'ready'): boolean; |
|||
emit(event: 'timeout'): boolean; |
|||
on(event: string, listener: (...args: any[]) => void): this; |
|||
on(event: 'close', listener: (hadError: 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: 'ready', listener: () => void): this; |
|||
on(event: 'timeout', listener: () => void): this; |
|||
once(event: string, listener: (...args: any[]) => void): this; |
|||
once(event: 'close', listener: (hadError: 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: 'ready', listener: () => void): this; |
|||
once(event: 'timeout', listener: () => void): this; |
|||
prependListener(event: string, listener: (...args: any[]) => void): this; |
|||
prependListener(event: 'close', listener: (hadError: 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: 'ready', listener: () => void): this; |
|||
prependListener(event: 'timeout', listener: () => void): this; |
|||
prependOnceListener(event: string, listener: (...args: any[]) => void): this; |
|||
prependOnceListener(event: 'close', listener: (hadError: 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: 'ready', listener: () => void): this; |
|||
prependOnceListener(event: 'timeout', listener: () => void): this; |
|||
} |
|||
interface ListenOptions extends Abortable { |
|||
port?: number | undefined; |
|||
host?: string | undefined; |
|||
backlog?: number | undefined; |
|||
path?: string | undefined; |
|||
exclusive?: boolean | undefined; |
|||
readableAll?: boolean | undefined; |
|||
writableAll?: boolean | undefined; |
|||
/** |
|||
* @default false |
|||
*/ |
|||
ipv6Only?: boolean | undefined; |
|||
} |
|||
interface ServerOpts { |
|||
/** |
|||
* Indicates whether half-opened TCP connections are allowed. |
|||
* @default false |
|||
*/ |
|||
allowHalfOpen?: boolean | undefined; |
|||
/** |
|||
* Indicates whether the socket should be paused on incoming connections. |
|||
* @default false |
|||
*/ |
|||
pauseOnConnect?: boolean | undefined; |
|||
} |
|||
/** |
|||
* This class is used to create a TCP or `IPC` server. |
|||
* @since v0.1.90 |
|||
*/ |
|||
class Server extends EventEmitter { |
|||
constructor(connectionListener?: (socket: Socket) => void); |
|||
constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void); |
|||
/** |
|||
* Start a server listening for connections. A `net.Server` can be a TCP or |
|||
* an `IPC` server depending on what it listens to. |
|||
* |
|||
* Possible signatures: |
|||
* |
|||
* * `server.listen(handle[, backlog][, callback])` |
|||
* * `server.listen(options[, callback])` |
|||
* * `server.listen(path[, backlog][, callback])` for `IPC` servers |
|||
* * `server.listen([port[, host[, backlog]]][, callback])` for TCP servers |
|||
* |
|||
* This function is asynchronous. When the server starts listening, the `'listening'` event will be emitted. The last parameter `callback`will be added as a listener for the `'listening'` |
|||
* event. |
|||
* |
|||
* All `listen()` methods can take a `backlog` parameter to specify the maximum |
|||
* length of the queue of pending connections. The actual length will be determined |
|||
* by the OS through sysctl settings such as `tcp_max_syn_backlog` and `somaxconn`on Linux. The default value of this parameter is 511 (not 512). |
|||
* |
|||
* All {@link Socket} are set to `SO_REUSEADDR` (see [`socket(7)`](https://man7.org/linux/man-pages/man7/socket.7.html) for
|
|||
* details). |
|||
* |
|||
* The `server.listen()` method can be called again if and only if there was an |
|||
* error during the first `server.listen()` call or `server.close()` has been |
|||
* called. Otherwise, an `ERR_SERVER_ALREADY_LISTEN` error will be thrown. |
|||
* |
|||
* One of the most common errors raised when listening is `EADDRINUSE`. |
|||
* This happens when another server is already listening on the requested`port`/`path`/`handle`. One way to handle this would be to retry |
|||
* after a certain amount of time: |
|||
* |
|||
* ```js
|
|||
* server.on('error', (e) => { |
|||
* if (e.code === 'EADDRINUSE') { |
|||
* console.log('Address in use, retrying...'); |
|||
* setTimeout(() => { |
|||
* server.close(); |
|||
* server.listen(PORT, HOST); |
|||
* }, 1000); |
|||
* } |
|||
* }); |
|||
* ```
|
|||
*/ |
|||
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; |
|||
/** |
|||
* Stops the server from accepting new connections and keeps existing |
|||
* connections. This function is asynchronous, the server is finally closed |
|||
* when all connections are ended and the server emits a `'close'` event. |
|||
* The optional `callback` will be called once the `'close'` event occurs. Unlike |
|||
* that event, it will be called with an `Error` as its only argument if the server |
|||
* was not open when it was closed. |
|||
* @since v0.1.90 |
|||
* @param callback Called when the server is closed. |
|||
*/ |
|||
close(callback?: (err?: Error) => void): this; |
|||
/** |
|||
* Returns the bound `address`, the address `family` name, and `port` of the server |
|||
* as reported by the operating system if listening on an IP socket |
|||
* (useful to find which port was assigned when getting an OS-assigned address):`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }`. |
|||
* |
|||
* For a server listening on a pipe or Unix domain socket, the name is returned |
|||
* as a string. |
|||
* |
|||
* ```js
|
|||
* const server = net.createServer((socket) => { |
|||
* socket.end('goodbye\n'); |
|||
* }).on('error', (err) => { |
|||
* // Handle errors here.
|
|||
* throw err; |
|||
* }); |
|||
* |
|||
* // Grab an arbitrary unused port.
|
|||
* server.listen(() => { |
|||
* console.log('opened server on', server.address()); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* `server.address()` returns `null` before the `'listening'` event has been |
|||
* emitted or after calling `server.close()`. |
|||
* @since v0.1.90 |
|||
*/ |
|||
address(): AddressInfo | string | null; |
|||
/** |
|||
* Asynchronously get the number of concurrent connections on the server. Works |
|||
* when sockets were sent to forks. |
|||
* |
|||
* Callback should take two arguments `err` and `count`. |
|||
* @since v0.9.7 |
|||
*/ |
|||
getConnections(cb: (error: Error | null, count: number) => void): void; |
|||
/** |
|||
* Opposite of `unref()`, calling `ref()` on a previously `unref`ed server will_not_ let the program exit if it's the only server left (the default behavior). |
|||
* If the server is `ref`ed calling `ref()` again will have no effect. |
|||
* @since v0.9.1 |
|||
*/ |
|||
ref(): this; |
|||
/** |
|||
* Calling `unref()` on a server will allow the program to exit if this is the only |
|||
* active server in the event system. If the server is already `unref`ed calling`unref()` again will have no effect. |
|||
* @since v0.9.1 |
|||
*/ |
|||
unref(): this; |
|||
/** |
|||
* Set this property to reject connections when the server's connection count gets |
|||
* high. |
|||
* |
|||
* It is not recommended to use this option once a socket has been sent to a child |
|||
* with `child_process.fork()`. |
|||
* @since v0.2.0 |
|||
*/ |
|||
maxConnections: number; |
|||
connections: number; |
|||
/** |
|||
* Indicates whether or not the server is listening for connections. |
|||
* @since v5.7.0 |
|||
*/ |
|||
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; |
|||
} |
|||
type IPVersion = 'ipv4' | 'ipv6'; |
|||
/** |
|||
* The `BlockList` object can be used with some network APIs to specify rules for |
|||
* disabling inbound or outbound access to specific IP addresses, IP ranges, or |
|||
* IP subnets. |
|||
* @since v15.0.0, v14.18.0 |
|||
*/ |
|||
class BlockList { |
|||
/** |
|||
* Adds a rule to block the given IP address. |
|||
* @since v15.0.0, v14.18.0 |
|||
* @param address An IPv4 or IPv6 address. |
|||
* @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. |
|||
*/ |
|||
addAddress(address: string, type?: IPVersion): void; |
|||
addAddress(address: SocketAddress): void; |
|||
/** |
|||
* Adds a rule to block a range of IP addresses from `start` (inclusive) to`end` (inclusive). |
|||
* @since v15.0.0, v14.18.0 |
|||
* @param start The starting IPv4 or IPv6 address in the range. |
|||
* @param end The ending IPv4 or IPv6 address in the range. |
|||
* @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. |
|||
*/ |
|||
addRange(start: string, end: string, type?: IPVersion): void; |
|||
addRange(start: SocketAddress, end: SocketAddress): void; |
|||
/** |
|||
* Adds a rule to block a range of IP addresses specified as a subnet mask. |
|||
* @since v15.0.0, v14.18.0 |
|||
* @param net The network IPv4 or IPv6 address. |
|||
* @param prefix The number of CIDR prefix bits. For IPv4, this must be a value between `0` and `32`. For IPv6, this must be between `0` and `128`. |
|||
* @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. |
|||
*/ |
|||
addSubnet(net: SocketAddress, prefix: number): void; |
|||
addSubnet(net: string, prefix: number, type?: IPVersion): void; |
|||
/** |
|||
* Returns `true` if the given IP address matches any of the rules added to the`BlockList`. |
|||
* |
|||
* ```js
|
|||
* const blockList = new net.BlockList(); |
|||
* blockList.addAddress('123.123.123.123'); |
|||
* blockList.addRange('10.0.0.1', '10.0.0.10'); |
|||
* blockList.addSubnet('8592:757c:efae:4e45::', 64, 'ipv6'); |
|||
* |
|||
* console.log(blockList.check('123.123.123.123')); // Prints: true
|
|||
* console.log(blockList.check('10.0.0.3')); // Prints: true
|
|||
* console.log(blockList.check('222.111.111.222')); // Prints: false
|
|||
* |
|||
* // IPv6 notation for IPv4 addresses works:
|
|||
* console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')); // Prints: true
|
|||
* console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')); // Prints: true
|
|||
* ```
|
|||
* @since v15.0.0, v14.18.0 |
|||
* @param address The IP address to check |
|||
* @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. |
|||
*/ |
|||
check(address: SocketAddress): boolean; |
|||
check(address: string, type?: IPVersion): boolean; |
|||
} |
|||
interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts { |
|||
timeout?: number | undefined; |
|||
} |
|||
interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts { |
|||
timeout?: number | undefined; |
|||
} |
|||
type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts; |
|||
/** |
|||
* Creates a new TCP or `IPC` server. |
|||
* |
|||
* If `allowHalfOpen` is set to `true`, when the other end of the socket |
|||
* signals the end of transmission, the server will only send back the end of |
|||
* transmission when `socket.end()` is explicitly called. For example, in the |
|||
* context of TCP, when a FIN packed is received, a FIN packed is sent |
|||
* back only when `socket.end()` is explicitly called. Until then the |
|||
* connection is half-closed (non-readable but still writable). See `'end'` event and [RFC 1122](https://tools.ietf.org/html/rfc1122) (section 4.2.2.13) for more information.
|
|||
* |
|||
* If `pauseOnConnect` is set to `true`, then the socket associated with each |
|||
* incoming connection will be paused, and no data will be read from its handle. |
|||
* This allows connections to be passed between processes without any data being |
|||
* read by the original process. To begin reading data from a paused socket, call `socket.resume()`. |
|||
* |
|||
* The server can be a TCP server or an `IPC` server, depending on what it `listen()` to. |
|||
* |
|||
* Here is an example of an TCP echo server which listens for connections |
|||
* on port 8124: |
|||
* |
|||
* ```js
|
|||
* const net = require('net'); |
|||
* const server = net.createServer((c) => { |
|||
* // 'connection' listener.
|
|||
* console.log('client connected'); |
|||
* c.on('end', () => { |
|||
* console.log('client disconnected'); |
|||
* }); |
|||
* c.write('hello\r\n'); |
|||
* c.pipe(c); |
|||
* }); |
|||
* server.on('error', (err) => { |
|||
* throw err; |
|||
* }); |
|||
* server.listen(8124, () => { |
|||
* console.log('server bound'); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Test this by using `telnet`: |
|||
* |
|||
* ```console
|
|||
* $ telnet localhost 8124 |
|||
* ```
|
|||
* |
|||
* To listen on the socket `/tmp/echo.sock`: |
|||
* |
|||
* ```js
|
|||
* server.listen('/tmp/echo.sock', () => { |
|||
* console.log('server bound'); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Use `nc` to connect to a Unix domain socket server: |
|||
* |
|||
* ```console
|
|||
* $ nc -U /tmp/echo.sock |
|||
* ```
|
|||
* @since v0.5.0 |
|||
* @param connectionListener Automatically set as a listener for the {@link 'connection'} event. |
|||
*/ |
|||
function createServer(connectionListener?: (socket: Socket) => void): Server; |
|||
function createServer(options?: ServerOpts, connectionListener?: (socket: Socket) => void): Server; |
|||
/** |
|||
* Aliases to {@link createConnection}. |
|||
* |
|||
* Possible signatures: |
|||
* |
|||
* * {@link connect} |
|||
* * {@link connect} for `IPC` connections. |
|||
* * {@link connect} for TCP connections. |
|||
*/ |
|||
function connect(options: NetConnectOpts, connectionListener?: () => void): Socket; |
|||
function connect(port: number, host?: string, connectionListener?: () => void): Socket; |
|||
function connect(path: string, connectionListener?: () => void): Socket; |
|||
/** |
|||
* A factory function, which creates a new {@link Socket}, |
|||
* immediately initiates connection with `socket.connect()`, |
|||
* then returns the `net.Socket` that starts the connection. |
|||
* |
|||
* When the connection is established, a `'connect'` event will be emitted |
|||
* on the returned socket. The last parameter `connectListener`, if supplied, |
|||
* will be added as a listener for the `'connect'` event **once**. |
|||
* |
|||
* Possible signatures: |
|||
* |
|||
* * {@link createConnection} |
|||
* * {@link createConnection} for `IPC` connections. |
|||
* * {@link createConnection} for TCP connections. |
|||
* |
|||
* The {@link connect} function is an alias to this function. |
|||
*/ |
|||
function createConnection(options: NetConnectOpts, connectionListener?: () => void): Socket; |
|||
function createConnection(port: number, host?: string, connectionListener?: () => void): Socket; |
|||
function createConnection(path: string, connectionListener?: () => void): Socket; |
|||
/** |
|||
* Tests if input is an IP address. Returns `0` for invalid strings, |
|||
* returns `4` for IP version 4 addresses, and returns `6` for IP version 6 |
|||
* addresses. |
|||
* @since v0.3.0 |
|||
*/ |
|||
function isIP(input: string): number; |
|||
/** |
|||
* Returns `true` if input is a version 4 IP address, otherwise returns `false`. |
|||
* @since v0.3.0 |
|||
*/ |
|||
function isIPv4(input: string): boolean; |
|||
/** |
|||
* Returns `true` if input is a version 6 IP address, otherwise returns `false`. |
|||
* @since v0.3.0 |
|||
*/ |
|||
function isIPv6(input: string): boolean; |
|||
interface SocketAddressInitOptions { |
|||
/** |
|||
* The network address as either an IPv4 or IPv6 string. |
|||
* @default 127.0.0.1 |
|||
*/ |
|||
address?: string | undefined; |
|||
/** |
|||
* @default `'ipv4'` |
|||
*/ |
|||
family?: IPVersion | undefined; |
|||
/** |
|||
* An IPv6 flow-label used only if `family` is `'ipv6'`. |
|||
* @default 0 |
|||
*/ |
|||
flowlabel?: number | undefined; |
|||
/** |
|||
* An IP port. |
|||
* @default 0 |
|||
*/ |
|||
port?: number | undefined; |
|||
} |
|||
/** |
|||
* @since v15.14.0, v14.18.0 |
|||
*/ |
|||
class SocketAddress { |
|||
constructor(options: SocketAddressInitOptions); |
|||
/** |
|||
* Either \`'ipv4'\` or \`'ipv6'\`.
|
|||
* @since v15.14.0, v14.18.0 |
|||
*/ |
|||
readonly address: string; |
|||
/** |
|||
* Either \`'ipv4'\` or \`'ipv6'\`.
|
|||
* @since v15.14.0, v14.18.0 |
|||
*/ |
|||
readonly family: IPVersion; |
|||
/** |
|||
* @since v15.14.0, v14.18.0 |
|||
*/ |
|||
readonly port: number; |
|||
/** |
|||
* @since v15.14.0, v14.18.0 |
|||
*/ |
|||
readonly flowlabel: number; |
|||
} |
|||
} |
|||
declare module 'node:net' { |
|||
export * from 'net'; |
|||
} |
|||
@ -0,0 +1,455 @@ |
|||
/** |
|||
* The `os` module provides operating system-related utility methods and |
|||
* properties. It can be accessed using: |
|||
* |
|||
* ```js
|
|||
* const os = require('os'); |
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/os.js)
|
|||
*/ |
|||
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; |
|||
/** |
|||
* Returns the host name of the operating system as a string. |
|||
* @since v0.3.3 |
|||
*/ |
|||
function hostname(): string; |
|||
/** |
|||
* Returns an array containing the 1, 5, and 15 minute load averages. |
|||
* |
|||
* The load average is a measure of system activity calculated by the operating |
|||
* system and expressed as a fractional number. |
|||
* |
|||
* The load average is a Unix-specific concept. On Windows, the return value is |
|||
* always `[0, 0, 0]`. |
|||
* @since v0.3.3 |
|||
*/ |
|||
function loadavg(): number[]; |
|||
/** |
|||
* Returns the system uptime in number of seconds. |
|||
* @since v0.3.3 |
|||
*/ |
|||
function uptime(): number; |
|||
/** |
|||
* Returns the amount of free system memory in bytes as an integer. |
|||
* @since v0.3.3 |
|||
*/ |
|||
function freemem(): number; |
|||
/** |
|||
* Returns the total amount of system memory in bytes as an integer. |
|||
* @since v0.3.3 |
|||
*/ |
|||
function totalmem(): number; |
|||
/** |
|||
* Returns an array of objects containing information about each logical CPU core. |
|||
* |
|||
* The properties included on each object include: |
|||
* |
|||
* ```js
|
|||
* [ |
|||
* { |
|||
* model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', |
|||
* speed: 2926, |
|||
* times: { |
|||
* user: 252020, |
|||
* nice: 0, |
|||
* sys: 30340, |
|||
* idle: 1070356870, |
|||
* irq: 0 |
|||
* } |
|||
* }, |
|||
* { |
|||
* model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', |
|||
* speed: 2926, |
|||
* times: { |
|||
* user: 306960, |
|||
* nice: 0, |
|||
* sys: 26980, |
|||
* idle: 1071569080, |
|||
* irq: 0 |
|||
* } |
|||
* }, |
|||
* { |
|||
* model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', |
|||
* speed: 2926, |
|||
* times: { |
|||
* user: 248450, |
|||
* nice: 0, |
|||
* sys: 21750, |
|||
* idle: 1070919370, |
|||
* irq: 0 |
|||
* } |
|||
* }, |
|||
* { |
|||
* model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', |
|||
* speed: 2926, |
|||
* times: { |
|||
* user: 256880, |
|||
* nice: 0, |
|||
* sys: 19430, |
|||
* idle: 1070905480, |
|||
* irq: 20 |
|||
* } |
|||
* }, |
|||
* ] |
|||
* ```
|
|||
* |
|||
* `nice` values are POSIX-only. On Windows, the `nice` values of all processors |
|||
* are always 0. |
|||
* @since v0.3.3 |
|||
*/ |
|||
function cpus(): CpuInfo[]; |
|||
/** |
|||
* Returns the operating system name as returned by [`uname(3)`](https://linux.die.net/man/3/uname). For example, it
|
|||
* returns `'Linux'` on Linux, `'Darwin'` on macOS, and `'Windows_NT'` on Windows. |
|||
* |
|||
* See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for additional information
|
|||
* about the output of running [`uname(3)`](https://linux.die.net/man/3/uname) on various operating systems.
|
|||
* @since v0.3.3 |
|||
*/ |
|||
function type(): string; |
|||
/** |
|||
* Returns the operating system as a string. |
|||
* |
|||
* On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `GetVersionExW()` is used. See
|
|||
* [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information.
|
|||
* @since v0.3.3 |
|||
*/ |
|||
function release(): string; |
|||
/** |
|||
* Returns an object containing network interfaces that have been assigned a |
|||
* network address. |
|||
* |
|||
* Each key on the returned object identifies a network interface. The associated |
|||
* value is an array of objects that each describe an assigned network address. |
|||
* |
|||
* The properties available on the assigned network address object include: |
|||
* |
|||
* ```js
|
|||
* { |
|||
* lo: [ |
|||
* { |
|||
* address: '127.0.0.1', |
|||
* netmask: '255.0.0.0', |
|||
* family: 'IPv4', |
|||
* mac: '00:00:00:00:00:00', |
|||
* internal: true, |
|||
* cidr: '127.0.0.1/8' |
|||
* }, |
|||
* { |
|||
* address: '::1', |
|||
* netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', |
|||
* family: 'IPv6', |
|||
* mac: '00:00:00:00:00:00', |
|||
* scopeid: 0, |
|||
* internal: true, |
|||
* cidr: '::1/128' |
|||
* } |
|||
* ], |
|||
* eth0: [ |
|||
* { |
|||
* address: '192.168.1.108', |
|||
* netmask: '255.255.255.0', |
|||
* family: 'IPv4', |
|||
* mac: '01:02:03:0a:0b:0c', |
|||
* internal: false, |
|||
* cidr: '192.168.1.108/24' |
|||
* }, |
|||
* { |
|||
* address: 'fe80::a00:27ff:fe4e:66a1', |
|||
* netmask: 'ffff:ffff:ffff:ffff::', |
|||
* family: 'IPv6', |
|||
* mac: '01:02:03:0a:0b:0c', |
|||
* scopeid: 1, |
|||
* internal: false, |
|||
* cidr: 'fe80::a00:27ff:fe4e:66a1/64' |
|||
* } |
|||
* ] |
|||
* } |
|||
* ```
|
|||
* @since v0.6.0 |
|||
*/ |
|||
function networkInterfaces(): NodeJS.Dict<NetworkInterfaceInfo[]>; |
|||
/** |
|||
* Returns the string path of the current user's home directory. |
|||
* |
|||
* On POSIX, it uses the `$HOME` environment variable if defined. Otherwise it |
|||
* uses the [effective UID](https://en.wikipedia.org/wiki/User_identifier#Effective_user_ID) to look up the user's home directory.
|
|||
* |
|||
* On Windows, it uses the `USERPROFILE` environment variable if defined. |
|||
* Otherwise it uses the path to the profile directory of the current user. |
|||
* @since v2.3.0 |
|||
*/ |
|||
function homedir(): string; |
|||
/** |
|||
* Returns information about the currently effective user. On POSIX platforms, |
|||
* this is typically a subset of the password file. The returned object includes |
|||
* the `username`, `uid`, `gid`, `shell`, and `homedir`. On Windows, the `uid` and`gid` fields are `-1`, and `shell` is `null`. |
|||
* |
|||
* The value of `homedir` returned by `os.userInfo()` is provided by the operating |
|||
* system. This differs from the result of `os.homedir()`, which queries |
|||
* environment variables for the home directory before falling back to the |
|||
* operating system response. |
|||
* |
|||
* Throws a `SystemError` if a user has no `username` or `homedir`. |
|||
* @since v6.0.0 |
|||
*/ |
|||
function userInfo(options: { encoding: 'buffer' }): UserInfo<Buffer>; |
|||
function userInfo(options?: { encoding: BufferEncoding }): UserInfo<string>; |
|||
type SignalConstants = { |
|||
[key in NodeJS.Signals]: number; |
|||
}; |
|||
namespace constants { |
|||
const UV_UDP_REUSEADDR: number; |
|||
namespace signals {} |
|||
const signals: SignalConstants; |
|||
namespace errno { |
|||
const E2BIG: number; |
|||
const EACCES: number; |
|||
const EADDRINUSE: number; |
|||
const EADDRNOTAVAIL: number; |
|||
const EAFNOSUPPORT: number; |
|||
const EAGAIN: number; |
|||
const EALREADY: number; |
|||
const EBADF: number; |
|||
const EBADMSG: number; |
|||
const EBUSY: number; |
|||
const ECANCELED: number; |
|||
const ECHILD: number; |
|||
const ECONNABORTED: number; |
|||
const ECONNREFUSED: number; |
|||
const ECONNRESET: number; |
|||
const EDEADLK: number; |
|||
const EDESTADDRREQ: number; |
|||
const EDOM: number; |
|||
const EDQUOT: number; |
|||
const EEXIST: number; |
|||
const EFAULT: number; |
|||
const EFBIG: number; |
|||
const EHOSTUNREACH: number; |
|||
const EIDRM: number; |
|||
const EILSEQ: number; |
|||
const EINPROGRESS: number; |
|||
const EINTR: number; |
|||
const EINVAL: number; |
|||
const EIO: number; |
|||
const EISCONN: number; |
|||
const EISDIR: number; |
|||
const ELOOP: number; |
|||
const EMFILE: number; |
|||
const EMLINK: number; |
|||
const EMSGSIZE: number; |
|||
const EMULTIHOP: number; |
|||
const ENAMETOOLONG: number; |
|||
const ENETDOWN: number; |
|||
const ENETRESET: number; |
|||
const ENETUNREACH: number; |
|||
const ENFILE: number; |
|||
const ENOBUFS: number; |
|||
const ENODATA: number; |
|||
const ENODEV: number; |
|||
const ENOENT: number; |
|||
const ENOEXEC: number; |
|||
const ENOLCK: number; |
|||
const ENOLINK: number; |
|||
const ENOMEM: number; |
|||
const ENOMSG: number; |
|||
const ENOPROTOOPT: number; |
|||
const ENOSPC: number; |
|||
const ENOSR: number; |
|||
const ENOSTR: number; |
|||
const ENOSYS: number; |
|||
const ENOTCONN: number; |
|||
const ENOTDIR: number; |
|||
const ENOTEMPTY: number; |
|||
const ENOTSOCK: number; |
|||
const ENOTSUP: number; |
|||
const ENOTTY: number; |
|||
const ENXIO: number; |
|||
const EOPNOTSUPP: number; |
|||
const EOVERFLOW: number; |
|||
const EPERM: number; |
|||
const EPIPE: number; |
|||
const EPROTO: number; |
|||
const EPROTONOSUPPORT: number; |
|||
const EPROTOTYPE: number; |
|||
const ERANGE: number; |
|||
const EROFS: number; |
|||
const ESPIPE: number; |
|||
const ESRCH: number; |
|||
const ESTALE: number; |
|||
const ETIME: number; |
|||
const ETIMEDOUT: number; |
|||
const ETXTBSY: number; |
|||
const EWOULDBLOCK: number; |
|||
const EXDEV: number; |
|||
const WSAEINTR: number; |
|||
const WSAEBADF: number; |
|||
const WSAEACCES: number; |
|||
const WSAEFAULT: number; |
|||
const WSAEINVAL: number; |
|||
const WSAEMFILE: number; |
|||
const WSAEWOULDBLOCK: number; |
|||
const WSAEINPROGRESS: number; |
|||
const WSAEALREADY: number; |
|||
const WSAENOTSOCK: number; |
|||
const WSAEDESTADDRREQ: number; |
|||
const WSAEMSGSIZE: number; |
|||
const WSAEPROTOTYPE: number; |
|||
const WSAENOPROTOOPT: number; |
|||
const WSAEPROTONOSUPPORT: number; |
|||
const WSAESOCKTNOSUPPORT: number; |
|||
const WSAEOPNOTSUPP: number; |
|||
const WSAEPFNOSUPPORT: number; |
|||
const WSAEAFNOSUPPORT: number; |
|||
const WSAEADDRINUSE: number; |
|||
const WSAEADDRNOTAVAIL: number; |
|||
const WSAENETDOWN: number; |
|||
const WSAENETUNREACH: number; |
|||
const WSAENETRESET: number; |
|||
const WSAECONNABORTED: number; |
|||
const WSAECONNRESET: number; |
|||
const WSAENOBUFS: number; |
|||
const WSAEISCONN: number; |
|||
const WSAENOTCONN: number; |
|||
const WSAESHUTDOWN: number; |
|||
const WSAETOOMANYREFS: number; |
|||
const WSAETIMEDOUT: number; |
|||
const WSAECONNREFUSED: number; |
|||
const WSAELOOP: number; |
|||
const WSAENAMETOOLONG: number; |
|||
const WSAEHOSTDOWN: number; |
|||
const WSAEHOSTUNREACH: number; |
|||
const WSAENOTEMPTY: number; |
|||
const WSAEPROCLIM: number; |
|||
const WSAEUSERS: number; |
|||
const WSAEDQUOT: number; |
|||
const WSAESTALE: number; |
|||
const WSAEREMOTE: number; |
|||
const WSASYSNOTREADY: number; |
|||
const WSAVERNOTSUPPORTED: number; |
|||
const WSANOTINITIALISED: number; |
|||
const WSAEDISCON: number; |
|||
const WSAENOMORE: number; |
|||
const WSAECANCELLED: number; |
|||
const WSAEINVALIDPROCTABLE: number; |
|||
const WSAEINVALIDPROVIDER: number; |
|||
const WSAEPROVIDERFAILEDINIT: number; |
|||
const WSASYSCALLFAILURE: number; |
|||
const WSASERVICE_NOT_FOUND: number; |
|||
const WSATYPE_NOT_FOUND: number; |
|||
const WSA_E_NO_MORE: number; |
|||
const WSA_E_CANCELLED: number; |
|||
const WSAEREFUSED: number; |
|||
} |
|||
namespace priority { |
|||
const PRIORITY_LOW: number; |
|||
const PRIORITY_BELOW_NORMAL: number; |
|||
const PRIORITY_NORMAL: number; |
|||
const PRIORITY_ABOVE_NORMAL: number; |
|||
const PRIORITY_HIGH: number; |
|||
const PRIORITY_HIGHEST: number; |
|||
} |
|||
} |
|||
const devNull: string; |
|||
const EOL: string; |
|||
/** |
|||
* Returns the operating system CPU architecture for which the Node.js binary was |
|||
* compiled. Possible values are `'arm'`, `'arm64'`, `'ia32'`, `'mips'`,`'mipsel'`, `'ppc'`, `'ppc64'`, `'s390'`, `'s390x'`, `'x32'`, and `'x64'`. |
|||
* |
|||
* The return value is equivalent to `process.arch`. |
|||
* @since v0.5.0 |
|||
*/ |
|||
function arch(): string; |
|||
/** |
|||
* Returns a string identifying the kernel version. |
|||
* |
|||
* On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `RtlGetVersion()` is used, and if it is not
|
|||
* available, `GetVersionExW()` will be used. See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information.
|
|||
* @since v13.11.0, v12.17.0 |
|||
*/ |
|||
function version(): string; |
|||
/** |
|||
* Returns a string identifying the operating system platform. The value is set |
|||
* at compile time. Possible values are `'aix'`, `'darwin'`, `'freebsd'`,`'linux'`, `'openbsd'`, `'sunos'`, and `'win32'`. |
|||
* |
|||
* The return value is equivalent to `process.platform`. |
|||
* |
|||
* The value `'android'` may also be returned if Node.js is built on the Android |
|||
* operating system. [Android support is experimental](https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os).
|
|||
* @since v0.5.0 |
|||
*/ |
|||
function platform(): NodeJS.Platform; |
|||
/** |
|||
* Returns the operating system's default directory for temporary files as a |
|||
* string. |
|||
* @since v0.9.9 |
|||
*/ |
|||
function tmpdir(): string; |
|||
/** |
|||
* Returns a string identifying the endianness of the CPU for which the Node.js |
|||
* binary was compiled. |
|||
* |
|||
* Possible values are `'BE'` for big endian and `'LE'` for little endian. |
|||
* @since v0.9.4 |
|||
*/ |
|||
function endianness(): 'BE' | 'LE'; |
|||
/** |
|||
* Returns the scheduling priority for the process specified by `pid`. If `pid` is |
|||
* not provided or is `0`, the priority of the current process is returned. |
|||
* @since v10.10.0 |
|||
* @param [pid=0] The process ID to retrieve scheduling priority for. |
|||
*/ |
|||
function getPriority(pid?: number): number; |
|||
/** |
|||
* Attempts to set the scheduling priority for the process specified by `pid`. If`pid` is not provided or is `0`, the process ID of the current process is used. |
|||
* |
|||
* The `priority` input must be an integer between `-20` (high priority) and `19`(low priority). Due to differences between Unix priority levels and Windows |
|||
* priority classes, `priority` is mapped to one of six priority constants in`os.constants.priority`. When retrieving a process priority level, this range |
|||
* mapping may cause the return value to be slightly different on Windows. To avoid |
|||
* confusion, set `priority` to one of the priority constants. |
|||
* |
|||
* On Windows, setting priority to `PRIORITY_HIGHEST` requires elevated user |
|||
* privileges. Otherwise the set priority will be silently reduced to`PRIORITY_HIGH`. |
|||
* @since v10.10.0 |
|||
* @param [pid=0] The process ID to set scheduling priority for. |
|||
* @param priority The scheduling priority to assign to the process. |
|||
*/ |
|||
function setPriority(priority: number): void; |
|||
function setPriority(pid: number, priority: number): void; |
|||
} |
|||
declare module 'node:os' { |
|||
export * from 'os'; |
|||
} |
|||
@ -0,0 +1,209 @@ |
|||
{ |
|||
"_from": "@types/node@*", |
|||
"_id": "@types/node@17.0.21", |
|||
"_inBundle": false, |
|||
"_integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", |
|||
"_location": "/@types/node", |
|||
"_phantomChildren": {}, |
|||
"_requested": { |
|||
"type": "range", |
|||
"registry": true, |
|||
"raw": "@types/node@*", |
|||
"name": "@types/node", |
|||
"escapedName": "@types%2fnode", |
|||
"scope": "@types", |
|||
"rawSpec": "*", |
|||
"saveSpec": null, |
|||
"fetchSpec": "*" |
|||
}, |
|||
"_requiredBy": [ |
|||
"/@types/whatwg-url" |
|||
], |
|||
"_resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", |
|||
"_shasum": "864b987c0c68d07b4345845c3e63b75edd143644", |
|||
"_spec": "@types/node@*", |
|||
"_where": "/Users/satish.ganga/Desktop/EKAM/ekamv5/ahc/node_modules/@types/whatwg-url", |
|||
"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": "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": "Chigozirim C.", |
|||
"url": "https://github.com/smac89" |
|||
}, |
|||
{ |
|||
"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": "Hannes Magnusson", |
|||
"url": "https://github.com/Hannes-Magnusson-CK" |
|||
}, |
|||
{ |
|||
"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": "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": "Samuel Ainsworth", |
|||
"url": "https://github.com/samuela" |
|||
}, |
|||
{ |
|||
"name": "Kyle Uehlein", |
|||
"url": "https://github.com/kuehlein" |
|||
}, |
|||
{ |
|||
"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": "Junxiao Shi", |
|||
"url": "https://github.com/yoursunny" |
|||
}, |
|||
{ |
|||
"name": "Ilia Baryshnikov", |
|||
"url": "https://github.com/qwelias" |
|||
}, |
|||
{ |
|||
"name": "ExE Boss", |
|||
"url": "https://github.com/ExE-Boss" |
|||
}, |
|||
{ |
|||
"name": "Piotr Błażejewicz", |
|||
"url": "https://github.com/peterblazejewicz" |
|||
}, |
|||
{ |
|||
"name": "Anna Henningsen", |
|||
"url": "https://github.com/addaleax" |
|||
}, |
|||
{ |
|||
"name": "Victor Perin", |
|||
"url": "https://github.com/victorperin" |
|||
}, |
|||
{ |
|||
"name": "Yongsheng Zhang", |
|||
"url": "https://github.com/ZYSzys" |
|||
}, |
|||
{ |
|||
"name": "NodeJS Contributors", |
|||
"url": "https://github.com/NodeJS" |
|||
}, |
|||
{ |
|||
"name": "Linus Unnebäck", |
|||
"url": "https://github.com/LinusU" |
|||
}, |
|||
{ |
|||
"name": "wafuwafu13", |
|||
"url": "https://github.com/wafuwafu13" |
|||
} |
|||
], |
|||
"dependencies": {}, |
|||
"deprecated": false, |
|||
"description": "TypeScript definitions for Node.js", |
|||
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node", |
|||
"license": "MIT", |
|||
"main": "", |
|||
"name": "@types/node", |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git", |
|||
"directory": "types/node" |
|||
}, |
|||
"scripts": {}, |
|||
"typeScriptVersion": "3.8", |
|||
"types": "index.d.ts", |
|||
"typesPublisherContentHash": "6e1f9bf207ef50d030685f014289b031aec80ada5d2510b91e8936256f960cde", |
|||
"version": "17.0.21" |
|||
} |
|||
@ -0,0 +1,180 @@ |
|||
declare module 'path/posix' { |
|||
import path = require('path'); |
|||
export = path; |
|||
} |
|||
declare module 'path/win32' { |
|||
import path = require('path'); |
|||
export = path; |
|||
} |
|||
/** |
|||
* The `path` module provides utilities for working with file and directory paths. |
|||
* It can be accessed using: |
|||
* |
|||
* ```js
|
|||
* const path = require('path'); |
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/path.js)
|
|||
*/ |
|||
declare module 'path' { |
|||
namespace 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 | undefined; |
|||
/** |
|||
* The full directory path such as '/home/user/dir' or 'c:\path\dir' |
|||
*/ |
|||
dir?: string | undefined; |
|||
/** |
|||
* The file name including extension (if any) such as 'index.html' |
|||
*/ |
|||
base?: string | undefined; |
|||
/** |
|||
* The file extension (if any) such as '.html' |
|||
*/ |
|||
ext?: string | undefined; |
|||
/** |
|||
* The file name without extension (if any) such as 'index' |
|||
*/ |
|||
name?: string | undefined; |
|||
} |
|||
interface PlatformPath { |
|||
/** |
|||
* 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. |
|||
*/ |
|||
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. |
|||
*/ |
|||
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. |
|||
*/ |
|||
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. |
|||
*/ |
|||
isAbsolute(p: 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. |
|||
*/ |
|||
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. |
|||
*/ |
|||
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. |
|||
*/ |
|||
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. |
|||
*/ |
|||
extname(p: string): string; |
|||
/** |
|||
* The platform-specific file separator. '\\' or '/'. |
|||
*/ |
|||
readonly sep: string; |
|||
/** |
|||
* The platform-specific file delimiter. ';' or ':'. |
|||
*/ |
|||
readonly delimiter: string; |
|||
/** |
|||
* Returns an object from a path string - the opposite of format(). |
|||
* |
|||
* @param pathString path to evaluate. |
|||
*/ |
|||
parse(p: string): ParsedPath; |
|||
/** |
|||
* Returns a path string from an object - the opposite of parse(). |
|||
* |
|||
* @param pathString path to evaluate. |
|||
*/ |
|||
format(pP: FormatInputPathObject): string; |
|||
/** |
|||
* On Windows systems only, returns an equivalent namespace-prefixed path for the given path. |
|||
* If path is not a string, path will be returned without modifications. |
|||
* This method is meaningful only on Windows system. |
|||
* On POSIX systems, the method is non-operational and always returns path without modifications. |
|||
*/ |
|||
toNamespacedPath(path: string): string; |
|||
/** |
|||
* Posix specific pathing. |
|||
* Same as parent object on posix. |
|||
*/ |
|||
readonly posix: PlatformPath; |
|||
/** |
|||
* Windows specific pathing. |
|||
* Same as parent object on windows |
|||
*/ |
|||
readonly win32: PlatformPath; |
|||
} |
|||
} |
|||
const path: path.PlatformPath; |
|||
export = path; |
|||
} |
|||
declare module 'node:path' { |
|||
import path = require('path'); |
|||
export = path; |
|||
} |
|||
declare module 'node:path/posix' { |
|||
import path = require('path/posix'); |
|||
export = path; |
|||
} |
|||
declare module 'node:path/win32' { |
|||
import path = require('path/win32'); |
|||
export = path; |
|||
} |
|||
@ -0,0 +1,557 @@ |
|||
/** |
|||
* This module provides an implementation of a subset of the W3C [Web Performance APIs](https://w3c.github.io/perf-timing-primer/) as well as additional APIs for
|
|||
* Node.js-specific performance measurements. |
|||
* |
|||
* Node.js supports the following [Web Performance APIs](https://w3c.github.io/perf-timing-primer/):
|
|||
* |
|||
* * [High Resolution Time](https://www.w3.org/TR/hr-time-2)
|
|||
* * [Performance Timeline](https://w3c.github.io/performance-timeline/)
|
|||
* * [User Timing](https://www.w3.org/TR/user-timing/)
|
|||
* |
|||
* ```js
|
|||
* const { PerformanceObserver, performance } = require('perf_hooks'); |
|||
* |
|||
* const obs = new PerformanceObserver((items) => { |
|||
* console.log(items.getEntries()[0].duration); |
|||
* performance.clearMarks(); |
|||
* }); |
|||
* obs.observe({ type: 'measure' }); |
|||
* performance.measure('Start to Now'); |
|||
* |
|||
* performance.mark('A'); |
|||
* doSomeLongRunningProcess(() => { |
|||
* performance.measure('A to Now', 'A'); |
|||
* |
|||
* performance.mark('B'); |
|||
* performance.measure('A to B', 'A', 'B'); |
|||
* }); |
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/perf_hooks.js)
|
|||
*/ |
|||
declare module 'perf_hooks' { |
|||
import { AsyncResource } from 'node:async_hooks'; |
|||
type EntryType = 'node' | 'mark' | 'measure' | 'gc' | 'function' | 'http2' | 'http'; |
|||
interface NodeGCPerformanceDetail { |
|||
/** |
|||
* When `performanceEntry.entryType` is equal to 'gc', `the performance.kind` property identifies |
|||
* the type of garbage collection operation that occurred. |
|||
* See perf_hooks.constants for valid values. |
|||
*/ |
|||
readonly kind?: number | undefined; |
|||
/** |
|||
* When `performanceEntry.entryType` is equal to 'gc', the `performance.flags` |
|||
* property contains additional information about garbage collection operation. |
|||
* See perf_hooks.constants for valid values. |
|||
*/ |
|||
readonly flags?: number | undefined; |
|||
} |
|||
/** |
|||
* @since v8.5.0 |
|||
*/ |
|||
class PerformanceEntry { |
|||
protected constructor(); |
|||
/** |
|||
* The total number of milliseconds elapsed for this entry. This value will not |
|||
* be meaningful for all Performance Entry types. |
|||
* @since v8.5.0 |
|||
*/ |
|||
readonly duration: number; |
|||
/** |
|||
* The name of the performance entry. |
|||
* @since v8.5.0 |
|||
*/ |
|||
readonly name: string; |
|||
/** |
|||
* The high resolution millisecond timestamp marking the starting time of the |
|||
* Performance Entry. |
|||
* @since v8.5.0 |
|||
*/ |
|||
readonly startTime: number; |
|||
/** |
|||
* The type of the performance entry. It may be one of: |
|||
* |
|||
* * `'node'` (Node.js only) |
|||
* * `'mark'` (available on the Web) |
|||
* * `'measure'` (available on the Web) |
|||
* * `'gc'` (Node.js only) |
|||
* * `'function'` (Node.js only) |
|||
* * `'http2'` (Node.js only) |
|||
* * `'http'` (Node.js only) |
|||
* @since v8.5.0 |
|||
*/ |
|||
readonly entryType: EntryType; |
|||
/** |
|||
* Additional detail specific to the `entryType`. |
|||
* @since v16.0.0 |
|||
*/ |
|||
readonly detail?: NodeGCPerformanceDetail | unknown | undefined; // TODO: Narrow this based on entry type.
|
|||
} |
|||
/** |
|||
* _This property is an extension by Node.js. It is not available in Web browsers._ |
|||
* |
|||
* Provides timing details for Node.js itself. The constructor of this class |
|||
* is not exposed to users. |
|||
* @since v8.5.0 |
|||
*/ |
|||
class PerformanceNodeTiming extends PerformanceEntry { |
|||
/** |
|||
* The high resolution millisecond timestamp at which the Node.js process |
|||
* completed bootstrapping. If bootstrapping has not yet finished, the property |
|||
* has the value of -1. |
|||
* @since v8.5.0 |
|||
*/ |
|||
readonly bootstrapComplete: number; |
|||
/** |
|||
* The high resolution millisecond timestamp at which the Node.js environment was |
|||
* initialized. |
|||
* @since v8.5.0 |
|||
*/ |
|||
readonly environment: number; |
|||
/** |
|||
* The high resolution millisecond timestamp of the amount of time the event loop |
|||
* has been idle within the event loop's event provider (e.g. `epoll_wait`). This |
|||
* does not take CPU usage into consideration. If the event loop has not yet |
|||
* started (e.g., in the first tick of the main script), the property has the |
|||
* value of 0. |
|||
* @since v14.10.0, v12.19.0 |
|||
*/ |
|||
readonly idleTime: number; |
|||
/** |
|||
* The high resolution millisecond timestamp at which the Node.js event loop |
|||
* exited. If the event loop has not yet exited, the property has the value of -1\. |
|||
* It can only have a value of not -1 in a handler of the `'exit'` event. |
|||
* @since v8.5.0 |
|||
*/ |
|||
readonly loopExit: number; |
|||
/** |
|||
* The high resolution millisecond timestamp at which the Node.js event loop |
|||
* started. If the event loop has not yet started (e.g., in the first tick of the |
|||
* main script), the property has the value of -1. |
|||
* @since v8.5.0 |
|||
*/ |
|||
readonly loopStart: number; |
|||
/** |
|||
* The high resolution millisecond timestamp at which the V8 platform was |
|||
* initialized. |
|||
* @since v8.5.0 |
|||
*/ |
|||
readonly v8Start: number; |
|||
} |
|||
interface EventLoopUtilization { |
|||
idle: number; |
|||
active: number; |
|||
utilization: number; |
|||
} |
|||
/** |
|||
* @param util1 The result of a previous call to eventLoopUtilization() |
|||
* @param util2 The result of a previous call to eventLoopUtilization() prior to util1 |
|||
*/ |
|||
type EventLoopUtilityFunction = (util1?: EventLoopUtilization, util2?: EventLoopUtilization) => EventLoopUtilization; |
|||
interface MarkOptions { |
|||
/** |
|||
* Additional optional detail to include with the mark. |
|||
*/ |
|||
detail?: unknown | undefined; |
|||
/** |
|||
* An optional timestamp to be used as the mark time. |
|||
* @default `performance.now()`. |
|||
*/ |
|||
startTime?: number | undefined; |
|||
} |
|||
interface MeasureOptions { |
|||
/** |
|||
* Additional optional detail to include with the mark. |
|||
*/ |
|||
detail?: unknown | undefined; |
|||
/** |
|||
* Duration between start and end times. |
|||
*/ |
|||
duration?: number | undefined; |
|||
/** |
|||
* Timestamp to be used as the end time, or a string identifying a previously recorded mark. |
|||
*/ |
|||
end?: number | string | undefined; |
|||
/** |
|||
* Timestamp to be used as the start time, or a string identifying a previously recorded mark. |
|||
*/ |
|||
start?: number | string | undefined; |
|||
} |
|||
interface TimerifyOptions { |
|||
/** |
|||
* A histogram object created using |
|||
* `perf_hooks.createHistogram()` that will record runtime durations in |
|||
* nanoseconds. |
|||
*/ |
|||
histogram?: RecordableHistogram | undefined; |
|||
} |
|||
interface Performance { |
|||
/** |
|||
* 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; |
|||
/** |
|||
* 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, options?: MarkOptions): 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; |
|||
measure(name: string, options: MeasureOptions): 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 (...params: any[]) => any>(fn: T, options?: TimerifyOptions): T; |
|||
/** |
|||
* eventLoopUtilization is similar to CPU utilization except that it is calculated using high precision wall-clock time. |
|||
* It represents the percentage of time the event loop has spent outside the event loop's event provider (e.g. epoll_wait). |
|||
* No other CPU idle time is taken into consideration. |
|||
*/ |
|||
eventLoopUtilization: EventLoopUtilityFunction; |
|||
} |
|||
interface PerformanceObserverEntryList { |
|||
/** |
|||
* Returns a list of `PerformanceEntry` objects in chronological order |
|||
* with respect to `performanceEntry.startTime`. |
|||
* |
|||
* ```js
|
|||
* const { |
|||
* performance, |
|||
* PerformanceObserver |
|||
* } = require('perf_hooks'); |
|||
* |
|||
* const obs = new PerformanceObserver((perfObserverList, observer) => { |
|||
* console.log(perfObserverList.getEntries()); |
|||
* |
|||
* * [ |
|||
* * PerformanceEntry { |
|||
* * name: 'test', |
|||
* * entryType: 'mark', |
|||
* * startTime: 81.465639, |
|||
* * duration: 0 |
|||
* * }, |
|||
* * PerformanceEntry { |
|||
* * name: 'meow', |
|||
* * entryType: 'mark', |
|||
* * startTime: 81.860064, |
|||
* * duration: 0 |
|||
* * } |
|||
* * ] |
|||
* |
|||
* observer.disconnect(); |
|||
* }); |
|||
* obs.observe({ type: 'mark' }); |
|||
* |
|||
* performance.mark('test'); |
|||
* performance.mark('meow'); |
|||
* ```
|
|||
* @since v8.5.0 |
|||
*/ |
|||
getEntries(): PerformanceEntry[]; |
|||
/** |
|||
* Returns 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`. |
|||
* |
|||
* ```js
|
|||
* const { |
|||
* performance, |
|||
* PerformanceObserver |
|||
* } = require('perf_hooks'); |
|||
* |
|||
* const obs = new PerformanceObserver((perfObserverList, observer) => { |
|||
* console.log(perfObserverList.getEntriesByName('meow')); |
|||
* |
|||
* * [ |
|||
* * PerformanceEntry { |
|||
* * name: 'meow', |
|||
* * entryType: 'mark', |
|||
* * startTime: 98.545991, |
|||
* * duration: 0 |
|||
* * } |
|||
* * ] |
|||
* |
|||
* console.log(perfObserverList.getEntriesByName('nope')); // []
|
|||
* |
|||
* console.log(perfObserverList.getEntriesByName('test', 'mark')); |
|||
* |
|||
* * [ |
|||
* * PerformanceEntry { |
|||
* * name: 'test', |
|||
* * entryType: 'mark', |
|||
* * startTime: 63.518931, |
|||
* * duration: 0 |
|||
* * } |
|||
* * ] |
|||
* |
|||
* console.log(perfObserverList.getEntriesByName('test', 'measure')); // []
|
|||
* observer.disconnect(); |
|||
* }); |
|||
* obs.observe({ entryTypes: ['mark', 'measure'] }); |
|||
* |
|||
* performance.mark('test'); |
|||
* performance.mark('meow'); |
|||
* ```
|
|||
* @since v8.5.0 |
|||
*/ |
|||
getEntriesByName(name: string, type?: EntryType): PerformanceEntry[]; |
|||
/** |
|||
* Returns a list of `PerformanceEntry` objects in chronological order |
|||
* with respect to `performanceEntry.startTime` whose `performanceEntry.entryType`is equal to `type`. |
|||
* |
|||
* ```js
|
|||
* const { |
|||
* performance, |
|||
* PerformanceObserver |
|||
* } = require('perf_hooks'); |
|||
* |
|||
* const obs = new PerformanceObserver((perfObserverList, observer) => { |
|||
* console.log(perfObserverList.getEntriesByType('mark')); |
|||
* |
|||
* * [ |
|||
* * PerformanceEntry { |
|||
* * name: 'test', |
|||
* * entryType: 'mark', |
|||
* * startTime: 55.897834, |
|||
* * duration: 0 |
|||
* * }, |
|||
* * PerformanceEntry { |
|||
* * name: 'meow', |
|||
* * entryType: 'mark', |
|||
* * startTime: 56.350146, |
|||
* * duration: 0 |
|||
* * } |
|||
* * ] |
|||
* |
|||
* observer.disconnect(); |
|||
* }); |
|||
* obs.observe({ type: 'mark' }); |
|||
* |
|||
* performance.mark('test'); |
|||
* performance.mark('meow'); |
|||
* ```
|
|||
* @since v8.5.0 |
|||
*/ |
|||
getEntriesByType(type: EntryType): PerformanceEntry[]; |
|||
} |
|||
type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void; |
|||
class PerformanceObserver extends AsyncResource { |
|||
constructor(callback: PerformanceObserverCallback); |
|||
/** |
|||
* Disconnects the `PerformanceObserver` instance from all notifications. |
|||
* @since v8.5.0 |
|||
*/ |
|||
disconnect(): void; |
|||
/** |
|||
* Subscribes the `PerformanceObserver` instance to notifications of new `PerformanceEntry` instances identified either by `options.entryTypes`or `options.type`: |
|||
* |
|||
* ```js
|
|||
* const { |
|||
* performance, |
|||
* PerformanceObserver |
|||
* } = require('perf_hooks'); |
|||
* |
|||
* const obs = new PerformanceObserver((list, observer) => { |
|||
* // Called three times synchronously. `list` contains one item.
|
|||
* }); |
|||
* obs.observe({ type: 'mark' }); |
|||
* |
|||
* for (let n = 0; n < 3; n++) |
|||
* performance.mark(`test${n}`); |
|||
* ```
|
|||
* @since v8.5.0 |
|||
*/ |
|||
observe( |
|||
options: |
|||
| { |
|||
entryTypes: ReadonlyArray<EntryType>; |
|||
buffered?: boolean | undefined; |
|||
} |
|||
| { |
|||
type: EntryType; |
|||
buffered?: boolean | undefined; |
|||
} |
|||
): 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 NODE_PERFORMANCE_GC_FLAGS_NO: number; |
|||
const NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number; |
|||
const NODE_PERFORMANCE_GC_FLAGS_FORCED: number; |
|||
const NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number; |
|||
const NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number; |
|||
const NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number; |
|||
const NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number; |
|||
} |
|||
const performance: Performance; |
|||
interface EventLoopMonitorOptions { |
|||
/** |
|||
* The sampling rate in milliseconds. |
|||
* Must be greater than zero. |
|||
* @default 10 |
|||
*/ |
|||
resolution?: number | undefined; |
|||
} |
|||
interface Histogram { |
|||
/** |
|||
* Returns a `Map` object detailing the accumulated percentile distribution. |
|||
* @since v11.10.0 |
|||
*/ |
|||
readonly percentiles: Map<number, number>; |
|||
/** |
|||
* The number of times the event loop delay exceeded the maximum 1 hour event |
|||
* loop delay threshold. |
|||
* @since v11.10.0 |
|||
*/ |
|||
readonly exceeds: number; |
|||
/** |
|||
* The minimum recorded event loop delay. |
|||
* @since v11.10.0 |
|||
*/ |
|||
readonly min: number; |
|||
/** |
|||
* The maximum recorded event loop delay. |
|||
* @since v11.10.0 |
|||
*/ |
|||
readonly max: number; |
|||
/** |
|||
* The mean of the recorded event loop delays. |
|||
* @since v11.10.0 |
|||
*/ |
|||
readonly mean: number; |
|||
/** |
|||
* The standard deviation of the recorded event loop delays. |
|||
* @since v11.10.0 |
|||
*/ |
|||
readonly stddev: number; |
|||
/** |
|||
* Resets the collected histogram data. |
|||
* @since v11.10.0 |
|||
*/ |
|||
reset(): void; |
|||
/** |
|||
* Returns the value at the given percentile. |
|||
* @since v11.10.0 |
|||
* @param percentile A percentile value in the range (0, 100]. |
|||
*/ |
|||
percentile(percentile: number): number; |
|||
} |
|||
interface IntervalHistogram extends Histogram { |
|||
/** |
|||
* Enables the update interval timer. Returns `true` if the timer was |
|||
* started, `false` if it was already started. |
|||
* @since v11.10.0 |
|||
*/ |
|||
enable(): boolean; |
|||
/** |
|||
* Disables the update interval timer. Returns `true` if the timer was |
|||
* stopped, `false` if it was already stopped. |
|||
* @since v11.10.0 |
|||
*/ |
|||
disable(): boolean; |
|||
} |
|||
interface RecordableHistogram extends Histogram { |
|||
/** |
|||
* @since v15.9.0, v14.18.0 |
|||
* @param val The amount to record in the histogram. |
|||
*/ |
|||
record(val: number | bigint): void; |
|||
/** |
|||
* Calculates the amount of time (in nanoseconds) that has passed since the |
|||
* previous call to `recordDelta()` and records that amount in the histogram. |
|||
* |
|||
* ## Examples |
|||
* @since v15.9.0, v14.18.0 |
|||
*/ |
|||
recordDelta(): void; |
|||
} |
|||
/** |
|||
* _This property is an extension by Node.js. It is not available in Web browsers._ |
|||
* |
|||
* Creates an `IntervalHistogram` object that samples and reports the event loop |
|||
* delay over time. The delays will be reported in nanoseconds. |
|||
* |
|||
* Using a timer to detect approximate event loop delay works because the |
|||
* execution of timers is tied specifically to the lifecycle of the libuv |
|||
* event loop. That is, a delay in the loop will cause a delay in the execution |
|||
* of the timer, and those delays are specifically what this API is intended to |
|||
* detect. |
|||
* |
|||
* ```js
|
|||
* const { monitorEventLoopDelay } = require('perf_hooks'); |
|||
* const h = monitorEventLoopDelay({ resolution: 20 }); |
|||
* h.enable(); |
|||
* // Do something.
|
|||
* h.disable(); |
|||
* console.log(h.min); |
|||
* console.log(h.max); |
|||
* console.log(h.mean); |
|||
* console.log(h.stddev); |
|||
* console.log(h.percentiles); |
|||
* console.log(h.percentile(50)); |
|||
* console.log(h.percentile(99)); |
|||
* ```
|
|||
* @since v11.10.0 |
|||
*/ |
|||
function monitorEventLoopDelay(options?: EventLoopMonitorOptions): IntervalHistogram; |
|||
interface CreateHistogramOptions { |
|||
/** |
|||
* The minimum recordable value. Must be an integer value greater than 0. |
|||
* @default 1 |
|||
*/ |
|||
min?: number | bigint | undefined; |
|||
/** |
|||
* The maximum recordable value. Must be an integer value greater than min. |
|||
* @default Number.MAX_SAFE_INTEGER |
|||
*/ |
|||
max?: number | bigint | undefined; |
|||
/** |
|||
* The number of accuracy digits. Must be a number between 1 and 5. |
|||
* @default 3 |
|||
*/ |
|||
figures?: number | undefined; |
|||
} |
|||
/** |
|||
* Returns a `RecordableHistogram`. |
|||
* @since v15.9.0, v14.18.0 |
|||
*/ |
|||
function createHistogram(options?: CreateHistogramOptions): RecordableHistogram; |
|||
} |
|||
declare module 'node:perf_hooks' { |
|||
export * from 'perf_hooks'; |
|||
} |
|||
1481
node_modules/@types/node/process.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,117 @@ |
|||
/** |
|||
* **The version of the punycode module bundled in Node.js is being deprecated.**In a future major version of Node.js this module will be removed. Users |
|||
* currently depending on the `punycode` module should switch to using the |
|||
* userland-provided [Punycode.js](https://github.com/bestiejs/punycode.js) module instead. For punycode-based URL
|
|||
* encoding, see `url.domainToASCII` or, more generally, the `WHATWG URL API`. |
|||
* |
|||
* The `punycode` module is a bundled version of the [Punycode.js](https://github.com/bestiejs/punycode.js) module. It
|
|||
* can be accessed using: |
|||
* |
|||
* ```js
|
|||
* const punycode = require('punycode'); |
|||
* ```
|
|||
* |
|||
* [Punycode](https://tools.ietf.org/html/rfc3492) is a character encoding scheme defined by RFC 3492 that is
|
|||
* primarily intended for use in Internationalized Domain Names. Because host |
|||
* names in URLs are limited to ASCII characters only, Domain Names that contain |
|||
* non-ASCII characters must be converted into ASCII using the Punycode scheme. |
|||
* For instance, the Japanese character that translates into the English word,`'example'` is `'例'`. The Internationalized Domain Name, `'例.com'` (equivalent |
|||
* to `'example.com'`) is represented by Punycode as the ASCII string`'xn--fsq.com'`. |
|||
* |
|||
* The `punycode` module provides a simple implementation of the Punycode standard. |
|||
* |
|||
* The `punycode` module is a third-party dependency used by Node.js and |
|||
* made available to developers as a convenience. Fixes or other modifications to |
|||
* the module must be directed to the [Punycode.js](https://github.com/bestiejs/punycode.js) project.
|
|||
* @deprecated Since v7.0.0 - Deprecated |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/punycode.js)
|
|||
*/ |
|||
declare module 'punycode' { |
|||
/** |
|||
* The `punycode.decode()` method converts a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only
|
|||
* characters to the equivalent string of Unicode codepoints. |
|||
* |
|||
* ```js
|
|||
* punycode.decode('maana-pta'); // 'mañana'
|
|||
* punycode.decode('--dqo34k'); // '☃-⌘'
|
|||
* ```
|
|||
* @since v0.5.1 |
|||
*/ |
|||
function decode(string: string): string; |
|||
/** |
|||
* The `punycode.encode()` method converts a string of Unicode codepoints to a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only characters.
|
|||
* |
|||
* ```js
|
|||
* punycode.encode('mañana'); // 'maana-pta'
|
|||
* punycode.encode('☃-⌘'); // '--dqo34k'
|
|||
* ```
|
|||
* @since v0.5.1 |
|||
*/ |
|||
function encode(string: string): string; |
|||
/** |
|||
* The `punycode.toUnicode()` method converts a string representing a domain name |
|||
* containing [Punycode](https://tools.ietf.org/html/rfc3492) encoded characters into Unicode. Only the [Punycode](https://tools.ietf.org/html/rfc3492) encoded parts of the domain name are be
|
|||
* converted. |
|||
* |
|||
* ```js
|
|||
* // decode domain names
|
|||
* punycode.toUnicode('xn--maana-pta.com'); // 'mañana.com'
|
|||
* punycode.toUnicode('xn----dqo34k.com'); // '☃-⌘.com'
|
|||
* punycode.toUnicode('example.com'); // 'example.com'
|
|||
* ```
|
|||
* @since v0.6.1 |
|||
*/ |
|||
function toUnicode(domain: string): string; |
|||
/** |
|||
* The `punycode.toASCII()` method converts a Unicode string representing an |
|||
* Internationalized Domain Name to [Punycode](https://tools.ietf.org/html/rfc3492). Only the non-ASCII parts of the
|
|||
* domain name will be converted. Calling `punycode.toASCII()` on a string that |
|||
* already only contains ASCII characters will have no effect. |
|||
* |
|||
* ```js
|
|||
* // encode domain names
|
|||
* punycode.toASCII('mañana.com'); // 'xn--maana-pta.com'
|
|||
* punycode.toASCII('☃-⌘.com'); // 'xn----dqo34k.com'
|
|||
* punycode.toASCII('example.com'); // 'example.com'
|
|||
* ```
|
|||
* @since v0.6.1 |
|||
*/ |
|||
function toASCII(domain: string): string; |
|||
/** |
|||
* @deprecated since v7.0.0 |
|||
* The version of the punycode module bundled in Node.js is being deprecated. |
|||
* In a future major version of Node.js this module will be removed. |
|||
* Users currently depending on the punycode module should switch to using |
|||
* the userland-provided Punycode.js module instead. |
|||
*/ |
|||
const ucs2: ucs2; |
|||
interface ucs2 { |
|||
/** |
|||
* @deprecated since v7.0.0 |
|||
* The version of the punycode module bundled in Node.js is being deprecated. |
|||
* In a future major version of Node.js this module will be removed. |
|||
* Users currently depending on the punycode module should switch to using |
|||
* the userland-provided Punycode.js module instead. |
|||
*/ |
|||
decode(string: string): number[]; |
|||
/** |
|||
* @deprecated since v7.0.0 |
|||
* The version of the punycode module bundled in Node.js is being deprecated. |
|||
* In a future major version of Node.js this module will be removed. |
|||
* Users currently depending on the punycode module should switch to using |
|||
* the userland-provided Punycode.js module instead. |
|||
*/ |
|||
encode(codePoints: ReadonlyArray<number>): string; |
|||
} |
|||
/** |
|||
* @deprecated since v7.0.0 |
|||
* The version of the punycode module bundled in Node.js is being deprecated. |
|||
* In a future major version of Node.js this module will be removed. |
|||
* Users currently depending on the punycode module should switch to using |
|||
* the userland-provided Punycode.js module instead. |
|||
*/ |
|||
const version: string; |
|||
} |
|||
declare module 'node:punycode' { |
|||
export * from 'punycode'; |
|||
} |
|||
@ -0,0 +1,131 @@ |
|||
/** |
|||
* The `querystring` module provides utilities for parsing and formatting URL |
|||
* query strings. It can be accessed using: |
|||
* |
|||
* ```js
|
|||
* const querystring = require('querystring'); |
|||
* ```
|
|||
* |
|||
* The `querystring` API is considered Legacy. While it is still maintained, |
|||
* new code should use the `URLSearchParams` API instead. |
|||
* @deprecated Legacy |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/querystring.js)
|
|||
*/ |
|||
declare module 'querystring' { |
|||
interface StringifyOptions { |
|||
encodeURIComponent?: ((str: string) => string) | undefined; |
|||
} |
|||
interface ParseOptions { |
|||
maxKeys?: number | undefined; |
|||
decodeURIComponent?: ((str: string) => string) | undefined; |
|||
} |
|||
interface ParsedUrlQuery extends NodeJS.Dict<string | string[]> {} |
|||
interface ParsedUrlQueryInput extends NodeJS.Dict<string | number | boolean | ReadonlyArray<string> | ReadonlyArray<number> | ReadonlyArray<boolean> | null> {} |
|||
/** |
|||
* The `querystring.stringify()` method produces a URL query string from a |
|||
* given `obj` by iterating through the object's "own properties". |
|||
* |
|||
* It serializes the following types of values passed in `obj`:[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) |
|
|||
* [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) |
|
|||
* [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) |
|
|||
* [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) |
|
|||
* [string\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) |
|
|||
* [number\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) |
|
|||
* [bigint\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) |
|
|||
* [boolean\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) The numeric values must be finite. Any other input values will be coerced to
|
|||
* empty strings. |
|||
* |
|||
* ```js
|
|||
* querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' }); |
|||
* // Returns 'foo=bar&baz=qux&baz=quux&corge='
|
|||
* |
|||
* querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':'); |
|||
* // Returns 'foo:bar;baz:qux'
|
|||
* ```
|
|||
* |
|||
* By default, characters requiring percent-encoding within the query string will |
|||
* be encoded as UTF-8\. If an alternative encoding is required, then an alternative`encodeURIComponent` option will need to be specified: |
|||
* |
|||
* ```js
|
|||
* // Assuming gbkEncodeURIComponent function already exists,
|
|||
* |
|||
* querystring.stringify({ w: '中文', foo: 'bar' }, null, null, |
|||
* { encodeURIComponent: gbkEncodeURIComponent }); |
|||
* ```
|
|||
* @since v0.1.25 |
|||
* @param obj The object to serialize into a URL query string |
|||
* @param [sep='&'] The substring used to delimit key and value pairs in the query string. |
|||
* @param [eq='='] . The substring used to delimit keys and values in the query string. |
|||
*/ |
|||
function stringify(obj?: ParsedUrlQueryInput, sep?: string, eq?: string, options?: StringifyOptions): string; |
|||
/** |
|||
* The `querystring.parse()` method parses a URL query string (`str`) into a |
|||
* collection of key and value pairs. |
|||
* |
|||
* For example, the query string `'foo=bar&abc=xyz&abc=123'` is parsed into: |
|||
* |
|||
* ```js
|
|||
* { |
|||
* foo: 'bar', |
|||
* abc: ['xyz', '123'] |
|||
* } |
|||
* ```
|
|||
* |
|||
* The object returned by the `querystring.parse()` method _does not_prototypically inherit from the JavaScript `Object`. This means that typical`Object` methods such as `obj.toString()`, |
|||
* `obj.hasOwnProperty()`, and others |
|||
* are not defined and _will not work_. |
|||
* |
|||
* By default, percent-encoded characters within the query string will be assumed |
|||
* to use UTF-8 encoding. If an alternative character encoding is used, then an |
|||
* alternative `decodeURIComponent` option will need to be specified: |
|||
* |
|||
* ```js
|
|||
* // Assuming gbkDecodeURIComponent function already exists...
|
|||
* |
|||
* querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null, |
|||
* { decodeURIComponent: gbkDecodeURIComponent }); |
|||
* ```
|
|||
* @since v0.1.25 |
|||
* @param str The URL query string to parse |
|||
* @param [sep='&'] The substring used to delimit key and value pairs in the query string. |
|||
* @param [eq='='] . The substring used to delimit keys and values in the query 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; |
|||
/** |
|||
* The `querystring.escape()` method performs URL percent-encoding on the given`str` in a manner that is optimized for the specific requirements of URL |
|||
* query strings. |
|||
* |
|||
* The `querystring.escape()` method is used by `querystring.stringify()` and is |
|||
* generally not expected to be used directly. It is exported primarily to allow |
|||
* application code to provide a replacement percent-encoding implementation if |
|||
* necessary by assigning `querystring.escape` to an alternative function. |
|||
* @since v0.1.25 |
|||
*/ |
|||
function escape(str: string): string; |
|||
/** |
|||
* The `querystring.unescape()` method performs decoding of URL percent-encoded |
|||
* characters on the given `str`. |
|||
* |
|||
* The `querystring.unescape()` method is used by `querystring.parse()` and is |
|||
* generally not expected to be used directly. It is exported primarily to allow |
|||
* application code to provide a replacement decoding implementation if |
|||
* necessary by assigning `querystring.unescape` to an alternative function. |
|||
* |
|||
* By default, the `querystring.unescape()` method will attempt to use the |
|||
* JavaScript built-in `decodeURIComponent()` method to decode. If that fails, |
|||
* a safer equivalent that does not throw on malformed URLs will be used. |
|||
* @since v0.1.25 |
|||
*/ |
|||
function unescape(str: string): string; |
|||
} |
|||
declare module 'node:querystring' { |
|||
export * from 'querystring'; |
|||
} |
|||
@ -0,0 +1,650 @@ |
|||
/** |
|||
* The `readline` module provides an interface for reading data from a `Readable` stream (such as `process.stdin`) one line at a time. |
|||
* |
|||
* To use the promise-based APIs: |
|||
* |
|||
* ```js
|
|||
* import * as readline from 'node:readline/promises'; |
|||
* ```
|
|||
* |
|||
* To use the callback and sync APIs: |
|||
* |
|||
* ```js
|
|||
* import * as readline from 'node:readline'; |
|||
* ```
|
|||
* |
|||
* The following simple example illustrates the basic use of the `readline` module. |
|||
* |
|||
* ```js
|
|||
* import * as readline from 'node:readline/promises'; |
|||
* import { stdin as input, stdout as output } from 'process'; |
|||
* |
|||
* const rl = readline.createInterface({ input, output }); |
|||
* |
|||
* const answer = await rl.question('What do you think of Node.js? '); |
|||
* |
|||
* console.log(`Thank you for your valuable feedback: ${answer}`); |
|||
* |
|||
* rl.close(); |
|||
* ```
|
|||
* |
|||
* Once this code is invoked, the Node.js application will not terminate until the`readline.Interface` is closed because the interface waits for data to be |
|||
* received on the `input` stream. |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/readline.js)
|
|||
*/ |
|||
declare module 'readline' { |
|||
import { Abortable, EventEmitter } from 'node:events'; |
|||
interface Key { |
|||
sequence?: string | undefined; |
|||
name?: string | undefined; |
|||
ctrl?: boolean | undefined; |
|||
meta?: boolean | undefined; |
|||
shift?: boolean | undefined; |
|||
} |
|||
/** |
|||
* Instances of the `readline.Interface` class are constructed using the`readline.createInterface()` method. Every instance is associated with a |
|||
* single `input` `Readable` stream and a single `output` `Writable` stream. |
|||
* The `output` stream is used to print prompts for user input that arrives on, |
|||
* and is read from, the `input` stream. |
|||
* @since v0.1.104 |
|||
*/ |
|||
class Interface extends EventEmitter { |
|||
readonly terminal: boolean; |
|||
/** |
|||
* The current input data being processed by node. |
|||
* |
|||
* This can be used when collecting input from a TTY stream to retrieve the |
|||
* current value that has been processed thus far, prior to the `line` event |
|||
* being emitted. Once the `line` event has been emitted, this property will |
|||
* be an empty string. |
|||
* |
|||
* Be aware that modifying the value during the instance runtime may have |
|||
* unintended consequences if `rl.cursor` is not also controlled. |
|||
* |
|||
* **If not using a TTY stream for input, use the `'line'` event.** |
|||
* |
|||
* One possible use case would be as follows: |
|||
* |
|||
* ```js
|
|||
* const values = ['lorem ipsum', 'dolor sit amet']; |
|||
* const rl = readline.createInterface(process.stdin); |
|||
* const showResults = debounce(() => { |
|||
* console.log( |
|||
* '\n', |
|||
* values.filter((val) => val.startsWith(rl.line)).join(' ') |
|||
* ); |
|||
* }, 300); |
|||
* process.stdin.on('keypress', (c, k) => { |
|||
* showResults(); |
|||
* }); |
|||
* ```
|
|||
* @since v0.1.98 |
|||
*/ |
|||
readonly line: string; |
|||
/** |
|||
* The cursor position relative to `rl.line`. |
|||
* |
|||
* This will track where the current cursor lands in the input string, when |
|||
* reading input from a TTY stream. The position of cursor determines the |
|||
* portion of the input string that will be modified as input is processed, |
|||
* as well as the column where the terminal caret will be rendered. |
|||
* @since v0.1.98 |
|||
*/ |
|||
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); |
|||
/** |
|||
* The `rl.getPrompt()` method returns the current prompt used by `rl.prompt()`. |
|||
* @since v15.3.0 |
|||
* @return the current prompt string |
|||
*/ |
|||
getPrompt(): string; |
|||
/** |
|||
* The `rl.setPrompt()` method sets the prompt that will be written to `output`whenever `rl.prompt()` is called. |
|||
* @since v0.1.98 |
|||
*/ |
|||
setPrompt(prompt: string): void; |
|||
/** |
|||
* The `rl.prompt()` method writes the `readline.Interface` instances configured`prompt` to a new line in `output` in order to provide a user with a new |
|||
* location at which to provide input. |
|||
* |
|||
* When called, `rl.prompt()` will resume the `input` stream if it has been |
|||
* paused. |
|||
* |
|||
* If the `readline.Interface` was created with `output` set to `null` or`undefined` the prompt is not written. |
|||
* @since v0.1.98 |
|||
* @param preserveCursor If `true`, prevents the cursor placement from being reset to `0`. |
|||
*/ |
|||
prompt(preserveCursor?: boolean): void; |
|||
/** |
|||
* The `rl.question()` method displays the `query` by writing it to the `output`, |
|||
* waits for user input to be provided on `input`, then invokes the `callback`function passing the provided input as the first argument. |
|||
* |
|||
* When called, `rl.question()` will resume the `input` stream if it has been |
|||
* paused. |
|||
* |
|||
* If the `readline.Interface` was created with `output` set to `null` or`undefined` the `query` is not written. |
|||
* |
|||
* The `callback` function passed to `rl.question()` does not follow the typical |
|||
* pattern of accepting an `Error` object or `null` as the first argument. |
|||
* The `callback` is called with the provided answer as the only argument. |
|||
* |
|||
* Example usage: |
|||
* |
|||
* ```js
|
|||
* rl.question('What is your favorite food? ', (answer) => { |
|||
* console.log(`Oh, so your favorite food is ${answer}`); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Using an `AbortController` to cancel a question. |
|||
* |
|||
* ```js
|
|||
* const ac = new AbortController(); |
|||
* const signal = ac.signal; |
|||
* |
|||
* rl.question('What is your favorite food? ', { signal }, (answer) => { |
|||
* console.log(`Oh, so your favorite food is ${answer}`); |
|||
* }); |
|||
* |
|||
* signal.addEventListener('abort', () => { |
|||
* console.log('The food question timed out'); |
|||
* }, { once: true }); |
|||
* |
|||
* setTimeout(() => ac.abort(), 10000); |
|||
* ```
|
|||
* |
|||
* If this method is invoked as it's util.promisify()ed version, it returns a |
|||
* Promise that fulfills with the answer. If the question is canceled using |
|||
* an `AbortController` it will reject with an `AbortError`. |
|||
* |
|||
* ```js
|
|||
* const util = require('util'); |
|||
* const question = util.promisify(rl.question).bind(rl); |
|||
* |
|||
* async function questionExample() { |
|||
* try { |
|||
* const answer = await question('What is you favorite food? '); |
|||
* console.log(`Oh, so your favorite food is ${answer}`); |
|||
* } catch (err) { |
|||
* console.error('Question rejected', err); |
|||
* } |
|||
* } |
|||
* questionExample(); |
|||
* ```
|
|||
* @since v0.3.3 |
|||
* @param query A statement or query to write to `output`, prepended to the prompt. |
|||
* @param callback A callback function that is invoked with the user's input in response to the `query`. |
|||
*/ |
|||
question(query: string, callback: (answer: string) => void): void; |
|||
question(query: string, options: Abortable, callback: (answer: string) => void): void; |
|||
/** |
|||
* The `rl.pause()` method pauses the `input` stream, allowing it to be resumed |
|||
* later if necessary. |
|||
* |
|||
* Calling `rl.pause()` does not immediately pause other events (including`'line'`) from being emitted by the `readline.Interface` instance. |
|||
* @since v0.3.4 |
|||
*/ |
|||
pause(): this; |
|||
/** |
|||
* The `rl.resume()` method resumes the `input` stream if it has been paused. |
|||
* @since v0.3.4 |
|||
*/ |
|||
resume(): this; |
|||
/** |
|||
* The `rl.close()` method closes the `readline.Interface` instance and |
|||
* relinquishes control over the `input` and `output` streams. When called, |
|||
* the `'close'` event will be emitted. |
|||
* |
|||
* Calling `rl.close()` does not immediately stop other events (including `'line'`) |
|||
* from being emitted by the `readline.Interface` instance. |
|||
* @since v0.1.98 |
|||
*/ |
|||
close(): void; |
|||
/** |
|||
* The `rl.write()` method will write either `data` or a key sequence identified |
|||
* by `key` to the `output`. The `key` argument is supported only if `output` is |
|||
* a `TTY` text terminal. See `TTY keybindings` for a list of key |
|||
* combinations. |
|||
* |
|||
* If `key` is specified, `data` is ignored. |
|||
* |
|||
* When called, `rl.write()` will resume the `input` stream if it has been |
|||
* paused. |
|||
* |
|||
* If the `readline.Interface` was created with `output` set to `null` or`undefined` the `data` and `key` are not written. |
|||
* |
|||
* ```js
|
|||
* rl.write('Delete this!'); |
|||
* // Simulate Ctrl+U to delete the line written previously
|
|||
* rl.write(null, { ctrl: true, name: 'u' }); |
|||
* ```
|
|||
* |
|||
* The `rl.write()` method will write the data to the `readline` `Interface`'s`input`_as if it were provided by the user_. |
|||
* @since v0.1.98 |
|||
*/ |
|||
write(data: string | Buffer, key?: Key): void; |
|||
write(data: undefined | null | string | Buffer, key: Key): void; |
|||
/** |
|||
* Returns the real position of the cursor in relation to the input |
|||
* prompt + string. Long input (wrapping) strings, as well as multiple |
|||
* line prompts are included in the calculations. |
|||
* @since v13.5.0, v12.16.0 |
|||
*/ |
|||
getCursorPos(): CursorPos; |
|||
/** |
|||
* events.EventEmitter |
|||
* 1. close |
|||
* 2. line |
|||
* 3. pause |
|||
* 4. resume |
|||
* 5. SIGCONT |
|||
* 6. SIGINT |
|||
* 7. SIGTSTP |
|||
* 8. history |
|||
*/ |
|||
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: 'history', listener: (history: string[]) => 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: 'history', history: string[]): 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: 'history', listener: (history: string[]) => 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: 'history', listener: (history: string[]) => 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: 'history', listener: (history: string[]) => 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: 'history', listener: (history: string[]) => void): this; |
|||
[Symbol.asyncIterator](): AsyncIterableIterator<string>; |
|||
} |
|||
type ReadLine = Interface; // type forwarded for backwards compatibility
|
|||
type Completer = (line: string) => CompleterResult; |
|||
type AsyncCompleter = (line: string, callback: (err?: null | Error, result?: CompleterResult) => void) => void; |
|||
type CompleterResult = [string[], string]; |
|||
interface ReadLineOptions { |
|||
input: NodeJS.ReadableStream; |
|||
output?: NodeJS.WritableStream | undefined; |
|||
completer?: Completer | AsyncCompleter | undefined; |
|||
terminal?: boolean | undefined; |
|||
/** |
|||
* Initial list of history lines. This option makes sense |
|||
* only if `terminal` is set to `true` by the user or by an internal `output` |
|||
* check, otherwise the history caching mechanism is not initialized at all. |
|||
* @default [] |
|||
*/ |
|||
history?: string[] | undefined; |
|||
historySize?: number | undefined; |
|||
prompt?: string | undefined; |
|||
crlfDelay?: number | undefined; |
|||
/** |
|||
* If `true`, when a new input line added |
|||
* to the history list duplicates an older one, this removes the older line |
|||
* from the list. |
|||
* @default false |
|||
*/ |
|||
removeHistoryDuplicates?: boolean | undefined; |
|||
escapeCodeTimeout?: number | undefined; |
|||
tabSize?: number | undefined; |
|||
} |
|||
/** |
|||
* The `readline.createInterface()` method creates a new `readline.Interface`instance. |
|||
* |
|||
* ```js
|
|||
* const readline = require('readline'); |
|||
* const rl = readline.createInterface({ |
|||
* input: process.stdin, |
|||
* output: process.stdout |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Once the `readline.Interface` instance is created, the most common case is to |
|||
* listen for the `'line'` event: |
|||
* |
|||
* ```js
|
|||
* rl.on('line', (line) => { |
|||
* console.log(`Received: ${line}`); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* If `terminal` is `true` for this instance then the `output` stream will get |
|||
* the best compatibility if it defines an `output.columns` property and emits |
|||
* a `'resize'` event on the `output` if or when the columns ever change |
|||
* (`process.stdout` does this automatically when it is a TTY). |
|||
* |
|||
* When creating a `readline.Interface` using `stdin` as input, the program |
|||
* will not terminate until it receives `EOF` (Ctrl+D on |
|||
* Linux/macOS, Ctrl+Z followed by Return on |
|||
* Windows). |
|||
* If you want your application to exit without waiting for user input, you can `unref()` the standard input stream: |
|||
* |
|||
* ```js
|
|||
* process.stdin.unref(); |
|||
* ```
|
|||
* @since v0.1.98 |
|||
*/ |
|||
function createInterface(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean): Interface; |
|||
function createInterface(options: ReadLineOptions): Interface; |
|||
/** |
|||
* The `readline.emitKeypressEvents()` method causes the given `Readable` stream to begin emitting `'keypress'` events corresponding to received input. |
|||
* |
|||
* Optionally, `interface` specifies a `readline.Interface` instance for which |
|||
* autocompletion is disabled when copy-pasted input is detected. |
|||
* |
|||
* If the `stream` is a `TTY`, then it must be in raw mode. |
|||
* |
|||
* This is automatically called by any readline instance on its `input` if the`input` is a terminal. Closing the `readline` instance does not stop |
|||
* the `input` from emitting `'keypress'` events. |
|||
* |
|||
* ```js
|
|||
* readline.emitKeypressEvents(process.stdin); |
|||
* if (process.stdin.isTTY) |
|||
* process.stdin.setRawMode(true); |
|||
* ```
|
|||
* |
|||
* ## Example: Tiny CLI |
|||
* |
|||
* The following example illustrates the use of `readline.Interface` class to |
|||
* implement a small command-line interface: |
|||
* |
|||
* ```js
|
|||
* const readline = require('readline'); |
|||
* const rl = readline.createInterface({ |
|||
* input: process.stdin, |
|||
* output: process.stdout, |
|||
* prompt: 'OHAI> ' |
|||
* }); |
|||
* |
|||
* rl.prompt(); |
|||
* |
|||
* rl.on('line', (line) => { |
|||
* switch (line.trim()) { |
|||
* case 'hello': |
|||
* console.log('world!'); |
|||
* break; |
|||
* default: |
|||
* console.log(`Say what? I might have heard '${line.trim()}'`); |
|||
* break; |
|||
* } |
|||
* rl.prompt(); |
|||
* }).on('close', () => { |
|||
* console.log('Have a great day!'); |
|||
* process.exit(0); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* ## Example: Read file stream line-by-Line |
|||
* |
|||
* A common use case for `readline` is to consume an input file one line at a |
|||
* time. The easiest way to do so is leveraging the `fs.ReadStream` API as |
|||
* well as a `for await...of` loop: |
|||
* |
|||
* ```js
|
|||
* const fs = require('fs'); |
|||
* const readline = require('readline'); |
|||
* |
|||
* async function processLineByLine() { |
|||
* const fileStream = fs.createReadStream('input.txt'); |
|||
* |
|||
* const rl = readline.createInterface({ |
|||
* input: fileStream, |
|||
* crlfDelay: Infinity |
|||
* }); |
|||
* // Note: we use the crlfDelay option to recognize all instances of CR LF
|
|||
* // ('\r\n') in input.txt as a single line break.
|
|||
* |
|||
* for await (const line of rl) { |
|||
* // Each line in input.txt will be successively available here as `line`.
|
|||
* console.log(`Line from file: ${line}`); |
|||
* } |
|||
* } |
|||
* |
|||
* processLineByLine(); |
|||
* ```
|
|||
* |
|||
* Alternatively, one could use the `'line'` event: |
|||
* |
|||
* ```js
|
|||
* const fs = require('fs'); |
|||
* const readline = require('readline'); |
|||
* |
|||
* const rl = readline.createInterface({ |
|||
* input: fs.createReadStream('sample.txt'), |
|||
* crlfDelay: Infinity |
|||
* }); |
|||
* |
|||
* rl.on('line', (line) => { |
|||
* console.log(`Line from file: ${line}`); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Currently, `for await...of` loop can be a bit slower. If `async` / `await`flow and speed are both essential, a mixed approach can be applied: |
|||
* |
|||
* ```js
|
|||
* const { once } = require('events'); |
|||
* const { createReadStream } = require('fs'); |
|||
* const { createInterface } = require('readline'); |
|||
* |
|||
* (async function processLineByLine() { |
|||
* try { |
|||
* const rl = createInterface({ |
|||
* input: createReadStream('big-file.txt'), |
|||
* crlfDelay: Infinity |
|||
* }); |
|||
* |
|||
* rl.on('line', (line) => { |
|||
* // Process the line.
|
|||
* }); |
|||
* |
|||
* await once(rl, 'close'); |
|||
* |
|||
* console.log('File processed.'); |
|||
* } catch (err) { |
|||
* console.error(err); |
|||
* } |
|||
* })(); |
|||
* ```
|
|||
* @since v0.7.7 |
|||
*/ |
|||
function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void; |
|||
type Direction = -1 | 0 | 1; |
|||
interface CursorPos { |
|||
rows: number; |
|||
cols: number; |
|||
} |
|||
/** |
|||
* The `readline.clearLine()` method clears current line of given `TTY` stream |
|||
* in a specified direction identified by `dir`. |
|||
* @since v0.7.7 |
|||
* @param callback Invoked once the operation completes. |
|||
* @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. |
|||
*/ |
|||
function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean; |
|||
/** |
|||
* The `readline.clearScreenDown()` method clears the given `TTY` stream from |
|||
* the current position of the cursor down. |
|||
* @since v0.7.7 |
|||
* @param callback Invoked once the operation completes. |
|||
* @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. |
|||
*/ |
|||
function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean; |
|||
/** |
|||
* The `readline.cursorTo()` method moves cursor to the specified position in a |
|||
* given `TTY` `stream`. |
|||
* @since v0.7.7 |
|||
* @param callback Invoked once the operation completes. |
|||
* @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. |
|||
*/ |
|||
function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean; |
|||
/** |
|||
* The `readline.moveCursor()` method moves the cursor _relative_ to its current |
|||
* position in a given `TTY` `stream`. |
|||
* |
|||
* ## Example: Tiny CLI |
|||
* |
|||
* The following example illustrates the use of `readline.Interface` class to |
|||
* implement a small command-line interface: |
|||
* |
|||
* ```js
|
|||
* const readline = require('readline'); |
|||
* const rl = readline.createInterface({ |
|||
* input: process.stdin, |
|||
* output: process.stdout, |
|||
* prompt: 'OHAI> ' |
|||
* }); |
|||
* |
|||
* rl.prompt(); |
|||
* |
|||
* rl.on('line', (line) => { |
|||
* switch (line.trim()) { |
|||
* case 'hello': |
|||
* console.log('world!'); |
|||
* break; |
|||
* default: |
|||
* console.log(`Say what? I might have heard '${line.trim()}'`); |
|||
* break; |
|||
* } |
|||
* rl.prompt(); |
|||
* }).on('close', () => { |
|||
* console.log('Have a great day!'); |
|||
* process.exit(0); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* ## Example: Read file stream line-by-Line |
|||
* |
|||
* A common use case for `readline` is to consume an input file one line at a |
|||
* time. The easiest way to do so is leveraging the `fs.ReadStream` API as |
|||
* well as a `for await...of` loop: |
|||
* |
|||
* ```js
|
|||
* const fs = require('fs'); |
|||
* const readline = require('readline'); |
|||
* |
|||
* async function processLineByLine() { |
|||
* const fileStream = fs.createReadStream('input.txt'); |
|||
* |
|||
* const rl = readline.createInterface({ |
|||
* input: fileStream, |
|||
* crlfDelay: Infinity |
|||
* }); |
|||
* // Note: we use the crlfDelay option to recognize all instances of CR LF
|
|||
* // ('\r\n') in input.txt as a single line break.
|
|||
* |
|||
* for await (const line of rl) { |
|||
* // Each line in input.txt will be successively available here as `line`.
|
|||
* console.log(`Line from file: ${line}`); |
|||
* } |
|||
* } |
|||
* |
|||
* processLineByLine(); |
|||
* ```
|
|||
* |
|||
* Alternatively, one could use the `'line'` event: |
|||
* |
|||
* ```js
|
|||
* const fs = require('fs'); |
|||
* const readline = require('readline'); |
|||
* |
|||
* const rl = readline.createInterface({ |
|||
* input: fs.createReadStream('sample.txt'), |
|||
* crlfDelay: Infinity |
|||
* }); |
|||
* |
|||
* rl.on('line', (line) => { |
|||
* console.log(`Line from file: ${line}`); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* Currently, `for await...of` loop can be a bit slower. If `async` / `await`flow and speed are both essential, a mixed approach can be applied: |
|||
* |
|||
* ```js
|
|||
* const { once } = require('events'); |
|||
* const { createReadStream } = require('fs'); |
|||
* const { createInterface } = require('readline'); |
|||
* |
|||
* (async function processLineByLine() { |
|||
* try { |
|||
* const rl = createInterface({ |
|||
* input: createReadStream('big-file.txt'), |
|||
* crlfDelay: Infinity |
|||
* }); |
|||
* |
|||
* rl.on('line', (line) => { |
|||
* // Process the line.
|
|||
* }); |
|||
* |
|||
* await once(rl, 'close'); |
|||
* |
|||
* console.log('File processed.'); |
|||
* } catch (err) { |
|||
* console.error(err); |
|||
* } |
|||
* })(); |
|||
* ```
|
|||
* @since v0.7.7 |
|||
* @param callback Invoked once the operation completes. |
|||
* @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. |
|||
*/ |
|||
function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean; |
|||
} |
|||
declare module 'node:readline' { |
|||
export * from 'readline'; |
|||
} |
|||
@ -0,0 +1,424 @@ |
|||
/** |
|||
* The `repl` module provides a Read-Eval-Print-Loop (REPL) implementation that |
|||
* is available both as a standalone program or includible in other applications. |
|||
* It can be accessed using: |
|||
* |
|||
* ```js
|
|||
* const repl = require('repl'); |
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/repl.js)
|
|||
*/ |
|||
declare module 'repl' { |
|||
import { Interface, Completer, AsyncCompleter } from 'node:readline'; |
|||
import { Context } from 'node:vm'; |
|||
import { InspectOptions } from 'node:util'; |
|||
interface ReplOptions { |
|||
/** |
|||
* The input prompt to display. |
|||
* @default "> " |
|||
*/ |
|||
prompt?: string | undefined; |
|||
/** |
|||
* The `Readable` stream from which REPL input will be read. |
|||
* @default process.stdin |
|||
*/ |
|||
input?: NodeJS.ReadableStream | undefined; |
|||
/** |
|||
* The `Writable` stream to which REPL output will be written. |
|||
* @default process.stdout |
|||
*/ |
|||
output?: NodeJS.WritableStream | undefined; |
|||
/** |
|||
* 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 | undefined; |
|||
/** |
|||
* 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 | undefined; |
|||
/** |
|||
* Defines if the repl prints output previews or not. |
|||
* @default `true` Always `false` in case `terminal` is falsy. |
|||
*/ |
|||
preview?: boolean | undefined; |
|||
/** |
|||
* 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 | undefined; |
|||
/** |
|||
* 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 | undefined; |
|||
/** |
|||
* 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 | undefined; |
|||
/** |
|||
* 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 | undefined; |
|||
/** |
|||
* 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 | undefined; |
|||
/** |
|||
* 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 | undefined; |
|||
/** |
|||
* 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 | undefined; |
|||
} |
|||
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 | undefined; |
|||
/** |
|||
* The function to execute, optionally accepting a single string argument. |
|||
*/ |
|||
action: REPLCommandAction; |
|||
} |
|||
/** |
|||
* Instances of `repl.REPLServer` are created using the {@link start} method |
|||
* or directly using the JavaScript `new` keyword. |
|||
* |
|||
* ```js
|
|||
* const repl = require('repl'); |
|||
* |
|||
* const options = { useColors: true }; |
|||
* |
|||
* const firstInstance = repl.start(options); |
|||
* const secondInstance = new repl.REPLServer(options); |
|||
* ```
|
|||
* @since v0.1.91 |
|||
*/ |
|||
class REPLServer extends Interface { |
|||
/** |
|||
* The `vm.Context` provided to the `eval` function to be used for JavaScript |
|||
* evaluation. |
|||
*/ |
|||
readonly context: Context; |
|||
/** |
|||
* @deprecated since v14.3.0 - Use `input` instead. |
|||
*/ |
|||
readonly inputStream: NodeJS.ReadableStream; |
|||
/** |
|||
* @deprecated since v14.3.0 - Use `output` instead. |
|||
*/ |
|||
readonly outputStream: NodeJS.WritableStream; |
|||
/** |
|||
* The `Readable` stream from which REPL input will be read. |
|||
*/ |
|||
readonly input: NodeJS.ReadableStream; |
|||
/** |
|||
* The `Writable` stream to which REPL output will be written. |
|||
*/ |
|||
readonly output: NodeJS.WritableStream; |
|||
/** |
|||
* The commands registered via `replServer.defineCommand()`. |
|||
*/ |
|||
readonly commands: NodeJS.ReadOnlyDict<REPLCommand>; |
|||
/** |
|||
* 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(); |
|||
/** |
|||
* The `replServer.defineCommand()` method is used to add new `.`\-prefixed commands |
|||
* to the REPL instance. Such commands are invoked by typing a `.` followed by the`keyword`. The `cmd` is either a `Function` or an `Object` with the following |
|||
* properties: |
|||
* |
|||
* The following example shows two new commands added to the REPL instance: |
|||
* |
|||
* ```js
|
|||
* const repl = require('repl'); |
|||
* |
|||
* const replServer = repl.start({ prompt: '> ' }); |
|||
* replServer.defineCommand('sayhello', { |
|||
* help: 'Say hello', |
|||
* action(name) { |
|||
* this.clearBufferedCommand(); |
|||
* console.log(`Hello, ${name}!`); |
|||
* this.displayPrompt(); |
|||
* } |
|||
* }); |
|||
* replServer.defineCommand('saybye', function saybye() { |
|||
* console.log('Goodbye!'); |
|||
* this.close(); |
|||
* }); |
|||
* ```
|
|||
* |
|||
* The new commands can then be used from within the REPL instance: |
|||
* |
|||
* ```console
|
|||
* > .sayhello Node.js User |
|||
* Hello, Node.js User! |
|||
* > .saybye |
|||
* Goodbye! |
|||
* ```
|
|||
* @since v0.3.0 |
|||
* @param keyword The command keyword (*without* a leading `.` character). |
|||
* @param cmd The function to invoke when the command is processed. |
|||
*/ |
|||
defineCommand(keyword: string, cmd: REPLCommandAction | REPLCommand): void; |
|||
/** |
|||
* The `replServer.displayPrompt()` method 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'. |
|||
* |
|||
* When `preserveCursor` is `true`, the cursor placement will not be reset to `0`. |
|||
* |
|||
* The `replServer.displayPrompt` method is primarily intended to be called from |
|||
* within the action function for commands registered using the`replServer.defineCommand()` method. |
|||
* @since v0.1.91 |
|||
*/ |
|||
displayPrompt(preserveCursor?: boolean): void; |
|||
/** |
|||
* The `replServer.clearBufferedCommand()` method 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. |
|||
* @since v11.10.0 |
|||
* @param historyPath the path to the history file |
|||
* @param callback called when history writes are ready or upon error |
|||
*/ |
|||
setupHistory(path: string, callback: (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: 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: unique symbol; |
|||
/** |
|||
* The `repl.start()` method creates and starts a {@link REPLServer} instance. |
|||
* |
|||
* If `options` is a string, then it specifies the input prompt: |
|||
* |
|||
* ```js
|
|||
* const repl = require('repl'); |
|||
* |
|||
* // a Unix style prompt
|
|||
* repl.start('$ '); |
|||
* ```
|
|||
* @since v0.1.91 |
|||
*/ |
|||
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); |
|||
} |
|||
} |
|||
declare module 'node:repl' { |
|||
export * from 'repl'; |
|||
} |
|||
1249
node_modules/@types/node/stream.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,24 @@ |
|||
// Duplicates of interface in lib.dom.ts.
|
|||
// Duplicated here rather than referencing lib.dom.ts because doing so causes lib.dom.ts to be loaded for "test-all"
|
|||
// Which in turn causes tests to pass that shouldn't pass.
|
|||
//
|
|||
// This interface is not, and should not be, exported.
|
|||
interface Blob { |
|||
readonly size: number; |
|||
readonly type: string; |
|||
arrayBuffer(): Promise<ArrayBuffer>; |
|||
slice(start?: number, end?: number, contentType?: string): Blob; |
|||
stream(): NodeJS.ReadableStream; |
|||
text(): Promise<string>; |
|||
} |
|||
declare module 'stream/consumers' { |
|||
import { Readable } from 'node:stream'; |
|||
function buffer(stream: NodeJS.ReadableStream | Readable | AsyncIterator<any>): Promise<Buffer>; |
|||
function text(stream: NodeJS.ReadableStream | Readable | AsyncIterator<any>): Promise<string>; |
|||
function arrayBuffer(stream: NodeJS.ReadableStream | Readable | AsyncIterator<any>): Promise<ArrayBuffer>; |
|||
function blob(stream: NodeJS.ReadableStream | Readable | AsyncIterator<any>): Promise<Blob>; |
|||
function json(stream: NodeJS.ReadableStream | Readable | AsyncIterator<any>): Promise<unknown>; |
|||
} |
|||
declare module 'node:stream/consumers' { |
|||
export * from 'stream/consumers'; |
|||
} |
|||
@ -0,0 +1,42 @@ |
|||
declare module 'stream/promises' { |
|||
import { FinishedOptions, PipelineSource, PipelineTransform, PipelineDestination, PipelinePromise, PipelineOptions } from 'node:stream'; |
|||
function finished(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, options?: FinishedOptions): Promise<void>; |
|||
function pipeline<A extends PipelineSource<any>, B extends PipelineDestination<A, any>>(source: A, destination: B, options?: PipelineOptions): PipelinePromise<B>; |
|||
function pipeline<A extends PipelineSource<any>, T1 extends PipelineTransform<A, any>, B extends PipelineDestination<T1, any>>( |
|||
source: A, |
|||
transform1: T1, |
|||
destination: B, |
|||
options?: PipelineOptions |
|||
): PipelinePromise<B>; |
|||
function pipeline<A extends PipelineSource<any>, T1 extends PipelineTransform<A, any>, T2 extends PipelineTransform<T1, any>, B extends PipelineDestination<T2, any>>( |
|||
source: A, |
|||
transform1: T1, |
|||
transform2: T2, |
|||
destination: B, |
|||
options?: PipelineOptions |
|||
): PipelinePromise<B>; |
|||
function pipeline< |
|||
A extends PipelineSource<any>, |
|||
T1 extends PipelineTransform<A, any>, |
|||
T2 extends PipelineTransform<T1, any>, |
|||
T3 extends PipelineTransform<T2, any>, |
|||
B extends PipelineDestination<T3, any> |
|||
>(source: A, transform1: T1, transform2: T2, transform3: T3, destination: B, options?: PipelineOptions): PipelinePromise<B>; |
|||
function pipeline< |
|||
A extends PipelineSource<any>, |
|||
T1 extends PipelineTransform<A, any>, |
|||
T2 extends PipelineTransform<T1, any>, |
|||
T3 extends PipelineTransform<T2, any>, |
|||
T4 extends PipelineTransform<T3, any>, |
|||
B extends PipelineDestination<T4, any> |
|||
>(source: A, transform1: T1, transform2: T2, transform3: T3, transform4: T4, destination: B, options?: PipelineOptions): PipelinePromise<B>; |
|||
function pipeline(streams: ReadonlyArray<NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream>, options?: PipelineOptions): Promise<void>; |
|||
function pipeline( |
|||
stream1: NodeJS.ReadableStream, |
|||
stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, |
|||
...streams: Array<NodeJS.ReadWriteStream | NodeJS.WritableStream | PipelineOptions> |
|||
): Promise<void>; |
|||
} |
|||
declare module 'node:stream/promises' { |
|||
export * from 'stream/promises'; |
|||
} |
|||
@ -0,0 +1,330 @@ |
|||
declare module 'stream/web' { |
|||
// stub module, pending copy&paste from .d.ts or manual impl
|
|||
// copy from lib.dom.d.ts
|
|||
interface ReadableWritablePair<R = any, W = any> { |
|||
readable: ReadableStream<R>; |
|||
/** |
|||
* Provides a convenient, chainable way of piping this readable stream |
|||
* through a transform stream (or any other { writable, readable } |
|||
* pair). It simply pipes the stream into the writable side of the |
|||
* supplied pair, and returns the readable side for further use. |
|||
* |
|||
* Piping a stream will lock it for the duration of the pipe, preventing |
|||
* any other consumer from acquiring a reader. |
|||
*/ |
|||
writable: WritableStream<W>; |
|||
} |
|||
interface StreamPipeOptions { |
|||
preventAbort?: boolean; |
|||
preventCancel?: boolean; |
|||
/** |
|||
* Pipes this readable stream to a given writable stream destination. |
|||
* The way in which the piping process behaves under various error |
|||
* conditions can be customized with a number of passed options. It |
|||
* returns a promise that fulfills when the piping process completes |
|||
* successfully, or rejects if any errors were encountered. |
|||
* |
|||
* Piping a stream will lock it for the duration of the pipe, preventing |
|||
* any other consumer from acquiring a reader. |
|||
* |
|||
* Errors and closures of the source and destination streams propagate |
|||
* as follows: |
|||
* |
|||
* An error in this source readable stream will abort destination, |
|||
* unless preventAbort is truthy. The returned promise will be rejected |
|||
* with the source's error, or with any error that occurs during |
|||
* aborting the destination. |
|||
* |
|||
* An error in destination will cancel this source readable stream, |
|||
* unless preventCancel is truthy. The returned promise will be rejected |
|||
* with the destination's error, or with any error that occurs during |
|||
* canceling the source. |
|||
* |
|||
* When this source readable stream closes, destination will be closed, |
|||
* unless preventClose is truthy. The returned promise will be fulfilled |
|||
* once this process completes, unless an error is encountered while |
|||
* closing the destination, in which case it will be rejected with that |
|||
* error. |
|||
* |
|||
* If destination starts out closed or closing, this source readable |
|||
* stream will be canceled, unless preventCancel is true. The returned |
|||
* promise will be rejected with an error indicating piping to a closed |
|||
* stream failed, or with any error that occurs during canceling the |
|||
* source. |
|||
* |
|||
* The signal option can be set to an AbortSignal to allow aborting an |
|||
* ongoing pipe operation via the corresponding AbortController. In this |
|||
* case, this source readable stream will be canceled, and destination |
|||
* aborted, unless the respective options preventCancel or preventAbort |
|||
* are set. |
|||
*/ |
|||
preventClose?: boolean; |
|||
signal?: AbortSignal; |
|||
} |
|||
interface ReadableStreamGenericReader { |
|||
readonly closed: Promise<undefined>; |
|||
cancel(reason?: any): Promise<void>; |
|||
} |
|||
interface ReadableStreamDefaultReadValueResult<T> { |
|||
done: false; |
|||
value: T; |
|||
} |
|||
interface ReadableStreamDefaultReadDoneResult { |
|||
done: true; |
|||
value?: undefined; |
|||
} |
|||
type ReadableStreamController<T> = ReadableStreamDefaultController<T>; |
|||
type ReadableStreamDefaultReadResult<T> = ReadableStreamDefaultReadValueResult<T> | ReadableStreamDefaultReadDoneResult; |
|||
interface ReadableByteStreamControllerCallback { |
|||
(controller: ReadableByteStreamController): void | PromiseLike<void>; |
|||
} |
|||
interface UnderlyingSinkAbortCallback { |
|||
(reason?: any): void | PromiseLike<void>; |
|||
} |
|||
interface UnderlyingSinkCloseCallback { |
|||
(): void | PromiseLike<void>; |
|||
} |
|||
interface UnderlyingSinkStartCallback { |
|||
(controller: WritableStreamDefaultController): any; |
|||
} |
|||
interface UnderlyingSinkWriteCallback<W> { |
|||
(chunk: W, controller: WritableStreamDefaultController): void | PromiseLike<void>; |
|||
} |
|||
interface UnderlyingSourceCancelCallback { |
|||
(reason?: any): void | PromiseLike<void>; |
|||
} |
|||
interface UnderlyingSourcePullCallback<R> { |
|||
(controller: ReadableStreamController<R>): void | PromiseLike<void>; |
|||
} |
|||
interface UnderlyingSourceStartCallback<R> { |
|||
(controller: ReadableStreamController<R>): any; |
|||
} |
|||
interface TransformerFlushCallback<O> { |
|||
(controller: TransformStreamDefaultController<O>): void | PromiseLike<void>; |
|||
} |
|||
interface TransformerStartCallback<O> { |
|||
(controller: TransformStreamDefaultController<O>): any; |
|||
} |
|||
interface TransformerTransformCallback<I, O> { |
|||
(chunk: I, controller: TransformStreamDefaultController<O>): void | PromiseLike<void>; |
|||
} |
|||
interface UnderlyingByteSource { |
|||
autoAllocateChunkSize?: number; |
|||
cancel?: ReadableStreamErrorCallback; |
|||
pull?: ReadableByteStreamControllerCallback; |
|||
start?: ReadableByteStreamControllerCallback; |
|||
type: 'bytes'; |
|||
} |
|||
interface UnderlyingSource<R = any> { |
|||
cancel?: UnderlyingSourceCancelCallback; |
|||
pull?: UnderlyingSourcePullCallback<R>; |
|||
start?: UnderlyingSourceStartCallback<R>; |
|||
type?: undefined; |
|||
} |
|||
interface UnderlyingSink<W = any> { |
|||
abort?: UnderlyingSinkAbortCallback; |
|||
close?: UnderlyingSinkCloseCallback; |
|||
start?: UnderlyingSinkStartCallback; |
|||
type?: undefined; |
|||
write?: UnderlyingSinkWriteCallback<W>; |
|||
} |
|||
interface ReadableStreamErrorCallback { |
|||
(reason: any): void | PromiseLike<void>; |
|||
} |
|||
/** This Streams API interface represents a readable stream of byte data. */ |
|||
interface ReadableStream<R = any> { |
|||
readonly locked: boolean; |
|||
cancel(reason?: any): Promise<void>; |
|||
getReader(): ReadableStreamDefaultReader<R>; |
|||
pipeThrough<T>(transform: ReadableWritablePair<T, R>, options?: StreamPipeOptions): ReadableStream<T>; |
|||
pipeTo(destination: WritableStream<R>, options?: StreamPipeOptions): Promise<void>; |
|||
tee(): [ReadableStream<R>, ReadableStream<R>]; |
|||
values(options?: { preventCancel?: boolean }): AsyncIterableIterator<R>; |
|||
[Symbol.asyncIterator](): AsyncIterableIterator<R>; |
|||
} |
|||
const ReadableStream: { |
|||
prototype: ReadableStream; |
|||
new (underlyingSource: UnderlyingByteSource, strategy?: QueuingStrategy<Uint8Array>): ReadableStream<Uint8Array>; |
|||
new <R = any>(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>; |
|||
}; |
|||
interface ReadableStreamDefaultReader<R = any> extends ReadableStreamGenericReader { |
|||
read(): Promise<ReadableStreamDefaultReadResult<R>>; |
|||
releaseLock(): void; |
|||
} |
|||
const ReadableStreamDefaultReader: { |
|||
prototype: ReadableStreamDefaultReader; |
|||
new <R = any>(stream: ReadableStream<R>): ReadableStreamDefaultReader<R>; |
|||
}; |
|||
const ReadableStreamBYOBReader: any; |
|||
const ReadableStreamBYOBRequest: any; |
|||
interface ReadableByteStreamController { |
|||
readonly byobRequest: undefined; |
|||
readonly desiredSize: number | null; |
|||
close(): void; |
|||
enqueue(chunk: ArrayBufferView): void; |
|||
error(error?: any): void; |
|||
} |
|||
const ReadableByteStreamController: { |
|||
prototype: ReadableByteStreamController; |
|||
new (): ReadableByteStreamController; |
|||
}; |
|||
interface ReadableStreamDefaultController<R = any> { |
|||
readonly desiredSize: number | null; |
|||
close(): void; |
|||
enqueue(chunk?: R): void; |
|||
error(e?: any): void; |
|||
} |
|||
const ReadableStreamDefaultController: { |
|||
prototype: ReadableStreamDefaultController; |
|||
new (): ReadableStreamDefaultController; |
|||
}; |
|||
interface Transformer<I = any, O = any> { |
|||
flush?: TransformerFlushCallback<O>; |
|||
readableType?: undefined; |
|||
start?: TransformerStartCallback<O>; |
|||
transform?: TransformerTransformCallback<I, O>; |
|||
writableType?: undefined; |
|||
} |
|||
interface TransformStream<I = any, O = any> { |
|||
readonly readable: ReadableStream<O>; |
|||
readonly writable: WritableStream<I>; |
|||
} |
|||
const TransformStream: { |
|||
prototype: TransformStream; |
|||
new <I = any, O = any>(transformer?: Transformer<I, O>, writableStrategy?: QueuingStrategy<I>, readableStrategy?: QueuingStrategy<O>): TransformStream<I, O>; |
|||
}; |
|||
interface TransformStreamDefaultController<O = any> { |
|||
readonly desiredSize: number | null; |
|||
enqueue(chunk?: O): void; |
|||
error(reason?: any): void; |
|||
terminate(): void; |
|||
} |
|||
const TransformStreamDefaultController: { |
|||
prototype: TransformStreamDefaultController; |
|||
new (): TransformStreamDefaultController; |
|||
}; |
|||
/** |
|||
* This Streams API interface provides a standard abstraction for writing |
|||
* streaming data to a destination, known as a sink. This object comes with |
|||
* built-in back pressure and queuing. |
|||
*/ |
|||
interface WritableStream<W = any> { |
|||
readonly locked: boolean; |
|||
abort(reason?: any): Promise<void>; |
|||
close(): Promise<void>; |
|||
getWriter(): WritableStreamDefaultWriter<W>; |
|||
} |
|||
const WritableStream: { |
|||
prototype: WritableStream; |
|||
new <W = any>(underlyingSink?: UnderlyingSink<W>, strategy?: QueuingStrategy<W>): WritableStream<W>; |
|||
}; |
|||
/** |
|||
* This Streams API interface is the object returned by |
|||
* WritableStream.getWriter() and once created locks the < writer to the |
|||
* WritableStream ensuring that no other streams can write to the underlying |
|||
* sink. |
|||
*/ |
|||
interface WritableStreamDefaultWriter<W = any> { |
|||
readonly closed: Promise<undefined>; |
|||
readonly desiredSize: number | null; |
|||
readonly ready: Promise<undefined>; |
|||
abort(reason?: any): Promise<void>; |
|||
close(): Promise<void>; |
|||
releaseLock(): void; |
|||
write(chunk?: W): Promise<void>; |
|||
} |
|||
const WritableStreamDefaultWriter: { |
|||
prototype: WritableStreamDefaultWriter; |
|||
new <W = any>(stream: WritableStream<W>): WritableStreamDefaultWriter<W>; |
|||
}; |
|||
/** |
|||
* This Streams API interface represents a controller allowing control of a |
|||
* WritableStream's state. When constructing a WritableStream, the |
|||
* underlying sink is given a corresponding WritableStreamDefaultController |
|||
* instance to manipulate. |
|||
*/ |
|||
interface WritableStreamDefaultController { |
|||
error(e?: any): void; |
|||
} |
|||
const WritableStreamDefaultController: { |
|||
prototype: WritableStreamDefaultController; |
|||
new (): WritableStreamDefaultController; |
|||
}; |
|||
interface QueuingStrategy<T = any> { |
|||
highWaterMark?: number; |
|||
size?: QueuingStrategySize<T>; |
|||
} |
|||
interface QueuingStrategySize<T = any> { |
|||
(chunk?: T): number; |
|||
} |
|||
interface QueuingStrategyInit { |
|||
/** |
|||
* Creates a new ByteLengthQueuingStrategy with the provided high water |
|||
* mark. |
|||
* |
|||
* Note that the provided high water mark will not be validated ahead of |
|||
* time. Instead, if it is negative, NaN, or not a number, the resulting |
|||
* ByteLengthQueuingStrategy will cause the corresponding stream |
|||
* constructor to throw. |
|||
*/ |
|||
highWaterMark: number; |
|||
} |
|||
/** |
|||
* This Streams API interface provides a built-in byte length queuing |
|||
* strategy that can be used when constructing streams. |
|||
*/ |
|||
interface ByteLengthQueuingStrategy extends QueuingStrategy<ArrayBufferView> { |
|||
readonly highWaterMark: number; |
|||
readonly size: QueuingStrategySize<ArrayBufferView>; |
|||
} |
|||
const ByteLengthQueuingStrategy: { |
|||
prototype: ByteLengthQueuingStrategy; |
|||
new (init: QueuingStrategyInit): ByteLengthQueuingStrategy; |
|||
}; |
|||
/** |
|||
* This Streams API interface provides a built-in byte length queuing |
|||
* strategy that can be used when constructing streams. |
|||
*/ |
|||
interface CountQueuingStrategy extends QueuingStrategy { |
|||
readonly highWaterMark: number; |
|||
readonly size: QueuingStrategySize; |
|||
} |
|||
const CountQueuingStrategy: { |
|||
prototype: CountQueuingStrategy; |
|||
new (init: QueuingStrategyInit): CountQueuingStrategy; |
|||
}; |
|||
interface TextEncoderStream { |
|||
/** Returns "utf-8". */ |
|||
readonly encoding: 'utf-8'; |
|||
readonly readable: ReadableStream<Uint8Array>; |
|||
readonly writable: WritableStream<string>; |
|||
readonly [Symbol.toStringTag]: string; |
|||
} |
|||
const TextEncoderStream: { |
|||
prototype: TextEncoderStream; |
|||
new (): TextEncoderStream; |
|||
}; |
|||
interface TextDecoderOptions { |
|||
fatal?: boolean; |
|||
ignoreBOM?: boolean; |
|||
} |
|||
type BufferSource = ArrayBufferView | ArrayBuffer; |
|||
interface TextDecoderStream { |
|||
/** Returns encoding's name, lower cased. */ |
|||
readonly encoding: string; |
|||
/** Returns `true` if error mode is "fatal", and `false` otherwise. */ |
|||
readonly fatal: boolean; |
|||
/** Returns `true` if ignore BOM flag is set, and `false` otherwise. */ |
|||
readonly ignoreBOM: boolean; |
|||
readonly readable: ReadableStream<string>; |
|||
readonly writable: WritableStream<BufferSource>; |
|||
readonly [Symbol.toStringTag]: string; |
|||
} |
|||
const TextDecoderStream: { |
|||
prototype: TextDecoderStream; |
|||
new (label?: string, options?: TextDecoderOptions): TextDecoderStream; |
|||
}; |
|||
} |
|||
declare module 'node:stream/web' { |
|||
export * from 'stream/web'; |
|||
} |
|||
@ -0,0 +1,67 @@ |
|||
/** |
|||
* The `string_decoder` module provides an API for decoding `Buffer` objects into |
|||
* strings in a manner that preserves encoded multi-byte UTF-8 and UTF-16 |
|||
* characters. It can be accessed using: |
|||
* |
|||
* ```js
|
|||
* const { StringDecoder } = require('string_decoder'); |
|||
* ```
|
|||
* |
|||
* The following example shows the basic use of the `StringDecoder` class. |
|||
* |
|||
* ```js
|
|||
* const { StringDecoder } = require('string_decoder'); |
|||
* const decoder = new StringDecoder('utf8'); |
|||
* |
|||
* const cent = Buffer.from([0xC2, 0xA2]); |
|||
* console.log(decoder.write(cent)); |
|||
* |
|||
* const euro = Buffer.from([0xE2, 0x82, 0xAC]); |
|||
* console.log(decoder.write(euro)); |
|||
* ```
|
|||
* |
|||
* When a `Buffer` instance is written to the `StringDecoder` instance, an |
|||
* internal buffer is used to ensure that the decoded string does not contain |
|||
* any incomplete multibyte characters. These are held in the buffer until the |
|||
* next call to `stringDecoder.write()` or until `stringDecoder.end()` is called. |
|||
* |
|||
* In the following example, the three UTF-8 encoded bytes of the European Euro |
|||
* symbol (`€`) are written over three separate operations: |
|||
* |
|||
* ```js
|
|||
* const { StringDecoder } = require('string_decoder'); |
|||
* const decoder = new StringDecoder('utf8'); |
|||
* |
|||
* decoder.write(Buffer.from([0xE2])); |
|||
* decoder.write(Buffer.from([0x82])); |
|||
* console.log(decoder.end(Buffer.from([0xAC]))); |
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/string_decoder.js)
|
|||
*/ |
|||
declare module 'string_decoder' { |
|||
class StringDecoder { |
|||
constructor(encoding?: BufferEncoding); |
|||
/** |
|||
* Returns a decoded string, ensuring that any incomplete multibyte characters at |
|||
* the end of the `Buffer`, or `TypedArray`, or `DataView` are omitted from the |
|||
* returned string and stored in an internal buffer for the next call to`stringDecoder.write()` or `stringDecoder.end()`. |
|||
* @since v0.1.99 |
|||
* @param buffer A `Buffer`, or `TypedArray`, or `DataView` containing the bytes to decode. |
|||
*/ |
|||
write(buffer: Buffer): string; |
|||
/** |
|||
* Returns any remaining input stored in the internal buffer as a string. Bytes |
|||
* representing incomplete UTF-8 and UTF-16 characters will be replaced with |
|||
* substitution characters appropriate for the character encoding. |
|||
* |
|||
* If the `buffer` argument is provided, one final call to `stringDecoder.write()`is performed before returning the remaining input. |
|||
* After `end()` is called, the `stringDecoder` object can be reused for new input. |
|||
* @since v0.9.3 |
|||
* @param buffer A `Buffer`, or `TypedArray`, or `DataView` containing the bytes to decode. |
|||
*/ |
|||
end(buffer?: Buffer): string; |
|||
} |
|||
} |
|||
declare module 'node:string_decoder' { |
|||
export * from 'string_decoder'; |
|||
} |
|||
@ -0,0 +1,94 @@ |
|||
/** |
|||
* The `timer` module exposes a global API for scheduling functions to |
|||
* be called at some future period of time. Because the timer functions are |
|||
* globals, there is no need to call `require('timers')` to use the API. |
|||
* |
|||
* The timer functions within Node.js implement a similar API as the timers API |
|||
* provided by Web Browsers but use a different internal implementation that is |
|||
* built around the Node.js [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#setimmediate-vs-settimeout).
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/timers.js)
|
|||
*/ |
|||
declare module 'timers' { |
|||
import { Abortable } from 'node:events'; |
|||
import { setTimeout as setTimeoutPromise, setImmediate as setImmediatePromise, setInterval as setIntervalPromise } from 'node:timers/promises'; |
|||
interface TimerOptions extends Abortable { |
|||
/** |
|||
* Set to `false` to indicate that the scheduled `Timeout` |
|||
* should not require the Node.js event loop to remain active. |
|||
* @default true |
|||
*/ |
|||
ref?: boolean | undefined; |
|||
} |
|||
let setTimeout: typeof global.setTimeout; |
|||
let clearTimeout: typeof global.clearTimeout; |
|||
let setInterval: typeof global.setInterval; |
|||
let clearInterval: typeof global.clearInterval; |
|||
let setImmediate: typeof global.setImmediate; |
|||
let clearImmediate: typeof global.clearImmediate; |
|||
global { |
|||
namespace NodeJS { |
|||
// compatibility with older typings
|
|||
interface Timer extends RefCounted { |
|||
hasRef(): boolean; |
|||
refresh(): this; |
|||
[Symbol.toPrimitive](): number; |
|||
} |
|||
interface Immediate extends RefCounted { |
|||
/** |
|||
* If true, the `Immediate` object will keep the Node.js event loop active. |
|||
* @since v11.0.0 |
|||
*/ |
|||
hasRef(): boolean; |
|||
_onImmediate: Function; // to distinguish it from the Timeout class
|
|||
} |
|||
interface Timeout extends Timer { |
|||
/** |
|||
* If true, the `Timeout` object will keep the Node.js event loop active. |
|||
* @since v11.0.0 |
|||
*/ |
|||
hasRef(): boolean; |
|||
/** |
|||
* Sets the timer's start time to the current time, and reschedules the timer to |
|||
* call its callback at the previously specified duration adjusted to the current |
|||
* time. This is useful for refreshing a timer without allocating a new |
|||
* JavaScript object. |
|||
* |
|||
* Using this on a timer that has already called its callback will reactivate the |
|||
* timer. |
|||
* @since v10.2.0 |
|||
* @return a reference to `timeout` |
|||
*/ |
|||
refresh(): this; |
|||
[Symbol.toPrimitive](): number; |
|||
} |
|||
} |
|||
function setTimeout<TArgs extends any[]>(callback: (...args: TArgs) => void, ms?: number, ...args: TArgs): NodeJS.Timeout; |
|||
// util.promisify no rest args compability
|
|||
// tslint:disable-next-line void-return
|
|||
function setTimeout(callback: (args: void) => void, ms?: number): NodeJS.Timeout; |
|||
namespace setTimeout { |
|||
const __promisify__: typeof setTimeoutPromise; |
|||
} |
|||
function clearTimeout(timeoutId: NodeJS.Timeout): void; |
|||
function setInterval<TArgs extends any[]>(callback: (...args: TArgs) => void, ms?: number, ...args: TArgs): NodeJS.Timer; |
|||
// util.promisify no rest args compability
|
|||
// tslint:disable-next-line void-return
|
|||
function setInterval(callback: (args: void) => void, ms?: number): NodeJS.Timer; |
|||
namespace setInterval { |
|||
const __promisify__: typeof setIntervalPromise; |
|||
} |
|||
function clearInterval(intervalId: NodeJS.Timeout): void; |
|||
function setImmediate<TArgs extends any[]>(callback: (...args: TArgs) => void, ...args: TArgs): NodeJS.Immediate; |
|||
// util.promisify no rest args compability
|
|||
// tslint:disable-next-line void-return
|
|||
function setImmediate(callback: (args: void) => void): NodeJS.Immediate; |
|||
namespace setImmediate { |
|||
const __promisify__: typeof setImmediatePromise; |
|||
} |
|||
function clearImmediate(immediateId: NodeJS.Immediate): void; |
|||
function queueMicrotask(callback: () => void): void; |
|||
} |
|||
} |
|||
declare module 'node:timers' { |
|||
export * from 'timers'; |
|||
} |
|||
@ -0,0 +1,68 @@ |
|||
/** |
|||
* The `timers/promises` API provides an alternative set of timer functions |
|||
* that return `Promise` objects. The API is accessible via`require('timers/promises')`. |
|||
* |
|||
* ```js
|
|||
* import { |
|||
* setTimeout, |
|||
* setImmediate, |
|||
* setInterval, |
|||
* } from 'timers/promises'; |
|||
* ```
|
|||
* @since v15.0.0 |
|||
*/ |
|||
declare module 'timers/promises' { |
|||
import { TimerOptions } from 'node:timers'; |
|||
/** |
|||
* ```js
|
|||
* import { |
|||
* setTimeout, |
|||
* } from 'timers/promises'; |
|||
* |
|||
* const res = await setTimeout(100, 'result'); |
|||
* |
|||
* console.log(res); // Prints 'result'
|
|||
* ```
|
|||
* @since v15.0.0 |
|||
* @param [delay=1] The number of milliseconds to wait before fulfilling the promise. |
|||
* @param value A value with which the promise is fulfilled. |
|||
*/ |
|||
function setTimeout<T = void>(delay?: number, value?: T, options?: TimerOptions): Promise<T>; |
|||
/** |
|||
* ```js
|
|||
* import { |
|||
* setImmediate, |
|||
* } from 'timers/promises'; |
|||
* |
|||
* const res = await setImmediate('result'); |
|||
* |
|||
* console.log(res); // Prints 'result'
|
|||
* ```
|
|||
* @since v15.0.0 |
|||
* @param value A value with which the promise is fulfilled. |
|||
*/ |
|||
function setImmediate<T = void>(value?: T, options?: TimerOptions): Promise<T>; |
|||
/** |
|||
* Returns an async iterator that generates values in an interval of `delay` ms. |
|||
* |
|||
* ```js
|
|||
* import { |
|||
* setInterval, |
|||
* } from 'timers/promises'; |
|||
* |
|||
* const interval = 100; |
|||
* for await (const startTime of setInterval(interval, Date.now())) { |
|||
* const now = Date.now(); |
|||
* console.log(now); |
|||
* if ((now - startTime) > 1000) |
|||
* break; |
|||
* } |
|||
* console.log(Date.now()); |
|||
* ```
|
|||
* @since v15.9.0 |
|||
*/ |
|||
function setInterval<T = void>(delay?: number, value?: T, options?: TimerOptions): AsyncIterable<T>; |
|||
} |
|||
declare module 'node:timers/promises' { |
|||
export * from 'timers/promises'; |
|||
} |
|||
1020
node_modules/@types/node/tls.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,161 @@ |
|||
/** |
|||
* The `trace_events` module provides a mechanism to centralize tracing information |
|||
* generated by V8, Node.js core, and userspace code. |
|||
* |
|||
* Tracing can be enabled with the `--trace-event-categories` command-line flag |
|||
* or by using the `trace_events` module. The `--trace-event-categories` flag |
|||
* accepts a list of comma-separated category names. |
|||
* |
|||
* The available categories are: |
|||
* |
|||
* * `node`: An empty placeholder. |
|||
* * `node.async_hooks`: Enables capture of detailed `async_hooks` trace data. |
|||
* The `async_hooks` events have a unique `asyncId` and a special `triggerId` `triggerAsyncId` property. |
|||
* * `node.bootstrap`: Enables capture of Node.js bootstrap milestones. |
|||
* * `node.console`: Enables capture of `console.time()` and `console.count()`output. |
|||
* * `node.dns.native`: Enables capture of trace data for DNS queries. |
|||
* * `node.environment`: Enables capture of Node.js Environment milestones. |
|||
* * `node.fs.sync`: Enables capture of trace data for file system sync methods. |
|||
* * `node.perf`: Enables capture of `Performance API` measurements. |
|||
* * `node.perf.usertiming`: Enables capture of only Performance API User Timing |
|||
* measures and marks. |
|||
* * `node.perf.timerify`: Enables capture of only Performance API timerify |
|||
* measurements. |
|||
* * `node.promises.rejections`: Enables capture of trace data tracking the number |
|||
* of unhandled Promise rejections and handled-after-rejections. |
|||
* * `node.vm.script`: Enables capture of trace data for the `vm` module's`runInNewContext()`, `runInContext()`, and `runInThisContext()` methods. |
|||
* * `v8`: The `V8` events are GC, compiling, and execution related. |
|||
* |
|||
* By default the `node`, `node.async_hooks`, and `v8` categories are enabled. |
|||
* |
|||
* ```bash
|
|||
* node --trace-event-categories v8,node,node.async_hooks server.js |
|||
* ```
|
|||
* |
|||
* Prior versions of Node.js required the use of the `--trace-events-enabled`flag to enable trace events. This requirement has been removed. However, the`--trace-events-enabled` flag _may_ still be |
|||
* used and will enable the`node`, `node.async_hooks`, and `v8` trace event categories by default. |
|||
* |
|||
* ```bash
|
|||
* node --trace-events-enabled |
|||
* |
|||
* # is equivalent to |
|||
* |
|||
* node --trace-event-categories v8,node,node.async_hooks |
|||
* ```
|
|||
* |
|||
* Alternatively, trace events may be enabled using the `trace_events` module: |
|||
* |
|||
* ```js
|
|||
* const trace_events = require('trace_events'); |
|||
* const tracing = trace_events.createTracing({ categories: ['node.perf'] }); |
|||
* tracing.enable(); // Enable trace event capture for the 'node.perf' category
|
|||
* |
|||
* // do work
|
|||
* |
|||
* tracing.disable(); // Disable trace event capture for the 'node.perf' category
|
|||
* ```
|
|||
* |
|||
* Running Node.js with tracing enabled will produce log files that can be opened |
|||
* in the [`chrome://tracing`](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool) tab of Chrome.
|
|||
* |
|||
* The logging file is by default called `node_trace.${rotation}.log`, where`${rotation}` is an incrementing log-rotation id. The filepath pattern can |
|||
* be specified with `--trace-event-file-pattern` that accepts a template |
|||
* string that supports `${rotation}` and `${pid}`: |
|||
* |
|||
* ```bash
|
|||
* node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js |
|||
* ```
|
|||
* |
|||
* The tracing system uses the same time source |
|||
* as the one used by `process.hrtime()`. |
|||
* However the trace-event timestamps are expressed in microseconds, |
|||
* unlike `process.hrtime()` which returns nanoseconds. |
|||
* |
|||
* The features from this module are not available in `Worker` threads. |
|||
* @experimental |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/trace_events.js)
|
|||
*/ |
|||
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`. |
|||
* |
|||
* ```js
|
|||
* const trace_events = require('trace_events'); |
|||
* const categories = ['node.perf', 'node.async_hooks']; |
|||
* const tracing = trace_events.createTracing({ categories }); |
|||
* tracing.enable(); |
|||
* // do stuff
|
|||
* tracing.disable(); |
|||
* ```
|
|||
* @since v10.0.0 |
|||
* @return . |
|||
*/ |
|||
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. |
|||
* |
|||
* Given the file `test.js` below, the command`node --trace-event-categories node.perf test.js` will print`'node.async_hooks,node.perf'` to the console. |
|||
* |
|||
* ```js
|
|||
* const trace_events = require('trace_events'); |
|||
* const t1 = trace_events.createTracing({ categories: ['node.async_hooks'] }); |
|||
* const t2 = trace_events.createTracing({ categories: ['node.perf'] }); |
|||
* const t3 = trace_events.createTracing({ categories: ['v8'] }); |
|||
* |
|||
* t1.enable(); |
|||
* t2.enable(); |
|||
* |
|||
* console.log(trace_events.getEnabledCategories()); |
|||
* ```
|
|||
* @since v10.0.0 |
|||
*/ |
|||
function getEnabledCategories(): string | undefined; |
|||
} |
|||
declare module 'node:trace_events' { |
|||
export * from 'trace_events'; |
|||
} |
|||
@ -0,0 +1,204 @@ |
|||
/** |
|||
* The `tty` module provides the `tty.ReadStream` and `tty.WriteStream` classes. |
|||
* In most cases, it will not be necessary or possible to use this module directly. |
|||
* However, it can be accessed using: |
|||
* |
|||
* ```js
|
|||
* const tty = require('tty'); |
|||
* ```
|
|||
* |
|||
* When Node.js detects that it is being run with a text terminal ("TTY") |
|||
* attached, `process.stdin` will, by default, be initialized as an instance of`tty.ReadStream` and both `process.stdout` and `process.stderr` will, by |
|||
* default, be instances of `tty.WriteStream`. The preferred method of determining |
|||
* whether Node.js is being run within a TTY context is to check that the value of |
|||
* the `process.stdout.isTTY` property is `true`: |
|||
* |
|||
* ```console
|
|||
* $ node -p -e "Boolean(process.stdout.isTTY)" |
|||
* true |
|||
* $ node -p -e "Boolean(process.stdout.isTTY)" | cat |
|||
* false |
|||
* ```
|
|||
* |
|||
* In most cases, there should be little to no reason for an application to |
|||
* manually create instances of the `tty.ReadStream` and `tty.WriteStream`classes. |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/tty.js)
|
|||
*/ |
|||
declare module 'tty' { |
|||
import * as net from 'node:net'; |
|||
/** |
|||
* The `tty.isatty()` method returns `true` if the given `fd` is associated with |
|||
* a TTY and `false` if it is not, including whenever `fd` is not a non-negative |
|||
* integer. |
|||
* @since v0.5.8 |
|||
* @param fd A numeric file descriptor |
|||
*/ |
|||
function isatty(fd: number): boolean; |
|||
/** |
|||
* Represents the readable side of a TTY. In normal circumstances `process.stdin` will be the only `tty.ReadStream` instance in a Node.js |
|||
* process and there should be no reason to create additional instances. |
|||
* @since v0.5.8 |
|||
*/ |
|||
class ReadStream extends net.Socket { |
|||
constructor(fd: number, options?: net.SocketConstructorOpts); |
|||
/** |
|||
* A `boolean` that is `true` if the TTY is currently configured to operate as a |
|||
* raw device. Defaults to `false`. |
|||
* @since v0.7.7 |
|||
*/ |
|||
isRaw: boolean; |
|||
/** |
|||
* Allows configuration of `tty.ReadStream` so that it operates as a raw device. |
|||
* |
|||
* When in raw mode, input is always available character-by-character, not |
|||
* including modifiers. Additionally, all special processing of characters by the |
|||
* terminal is disabled, including echoing input characters.Ctrl+C will no longer cause a `SIGINT` when in this mode. |
|||
* @since v0.7.7 |
|||
* @param mode If `true`, configures the `tty.ReadStream` to operate as a raw device. If `false`, configures the `tty.ReadStream` to operate in its default mode. The `readStream.isRaw` |
|||
* property will be set to the resulting mode. |
|||
* @return The read stream instance. |
|||
*/ |
|||
setRawMode(mode: boolean): this; |
|||
/** |
|||
* A `boolean` that is always `true` for `tty.ReadStream` instances. |
|||
* @since v0.5.8 |
|||
*/ |
|||
isTTY: boolean; |
|||
} |
|||
/** |
|||
* -1 - to the left from cursor |
|||
* 0 - the entire line |
|||
* 1 - to the right from cursor |
|||
*/ |
|||
type Direction = -1 | 0 | 1; |
|||
/** |
|||
* Represents the writable side of a TTY. In normal circumstances,`process.stdout` and `process.stderr` will be the only`tty.WriteStream` instances created for a Node.js process and there |
|||
* should be no reason to create additional instances. |
|||
* @since v0.5.8 |
|||
*/ |
|||
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; |
|||
/** |
|||
* `writeStream.clearLine()` clears the current line of this `WriteStream` in a |
|||
* direction identified by `dir`. |
|||
* @since v0.7.7 |
|||
* @param callback Invoked once the operation completes. |
|||
* @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. |
|||
*/ |
|||
clearLine(dir: Direction, callback?: () => void): boolean; |
|||
/** |
|||
* `writeStream.clearScreenDown()` clears this `WriteStream` from the current |
|||
* cursor down. |
|||
* @since v0.7.7 |
|||
* @param callback Invoked once the operation completes. |
|||
* @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. |
|||
*/ |
|||
clearScreenDown(callback?: () => void): boolean; |
|||
/** |
|||
* `writeStream.cursorTo()` moves this `WriteStream`'s cursor to the specified |
|||
* position. |
|||
* @since v0.7.7 |
|||
* @param callback Invoked once the operation completes. |
|||
* @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. |
|||
*/ |
|||
cursorTo(x: number, y?: number, callback?: () => void): boolean; |
|||
cursorTo(x: number, callback: () => void): boolean; |
|||
/** |
|||
* `writeStream.moveCursor()` moves this `WriteStream`'s cursor _relative_ to its |
|||
* current position. |
|||
* @since v0.7.7 |
|||
* @param callback Invoked once the operation completes. |
|||
* @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. |
|||
*/ |
|||
moveCursor(dx: number, dy: number, callback?: () => void): boolean; |
|||
/** |
|||
* Returns: |
|||
* |
|||
* * `1` for 2, |
|||
* * `4` for 16, |
|||
* * `8` for 256, |
|||
* * `24` for 16,777,216 colors supported. |
|||
* |
|||
* Use this to determine what colors the terminal supports. Due to the nature of |
|||
* colors in terminals it is possible to either have false positives or false |
|||
* negatives. It depends on process information and the environment variables that |
|||
* may lie about what terminal is used. |
|||
* It is possible to pass in an `env` object to simulate the usage of a specific |
|||
* terminal. This can be useful to check how specific environment settings behave. |
|||
* |
|||
* To enforce a specific color support, use one of the below environment settings. |
|||
* |
|||
* * 2 colors: `FORCE_COLOR = 0` (Disables colors) |
|||
* * 16 colors: `FORCE_COLOR = 1` |
|||
* * 256 colors: `FORCE_COLOR = 2` |
|||
* * 16,777,216 colors: `FORCE_COLOR = 3` |
|||
* |
|||
* Disabling color support is also possible by using the `NO_COLOR` and`NODE_DISABLE_COLORS` environment variables. |
|||
* @since v9.9.0 |
|||
* @param [env=process.env] An object containing the environment variables to check. This enables simulating the usage of a specific terminal. |
|||
*/ |
|||
getColorDepth(env?: object): number; |
|||
/** |
|||
* Returns `true` if the `writeStream` supports at least as many colors as provided |
|||
* in `count`. Minimum support is 2 (black and white). |
|||
* |
|||
* This has the same false positives and negatives as described in `writeStream.getColorDepth()`. |
|||
* |
|||
* ```js
|
|||
* process.stdout.hasColors(); |
|||
* // Returns true or false depending on if `stdout` supports at least 16 colors.
|
|||
* process.stdout.hasColors(256); |
|||
* // Returns true or false depending on if `stdout` supports at least 256 colors.
|
|||
* process.stdout.hasColors({ TMUX: '1' }); |
|||
* // Returns true.
|
|||
* process.stdout.hasColors(2 ** 24, { TMUX: '1' }); |
|||
* // Returns false (the environment setting pretends to support 2 ** 8 colors).
|
|||
* ```
|
|||
* @since v11.13.0, v10.16.0 |
|||
* @param [count=16] The number of colors that are requested (minimum 2). |
|||
* @param [env=process.env] An object containing the environment variables to check. This enables simulating the usage of a specific terminal. |
|||
*/ |
|||
hasColors(count?: number): boolean; |
|||
hasColors(env?: object): boolean; |
|||
hasColors(count: number, env?: object): boolean; |
|||
/** |
|||
* `writeStream.getWindowSize()` returns the size of the TTY |
|||
* corresponding to this `WriteStream`. The array is of the type`[numColumns, numRows]` where `numColumns` and `numRows` represent the number |
|||
* of columns and rows in the corresponding TTY. |
|||
* @since v0.7.7 |
|||
*/ |
|||
getWindowSize(): [number, number]; |
|||
/** |
|||
* A `number` specifying the number of columns the TTY currently has. This property |
|||
* is updated whenever the `'resize'` event is emitted. |
|||
* @since v0.7.7 |
|||
*/ |
|||
columns: number; |
|||
/** |
|||
* A `number` specifying the number of rows the TTY currently has. This property |
|||
* is updated whenever the `'resize'` event is emitted. |
|||
* @since v0.7.7 |
|||
*/ |
|||
rows: number; |
|||
/** |
|||
* A `boolean` that is always `true`. |
|||
* @since v0.5.8 |
|||
*/ |
|||
isTTY: boolean; |
|||
} |
|||
} |
|||
declare module 'node:tty' { |
|||
export * from 'tty'; |
|||
} |
|||
@ -0,0 +1,891 @@ |
|||
/** |
|||
* The `url` module provides utilities for URL resolution and parsing. It can be |
|||
* accessed using: |
|||
* |
|||
* ```js
|
|||
* import url from 'url'; |
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/url.js)
|
|||
*/ |
|||
declare module 'url' { |
|||
import { Blob } from 'node:buffer'; |
|||
import { ClientRequestArgs } from 'node:http'; |
|||
import { ParsedUrlQuery, ParsedUrlQueryInput } from 'node:querystring'; |
|||
// Input to `url.format`
|
|||
interface UrlObject { |
|||
auth?: string | null | undefined; |
|||
hash?: string | null | undefined; |
|||
host?: string | null | undefined; |
|||
hostname?: string | null | undefined; |
|||
href?: string | null | undefined; |
|||
pathname?: string | null | undefined; |
|||
protocol?: string | null | undefined; |
|||
search?: string | null | undefined; |
|||
slashes?: boolean | null | undefined; |
|||
port?: string | number | null | undefined; |
|||
query?: string | null | ParsedUrlQueryInput | undefined; |
|||
} |
|||
// 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; |
|||
} |
|||
/** |
|||
* The `url.parse()` method takes a URL string, parses it, and returns a URL |
|||
* object. |
|||
* |
|||
* A `TypeError` is thrown if `urlString` is not a string. |
|||
* |
|||
* A `URIError` is thrown if the `auth` property is present but cannot be decoded. |
|||
* |
|||
* Use of the legacy `url.parse()` method is discouraged. Users should |
|||
* use the WHATWG `URL` API. Because the `url.parse()` method uses a |
|||
* lenient, non-standard algorithm for parsing URL strings, security |
|||
* issues can be introduced. Specifically, issues with [host name spoofing](https://hackerone.com/reports/678487) and
|
|||
* incorrect handling of usernames and passwords have been identified. |
|||
* @since v0.1.25 |
|||
* @deprecated Legacy: Use the WHATWG URL API instead. |
|||
* @param urlString The URL string to parse. |
|||
* @param [parseQueryString=false] If `true`, the `query` property will always be set to an object returned by the {@link querystring} module's `parse()` method. If `false`, the `query` property |
|||
* on the returned URL object will be an unparsed, undecoded string. |
|||
* @param [slashesDenoteHost=false] If `true`, the first token after the literal string `//` and preceding the next `/` will be interpreted as the `host`. For instance, given `//foo/bar`, the |
|||
* result would be `{host: 'foo', pathname: '/bar'}` rather than `{pathname: '//foo/bar'}`. |
|||
*/ |
|||
function parse(urlString: string): UrlWithStringQuery; |
|||
function parse(urlString: string, parseQueryString: false | undefined, slashesDenoteHost?: boolean): UrlWithStringQuery; |
|||
function parse(urlString: string, parseQueryString: true, slashesDenoteHost?: boolean): UrlWithParsedQuery; |
|||
function parse(urlString: string, parseQueryString: boolean, slashesDenoteHost?: boolean): Url; |
|||
/** |
|||
* The `url.format()` method returns a formatted URL string derived from`urlObject`. |
|||
* |
|||
* ```js
|
|||
* const url = require('url'); |
|||
* url.format({ |
|||
* protocol: 'https', |
|||
* hostname: 'example.com', |
|||
* pathname: '/some/path', |
|||
* query: { |
|||
* page: 1, |
|||
* format: 'json' |
|||
* } |
|||
* }); |
|||
* |
|||
* // => 'https://example.com/some/path?page=1&format=json'
|
|||
* ```
|
|||
* |
|||
* If `urlObject` is not an object or a string, `url.format()` will throw a `TypeError`. |
|||
* |
|||
* The formatting process operates as follows: |
|||
* |
|||
* * A new empty string `result` is created. |
|||
* * If `urlObject.protocol` is a string, it is appended as-is to `result`. |
|||
* * Otherwise, if `urlObject.protocol` is not `undefined` and is not a string, an `Error` is thrown. |
|||
* * For all string values of `urlObject.protocol` that _do not end_ with an ASCII |
|||
* colon (`:`) character, the literal string `:` will be appended to `result`. |
|||
* * If either of the following conditions is true, then the literal string `//`will be appended to `result`: |
|||
* * `urlObject.slashes` property is true; |
|||
* * `urlObject.protocol` begins with `http`, `https`, `ftp`, `gopher`, or`file`; |
|||
* * If the value of the `urlObject.auth` property is truthy, and either`urlObject.host` or `urlObject.hostname` are not `undefined`, the value of`urlObject.auth` will be coerced into a string |
|||
* and appended to `result`followed by the literal string `@`. |
|||
* * If the `urlObject.host` property is `undefined` then: |
|||
* * If the `urlObject.hostname` is a string, it is appended to `result`. |
|||
* * Otherwise, if `urlObject.hostname` is not `undefined` and is not a string, |
|||
* an `Error` is thrown. |
|||
* * If the `urlObject.port` property value is truthy, and `urlObject.hostname`is not `undefined`: |
|||
* * The literal string `:` is appended to `result`, and |
|||
* * The value of `urlObject.port` is coerced to a string and appended to`result`. |
|||
* * Otherwise, if the `urlObject.host` property value is truthy, the value of`urlObject.host` is coerced to a string and appended to `result`. |
|||
* * If the `urlObject.pathname` property is a string that is not an empty string: |
|||
* * If the `urlObject.pathname`_does not start_ with an ASCII forward slash |
|||
* (`/`), then the literal string `'/'` is appended to `result`. |
|||
* * The value of `urlObject.pathname` is appended to `result`. |
|||
* * Otherwise, if `urlObject.pathname` is not `undefined` and is not a string, an `Error` is thrown. |
|||
* * If the `urlObject.search` property is `undefined` and if the `urlObject.query`property is an `Object`, the literal string `?` is appended to `result`followed by the output of calling the |
|||
* `querystring` module's `stringify()`method passing the value of `urlObject.query`. |
|||
* * Otherwise, if `urlObject.search` is a string: |
|||
* * If the value of `urlObject.search`_does not start_ with the ASCII question |
|||
* mark (`?`) character, the literal string `?` is appended to `result`. |
|||
* * The value of `urlObject.search` is appended to `result`. |
|||
* * Otherwise, if `urlObject.search` is not `undefined` and is not a string, an `Error` is thrown. |
|||
* * If the `urlObject.hash` property is a string: |
|||
* * If the value of `urlObject.hash`_does not start_ with the ASCII hash (`#`) |
|||
* character, the literal string `#` is appended to `result`. |
|||
* * The value of `urlObject.hash` is appended to `result`. |
|||
* * Otherwise, if the `urlObject.hash` property is not `undefined` and is not a |
|||
* string, an `Error` is thrown. |
|||
* * `result` is returned. |
|||
* @since v0.1.25 |
|||
* @deprecated Legacy: Use the WHATWG URL API instead. |
|||
* @param urlObject A URL object (as returned by `url.parse()` or constructed otherwise). If a string, it is converted to an object by passing it to `url.parse()`. |
|||
*/ |
|||
function format(urlObject: URL, options?: URLFormatOptions): string; |
|||
/** |
|||
* The `url.format()` method returns a formatted URL string derived from`urlObject`. |
|||
* |
|||
* ```js
|
|||
* const url = require('url'); |
|||
* url.format({ |
|||
* protocol: 'https', |
|||
* hostname: 'example.com', |
|||
* pathname: '/some/path', |
|||
* query: { |
|||
* page: 1, |
|||
* format: 'json' |
|||
* } |
|||
* }); |
|||
* |
|||
* // => 'https://example.com/some/path?page=1&format=json'
|
|||
* ```
|
|||
* |
|||
* If `urlObject` is not an object or a string, `url.format()` will throw a `TypeError`. |
|||
* |
|||
* The formatting process operates as follows: |
|||
* |
|||
* * A new empty string `result` is created. |
|||
* * If `urlObject.protocol` is a string, it is appended as-is to `result`. |
|||
* * Otherwise, if `urlObject.protocol` is not `undefined` and is not a string, an `Error` is thrown. |
|||
* * For all string values of `urlObject.protocol` that _do not end_ with an ASCII |
|||
* colon (`:`) character, the literal string `:` will be appended to `result`. |
|||
* * If either of the following conditions is true, then the literal string `//`will be appended to `result`: |
|||
* * `urlObject.slashes` property is true; |
|||
* * `urlObject.protocol` begins with `http`, `https`, `ftp`, `gopher`, or`file`; |
|||
* * If the value of the `urlObject.auth` property is truthy, and either`urlObject.host` or `urlObject.hostname` are not `undefined`, the value of`urlObject.auth` will be coerced into a string |
|||
* and appended to `result`followed by the literal string `@`. |
|||
* * If the `urlObject.host` property is `undefined` then: |
|||
* * If the `urlObject.hostname` is a string, it is appended to `result`. |
|||
* * Otherwise, if `urlObject.hostname` is not `undefined` and is not a string, |
|||
* an `Error` is thrown. |
|||
* * If the `urlObject.port` property value is truthy, and `urlObject.hostname`is not `undefined`: |
|||
* * The literal string `:` is appended to `result`, and |
|||
* * The value of `urlObject.port` is coerced to a string and appended to`result`. |
|||
* * Otherwise, if the `urlObject.host` property value is truthy, the value of`urlObject.host` is coerced to a string and appended to `result`. |
|||
* * If the `urlObject.pathname` property is a string that is not an empty string: |
|||
* * If the `urlObject.pathname`_does not start_ with an ASCII forward slash |
|||
* (`/`), then the literal string `'/'` is appended to `result`. |
|||
* * The value of `urlObject.pathname` is appended to `result`. |
|||
* * Otherwise, if `urlObject.pathname` is not `undefined` and is not a string, an `Error` is thrown. |
|||
* * If the `urlObject.search` property is `undefined` and if the `urlObject.query`property is an `Object`, the literal string `?` is appended to `result`followed by the output of calling the |
|||
* `querystring` module's `stringify()`method passing the value of `urlObject.query`. |
|||
* * Otherwise, if `urlObject.search` is a string: |
|||
* * If the value of `urlObject.search`_does not start_ with the ASCII question |
|||
* mark (`?`) character, the literal string `?` is appended to `result`. |
|||
* * The value of `urlObject.search` is appended to `result`. |
|||
* * Otherwise, if `urlObject.search` is not `undefined` and is not a string, an `Error` is thrown. |
|||
* * If the `urlObject.hash` property is a string: |
|||
* * If the value of `urlObject.hash`_does not start_ with the ASCII hash (`#`) |
|||
* character, the literal string `#` is appended to `result`. |
|||
* * The value of `urlObject.hash` is appended to `result`. |
|||
* * Otherwise, if the `urlObject.hash` property is not `undefined` and is not a |
|||
* string, an `Error` is thrown. |
|||
* * `result` is returned. |
|||
* @since v0.1.25 |
|||
* @deprecated Legacy: Use the WHATWG URL API instead. |
|||
* @param urlObject A URL object (as returned by `url.parse()` or constructed otherwise). If a string, it is converted to an object by passing it to `url.parse()`. |
|||
*/ |
|||
function format(urlObject: UrlObject | string): string; |
|||
/** |
|||
* The `url.resolve()` method resolves a target URL relative to a base URL in a |
|||
* manner similar to that of a Web browser resolving an anchor tag HREF. |
|||
* |
|||
* ```js
|
|||
* const url = require('url'); |
|||
* url.resolve('/one/two/three', 'four'); // '/one/two/four'
|
|||
* url.resolve('http://example.com/', '/one'); // 'http://example.com/one'
|
|||
* url.resolve('http://example.com/one', '/two'); // 'http://example.com/two'
|
|||
* ```
|
|||
* |
|||
* You can achieve the same result using the WHATWG URL API: |
|||
* |
|||
* ```js
|
|||
* function resolve(from, to) { |
|||
* const resolvedUrl = new URL(to, new URL(from, 'resolve://')); |
|||
* if (resolvedUrl.protocol === 'resolve:') { |
|||
* // `from` is a relative URL.
|
|||
* const { pathname, search, hash } = resolvedUrl; |
|||
* return pathname + search + hash; |
|||
* } |
|||
* return resolvedUrl.toString(); |
|||
* } |
|||
* |
|||
* resolve('/one/two/three', 'four'); // '/one/two/four'
|
|||
* resolve('http://example.com/', '/one'); // 'http://example.com/one'
|
|||
* resolve('http://example.com/one', '/two'); // 'http://example.com/two'
|
|||
* ```
|
|||
* @since v0.1.25 |
|||
* @deprecated Legacy: Use the WHATWG URL API instead. |
|||
* @param from The Base URL being resolved against. |
|||
* @param to The HREF URL being resolved. |
|||
*/ |
|||
function resolve(from: string, to: string): string; |
|||
/** |
|||
* Returns the [Punycode](https://tools.ietf.org/html/rfc5891#section-4.4) ASCII serialization of the `domain`. If `domain` is an
|
|||
* invalid domain, the empty string is returned. |
|||
* |
|||
* It performs the inverse operation to {@link domainToUnicode}. |
|||
* |
|||
* This feature is only available if the `node` executable was compiled with `ICU` enabled. If not, the domain names are passed through unchanged. |
|||
* |
|||
* ```js
|
|||
* import url from 'url'; |
|||
* |
|||
* console.log(url.domainToASCII('español.com')); |
|||
* // Prints xn--espaol-zwa.com
|
|||
* console.log(url.domainToASCII('中文.com')); |
|||
* // Prints xn--fiq228c.com
|
|||
* console.log(url.domainToASCII('xn--iñvalid.com')); |
|||
* // Prints an empty string
|
|||
* ```
|
|||
* @since v7.4.0, v6.13.0 |
|||
*/ |
|||
function domainToASCII(domain: string): string; |
|||
/** |
|||
* Returns the Unicode serialization of the `domain`. If `domain` is an invalid |
|||
* domain, the empty string is returned. |
|||
* |
|||
* It performs the inverse operation to {@link domainToASCII}. |
|||
* |
|||
* This feature is only available if the `node` executable was compiled with `ICU` enabled. If not, the domain names are passed through unchanged. |
|||
* |
|||
* ```js
|
|||
* import url from 'url'; |
|||
* |
|||
* console.log(url.domainToUnicode('xn--espaol-zwa.com')); |
|||
* // Prints español.com
|
|||
* console.log(url.domainToUnicode('xn--fiq228c.com')); |
|||
* // Prints 中文.com
|
|||
* console.log(url.domainToUnicode('xn--iñvalid.com')); |
|||
* // Prints an empty string
|
|||
* ```
|
|||
* @since v7.4.0, v6.13.0 |
|||
*/ |
|||
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. |
|||
* |
|||
* ```js
|
|||
* import { fileURLToPath } from 'url'; |
|||
* |
|||
* const __filename = fileURLToPath(import.meta.url); |
|||
* |
|||
* new URL('file:///C:/path/').pathname; // Incorrect: /C:/path/
|
|||
* fileURLToPath('file:///C:/path/'); // Correct: C:\path\ (Windows)
|
|||
* |
|||
* new URL('file://nas/foo.txt').pathname; // Incorrect: /foo.txt
|
|||
* fileURLToPath('file://nas/foo.txt'); // Correct: \\nas\foo.txt (Windows)
|
|||
* |
|||
* new URL('file:///你好.txt').pathname; // Incorrect: /%E4%BD%A0%E5%A5%BD.txt
|
|||
* fileURLToPath('file:///你好.txt'); // Correct: /你好.txt (POSIX)
|
|||
* |
|||
* new URL('file:///hello world').pathname; // Incorrect: /hello%20world
|
|||
* fileURLToPath('file:///hello world'); // Correct: /hello world (POSIX)
|
|||
* ```
|
|||
* @since v10.12.0 |
|||
* @param url The file URL string or URL object to convert to a path. |
|||
* @return The fully-resolved platform-specific Node.js file 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. |
|||
* |
|||
* ```js
|
|||
* import { pathToFileURL } from 'url'; |
|||
* |
|||
* new URL('/foo#1', 'file:'); // Incorrect: file:///foo#1
|
|||
* pathToFileURL('/foo#1'); // Correct: file:///foo%231 (POSIX)
|
|||
* |
|||
* new URL('/some/path%.c', 'file:'); // Incorrect: file:///some/path%.c
|
|||
* pathToFileURL('/some/path%.c'); // Correct: file:///some/path%25.c (POSIX)
|
|||
* ```
|
|||
* @since v10.12.0 |
|||
* @param path The path to convert to a File URL. |
|||
* @return The file URL object. |
|||
*/ |
|||
function pathToFileURL(path: string): URL; |
|||
/** |
|||
* This utility function converts a URL object into an ordinary options object as |
|||
* expected by the `http.request()` and `https.request()` APIs. |
|||
* |
|||
* ```js
|
|||
* import { urlToHttpOptions } from 'url'; |
|||
* const myURL = new URL('https://a:b@測試?abc#foo'); |
|||
* |
|||
* console.log(urlToHttpOptions(myURL)); |
|||
* |
|||
* { |
|||
* protocol: 'https:', |
|||
* hostname: 'xn--g6w251d', |
|||
* hash: '#foo', |
|||
* search: '?abc', |
|||
* pathname: '/', |
|||
* path: '/?abc', |
|||
* href: 'https://a:b@xn--g6w251d/?abc#foo', |
|||
* auth: 'a:b' |
|||
* } |
|||
* |
|||
* ```
|
|||
* @since v15.7.0, v14.18.0 |
|||
* @param url The `WHATWG URL` object to convert to an options object. |
|||
* @return Options object |
|||
*/ |
|||
function urlToHttpOptions(url: URL): ClientRequestArgs; |
|||
interface URLFormatOptions { |
|||
auth?: boolean | undefined; |
|||
fragment?: boolean | undefined; |
|||
search?: boolean | undefined; |
|||
unicode?: boolean | undefined; |
|||
} |
|||
/** |
|||
* Browser-compatible `URL` class, implemented by following the WHATWG URL |
|||
* Standard. [Examples of parsed URLs](https://url.spec.whatwg.org/#example-url-parsing) may be found in the Standard itself.
|
|||
* The `URL` class is also available on the global object. |
|||
* |
|||
* In accordance with browser conventions, all properties of `URL` objects |
|||
* are implemented as getters and setters on the class prototype, rather than as |
|||
* data properties on the object itself. Thus, unlike `legacy urlObject` s, |
|||
* using the `delete` keyword on any properties of `URL` objects (e.g. `delete myURL.protocol`, `delete myURL.pathname`, etc) has no effect but will still |
|||
* return `true`. |
|||
* @since v7.0.0, v6.13.0 |
|||
*/ |
|||
class URL { |
|||
/** |
|||
* Creates a `'blob:nodedata:...'` URL string that represents the given `Blob` object and can be used to retrieve the `Blob` later. |
|||
* |
|||
* ```js
|
|||
* const { |
|||
* Blob, |
|||
* resolveObjectURL, |
|||
* } = require('buffer'); |
|||
* |
|||
* const blob = new Blob(['hello']); |
|||
* const id = URL.createObjectURL(blob); |
|||
* |
|||
* // later...
|
|||
* |
|||
* const otherBlob = resolveObjectURL(id); |
|||
* console.log(otherBlob.size); |
|||
* ```
|
|||
* |
|||
* The data stored by the registered `Blob` will be retained in memory until`URL.revokeObjectURL()` is called to remove it. |
|||
* |
|||
* `Blob` objects are registered within the current thread. If using Worker |
|||
* Threads, `Blob` objects registered within one Worker will not be available |
|||
* to other workers or the main thread. |
|||
* @since v16.7.0 |
|||
* @experimental |
|||
*/ |
|||
static createObjectURL(blob: Blob): string; |
|||
/** |
|||
* Removes the stored `Blob` identified by the given ID. |
|||
* @since v16.7.0 |
|||
* @experimental |
|||
* @param id A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`. |
|||
*/ |
|||
static revokeObjectURL(objectUrl: string): void; |
|||
constructor(input: string, base?: string | URL); |
|||
/** |
|||
* Gets and sets the fragment portion of the URL. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://example.org/foo#bar'); |
|||
* console.log(myURL.hash); |
|||
* // Prints #bar
|
|||
* |
|||
* myURL.hash = 'baz'; |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org/foo#baz
|
|||
* ```
|
|||
* |
|||
* Invalid URL characters included in the value assigned to the `hash` property |
|||
* are `percent-encoded`. The selection of which characters to |
|||
* percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. |
|||
*/ |
|||
hash: string; |
|||
/** |
|||
* Gets and sets the host portion of the URL. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://example.org:81/foo'); |
|||
* console.log(myURL.host); |
|||
* // Prints example.org:81
|
|||
* |
|||
* myURL.host = 'example.com:82'; |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.com:82/foo
|
|||
* ```
|
|||
* |
|||
* Invalid host values assigned to the `host` property are ignored. |
|||
*/ |
|||
host: string; |
|||
/** |
|||
* Gets and sets the host name portion of the URL. The key difference between`url.host` and `url.hostname` is that `url.hostname` does _not_ include the |
|||
* port. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://example.org:81/foo'); |
|||
* console.log(myURL.hostname); |
|||
* // Prints example.org
|
|||
* |
|||
* // Setting the hostname does not change the port
|
|||
* myURL.hostname = 'example.com:82'; |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.com:81/foo
|
|||
* |
|||
* // Use myURL.host to change the hostname and port
|
|||
* myURL.host = 'example.org:82'; |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org:82/foo
|
|||
* ```
|
|||
* |
|||
* Invalid host name values assigned to the `hostname` property are ignored. |
|||
*/ |
|||
hostname: string; |
|||
/** |
|||
* Gets and sets the serialized URL. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://example.org/foo'); |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org/foo
|
|||
* |
|||
* myURL.href = 'https://example.com/bar'; |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.com/bar
|
|||
* ```
|
|||
* |
|||
* Getting the value of the `href` property is equivalent to calling {@link toString}. |
|||
* |
|||
* Setting the value of this property to a new value is equivalent to creating a |
|||
* new `URL` object using `new URL(value)`. Each of the `URL`object's properties will be modified. |
|||
* |
|||
* If the value assigned to the `href` property is not a valid URL, a `TypeError`will be thrown. |
|||
*/ |
|||
href: string; |
|||
/** |
|||
* Gets the read-only serialization of the URL's origin. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://example.org/foo/bar?baz'); |
|||
* console.log(myURL.origin); |
|||
* // Prints https://example.org
|
|||
* ```
|
|||
* |
|||
* ```js
|
|||
* const idnURL = new URL('https://測試'); |
|||
* console.log(idnURL.origin); |
|||
* // Prints https://xn--g6w251d
|
|||
* |
|||
* console.log(idnURL.hostname); |
|||
* // Prints xn--g6w251d
|
|||
* ```
|
|||
*/ |
|||
readonly origin: string; |
|||
/** |
|||
* Gets and sets the password portion of the URL. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://abc:xyz@example.com'); |
|||
* console.log(myURL.password); |
|||
* // Prints xyz
|
|||
* |
|||
* myURL.password = '123'; |
|||
* console.log(myURL.href); |
|||
* // Prints https://abc:123@example.com
|
|||
* ```
|
|||
* |
|||
* Invalid URL characters included in the value assigned to the `password` property |
|||
* are `percent-encoded`. The selection of which characters to |
|||
* percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. |
|||
*/ |
|||
password: string; |
|||
/** |
|||
* Gets and sets the path portion of the URL. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://example.org/abc/xyz?123'); |
|||
* console.log(myURL.pathname); |
|||
* // Prints /abc/xyz
|
|||
* |
|||
* myURL.pathname = '/abcdef'; |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org/abcdef?123
|
|||
* ```
|
|||
* |
|||
* Invalid URL characters included in the value assigned to the `pathname`property are `percent-encoded`. The selection of which characters |
|||
* to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. |
|||
*/ |
|||
pathname: string; |
|||
/** |
|||
* Gets and sets the port portion of the URL. |
|||
* |
|||
* The port value may be a number or a string containing a number in the range`0` to `65535` (inclusive). Setting the value to the default port of the`URL` objects given `protocol` will |
|||
* result in the `port` value becoming |
|||
* the empty string (`''`). |
|||
* |
|||
* The port value can be an empty string in which case the port depends on |
|||
* the protocol/scheme: |
|||
* |
|||
* <omitted> |
|||
* |
|||
* Upon assigning a value to the port, the value will first be converted to a |
|||
* string using `.toString()`. |
|||
* |
|||
* If that string is invalid but it begins with a number, the leading number is |
|||
* assigned to `port`. |
|||
* If the number lies outside the range denoted above, it is ignored. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://example.org:8888'); |
|||
* console.log(myURL.port); |
|||
* // Prints 8888
|
|||
* |
|||
* // Default ports are automatically transformed to the empty string
|
|||
* // (HTTPS protocol's default port is 443)
|
|||
* myURL.port = '443'; |
|||
* console.log(myURL.port); |
|||
* // Prints the empty string
|
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org/
|
|||
* |
|||
* myURL.port = 1234; |
|||
* console.log(myURL.port); |
|||
* // Prints 1234
|
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org:1234/
|
|||
* |
|||
* // Completely invalid port strings are ignored
|
|||
* myURL.port = 'abcd'; |
|||
* console.log(myURL.port); |
|||
* // Prints 1234
|
|||
* |
|||
* // Leading numbers are treated as a port number
|
|||
* myURL.port = '5678abcd'; |
|||
* console.log(myURL.port); |
|||
* // Prints 5678
|
|||
* |
|||
* // Non-integers are truncated
|
|||
* myURL.port = 1234.5678; |
|||
* console.log(myURL.port); |
|||
* // Prints 1234
|
|||
* |
|||
* // Out-of-range numbers which are not represented in scientific notation
|
|||
* // will be ignored.
|
|||
* myURL.port = 1e10; // 10000000000, will be range-checked as described below
|
|||
* console.log(myURL.port); |
|||
* // Prints 1234
|
|||
* ```
|
|||
* |
|||
* Numbers which contain a decimal point, |
|||
* such as floating-point numbers or numbers in scientific notation, |
|||
* are not an exception to this rule. |
|||
* Leading numbers up to the decimal point will be set as the URL's port, |
|||
* assuming they are valid: |
|||
* |
|||
* ```js
|
|||
* myURL.port = 4.567e21; |
|||
* console.log(myURL.port); |
|||
* // Prints 4 (because it is the leading number in the string '4.567e21')
|
|||
* ```
|
|||
*/ |
|||
port: string; |
|||
/** |
|||
* Gets and sets the protocol portion of the URL. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://example.org'); |
|||
* console.log(myURL.protocol); |
|||
* // Prints https:
|
|||
* |
|||
* myURL.protocol = 'ftp'; |
|||
* console.log(myURL.href); |
|||
* // Prints ftp://example.org/
|
|||
* ```
|
|||
* |
|||
* Invalid URL protocol values assigned to the `protocol` property are ignored. |
|||
*/ |
|||
protocol: string; |
|||
/** |
|||
* Gets and sets the serialized query portion of the URL. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://example.org/abc?123'); |
|||
* console.log(myURL.search); |
|||
* // Prints ?123
|
|||
* |
|||
* myURL.search = 'abc=xyz'; |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org/abc?abc=xyz
|
|||
* ```
|
|||
* |
|||
* Any invalid URL characters appearing in the value assigned the `search`property will be `percent-encoded`. The selection of which |
|||
* characters to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. |
|||
*/ |
|||
search: string; |
|||
/** |
|||
* Gets the `URLSearchParams` object representing the query parameters of the |
|||
* URL. This property is read-only but the `URLSearchParams` object it provides |
|||
* can be used to mutate the URL instance; to replace the entirety of query |
|||
* parameters of the URL, use the {@link search} setter. See `URLSearchParams` documentation for details. |
|||
* |
|||
* Use care when using `.searchParams` to modify the `URL` because, |
|||
* per the WHATWG specification, the `URLSearchParams` object uses |
|||
* different rules to determine which characters to percent-encode. For |
|||
* instance, the `URL` object will not percent encode the ASCII tilde (`~`) |
|||
* character, while `URLSearchParams` will always encode it: |
|||
* |
|||
* ```js
|
|||
* const myUrl = new URL('https://example.org/abc?foo=~bar'); |
|||
* |
|||
* console.log(myUrl.search); // prints ?foo=~bar
|
|||
* |
|||
* // Modify the URL via searchParams...
|
|||
* myUrl.searchParams.sort(); |
|||
* |
|||
* console.log(myUrl.search); // prints ?foo=%7Ebar
|
|||
* ```
|
|||
*/ |
|||
readonly searchParams: URLSearchParams; |
|||
/** |
|||
* Gets and sets the username portion of the URL. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://abc:xyz@example.com'); |
|||
* console.log(myURL.username); |
|||
* // Prints abc
|
|||
* |
|||
* myURL.username = '123'; |
|||
* console.log(myURL.href); |
|||
* // Prints https://123:xyz@example.com/
|
|||
* ```
|
|||
* |
|||
* Any invalid URL characters appearing in the value assigned the `username`property will be `percent-encoded`. The selection of which |
|||
* characters to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. |
|||
*/ |
|||
username: string; |
|||
/** |
|||
* The `toString()` method on the `URL` object returns the serialized URL. The |
|||
* value returned is equivalent to that of {@link href} and {@link toJSON}. |
|||
*/ |
|||
toString(): string; |
|||
/** |
|||
* The `toJSON()` method on the `URL` object returns the serialized URL. The |
|||
* value returned is equivalent to that of {@link href} and {@link toString}. |
|||
* |
|||
* This method is automatically called when an `URL` object is serialized |
|||
* with [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify).
|
|||
* |
|||
* ```js
|
|||
* const myURLs = [ |
|||
* new URL('https://www.example.com'), |
|||
* new URL('https://test.example.org'), |
|||
* ]; |
|||
* console.log(JSON.stringify(myURLs)); |
|||
* // Prints ["https://www.example.com/","https://test.example.org/"]
|
|||
* ```
|
|||
*/ |
|||
toJSON(): string; |
|||
} |
|||
/** |
|||
* The `URLSearchParams` API provides read and write access to the query of a`URL`. The `URLSearchParams` class can also be used standalone with one of the |
|||
* four following constructors. |
|||
* The `URLSearchParams` class is also available on the global object. |
|||
* |
|||
* The WHATWG `URLSearchParams` interface and the `querystring` module have |
|||
* similar purpose, but the purpose of the `querystring` module is more |
|||
* general, as it allows the customization of delimiter characters (`&` and `=`). |
|||
* On the other hand, this API is designed purely for URL query strings. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://example.org/?abc=123'); |
|||
* console.log(myURL.searchParams.get('abc')); |
|||
* // Prints 123
|
|||
* |
|||
* myURL.searchParams.append('abc', 'xyz'); |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org/?abc=123&abc=xyz
|
|||
* |
|||
* myURL.searchParams.delete('abc'); |
|||
* myURL.searchParams.set('a', 'b'); |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org/?a=b
|
|||
* |
|||
* const newSearchParams = new URLSearchParams(myURL.searchParams); |
|||
* // The above is equivalent to
|
|||
* // const newSearchParams = new URLSearchParams(myURL.search);
|
|||
* |
|||
* newSearchParams.append('a', 'c'); |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org/?a=b
|
|||
* console.log(newSearchParams.toString()); |
|||
* // Prints a=b&a=c
|
|||
* |
|||
* // newSearchParams.toString() is implicitly called
|
|||
* myURL.search = newSearchParams; |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org/?a=b&a=c
|
|||
* newSearchParams.delete('a'); |
|||
* console.log(myURL.href); |
|||
* // Prints https://example.org/?a=b&a=c
|
|||
* ```
|
|||
* @since v7.5.0, v6.13.0 |
|||
*/ |
|||
class URLSearchParams implements Iterable<[string, string]> { |
|||
constructor(init?: URLSearchParams | string | Record<string, string | ReadonlyArray<string>> | Iterable<[string, string]> | ReadonlyArray<[string, string]>); |
|||
/** |
|||
* Append a new name-value pair to the query string. |
|||
*/ |
|||
append(name: string, value: string): void; |
|||
/** |
|||
* Remove all name-value pairs whose name is `name`. |
|||
*/ |
|||
delete(name: string): void; |
|||
/** |
|||
* Returns an ES6 `Iterator` over each of the name-value pairs in the query. |
|||
* Each item of the iterator is a JavaScript `Array`. The first item of the `Array`is the `name`, the second item of the `Array` is the `value`. |
|||
* |
|||
* Alias for `urlSearchParams[@@iterator]()`. |
|||
*/ |
|||
entries(): IterableIterator<[string, string]>; |
|||
/** |
|||
* Iterates over each name-value pair in the query and invokes the given function. |
|||
* |
|||
* ```js
|
|||
* const myURL = new URL('https://example.org/?a=b&c=d'); |
|||
* myURL.searchParams.forEach((value, name, searchParams) => { |
|||
* console.log(name, value, myURL.searchParams === searchParams); |
|||
* }); |
|||
* // Prints:
|
|||
* // a b true
|
|||
* // c d true
|
|||
* ```
|
|||
* @param fn Invoked for each name-value pair in the query |
|||
* @param thisArg To be used as `this` value for when `fn` is called |
|||
*/ |
|||
forEach<TThis = this>(callback: (this: TThis, value: string, name: string, searchParams: URLSearchParams) => void, thisArg?: TThis): void; |
|||
/** |
|||
* Returns the value of the first name-value pair whose name is `name`. If there |
|||
* are no such pairs, `null` is returned. |
|||
* @return or `null` if there is no name-value pair with the given `name`. |
|||
*/ |
|||
get(name: string): string | null; |
|||
/** |
|||
* Returns the values of all name-value pairs whose name is `name`. If there are |
|||
* no such pairs, an empty array is returned. |
|||
*/ |
|||
getAll(name: string): string[]; |
|||
/** |
|||
* Returns `true` if there is at least one name-value pair whose name is `name`. |
|||
*/ |
|||
has(name: string): boolean; |
|||
/** |
|||
* Returns an ES6 `Iterator` over the names of each name-value pair. |
|||
* |
|||
* ```js
|
|||
* const params = new URLSearchParams('foo=bar&foo=baz'); |
|||
* for (const name of params.keys()) { |
|||
* console.log(name); |
|||
* } |
|||
* // Prints:
|
|||
* // foo
|
|||
* // foo
|
|||
* ```
|
|||
*/ |
|||
keys(): IterableIterator<string>; |
|||
/** |
|||
* Sets the value in the `URLSearchParams` object associated with `name` to`value`. If there are any pre-existing name-value pairs whose names are `name`, |
|||
* set the first such pair's value to `value` and remove all others. If not, |
|||
* append the name-value pair to the query string. |
|||
* |
|||
* ```js
|
|||
* const params = new URLSearchParams(); |
|||
* params.append('foo', 'bar'); |
|||
* params.append('foo', 'baz'); |
|||
* params.append('abc', 'def'); |
|||
* console.log(params.toString()); |
|||
* // Prints foo=bar&foo=baz&abc=def
|
|||
* |
|||
* params.set('foo', 'def'); |
|||
* params.set('xyz', 'opq'); |
|||
* console.log(params.toString()); |
|||
* // Prints foo=def&abc=def&xyz=opq
|
|||
* ```
|
|||
*/ |
|||
set(name: string, value: string): void; |
|||
/** |
|||
* Sort all existing name-value pairs in-place by their names. Sorting is done |
|||
* with a [stable sorting algorithm](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability), so relative order between name-value pairs
|
|||
* with the same name is preserved. |
|||
* |
|||
* This method can be used, in particular, to increase cache hits. |
|||
* |
|||
* ```js
|
|||
* const params = new URLSearchParams('query[]=abc&type=search&query[]=123'); |
|||
* params.sort(); |
|||
* console.log(params.toString()); |
|||
* // Prints query%5B%5D=abc&query%5B%5D=123&type=search
|
|||
* ```
|
|||
* @since v7.7.0, v6.13.0 |
|||
*/ |
|||
sort(): void; |
|||
/** |
|||
* Returns the search parameters serialized as a string, with characters |
|||
* percent-encoded where necessary. |
|||
*/ |
|||
toString(): string; |
|||
/** |
|||
* Returns an ES6 `Iterator` over the values of each name-value pair. |
|||
*/ |
|||
values(): IterableIterator<string>; |
|||
[Symbol.iterator](): IterableIterator<[string, string]>; |
|||
} |
|||
|
|||
import { URL as _URL, URLSearchParams as _URLSearchParams } from 'url'; |
|||
global { |
|||
interface URLSearchParams extends _URLSearchParams {} |
|||
interface URL extends _URL {} |
|||
interface Global { |
|||
URL: typeof _URL; |
|||
URLSearchParams: typeof _URLSearchParams; |
|||
} |
|||
/** |
|||
* `URL` class is a global reference for `require('url').URL` |
|||
* https://nodejs.org/api/url.html#the-whatwg-url-api
|
|||
* @since v10.0.0 |
|||
*/ |
|||
var URL: |
|||
// For compatibility with "dom" and "webworker" URL declarations
|
|||
typeof globalThis extends { onmessage: any, URL: infer URL } |
|||
? URL |
|||
: typeof _URL; |
|||
/** |
|||
* `URLSearchParams` class is a global reference for `require('url').URLSearchParams` |
|||
* https://nodejs.org/api/url.html#class-urlsearchparams
|
|||
* @since v10.0.0 |
|||
*/ |
|||
var URLSearchParams: |
|||
// For compatibility with "dom" and "webworker" URLSearchParams declarations
|
|||
typeof globalThis extends { onmessage: any, URLSearchParams: infer URLSearchParams } |
|||
? URLSearchParams |
|||
: typeof _URLSearchParams; |
|||
} |
|||
} |
|||
declare module 'node:url' { |
|||
export * from 'url'; |
|||
} |
|||
1594
node_modules/@types/node/util.d.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,378 @@ |
|||
/** |
|||
* The `v8` module exposes APIs that are specific to the version of [V8](https://developers.google.com/v8/) built into the Node.js binary. It can be accessed using:
|
|||
* |
|||
* ```js
|
|||
* const v8 = require('v8'); |
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/v8.js)
|
|||
*/ |
|||
declare module 'v8' { |
|||
import { Readable } from 'node:stream'; |
|||
interface HeapSpaceInfo { |
|||
space_name: string; |
|||
space_size: number; |
|||
space_used_size: number; |
|||
space_available_size: number; |
|||
physical_space_size: number; |
|||
} |
|||
// ** Signifies if the --zap_code_space option is enabled or not. 1 == enabled, 0 == disabled. */
|
|||
type DoesZapCodeSpaceFlag = 0 | 1; |
|||
interface HeapInfo { |
|||
total_heap_size: number; |
|||
total_heap_size_executable: number; |
|||
total_physical_size: number; |
|||
total_available_size: number; |
|||
used_heap_size: number; |
|||
heap_size_limit: number; |
|||
malloced_memory: number; |
|||
peak_malloced_memory: number; |
|||
does_zap_garbage: DoesZapCodeSpaceFlag; |
|||
number_of_native_contexts: number; |
|||
number_of_detached_contexts: number; |
|||
} |
|||
interface HeapCodeStatistics { |
|||
code_and_metadata_size: number; |
|||
bytecode_and_metadata_size: number; |
|||
external_script_source_size: number; |
|||
} |
|||
/** |
|||
* Returns an integer representing a version tag derived from the V8 version, |
|||
* command-line flags, and detected CPU features. This is useful for determining |
|||
* whether a `vm.Script` `cachedData` buffer is compatible with this instance |
|||
* of V8. |
|||
* |
|||
* ```js
|
|||
* console.log(v8.cachedDataVersionTag()); // 3947234607
|
|||
* // The value returned by v8.cachedDataVersionTag() is derived from the V8
|
|||
* // version, command-line flags, and detected CPU features. Test that the value
|
|||
* // does indeed update when flags are toggled.
|
|||
* v8.setFlagsFromString('--allow_natives_syntax'); |
|||
* console.log(v8.cachedDataVersionTag()); // 183726201
|
|||
* ```
|
|||
* @since v8.0.0 |
|||
*/ |
|||
function cachedDataVersionTag(): number; |
|||
/** |
|||
* Returns an object with the following properties: |
|||
* |
|||
* `does_zap_garbage` is a 0/1 boolean, which signifies whether the`--zap_code_space` option is enabled or not. This makes V8 overwrite heap |
|||
* garbage with a bit pattern. The RSS footprint (resident set size) gets bigger |
|||
* because it continuously touches all heap pages and that makes them less likely |
|||
* to get swapped out by the operating system. |
|||
* |
|||
* `number_of_native_contexts` The value of native\_context is the number of the |
|||
* top-level contexts currently active. Increase of this number over time indicates |
|||
* a memory leak. |
|||
* |
|||
* `number_of_detached_contexts` The value of detached\_context is the number |
|||
* of contexts that were detached and not yet garbage collected. This number |
|||
* being non-zero indicates a potential memory leak. |
|||
* |
|||
* ```js
|
|||
* { |
|||
* total_heap_size: 7326976, |
|||
* total_heap_size_executable: 4194304, |
|||
* total_physical_size: 7326976, |
|||
* total_available_size: 1152656, |
|||
* used_heap_size: 3476208, |
|||
* heap_size_limit: 1535115264, |
|||
* malloced_memory: 16384, |
|||
* peak_malloced_memory: 1127496, |
|||
* does_zap_garbage: 0, |
|||
* number_of_native_contexts: 1, |
|||
* number_of_detached_contexts: 0 |
|||
* } |
|||
* ```
|
|||
* @since v1.0.0 |
|||
*/ |
|||
function getHeapStatistics(): HeapInfo; |
|||
/** |
|||
* Returns statistics about the V8 heap spaces, i.e. the segments which make up |
|||
* the V8 heap. Neither the ordering of heap spaces, nor the availability of a |
|||
* heap space can be guaranteed as the statistics are provided via the |
|||
* V8[`GetHeapSpaceStatistics`](https://v8docs.nodesource.com/node-13.2/d5/dda/classv8_1_1_isolate.html#ac673576f24fdc7a33378f8f57e1d13a4) function and may change from one V8 version to the
|
|||
* next. |
|||
* |
|||
* The value returned is an array of objects containing the following properties: |
|||
* |
|||
* ```json
|
|||
* [ |
|||
* { |
|||
* "space_name": "new_space", |
|||
* "space_size": 2063872, |
|||
* "space_used_size": 951112, |
|||
* "space_available_size": 80824, |
|||
* "physical_space_size": 2063872 |
|||
* }, |
|||
* { |
|||
* "space_name": "old_space", |
|||
* "space_size": 3090560, |
|||
* "space_used_size": 2493792, |
|||
* "space_available_size": 0, |
|||
* "physical_space_size": 3090560 |
|||
* }, |
|||
* { |
|||
* "space_name": "code_space", |
|||
* "space_size": 1260160, |
|||
* "space_used_size": 644256, |
|||
* "space_available_size": 960, |
|||
* "physical_space_size": 1260160 |
|||
* }, |
|||
* { |
|||
* "space_name": "map_space", |
|||
* "space_size": 1094160, |
|||
* "space_used_size": 201608, |
|||
* "space_available_size": 0, |
|||
* "physical_space_size": 1094160 |
|||
* }, |
|||
* { |
|||
* "space_name": "large_object_space", |
|||
* "space_size": 0, |
|||
* "space_used_size": 0, |
|||
* "space_available_size": 1490980608, |
|||
* "physical_space_size": 0 |
|||
* } |
|||
* ] |
|||
* ```
|
|||
* @since v6.0.0 |
|||
*/ |
|||
function getHeapSpaceStatistics(): HeapSpaceInfo[]; |
|||
/** |
|||
* The `v8.setFlagsFromString()` method can be used to programmatically set |
|||
* V8 command-line flags. This method should be used with care. Changing settings |
|||
* after the VM has started may result in unpredictable behavior, including |
|||
* crashes and data loss; or it may simply do nothing. |
|||
* |
|||
* The V8 options available for a version of Node.js may be determined by running`node --v8-options`. |
|||
* |
|||
* Usage: |
|||
* |
|||
* ```js
|
|||
* // Print GC events to stdout for one minute.
|
|||
* const v8 = require('v8'); |
|||
* v8.setFlagsFromString('--trace_gc'); |
|||
* setTimeout(() => { v8.setFlagsFromString('--notrace_gc'); }, 60e3); |
|||
* ```
|
|||
* @since v1.0.0 |
|||
*/ |
|||
function setFlagsFromString(flags: string): void; |
|||
/** |
|||
* Generates a snapshot of the current V8 heap and returns a Readable |
|||
* Stream that may be used to read the JSON serialized representation. |
|||
* This JSON stream format is intended to be used with tools such as |
|||
* Chrome DevTools. The JSON schema is undocumented and specific to the |
|||
* V8 engine. Therefore, the schema may change from one version of V8 to the next. |
|||
* |
|||
* ```js
|
|||
* // Print heap snapshot to the console
|
|||
* const v8 = require('v8'); |
|||
* const stream = v8.getHeapSnapshot(); |
|||
* stream.pipe(process.stdout); |
|||
* ```
|
|||
* @since v11.13.0 |
|||
* @return A Readable Stream containing the V8 heap snapshot |
|||
*/ |
|||
function getHeapSnapshot(): Readable; |
|||
/** |
|||
* Generates a snapshot of the current V8 heap and writes it to a JSON |
|||
* file. This file is intended to be used with tools such as Chrome |
|||
* DevTools. The JSON schema is undocumented and specific to the V8 |
|||
* engine, and may change from one version of V8 to the next. |
|||
* |
|||
* A heap snapshot is specific to a single V8 isolate. When using `worker threads`, a heap snapshot generated from the main thread will |
|||
* not contain any information about the workers, and vice versa. |
|||
* |
|||
* ```js
|
|||
* const { writeHeapSnapshot } = require('v8'); |
|||
* const { |
|||
* Worker, |
|||
* isMainThread, |
|||
* parentPort |
|||
* } = require('worker_threads'); |
|||
* |
|||
* if (isMainThread) { |
|||
* const worker = new Worker(__filename); |
|||
* |
|||
* worker.once('message', (filename) => { |
|||
* console.log(`worker heapdump: ${filename}`); |
|||
* // Now get a heapdump for the main thread.
|
|||
* console.log(`main thread heapdump: ${writeHeapSnapshot()}`); |
|||
* }); |
|||
* |
|||
* // Tell the worker to create a heapdump.
|
|||
* worker.postMessage('heapdump'); |
|||
* } else { |
|||
* parentPort.once('message', (message) => { |
|||
* if (message === 'heapdump') { |
|||
* // Generate a heapdump for the worker
|
|||
* // and return the filename to the parent.
|
|||
* parentPort.postMessage(writeHeapSnapshot()); |
|||
* } |
|||
* }); |
|||
* } |
|||
* ```
|
|||
* @since v11.13.0 |
|||
* @param filename The file path where the V8 heap snapshot is to be saved. If not specified, a file name with the pattern `'Heap-${yyyymmdd}-${hhmmss}-${pid}-${thread_id}.heapsnapshot'` will be |
|||
* generated, where `{pid}` will be the PID of the Node.js process, `{thread_id}` will be `0` when `writeHeapSnapshot()` is called from the main Node.js thread or the id of a |
|||
* worker thread. |
|||
* @return The filename where the snapshot was saved. |
|||
*/ |
|||
function writeHeapSnapshot(filename?: string): string; |
|||
/** |
|||
* Returns an object with the following properties: |
|||
* |
|||
* ```js
|
|||
* { |
|||
* code_and_metadata_size: 212208, |
|||
* bytecode_and_metadata_size: 161368, |
|||
* external_script_source_size: 1410794 |
|||
* } |
|||
* ```
|
|||
* @since v12.8.0 |
|||
*/ |
|||
function getHeapCodeStatistics(): HeapCodeStatistics; |
|||
/** |
|||
* @since v8.0.0 |
|||
*/ |
|||
class Serializer { |
|||
/** |
|||
* Writes out a header, which includes the serialization format version. |
|||
*/ |
|||
writeHeader(): void; |
|||
/** |
|||
* Serializes a JavaScript value and adds the serialized representation to the |
|||
* internal buffer. |
|||
* |
|||
* This throws an error if `value` cannot be serialized. |
|||
*/ |
|||
writeValue(val: any): boolean; |
|||
/** |
|||
* Returns the stored internal buffer. This serializer should not be used once |
|||
* the buffer is released. Calling this method results in undefined behavior |
|||
* if a previous write has failed. |
|||
*/ |
|||
releaseBuffer(): Buffer; |
|||
/** |
|||
* Marks an `ArrayBuffer` as having its contents transferred out of band. |
|||
* Pass the corresponding `ArrayBuffer` in the deserializing context to `deserializer.transferArrayBuffer()`. |
|||
* @param id A 32-bit unsigned integer. |
|||
* @param arrayBuffer An `ArrayBuffer` instance. |
|||
*/ |
|||
transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; |
|||
/** |
|||
* Write a raw 32-bit unsigned integer. |
|||
* For use inside of a custom `serializer._writeHostObject()`. |
|||
*/ |
|||
writeUint32(value: number): void; |
|||
/** |
|||
* Write a raw 64-bit unsigned integer, split into high and low 32-bit parts. |
|||
* For use inside of a custom `serializer._writeHostObject()`. |
|||
*/ |
|||
writeUint64(hi: number, lo: number): void; |
|||
/** |
|||
* Write a JS `number` value. |
|||
* For use inside of a custom `serializer._writeHostObject()`. |
|||
*/ |
|||
writeDouble(value: number): void; |
|||
/** |
|||
* Write raw bytes into the serializer’s internal buffer. The deserializer |
|||
* will require a way to compute the length of the buffer. |
|||
* For use inside of a custom `serializer._writeHostObject()`. |
|||
*/ |
|||
writeRawBytes(buffer: NodeJS.TypedArray): void; |
|||
} |
|||
/** |
|||
* A subclass of `Serializer` that serializes `TypedArray`(in particular `Buffer`) and `DataView` objects as host objects, and only |
|||
* stores the part of their underlying `ArrayBuffer`s that they are referring to. |
|||
* @since v8.0.0 |
|||
*/ |
|||
class DefaultSerializer extends Serializer {} |
|||
/** |
|||
* @since v8.0.0 |
|||
*/ |
|||
class Deserializer { |
|||
constructor(data: NodeJS.TypedArray); |
|||
/** |
|||
* Reads and validates a header (including the format version). |
|||
* May, for example, reject an invalid or unsupported wire format. In that case, |
|||
* an `Error` is thrown. |
|||
*/ |
|||
readHeader(): boolean; |
|||
/** |
|||
* Deserializes a JavaScript value from the buffer and returns it. |
|||
*/ |
|||
readValue(): any; |
|||
/** |
|||
* Marks an `ArrayBuffer` as having its contents transferred out of band. |
|||
* Pass the corresponding `ArrayBuffer` in the serializing context to `serializer.transferArrayBuffer()` (or return the `id` from `serializer._getSharedArrayBufferId()` in the case of |
|||
* `SharedArrayBuffer`s). |
|||
* @param id A 32-bit unsigned integer. |
|||
* @param arrayBuffer An `ArrayBuffer` instance. |
|||
*/ |
|||
transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; |
|||
/** |
|||
* Reads the underlying wire format version. Likely mostly to be useful to |
|||
* legacy code reading old wire format versions. May not be called before`.readHeader()`. |
|||
*/ |
|||
getWireFormatVersion(): number; |
|||
/** |
|||
* Read a raw 32-bit unsigned integer and return it. |
|||
* For use inside of a custom `deserializer._readHostObject()`. |
|||
*/ |
|||
readUint32(): number; |
|||
/** |
|||
* Read a raw 64-bit unsigned integer and return it as an array `[hi, lo]`with two 32-bit unsigned integer entries. |
|||
* For use inside of a custom `deserializer._readHostObject()`. |
|||
*/ |
|||
readUint64(): [number, number]; |
|||
/** |
|||
* Read a JS `number` value. |
|||
* For use inside of a custom `deserializer._readHostObject()`. |
|||
*/ |
|||
readDouble(): number; |
|||
/** |
|||
* Read raw bytes from the deserializer’s internal buffer. The `length` parameter |
|||
* must correspond to the length of the buffer that was passed to `serializer.writeRawBytes()`. |
|||
* For use inside of a custom `deserializer._readHostObject()`. |
|||
*/ |
|||
readRawBytes(length: number): Buffer; |
|||
} |
|||
/** |
|||
* A subclass of `Deserializer` corresponding to the format written by `DefaultSerializer`. |
|||
* @since v8.0.0 |
|||
*/ |
|||
class DefaultDeserializer extends Deserializer {} |
|||
/** |
|||
* Uses a `DefaultSerializer` to serialize `value` into a buffer. |
|||
* @since v8.0.0 |
|||
*/ |
|||
function serialize(value: any): Buffer; |
|||
/** |
|||
* Uses a `DefaultDeserializer` with default options to read a JS value |
|||
* from a buffer. |
|||
* @since v8.0.0 |
|||
* @param buffer A buffer returned by {@link serialize}. |
|||
*/ |
|||
function deserialize(buffer: NodeJS.TypedArray): any; |
|||
/** |
|||
* The `v8.takeCoverage()` method allows the user to write the coverage started by `NODE_V8_COVERAGE` to disk on demand. This method can be invoked multiple |
|||
* times during the lifetime of the process. Each time the execution counter will |
|||
* be reset and a new coverage report will be written to the directory specified |
|||
* by `NODE_V8_COVERAGE`. |
|||
* |
|||
* When the process is about to exit, one last coverage will still be written to |
|||
* disk unless {@link stopCoverage} is invoked before the process exits. |
|||
* @since v15.1.0, v14.18.0, v12.22.0 |
|||
*/ |
|||
function takeCoverage(): void; |
|||
/** |
|||
* The `v8.stopCoverage()` method allows the user to stop the coverage collection |
|||
* started by `NODE_V8_COVERAGE`, so that V8 can release the execution count |
|||
* records and optimize code. This can be used in conjunction with {@link takeCoverage} if the user wants to collect the coverage on demand. |
|||
* @since v15.1.0, v14.18.0, v12.22.0 |
|||
*/ |
|||
function stopCoverage(): void; |
|||
} |
|||
declare module 'node:v8' { |
|||
export * from 'v8'; |
|||
} |
|||
@ -0,0 +1,507 @@ |
|||
/** |
|||
* The `vm` module enables compiling and running code within V8 Virtual |
|||
* Machine contexts. **The `vm` module is not a security mechanism. Do** |
|||
* **not use it to run untrusted code.** |
|||
* |
|||
* JavaScript code can be compiled and run immediately or |
|||
* compiled, saved, and run later. |
|||
* |
|||
* A common use case is to run the code in a different V8 Context. This means |
|||
* invoked code has a different global object than the invoking code. |
|||
* |
|||
* One can provide the context by `contextifying` an |
|||
* object. The invoked code treats any property in the context like a |
|||
* global variable. Any changes to global variables caused by the invoked |
|||
* code are reflected in the context object. |
|||
* |
|||
* ```js
|
|||
* const vm = require('vm'); |
|||
* |
|||
* const x = 1; |
|||
* |
|||
* const context = { x: 2 }; |
|||
* vm.createContext(context); // Contextify the object.
|
|||
* |
|||
* const code = 'x += 40; var y = 17;'; |
|||
* // `x` and `y` are global variables in the context.
|
|||
* // Initially, x has the value 2 because that is the value of context.x.
|
|||
* vm.runInContext(code, context); |
|||
* |
|||
* console.log(context.x); // 42
|
|||
* console.log(context.y); // 17
|
|||
* |
|||
* console.log(x); // 1; y is not defined.
|
|||
* ```
|
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/vm.js)
|
|||
*/ |
|||
declare module 'vm' { |
|||
interface Context extends NodeJS.Dict<any> {} |
|||
interface BaseOptions { |
|||
/** |
|||
* Specifies the filename used in stack traces produced by this script. |
|||
* Default: `''`. |
|||
*/ |
|||
filename?: string | undefined; |
|||
/** |
|||
* Specifies the line number offset that is displayed in stack traces produced by this script. |
|||
* Default: `0`. |
|||
*/ |
|||
lineOffset?: number | undefined; |
|||
/** |
|||
* Specifies the column number offset that is displayed in stack traces produced by this script. |
|||
* @default 0 |
|||
*/ |
|||
columnOffset?: number | undefined; |
|||
} |
|||
interface ScriptOptions extends BaseOptions { |
|||
displayErrors?: boolean | undefined; |
|||
timeout?: number | undefined; |
|||
cachedData?: Buffer | undefined; |
|||
/** @deprecated in favor of `script.createCachedData()` */ |
|||
produceCachedData?: boolean | undefined; |
|||
} |
|||
interface RunningScriptOptions extends BaseOptions { |
|||
/** |
|||
* When `true`, if an `Error` occurs while compiling the `code`, the line of code causing the error is attached to the stack trace. |
|||
* Default: `true`. |
|||
*/ |
|||
displayErrors?: boolean | undefined; |
|||
/** |
|||
* Specifies the number of milliseconds to execute code before terminating execution. |
|||
* If execution is terminated, an `Error` will be thrown. This value must be a strictly positive integer. |
|||
*/ |
|||
timeout?: number | undefined; |
|||
/** |
|||
* If `true`, the execution will be terminated when `SIGINT` (Ctrl+C) is received. |
|||
* Existing handlers for the event that have been attached via `process.on('SIGINT')` will be disabled during script execution, but will continue to work after that. |
|||
* If execution is terminated, an `Error` will be thrown. |
|||
* Default: `false`. |
|||
*/ |
|||
breakOnSigint?: boolean | undefined; |
|||
/** |
|||
* If set to `afterEvaluate`, microtasks will be run immediately after the script has run. |
|||
*/ |
|||
microtaskMode?: 'afterEvaluate' | undefined; |
|||
} |
|||
interface CompileFunctionOptions extends BaseOptions { |
|||
/** |
|||
* Provides an optional data with V8's code cache data for the supplied source. |
|||
*/ |
|||
cachedData?: Buffer | undefined; |
|||
/** |
|||
* Specifies whether to produce new cache data. |
|||
* Default: `false`, |
|||
*/ |
|||
produceCachedData?: boolean | undefined; |
|||
/** |
|||
* The sandbox/context in which the said function should be compiled in. |
|||
*/ |
|||
parsingContext?: Context | undefined; |
|||
/** |
|||
* An array containing a collection of context extensions (objects wrapping the current scope) to be applied while compiling |
|||
*/ |
|||
contextExtensions?: Object[] | undefined; |
|||
} |
|||
interface CreateContextOptions { |
|||
/** |
|||
* Human-readable name of the newly created context. |
|||
* @default 'VM Context i' Where i is an ascending numerical index of the created context. |
|||
*/ |
|||
name?: string | undefined; |
|||
/** |
|||
* Corresponds to the newly created context for display purposes. |
|||
* The origin should be formatted like a `URL`, but with only the scheme, host, and port (if necessary), |
|||
* like the value of the `url.origin` property of a URL object. |
|||
* Most notably, this string should omit the trailing slash, as that denotes a path. |
|||
* @default '' |
|||
*/ |
|||
origin?: string | undefined; |
|||
codeGeneration?: |
|||
| { |
|||
/** |
|||
* If set to false any calls to eval or function constructors (Function, GeneratorFunction, etc) |
|||
* will throw an EvalError. |
|||
* @default true |
|||
*/ |
|||
strings?: boolean | undefined; |
|||
/** |
|||
* If set to false any attempt to compile a WebAssembly module will throw a WebAssembly.CompileError. |
|||
* @default true |
|||
*/ |
|||
wasm?: boolean | undefined; |
|||
} |
|||
| undefined; |
|||
/** |
|||
* If set to `afterEvaluate`, microtasks will be run immediately after the script has run. |
|||
*/ |
|||
microtaskMode?: 'afterEvaluate' | undefined; |
|||
} |
|||
type MeasureMemoryMode = 'summary' | 'detailed'; |
|||
interface MeasureMemoryOptions { |
|||
/** |
|||
* @default 'summary' |
|||
*/ |
|||
mode?: MeasureMemoryMode | undefined; |
|||
context?: Context | undefined; |
|||
} |
|||
interface MemoryMeasurement { |
|||
total: { |
|||
jsMemoryEstimate: number; |
|||
jsMemoryRange: [number, number]; |
|||
}; |
|||
} |
|||
/** |
|||
* Instances of the `vm.Script` class contain precompiled scripts that can be |
|||
* executed in specific contexts. |
|||
* @since v0.3.1 |
|||
*/ |
|||
class Script { |
|||
constructor(code: string, options?: ScriptOptions); |
|||
/** |
|||
* Runs the compiled code contained by the `vm.Script` object within the given`contextifiedObject` and returns the result. Running code does not have access |
|||
* to local scope. |
|||
* |
|||
* The following example compiles code that increments a global variable, sets |
|||
* the value of another global variable, then execute the code multiple times. |
|||
* The globals are contained in the `context` object. |
|||
* |
|||
* ```js
|
|||
* const vm = require('vm'); |
|||
* |
|||
* const context = { |
|||
* animal: 'cat', |
|||
* count: 2 |
|||
* }; |
|||
* |
|||
* const script = new vm.Script('count += 1; name = "kitty";'); |
|||
* |
|||
* vm.createContext(context); |
|||
* for (let i = 0; i < 10; ++i) { |
|||
* script.runInContext(context); |
|||
* } |
|||
* |
|||
* console.log(context); |
|||
* // Prints: { animal: 'cat', count: 12, name: 'kitty' }
|
|||
* ```
|
|||
* |
|||
* Using the `timeout` or `breakOnSigint` options will result in new event loops |
|||
* and corresponding threads being started, which have a non-zero performance |
|||
* overhead. |
|||
* @since v0.3.1 |
|||
* @param contextifiedObject A `contextified` object as returned by the `vm.createContext()` method. |
|||
* @return the result of the very last statement executed in the script. |
|||
*/ |
|||
runInContext(contextifiedObject: Context, options?: RunningScriptOptions): any; |
|||
/** |
|||
* First contextifies the given `contextObject`, runs the compiled code contained |
|||
* by the `vm.Script` object within the created context, and returns the result. |
|||
* Running code does not have access to local scope. |
|||
* |
|||
* The following example compiles code that sets a global variable, then executes |
|||
* the code multiple times in different contexts. The globals are set on and |
|||
* contained within each individual `context`. |
|||
* |
|||
* ```js
|
|||
* const vm = require('vm'); |
|||
* |
|||
* const script = new vm.Script('globalVar = "set"'); |
|||
* |
|||
* const contexts = [{}, {}, {}]; |
|||
* contexts.forEach((context) => { |
|||
* script.runInNewContext(context); |
|||
* }); |
|||
* |
|||
* console.log(contexts); |
|||
* // Prints: [{ globalVar: 'set' }, { globalVar: 'set' }, { globalVar: 'set' }]
|
|||
* ```
|
|||
* @since v0.3.1 |
|||
* @param contextObject An object that will be `contextified`. If `undefined`, a new object will be created. |
|||
* @return the result of the very last statement executed in the script. |
|||
*/ |
|||
runInNewContext(contextObject?: Context, options?: RunningScriptOptions): any; |
|||
/** |
|||
* Runs the compiled code contained by the `vm.Script` within the context of the |
|||
* current `global` object. Running code does not have access to local scope, but_does_ have access to the current `global` object. |
|||
* |
|||
* The following example compiles code that increments a `global` variable then |
|||
* executes that code multiple times: |
|||
* |
|||
* ```js
|
|||
* const vm = require('vm'); |
|||
* |
|||
* global.globalVar = 0; |
|||
* |
|||
* const script = new vm.Script('globalVar += 1', { filename: 'myfile.vm' }); |
|||
* |
|||
* for (let i = 0; i < 1000; ++i) { |
|||
* script.runInThisContext(); |
|||
* } |
|||
* |
|||
* console.log(globalVar); |
|||
* |
|||
* // 1000
|
|||
* ```
|
|||
* @since v0.3.1 |
|||
* @return the result of the very last statement executed in the script. |
|||
*/ |
|||
runInThisContext(options?: RunningScriptOptions): any; |
|||
/** |
|||
* Creates a code cache that can be used with the `Script` constructor's`cachedData` option. Returns a `Buffer`. This method may be called at any |
|||
* time and any number of times. |
|||
* |
|||
* ```js
|
|||
* const script = new vm.Script(`
|
|||
* function add(a, b) { |
|||
* return a + b; |
|||
* } |
|||
* |
|||
* const x = add(1, 2); |
|||
* `);
|
|||
* |
|||
* const cacheWithoutX = script.createCachedData(); |
|||
* |
|||
* script.runInThisContext(); |
|||
* |
|||
* const cacheWithX = script.createCachedData(); |
|||
* ```
|
|||
* @since v10.6.0 |
|||
*/ |
|||
createCachedData(): Buffer; |
|||
/** @deprecated in favor of `script.createCachedData()` */ |
|||
cachedDataProduced?: boolean | undefined; |
|||
cachedDataRejected?: boolean | undefined; |
|||
cachedData?: Buffer | undefined; |
|||
} |
|||
/** |
|||
* If given a `contextObject`, the `vm.createContext()` method will `prepare
|
|||
* that object` so that it can be used in calls to {@link runInContext} or `script.runInContext()`. Inside such scripts,
|
|||
* the `contextObject` will be the global object, retaining all of its existing |
|||
* properties but also having the built-in objects and functions any standard [global object](https://es5.github.io/#x15.1) has. Outside of scripts run by the vm module, global variables
|
|||
* will remain unchanged. |
|||
* |
|||
* ```js
|
|||
* const vm = require('vm'); |
|||
* |
|||
* global.globalVar = 3; |
|||
* |
|||
* const context = { globalVar: 1 }; |
|||
* vm.createContext(context); |
|||
* |
|||
* vm.runInContext('globalVar *= 2;', context); |
|||
* |
|||
* console.log(context); |
|||
* // Prints: { globalVar: 2 }
|
|||
* |
|||
* console.log(global.globalVar); |
|||
* // Prints: 3
|
|||
* ```
|
|||
* |
|||
* If `contextObject` is omitted (or passed explicitly as `undefined`), a new, |
|||
* empty `contextified` object will be returned. |
|||
* |
|||
* The `vm.createContext()` method is primarily useful for creating a single |
|||
* context that can be used to run multiple scripts. For instance, if emulating a |
|||
* web browser, the method can be used to create a single context representing a |
|||
* window's global object, then run all `<script>` tags together within that |
|||
* context. |
|||
* |
|||
* The provided `name` and `origin` of the context are made visible through the |
|||
* Inspector API. |
|||
* @since v0.3.1 |
|||
* @return contextified object. |
|||
*/ |
|||
function createContext(sandbox?: Context, options?: CreateContextOptions): Context; |
|||
/** |
|||
* Returns `true` if the given `object` object has been `contextified` using {@link createContext}. |
|||
* @since v0.11.7 |
|||
*/ |
|||
function isContext(sandbox: Context): boolean; |
|||
/** |
|||
* The `vm.runInContext()` method compiles `code`, runs it within the context of |
|||
* the `contextifiedObject`, then returns the result. Running code does not have |
|||
* access to the local scope. The `contextifiedObject` object _must_ have been |
|||
* previously `contextified` using the {@link createContext} method. |
|||
* |
|||
* If `options` is a string, then it specifies the filename. |
|||
* |
|||
* The following example compiles and executes different scripts using a single `contextified` object: |
|||
* |
|||
* ```js
|
|||
* const vm = require('vm'); |
|||
* |
|||
* const contextObject = { globalVar: 1 }; |
|||
* vm.createContext(contextObject); |
|||
* |
|||
* for (let i = 0; i < 10; ++i) { |
|||
* vm.runInContext('globalVar *= 2;', contextObject); |
|||
* } |
|||
* console.log(contextObject); |
|||
* // Prints: { globalVar: 1024 }
|
|||
* ```
|
|||
* @since v0.3.1 |
|||
* @param code The JavaScript code to compile and run. |
|||
* @param contextifiedObject The `contextified` object that will be used as the `global` when the `code` is compiled and run. |
|||
* @return the result of the very last statement executed in the script. |
|||
*/ |
|||
function runInContext(code: string, contextifiedObject: Context, options?: RunningScriptOptions | string): any; |
|||
/** |
|||
* The `vm.runInNewContext()` first contextifies the given `contextObject` (or |
|||
* creates a new `contextObject` if passed as `undefined`), compiles the `code`, |
|||
* runs it within the created context, then returns the result. Running code |
|||
* does not have access to the local scope. |
|||
* |
|||
* If `options` is a string, then it specifies the filename. |
|||
* |
|||
* The following example compiles and executes code that increments a global |
|||
* variable and sets a new one. These globals are contained in the `contextObject`. |
|||
* |
|||
* ```js
|
|||
* const vm = require('vm'); |
|||
* |
|||
* const contextObject = { |
|||
* animal: 'cat', |
|||
* count: 2 |
|||
* }; |
|||
* |
|||
* vm.runInNewContext('count += 1; name = "kitty"', contextObject); |
|||
* console.log(contextObject); |
|||
* // Prints: { animal: 'cat', count: 3, name: 'kitty' }
|
|||
* ```
|
|||
* @since v0.3.1 |
|||
* @param code The JavaScript code to compile and run. |
|||
* @param contextObject An object that will be `contextified`. If `undefined`, a new object will be created. |
|||
* @return the result of the very last statement executed in the script. |
|||
*/ |
|||
function runInNewContext(code: string, contextObject?: Context, options?: RunningScriptOptions | string): any; |
|||
/** |
|||
* `vm.runInThisContext()` compiles `code`, runs it within the context of the |
|||
* current `global` and returns the result. Running code does not have access to |
|||
* local scope, but does have access to the current `global` object. |
|||
* |
|||
* If `options` is a string, then it specifies the filename. |
|||
* |
|||
* The following example illustrates using both `vm.runInThisContext()` and |
|||
* the JavaScript [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) function to run the same code:
|
|||
* |
|||
* ```js
|
|||
* const vm = require('vm'); |
|||
* let localVar = 'initial value'; |
|||
* |
|||
* const vmResult = vm.runInThisContext('localVar = "vm";'); |
|||
* console.log(`vmResult: '${vmResult}', localVar: '${localVar}'`); |
|||
* // Prints: vmResult: 'vm', localVar: 'initial value'
|
|||
* |
|||
* const evalResult = eval('localVar = "eval";'); |
|||
* console.log(`evalResult: '${evalResult}', localVar: '${localVar}'`); |
|||
* // Prints: evalResult: 'eval', localVar: 'eval'
|
|||
* ```
|
|||
* |
|||
* Because `vm.runInThisContext()` does not have access to the local scope,`localVar` is unchanged. In contrast, |
|||
* [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) _does_ have access to the
|
|||
* local scope, so the value `localVar` is changed. In this way`vm.runInThisContext()` is much like an [indirect `eval()` call](https://es5.github.io/#x10.4.2), e.g.`(0,eval)('code')`.
|
|||
* |
|||
* ## Example: Running an HTTP server within a VM |
|||
* |
|||
* When using either `script.runInThisContext()` or {@link runInThisContext}, the code is executed within the current V8 global |
|||
* context. The code passed to this VM context will have its own isolated scope. |
|||
* |
|||
* In order to run a simple web server using the `http` module the code passed to |
|||
* the context must either call `require('http')` on its own, or have a reference |
|||
* to the `http` module passed to it. For instance: |
|||
* |
|||
* ```js
|
|||
* 'use strict'; |
|||
* const vm = require('vm'); |
|||
* |
|||
* const code = `
|
|||
* ((require) => { |
|||
* const http = require('http'); |
|||
* |
|||
* http.createServer((request, response) => { |
|||
* response.writeHead(200, { 'Content-Type': 'text/plain' }); |
|||
* response.end('Hello World\\n'); |
|||
* }).listen(8124); |
|||
* |
|||
* console.log('Server running at http://127.0.0.1:8124/'); |
|||
* })`;
|
|||
* |
|||
* vm.runInThisContext(code)(require); |
|||
* ```
|
|||
* |
|||
* The `require()` in the above case shares the state with the context it is |
|||
* passed from. This may introduce risks when untrusted code is executed, e.g. |
|||
* altering objects in the context in unwanted ways. |
|||
* @since v0.3.1 |
|||
* @param code The JavaScript code to compile and run. |
|||
* @return the result of the very last statement executed in the script. |
|||
*/ |
|||
function runInThisContext(code: string, options?: RunningScriptOptions | string): any; |
|||
/** |
|||
* Compiles the given code into the provided context (if no context is |
|||
* supplied, the current context is used), and returns it wrapped inside a |
|||
* function with the given `params`. |
|||
* @since v10.10.0 |
|||
* @param code The body of the function to compile. |
|||
* @param params An array of strings containing all parameters for the function. |
|||
*/ |
|||
function compileFunction(code: string, params?: ReadonlyArray<string>, options?: CompileFunctionOptions): Function; |
|||
/** |
|||
* Measure the memory known to V8 and used by all contexts known to the |
|||
* current V8 isolate, or the main context. |
|||
* |
|||
* The format of the object that the returned Promise may resolve with is |
|||
* specific to the V8 engine and may change from one version of V8 to the next. |
|||
* |
|||
* The returned result is different from the statistics returned by`v8.getHeapSpaceStatistics()` in that `vm.measureMemory()` measure the |
|||
* memory reachable by each V8 specific contexts in the current instance of |
|||
* the V8 engine, while the result of `v8.getHeapSpaceStatistics()` measure |
|||
* the memory occupied by each heap space in the current V8 instance. |
|||
* |
|||
* ```js
|
|||
* const vm = require('vm'); |
|||
* // Measure the memory used by the main context.
|
|||
* vm.measureMemory({ mode: 'summary' }) |
|||
* // This is the same as vm.measureMemory()
|
|||
* .then((result) => { |
|||
* // The current format is:
|
|||
* // {
|
|||
* // total: {
|
|||
* // jsMemoryEstimate: 2418479, jsMemoryRange: [ 2418479, 2745799 ]
|
|||
* // }
|
|||
* // }
|
|||
* console.log(result); |
|||
* }); |
|||
* |
|||
* const context = vm.createContext({ a: 1 }); |
|||
* vm.measureMemory({ mode: 'detailed', execution: 'eager' }) |
|||
* .then((result) => { |
|||
* // Reference the context here so that it won't be GC'ed
|
|||
* // until the measurement is complete.
|
|||
* console.log(context.a); |
|||
* // {
|
|||
* // total: {
|
|||
* // jsMemoryEstimate: 2574732,
|
|||
* // jsMemoryRange: [ 2574732, 2904372 ]
|
|||
* // },
|
|||
* // current: {
|
|||
* // jsMemoryEstimate: 2438996,
|
|||
* // jsMemoryRange: [ 2438996, 2768636 ]
|
|||
* // },
|
|||
* // other: [
|
|||
* // {
|
|||
* // jsMemoryEstimate: 135736,
|
|||
* // jsMemoryRange: [ 135736, 465376 ]
|
|||
* // }
|
|||
* // ]
|
|||
* // }
|
|||
* console.log(result); |
|||
* }); |
|||
* ```
|
|||
* @since v13.10.0 |
|||
* @experimental |
|||
*/ |
|||
function measureMemory(options?: MeasureMemoryOptions): Promise<MemoryMeasurement>; |
|||
} |
|||
declare module 'node:vm' { |
|||
export * from 'vm'; |
|||
} |
|||
@ -0,0 +1,158 @@ |
|||
/** |
|||
* The WASI API provides an implementation of the [WebAssembly System Interface](https://wasi.dev/) specification. WASI gives sandboxed WebAssembly applications access to the
|
|||
* underlying operating system via a collection of POSIX-like functions. |
|||
* |
|||
* ```js
|
|||
* import { readFile } from 'fs/promises'; |
|||
* import { WASI } from 'wasi'; |
|||
* import { argv, env } from 'process'; |
|||
* |
|||
* const wasi = new WASI({ |
|||
* args: argv, |
|||
* env, |
|||
* preopens: { |
|||
* '/sandbox': '/some/real/path/that/wasm/can/access' |
|||
* } |
|||
* }); |
|||
* |
|||
* // Some WASI binaries require:
|
|||
* // const importObject = { wasi_unstable: wasi.wasiImport };
|
|||
* const importObject = { wasi_snapshot_preview1: wasi.wasiImport }; |
|||
* |
|||
* const wasm = await WebAssembly.compile( |
|||
* await readFile(new URL('./demo.wasm', import.meta.url)) |
|||
* ); |
|||
* const instance = await WebAssembly.instantiate(wasm, importObject); |
|||
* |
|||
* wasi.start(instance); |
|||
* ```
|
|||
* |
|||
* To run the above example, create a new WebAssembly text format file named`demo.wat`: |
|||
* |
|||
* ```text
|
|||
* (module |
|||
* ;; Import the required fd_write WASI function which will write the given io vectors to stdout |
|||
* ;; The function signature for fd_write is: |
|||
* ;; (File Descriptor, *iovs, iovs_len, nwritten) -> Returns number of bytes written |
|||
* (import "wasi_snapshot_preview1" "fd_write" (func $fd_write (param i32 i32 i32 i32) (result i32))) |
|||
* |
|||
* (memory 1) |
|||
* (export "memory" (memory 0)) |
|||
* |
|||
* ;; Write 'hello world\n' to memory at an offset of 8 bytes |
|||
* ;; Note the trailing newline which is required for the text to appear |
|||
* (data (i32.const 8) "hello world\n") |
|||
* |
|||
* (func $main (export "_start") |
|||
* ;; Creating a new io vector within linear memory |
|||
* (i32.store (i32.const 0) (i32.const 8)) ;; iov.iov_base - This is a pointer to the start of the 'hello world\n' string |
|||
* (i32.store (i32.const 4) (i32.const 12)) ;; iov.iov_len - The length of the 'hello world\n' string |
|||
* |
|||
* (call $fd_write |
|||
* (i32.const 1) ;; file_descriptor - 1 for stdout |
|||
* (i32.const 0) ;; *iovs - The pointer to the iov array, which is stored at memory location 0 |
|||
* (i32.const 1) ;; iovs_len - We're printing 1 string stored in an iov - so one. |
|||
* (i32.const 20) ;; nwritten - A place in memory to store the number of bytes written |
|||
* ) |
|||
* drop ;; Discard the number of bytes written from the top of the stack |
|||
* ) |
|||
* ) |
|||
* ```
|
|||
* |
|||
* Use [wabt](https://github.com/WebAssembly/wabt) to compile `.wat` to `.wasm`
|
|||
* |
|||
* ```console
|
|||
* $ wat2wasm demo.wat |
|||
* ```
|
|||
* |
|||
* The `--experimental-wasi-unstable-preview1` CLI argument is needed for this |
|||
* example to run. |
|||
* @experimental |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/wasi.js)
|
|||
*/ |
|||
declare module 'wasi' { |
|||
interface WASIOptions { |
|||
/** |
|||
* An array of strings that the WebAssembly application will |
|||
* see as command line arguments. The first argument is the virtual path to the |
|||
* WASI command itself. |
|||
*/ |
|||
args?: string[] | undefined; |
|||
/** |
|||
* An object similar to `process.env` that the WebAssembly |
|||
* application will see as its environment. |
|||
*/ |
|||
env?: object | undefined; |
|||
/** |
|||
* This object represents the WebAssembly application's |
|||
* sandbox directory structure. The string keys of `preopens` are treated as |
|||
* directories within the sandbox. The corresponding values in `preopens` are |
|||
* the real paths to those directories on the host machine. |
|||
*/ |
|||
preopens?: NodeJS.Dict<string> | undefined; |
|||
/** |
|||
* By default, WASI applications terminate the Node.js |
|||
* process via the `__wasi_proc_exit()` function. Setting this option to `true` |
|||
* causes `wasi.start()` to return the exit code rather than terminate the |
|||
* process. |
|||
* @default false |
|||
*/ |
|||
returnOnExit?: boolean | undefined; |
|||
/** |
|||
* The file descriptor used as standard input in the WebAssembly application. |
|||
* @default 0 |
|||
*/ |
|||
stdin?: number | undefined; |
|||
/** |
|||
* The file descriptor used as standard output in the WebAssembly application. |
|||
* @default 1 |
|||
*/ |
|||
stdout?: number | undefined; |
|||
/** |
|||
* The file descriptor used as standard error in the WebAssembly application. |
|||
* @default 2 |
|||
*/ |
|||
stderr?: number | undefined; |
|||
} |
|||
/** |
|||
* The `WASI` class provides the WASI system call API and additional convenience |
|||
* methods for working with WASI-based applications. Each `WASI` instance |
|||
* represents a distinct sandbox environment. For security purposes, each `WASI`instance must have its command-line arguments, environment variables, and |
|||
* sandbox directory structure configured explicitly. |
|||
* @since v13.3.0, v12.16.0 |
|||
*/ |
|||
class WASI { |
|||
constructor(options?: WASIOptions); |
|||
/** |
|||
* Attempt to begin execution of `instance` as a WASI command by invoking its`_start()` export. If `instance` does not contain a `_start()` export, or if`instance` contains an `_initialize()` |
|||
* export, then an exception is thrown. |
|||
* |
|||
* `start()` requires that `instance` exports a [`WebAssembly.Memory`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory) named`memory`. If
|
|||
* `instance` does not have a `memory` export an exception is thrown. |
|||
* |
|||
* If `start()` is called more than once, an exception is thrown. |
|||
* @since v13.3.0, v12.16.0 |
|||
*/ |
|||
start(instance: object): void; // TODO: avoid DOM dependency until WASM moved to own lib.
|
|||
/** |
|||
* Attempt to initialize `instance` as a WASI reactor by invoking its`_initialize()` export, if it is present. If `instance` contains a `_start()`export, then an exception is thrown. |
|||
* |
|||
* `initialize()` requires that `instance` exports a [`WebAssembly.Memory`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory) named`memory`.
|
|||
* If `instance` does not have a `memory` export an exception is thrown. |
|||
* |
|||
* If `initialize()` is called more than once, an exception is thrown. |
|||
* @since v14.6.0, v12.19.0 |
|||
*/ |
|||
initialize(instance: object): void; // TODO: avoid DOM dependency until WASM moved to own lib.
|
|||
/** |
|||
* `wasiImport` is an object that implements the WASI system call API. This object |
|||
* should be passed as the `wasi_snapshot_preview1` import during the instantiation |
|||
* of a [`WebAssembly.Instance`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance).
|
|||
* @since v13.3.0, v12.16.0 |
|||
*/ |
|||
readonly wasiImport: NodeJS.Dict<any>; // TODO: Narrow to DOM types
|
|||
} |
|||
} |
|||
declare module 'node:wasi' { |
|||
export * from 'wasi'; |
|||
} |
|||
@ -0,0 +1,649 @@ |
|||
/** |
|||
* The `worker_threads` module enables the use of threads that execute JavaScript |
|||
* in parallel. To access it: |
|||
* |
|||
* ```js
|
|||
* const worker = require('worker_threads'); |
|||
* ```
|
|||
* |
|||
* Workers (threads) are useful for performing CPU-intensive JavaScript operations. |
|||
* They do not help much with I/O-intensive work. The Node.js built-in |
|||
* asynchronous I/O operations are more efficient than Workers can be. |
|||
* |
|||
* Unlike `child_process` or `cluster`, `worker_threads` can share memory. They do |
|||
* so by transferring `ArrayBuffer` instances or sharing `SharedArrayBuffer`instances. |
|||
* |
|||
* ```js
|
|||
* const { |
|||
* Worker, isMainThread, parentPort, workerData |
|||
* } = require('worker_threads'); |
|||
* |
|||
* if (isMainThread) { |
|||
* module.exports = function parseJSAsync(script) { |
|||
* return new Promise((resolve, reject) => { |
|||
* const worker = new Worker(__filename, { |
|||
* workerData: script |
|||
* }); |
|||
* worker.on('message', resolve); |
|||
* worker.on('error', reject); |
|||
* worker.on('exit', (code) => { |
|||
* if (code !== 0) |
|||
* reject(new Error(`Worker stopped with exit code ${code}`)); |
|||
* }); |
|||
* }); |
|||
* }; |
|||
* } else { |
|||
* const { parse } = require('some-js-parsing-library'); |
|||
* const script = workerData; |
|||
* parentPort.postMessage(parse(script)); |
|||
* } |
|||
* ```
|
|||
* |
|||
* The above example spawns a Worker thread for each `parse()` call. In actual |
|||
* practice, use a pool of Workers for these kinds of tasks. Otherwise, the |
|||
* overhead of creating Workers would likely exceed their benefit. |
|||
* |
|||
* When implementing a worker pool, use the `AsyncResource` API to inform |
|||
* diagnostic tools (e.g. to provide asynchronous stack traces) about the |
|||
* correlation between tasks and their outcomes. See `"Using AsyncResource for a Worker thread pool"` in the `async_hooks` documentation for an example implementation. |
|||
* |
|||
* Worker threads inherit non-process-specific options by default. Refer to `Worker constructor options` to know how to customize worker thread options, |
|||
* specifically `argv` and `execArgv` options. |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/worker_threads.js)
|
|||
*/ |
|||
declare module 'worker_threads' { |
|||
import { Blob } from 'node:buffer'; |
|||
import { Context } from 'node:vm'; |
|||
import { EventEmitter } from 'node:events'; |
|||
import { EventLoopUtilityFunction } from 'node:perf_hooks'; |
|||
import { FileHandle } from 'node:fs/promises'; |
|||
import { Readable, Writable } from 'node:stream'; |
|||
import { URL } from 'node:url'; |
|||
import { X509Certificate } from 'node:crypto'; |
|||
const isMainThread: boolean; |
|||
const parentPort: null | MessagePort; |
|||
const resourceLimits: ResourceLimits; |
|||
const SHARE_ENV: unique symbol; |
|||
const threadId: number; |
|||
const workerData: any; |
|||
/** |
|||
* Instances of the `worker.MessageChannel` class represent an asynchronous, |
|||
* two-way communications channel. |
|||
* The `MessageChannel` has no methods of its own. `new MessageChannel()`yields an object with `port1` and `port2` properties, which refer to linked `MessagePort` instances. |
|||
* |
|||
* ```js
|
|||
* const { MessageChannel } = require('worker_threads'); |
|||
* |
|||
* const { port1, port2 } = new MessageChannel(); |
|||
* port1.on('message', (message) => console.log('received', message)); |
|||
* port2.postMessage({ foo: 'bar' }); |
|||
* // Prints: received { foo: 'bar' } from the `port1.on('message')` listener
|
|||
* ```
|
|||
* @since v10.5.0 |
|||
*/ |
|||
class MessageChannel { |
|||
readonly port1: MessagePort; |
|||
readonly port2: MessagePort; |
|||
} |
|||
interface WorkerPerformance { |
|||
eventLoopUtilization: EventLoopUtilityFunction; |
|||
} |
|||
type TransferListItem = ArrayBuffer | MessagePort | FileHandle | X509Certificate | Blob; |
|||
/** |
|||
* Instances of the `worker.MessagePort` class represent one end of an |
|||
* asynchronous, two-way communications channel. It can be used to transfer |
|||
* structured data, memory regions and other `MessagePort`s between different `Worker` s. |
|||
* |
|||
* This implementation matches [browser `MessagePort`](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort) s.
|
|||
* @since v10.5.0 |
|||
*/ |
|||
class MessagePort extends EventEmitter { |
|||
/** |
|||
* Disables further sending of messages on either side of the connection. |
|||
* This method can be called when no further communication will happen over this`MessagePort`. |
|||
* |
|||
* The `'close' event` is emitted on both `MessagePort` instances that |
|||
* are part of the channel. |
|||
* @since v10.5.0 |
|||
*/ |
|||
close(): void; |
|||
/** |
|||
* Sends a JavaScript value to the receiving side of this channel.`value` is transferred in a way which is compatible with |
|||
* the [HTML structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm).
|
|||
* |
|||
* In particular, the significant differences to `JSON` are: |
|||
* |
|||
* * `value` may contain circular references. |
|||
* * `value` may contain instances of builtin JS types such as `RegExp`s,`BigInt`s, `Map`s, `Set`s, etc. |
|||
* * `value` may contain typed arrays, both using `ArrayBuffer`s |
|||
* and `SharedArrayBuffer`s. |
|||
* * `value` may contain [`WebAssembly.Module`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module) instances.
|
|||
* * `value` may not contain native (C++-backed) objects other than: |
|||
* |
|||
* ```js
|
|||
* const { MessageChannel } = require('worker_threads'); |
|||
* const { port1, port2 } = new MessageChannel(); |
|||
* |
|||
* port1.on('message', (message) => console.log(message)); |
|||
* |
|||
* const circularData = {}; |
|||
* circularData.foo = circularData; |
|||
* // Prints: { foo: [Circular] }
|
|||
* port2.postMessage(circularData); |
|||
* ```
|
|||
* |
|||
* `transferList` may be a list of [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer), `MessagePort` and `FileHandle` objects.
|
|||
* After transferring, they are not usable on the sending side of the channel |
|||
* anymore (even if they are not contained in `value`). Unlike with `child processes`, transferring handles such as network sockets is currently |
|||
* not supported. |
|||
* |
|||
* If `value` contains [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instances, those are accessible
|
|||
* from either thread. They cannot be listed in `transferList`. |
|||
* |
|||
* `value` may still contain `ArrayBuffer` instances that are not in`transferList`; in that case, the underlying memory is copied rather than moved. |
|||
* |
|||
* ```js
|
|||
* const { MessageChannel } = require('worker_threads'); |
|||
* const { port1, port2 } = new MessageChannel(); |
|||
* |
|||
* port1.on('message', (message) => console.log(message)); |
|||
* |
|||
* const uint8Array = new Uint8Array([ 1, 2, 3, 4 ]); |
|||
* // This posts a copy of `uint8Array`:
|
|||
* port2.postMessage(uint8Array); |
|||
* // This does not copy data, but renders `uint8Array` unusable:
|
|||
* port2.postMessage(uint8Array, [ uint8Array.buffer ]); |
|||
* |
|||
* // The memory for the `sharedUint8Array` is accessible from both the
|
|||
* // original and the copy received by `.on('message')`:
|
|||
* const sharedUint8Array = new Uint8Array(new SharedArrayBuffer(4)); |
|||
* port2.postMessage(sharedUint8Array); |
|||
* |
|||
* // This transfers a freshly created message port to the receiver.
|
|||
* // This can be used, for example, to create communication channels between
|
|||
* // multiple `Worker` threads that are children of the same parent thread.
|
|||
* const otherChannel = new MessageChannel(); |
|||
* port2.postMessage({ port: otherChannel.port1 }, [ otherChannel.port1 ]); |
|||
* ```
|
|||
* |
|||
* The message object is cloned immediately, and can be modified after |
|||
* posting without having side effects. |
|||
* |
|||
* For more information on the serialization and deserialization mechanisms |
|||
* behind this API, see the `serialization API of the v8 module`. |
|||
* @since v10.5.0 |
|||
*/ |
|||
postMessage(value: any, transferList?: ReadonlyArray<TransferListItem>): void; |
|||
/** |
|||
* Opposite of `unref()`. Calling `ref()` on a previously `unref()`ed port does_not_ let the program exit if it's the only active handle left (the default |
|||
* behavior). If the port is `ref()`ed, calling `ref()` again has no effect. |
|||
* |
|||
* If listeners are attached or removed using `.on('message')`, the port |
|||
* is `ref()`ed and `unref()`ed automatically depending on whether |
|||
* listeners for the event exist. |
|||
* @since v10.5.0 |
|||
*/ |
|||
ref(): void; |
|||
/** |
|||
* Calling `unref()` on a port allows the thread to exit if this is the only |
|||
* active handle in the event system. If the port is already `unref()`ed calling`unref()` again has no effect. |
|||
* |
|||
* If listeners are attached or removed using `.on('message')`, the port is`ref()`ed and `unref()`ed automatically depending on whether |
|||
* listeners for the event exist. |
|||
* @since v10.5.0 |
|||
*/ |
|||
unref(): void; |
|||
/** |
|||
* Starts receiving messages on this `MessagePort`. When using this port |
|||
* as an event emitter, this is called automatically once `'message'`listeners are attached. |
|||
* |
|||
* This method exists for parity with the Web `MessagePort` API. In Node.js, |
|||
* it is only useful for ignoring messages when no event listener is present. |
|||
* Node.js also diverges in its handling of `.onmessage`. Setting it |
|||
* automatically calls `.start()`, but unsetting it lets messages queue up |
|||
* until a new handler is set or the port is discarded. |
|||
* @since v10.5.0 |
|||
*/ |
|||
start(): void; |
|||
addListener(event: 'close', listener: () => void): this; |
|||
addListener(event: 'message', listener: (value: any) => void): this; |
|||
addListener(event: 'messageerror', listener: (error: Error) => void): this; |
|||
addListener(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
emit(event: 'close'): boolean; |
|||
emit(event: 'message', value: any): boolean; |
|||
emit(event: 'messageerror', error: Error): boolean; |
|||
emit(event: string | symbol, ...args: any[]): boolean; |
|||
on(event: 'close', listener: () => void): this; |
|||
on(event: 'message', listener: (value: any) => void): this; |
|||
on(event: 'messageerror', listener: (error: Error) => void): this; |
|||
on(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
once(event: 'close', listener: () => void): this; |
|||
once(event: 'message', listener: (value: any) => void): this; |
|||
once(event: 'messageerror', listener: (error: Error) => void): this; |
|||
once(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
prependListener(event: 'close', listener: () => void): this; |
|||
prependListener(event: 'message', listener: (value: any) => void): this; |
|||
prependListener(event: 'messageerror', listener: (error: Error) => void): this; |
|||
prependListener(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
prependOnceListener(event: 'close', listener: () => void): this; |
|||
prependOnceListener(event: 'message', listener: (value: any) => void): this; |
|||
prependOnceListener(event: 'messageerror', listener: (error: Error) => void): this; |
|||
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
removeListener(event: 'close', listener: () => void): this; |
|||
removeListener(event: 'message', listener: (value: any) => void): this; |
|||
removeListener(event: 'messageerror', listener: (error: Error) => void): this; |
|||
removeListener(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
off(event: 'close', listener: () => void): this; |
|||
off(event: 'message', listener: (value: any) => void): this; |
|||
off(event: 'messageerror', listener: (error: Error) => void): this; |
|||
off(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
} |
|||
interface WorkerOptions { |
|||
/** |
|||
* List of arguments which would be stringified and appended to |
|||
* `process.argv` in the worker. This is mostly similar to the `workerData` |
|||
* but the values will be available on the global `process.argv` as if they |
|||
* were passed as CLI options to the script. |
|||
*/ |
|||
argv?: any[] | undefined; |
|||
env?: NodeJS.Dict<string> | typeof SHARE_ENV | undefined; |
|||
eval?: boolean | undefined; |
|||
workerData?: any; |
|||
stdin?: boolean | undefined; |
|||
stdout?: boolean | undefined; |
|||
stderr?: boolean | undefined; |
|||
execArgv?: string[] | undefined; |
|||
resourceLimits?: ResourceLimits | undefined; |
|||
/** |
|||
* Additional data to send in the first worker message. |
|||
*/ |
|||
transferList?: TransferListItem[] | undefined; |
|||
/** |
|||
* @default true |
|||
*/ |
|||
trackUnmanagedFds?: boolean | undefined; |
|||
} |
|||
interface ResourceLimits { |
|||
/** |
|||
* The maximum size of a heap space for recently created objects. |
|||
*/ |
|||
maxYoungGenerationSizeMb?: number | undefined; |
|||
/** |
|||
* The maximum size of the main heap in MB. |
|||
*/ |
|||
maxOldGenerationSizeMb?: number | undefined; |
|||
/** |
|||
* The size of a pre-allocated memory range used for generated code. |
|||
*/ |
|||
codeRangeSizeMb?: number | undefined; |
|||
/** |
|||
* The default maximum stack size for the thread. Small values may lead to unusable Worker instances. |
|||
* @default 4 |
|||
*/ |
|||
stackSizeMb?: number | undefined; |
|||
} |
|||
/** |
|||
* The `Worker` class represents an independent JavaScript execution thread. |
|||
* Most Node.js APIs are available inside of it. |
|||
* |
|||
* Notable differences inside a Worker environment are: |
|||
* |
|||
* * The `process.stdin`, `process.stdout` and `process.stderr` may be redirected by the parent thread. |
|||
* * The `require('worker_threads').isMainThread` property is set to `false`. |
|||
* * The `require('worker_threads').parentPort` message port is available. |
|||
* * `process.exit()` does not stop the whole program, just the single thread, |
|||
* and `process.abort()` is not available. |
|||
* * `process.chdir()` and `process` methods that set group or user ids |
|||
* are not available. |
|||
* * `process.env` is a copy of the parent thread's environment variables, |
|||
* unless otherwise specified. Changes to one copy are not visible in other |
|||
* threads, and are not visible to native add-ons (unless `worker.SHARE_ENV` is passed as the `env` option to the `Worker` constructor). |
|||
* * `process.title` cannot be modified. |
|||
* * Signals are not delivered through `process.on('...')`. |
|||
* * Execution may stop at any point as a result of `worker.terminate()` being invoked. |
|||
* * IPC channels from parent processes are not accessible. |
|||
* * The `trace_events` module is not supported. |
|||
* * Native add-ons can only be loaded from multiple threads if they fulfill `certain conditions`. |
|||
* |
|||
* Creating `Worker` instances inside of other `Worker`s is possible. |
|||
* |
|||
* Like [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) and the `cluster module`, two-way communication can be
|
|||
* achieved through inter-thread message passing. Internally, a `Worker` has a |
|||
* built-in pair of `MessagePort` s that are already associated with each other |
|||
* when the `Worker` is created. While the `MessagePort` object on the parent side |
|||
* is not directly exposed, its functionalities are exposed through `worker.postMessage()` and the `worker.on('message')` event |
|||
* on the `Worker` object for the parent thread. |
|||
* |
|||
* To create custom messaging channels (which is encouraged over using the default |
|||
* global channel because it facilitates separation of concerns), users can create |
|||
* a `MessageChannel` object on either thread and pass one of the`MessagePort`s on that `MessageChannel` to the other thread through a |
|||
* pre-existing channel, such as the global one. |
|||
* |
|||
* See `port.postMessage()` for more information on how messages are passed, |
|||
* and what kind of JavaScript values can be successfully transported through |
|||
* the thread barrier. |
|||
* |
|||
* ```js
|
|||
* const assert = require('assert'); |
|||
* const { |
|||
* Worker, MessageChannel, MessagePort, isMainThread, parentPort |
|||
* } = require('worker_threads'); |
|||
* if (isMainThread) { |
|||
* const worker = new Worker(__filename); |
|||
* const subChannel = new MessageChannel(); |
|||
* worker.postMessage({ hereIsYourPort: subChannel.port1 }, [subChannel.port1]); |
|||
* subChannel.port2.on('message', (value) => { |
|||
* console.log('received:', value); |
|||
* }); |
|||
* } else { |
|||
* parentPort.once('message', (value) => { |
|||
* assert(value.hereIsYourPort instanceof MessagePort); |
|||
* value.hereIsYourPort.postMessage('the worker is sending this'); |
|||
* value.hereIsYourPort.close(); |
|||
* }); |
|||
* } |
|||
* ```
|
|||
* @since v10.5.0 |
|||
*/ |
|||
class Worker extends EventEmitter { |
|||
/** |
|||
* If `stdin: true` was passed to the `Worker` constructor, this is a |
|||
* writable stream. The data written to this stream will be made available in |
|||
* the worker thread as `process.stdin`. |
|||
* @since v10.5.0 |
|||
*/ |
|||
readonly stdin: Writable | null; |
|||
/** |
|||
* This is a readable stream which contains data written to `process.stdout` inside the worker thread. If `stdout: true` was not passed to the `Worker` constructor, then data is piped to the |
|||
* parent thread's `process.stdout` stream. |
|||
* @since v10.5.0 |
|||
*/ |
|||
readonly stdout: Readable; |
|||
/** |
|||
* This is a readable stream which contains data written to `process.stderr` inside the worker thread. If `stderr: true` was not passed to the `Worker` constructor, then data is piped to the |
|||
* parent thread's `process.stderr` stream. |
|||
* @since v10.5.0 |
|||
*/ |
|||
readonly stderr: Readable; |
|||
/** |
|||
* An integer identifier for the referenced thread. Inside the worker thread, |
|||
* it is available as `require('worker_threads').threadId`. |
|||
* This value is unique for each `Worker` instance inside a single process. |
|||
* @since v10.5.0 |
|||
*/ |
|||
readonly threadId: number; |
|||
/** |
|||
* Provides the set of JS engine resource constraints for this Worker thread. |
|||
* If the `resourceLimits` option was passed to the `Worker` constructor, |
|||
* this matches its values. |
|||
* |
|||
* If the worker has stopped, the return value is an empty object. |
|||
* @since v13.2.0, v12.16.0 |
|||
*/ |
|||
readonly resourceLimits?: ResourceLimits | undefined; |
|||
/** |
|||
* An object that can be used to query performance information from a worker |
|||
* instance. Similar to `perf_hooks.performance`. |
|||
* @since v15.1.0, v14.17.0, v12.22.0 |
|||
*/ |
|||
readonly performance: WorkerPerformance; |
|||
/** |
|||
* @param filename The path to the Worker’s main script or module. |
|||
* Must be either an absolute path or a relative path (i.e. relative to the current working directory) starting with ./ or ../, |
|||
* or a WHATWG URL object using file: protocol. If options.eval is true, this is a string containing JavaScript code rather than a path. |
|||
*/ |
|||
constructor(filename: string | URL, options?: WorkerOptions); |
|||
/** |
|||
* Send a message to the worker that is received via `require('worker_threads').parentPort.on('message')`. |
|||
* See `port.postMessage()` for more details. |
|||
* @since v10.5.0 |
|||
*/ |
|||
postMessage(value: any, transferList?: ReadonlyArray<TransferListItem>): void; |
|||
/** |
|||
* Opposite of `unref()`, calling `ref()` on a previously `unref()`ed worker does_not_ let the program exit if it's the only active handle left (the default |
|||
* behavior). If the worker is `ref()`ed, calling `ref()` again has |
|||
* no effect. |
|||
* @since v10.5.0 |
|||
*/ |
|||
ref(): void; |
|||
/** |
|||
* Calling `unref()` on a worker allows the thread to exit if this is the only |
|||
* active handle in the event system. If the worker is already `unref()`ed calling`unref()` again has no effect. |
|||
* @since v10.5.0 |
|||
*/ |
|||
unref(): void; |
|||
/** |
|||
* Stop all JavaScript execution in the worker thread as soon as possible. |
|||
* Returns a Promise for the exit code that is fulfilled when the `'exit' event` is emitted. |
|||
* @since v10.5.0 |
|||
*/ |
|||
terminate(): Promise<number>; |
|||
/** |
|||
* Returns a readable stream for a V8 snapshot of the current state of the Worker. |
|||
* See `v8.getHeapSnapshot()` for more details. |
|||
* |
|||
* If the Worker thread is no longer running, which may occur before the `'exit' event` is emitted, the returned `Promise` is rejected |
|||
* immediately with an `ERR_WORKER_NOT_RUNNING` error. |
|||
* @since v13.9.0, v12.17.0 |
|||
* @return A promise for a Readable Stream containing a V8 heap snapshot |
|||
*/ |
|||
getHeapSnapshot(): Promise<Readable>; |
|||
addListener(event: 'error', listener: (err: Error) => void): this; |
|||
addListener(event: 'exit', listener: (exitCode: number) => void): this; |
|||
addListener(event: 'message', listener: (value: any) => void): this; |
|||
addListener(event: 'messageerror', listener: (error: Error) => void): this; |
|||
addListener(event: 'online', listener: () => void): this; |
|||
addListener(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
emit(event: 'error', err: Error): boolean; |
|||
emit(event: 'exit', exitCode: number): boolean; |
|||
emit(event: 'message', value: any): boolean; |
|||
emit(event: 'messageerror', error: Error): boolean; |
|||
emit(event: 'online'): boolean; |
|||
emit(event: string | symbol, ...args: any[]): boolean; |
|||
on(event: 'error', listener: (err: Error) => void): this; |
|||
on(event: 'exit', listener: (exitCode: number) => void): this; |
|||
on(event: 'message', listener: (value: any) => void): this; |
|||
on(event: 'messageerror', listener: (error: Error) => void): this; |
|||
on(event: 'online', listener: () => void): this; |
|||
on(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
once(event: 'error', listener: (err: Error) => void): this; |
|||
once(event: 'exit', listener: (exitCode: number) => void): this; |
|||
once(event: 'message', listener: (value: any) => void): this; |
|||
once(event: 'messageerror', listener: (error: Error) => void): this; |
|||
once(event: 'online', listener: () => void): this; |
|||
once(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
prependListener(event: 'error', listener: (err: Error) => void): this; |
|||
prependListener(event: 'exit', listener: (exitCode: number) => void): this; |
|||
prependListener(event: 'message', listener: (value: any) => void): this; |
|||
prependListener(event: 'messageerror', listener: (error: Error) => void): this; |
|||
prependListener(event: 'online', listener: () => void): this; |
|||
prependListener(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
prependOnceListener(event: 'error', listener: (err: Error) => void): this; |
|||
prependOnceListener(event: 'exit', listener: (exitCode: number) => void): this; |
|||
prependOnceListener(event: 'message', listener: (value: any) => void): this; |
|||
prependOnceListener(event: 'messageerror', listener: (error: Error) => void): this; |
|||
prependOnceListener(event: 'online', listener: () => void): this; |
|||
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
removeListener(event: 'error', listener: (err: Error) => void): this; |
|||
removeListener(event: 'exit', listener: (exitCode: number) => void): this; |
|||
removeListener(event: 'message', listener: (value: any) => void): this; |
|||
removeListener(event: 'messageerror', listener: (error: Error) => void): this; |
|||
removeListener(event: 'online', listener: () => void): this; |
|||
removeListener(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
off(event: 'error', listener: (err: Error) => void): this; |
|||
off(event: 'exit', listener: (exitCode: number) => void): this; |
|||
off(event: 'message', listener: (value: any) => void): this; |
|||
off(event: 'messageerror', listener: (error: Error) => void): this; |
|||
off(event: 'online', listener: () => void): this; |
|||
off(event: string | symbol, listener: (...args: any[]) => void): this; |
|||
} |
|||
interface BroadcastChannel extends NodeJS.RefCounted {} |
|||
/** |
|||
* Instances of `BroadcastChannel` allow asynchronous one-to-many communication |
|||
* with all other `BroadcastChannel` instances bound to the same channel name. |
|||
* |
|||
* ```js
|
|||
* 'use strict'; |
|||
* |
|||
* const { |
|||
* isMainThread, |
|||
* BroadcastChannel, |
|||
* Worker |
|||
* } = require('worker_threads'); |
|||
* |
|||
* const bc = new BroadcastChannel('hello'); |
|||
* |
|||
* if (isMainThread) { |
|||
* let c = 0; |
|||
* bc.onmessage = (event) => { |
|||
* console.log(event.data); |
|||
* if (++c === 10) bc.close(); |
|||
* }; |
|||
* for (let n = 0; n < 10; n++) |
|||
* new Worker(__filename); |
|||
* } else { |
|||
* bc.postMessage('hello from every worker'); |
|||
* bc.close(); |
|||
* } |
|||
* ```
|
|||
* @since v15.4.0 |
|||
* @experimental |
|||
*/ |
|||
class BroadcastChannel { |
|||
readonly name: string; |
|||
/** |
|||
* Invoked with a single \`MessageEvent\` argument when a message is received.
|
|||
* @since v15.4.0 |
|||
*/ |
|||
onmessage: (message: unknown) => void; |
|||
/** |
|||
* Invoked with a received message cannot be deserialized. |
|||
* @since v15.4.0 |
|||
*/ |
|||
onmessageerror: (message: unknown) => void; |
|||
constructor(name: string); |
|||
/** |
|||
* Closes the `BroadcastChannel` connection. |
|||
* @since v15.4.0 |
|||
*/ |
|||
close(): void; |
|||
/** |
|||
* @since v15.4.0 |
|||
* @param message Any cloneable JavaScript value. |
|||
*/ |
|||
postMessage(message: unknown): void; |
|||
} |
|||
/** |
|||
* Mark an object as not transferable. If `object` occurs in the transfer list of |
|||
* a `port.postMessage()` call, it is ignored. |
|||
* |
|||
* In particular, this makes sense for objects that can be cloned, rather than |
|||
* transferred, and which are used by other objects on the sending side. |
|||
* For example, Node.js marks the `ArrayBuffer`s it uses for its `Buffer pool` with this. |
|||
* |
|||
* This operation cannot be undone. |
|||
* |
|||
* ```js
|
|||
* const { MessageChannel, markAsUntransferable } = require('worker_threads'); |
|||
* |
|||
* const pooledBuffer = new ArrayBuffer(8); |
|||
* const typedArray1 = new Uint8Array(pooledBuffer); |
|||
* const typedArray2 = new Float64Array(pooledBuffer); |
|||
* |
|||
* markAsUntransferable(pooledBuffer); |
|||
* |
|||
* const { port1 } = new MessageChannel(); |
|||
* port1.postMessage(typedArray1, [ typedArray1.buffer ]); |
|||
* |
|||
* // The following line prints the contents of typedArray1 -- it still owns
|
|||
* // its memory and has been cloned, not transferred. Without
|
|||
* // `markAsUntransferable()`, this would print an empty Uint8Array.
|
|||
* // typedArray2 is intact as well.
|
|||
* console.log(typedArray1); |
|||
* console.log(typedArray2); |
|||
* ```
|
|||
* |
|||
* There is no equivalent to this API in browsers. |
|||
* @since v14.5.0, v12.19.0 |
|||
*/ |
|||
function markAsUntransferable(object: object): void; |
|||
/** |
|||
* Transfer a `MessagePort` to a different `vm` Context. The original `port`object is rendered unusable, and the returned `MessagePort` instance |
|||
* takes its place. |
|||
* |
|||
* The returned `MessagePort` is an object in the target context and |
|||
* inherits from its global `Object` class. Objects passed to the [`port.onmessage()`](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/onmessage) listener are also created in the
|
|||
* target context |
|||
* and inherit from its global `Object` class. |
|||
* |
|||
* However, the created `MessagePort` no longer inherits from [`EventTarget`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget), and only
|
|||
* [`port.onmessage()`](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/onmessage) can be used to receive
|
|||
* events using it. |
|||
* @since v11.13.0 |
|||
* @param port The message port to transfer. |
|||
* @param contextifiedSandbox A `contextified` object as returned by the `vm.createContext()` method. |
|||
*/ |
|||
function moveMessagePortToContext(port: MessagePort, contextifiedSandbox: Context): MessagePort; |
|||
/** |
|||
* Receive a single message from a given `MessagePort`. If no message is available,`undefined` is returned, otherwise an object with a single `message` property |
|||
* that contains the message payload, corresponding to the oldest message in the`MessagePort`’s queue. |
|||
* |
|||
* ```js
|
|||
* const { MessageChannel, receiveMessageOnPort } = require('worker_threads'); |
|||
* const { port1, port2 } = new MessageChannel(); |
|||
* port1.postMessage({ hello: 'world' }); |
|||
* |
|||
* console.log(receiveMessageOnPort(port2)); |
|||
* // Prints: { message: { hello: 'world' } }
|
|||
* console.log(receiveMessageOnPort(port2)); |
|||
* // Prints: undefined
|
|||
* ```
|
|||
* |
|||
* When this function is used, no `'message'` event is emitted and the`onmessage` listener is not invoked. |
|||
* @since v12.3.0 |
|||
*/ |
|||
function receiveMessageOnPort(port: MessagePort): |
|||
| { |
|||
message: any; |
|||
} |
|||
| undefined; |
|||
type Serializable = string | object | number | boolean | bigint; |
|||
/** |
|||
* Within a worker thread, `worker.getEnvironmentData()` returns a clone |
|||
* of data passed to the spawning thread's `worker.setEnvironmentData()`. |
|||
* Every new `Worker` receives its own copy of the environment data |
|||
* automatically. |
|||
* |
|||
* ```js
|
|||
* const { |
|||
* Worker, |
|||
* isMainThread, |
|||
* setEnvironmentData, |
|||
* getEnvironmentData, |
|||
* } = require('worker_threads'); |
|||
* |
|||
* if (isMainThread) { |
|||
* setEnvironmentData('Hello', 'World!'); |
|||
* const worker = new Worker(__filename); |
|||
* } else { |
|||
* console.log(getEnvironmentData('Hello')); // Prints 'World!'.
|
|||
* } |
|||
* ```
|
|||
* @since v15.12.0, v14.18.0 |
|||
* @experimental |
|||
* @param key Any arbitrary, cloneable JavaScript value that can be used as a {Map} key. |
|||
*/ |
|||
function getEnvironmentData(key: Serializable): Serializable; |
|||
/** |
|||
* The `worker.setEnvironmentData()` API sets the content of`worker.getEnvironmentData()` in the current thread and all new `Worker`instances spawned from the current context. |
|||
* @since v15.12.0, v14.18.0 |
|||
* @experimental |
|||
* @param key Any arbitrary, cloneable JavaScript value that can be used as a {Map} key. |
|||
* @param value Any arbitrary, cloneable JavaScript value that will be cloned and passed automatically to all new `Worker` instances. If `value` is passed as `undefined`, any previously set value |
|||
* for the `key` will be deleted. |
|||
*/ |
|||
function setEnvironmentData(key: Serializable, value: Serializable): void; |
|||
} |
|||
declare module 'node:worker_threads' { |
|||
export * from 'worker_threads'; |
|||
} |
|||
@ -0,0 +1,517 @@ |
|||
/** |
|||
* The `zlib` module provides compression functionality implemented using Gzip, |
|||
* Deflate/Inflate, and Brotli. |
|||
* |
|||
* To access it: |
|||
* |
|||
* ```js
|
|||
* const zlib = require('zlib'); |
|||
* ```
|
|||
* |
|||
* Compression and decompression are built around the Node.js `Streams API`. |
|||
* |
|||
* Compressing or decompressing a stream (such as a file) can be accomplished by |
|||
* piping the source stream through a `zlib` `Transform` stream into a destination |
|||
* stream: |
|||
* |
|||
* ```js
|
|||
* const { createGzip } = require('zlib'); |
|||
* const { pipeline } = require('stream'); |
|||
* const { |
|||
* createReadStream, |
|||
* createWriteStream |
|||
* } = require('fs'); |
|||
* |
|||
* const gzip = createGzip(); |
|||
* const source = createReadStream('input.txt'); |
|||
* const destination = createWriteStream('input.txt.gz'); |
|||
* |
|||
* pipeline(source, gzip, destination, (err) => { |
|||
* if (err) { |
|||
* console.error('An error occurred:', err); |
|||
* process.exitCode = 1; |
|||
* } |
|||
* }); |
|||
* |
|||
* // Or, Promisified
|
|||
* |
|||
* const { promisify } = require('util'); |
|||
* const pipe = promisify(pipeline); |
|||
* |
|||
* async function do_gzip(input, output) { |
|||
* const gzip = createGzip(); |
|||
* const source = createReadStream(input); |
|||
* const destination = createWriteStream(output); |
|||
* await pipe(source, gzip, destination); |
|||
* } |
|||
* |
|||
* do_gzip('input.txt', 'input.txt.gz') |
|||
* .catch((err) => { |
|||
* console.error('An error occurred:', err); |
|||
* process.exitCode = 1; |
|||
* }); |
|||
* ```
|
|||
* |
|||
* It is also possible to compress or decompress data in a single step: |
|||
* |
|||
* ```js
|
|||
* const { deflate, unzip } = require('zlib'); |
|||
* |
|||
* const input = '.................................'; |
|||
* deflate(input, (err, buffer) => { |
|||
* if (err) { |
|||
* console.error('An error occurred:', err); |
|||
* process.exitCode = 1; |
|||
* } |
|||
* console.log(buffer.toString('base64')); |
|||
* }); |
|||
* |
|||
* const buffer = Buffer.from('eJzT0yMAAGTvBe8=', 'base64'); |
|||
* unzip(buffer, (err, buffer) => { |
|||
* if (err) { |
|||
* console.error('An error occurred:', err); |
|||
* process.exitCode = 1; |
|||
* } |
|||
* console.log(buffer.toString()); |
|||
* }); |
|||
* |
|||
* // Or, Promisified
|
|||
* |
|||
* const { promisify } = require('util'); |
|||
* const do_unzip = promisify(unzip); |
|||
* |
|||
* do_unzip(buffer) |
|||
* .then((buf) => console.log(buf.toString())) |
|||
* .catch((err) => { |
|||
* console.error('An error occurred:', err); |
|||
* process.exitCode = 1; |
|||
* }); |
|||
* ```
|
|||
* @since v0.5.8 |
|||
* @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/zlib.js)
|
|||
*/ |
|||
declare module 'zlib' { |
|||
import * as stream from 'node:stream'; |
|||
interface ZlibOptions { |
|||
/** |
|||
* @default constants.Z_NO_FLUSH |
|||
*/ |
|||
flush?: number | undefined; |
|||
/** |
|||
* @default constants.Z_FINISH |
|||
*/ |
|||
finishFlush?: number | undefined; |
|||
/** |
|||
* @default 16*1024 |
|||
*/ |
|||
chunkSize?: number | undefined; |
|||
windowBits?: number | undefined; |
|||
level?: number | undefined; // compression only
|
|||
memLevel?: number | undefined; // compression only
|
|||
strategy?: number | undefined; // compression only
|
|||
dictionary?: NodeJS.ArrayBufferView | ArrayBuffer | undefined; // deflate/inflate only, empty dictionary by default
|
|||
info?: boolean | undefined; |
|||
maxOutputLength?: number | undefined; |
|||
} |
|||
interface BrotliOptions { |
|||
/** |
|||
* @default constants.BROTLI_OPERATION_PROCESS |
|||
*/ |
|||
flush?: number | undefined; |
|||
/** |
|||
* @default constants.BROTLI_OPERATION_FINISH |
|||
*/ |
|||
finishFlush?: number | undefined; |
|||
/** |
|||
* @default 16*1024 |
|||
*/ |
|||
chunkSize?: number | undefined; |
|||
params?: |
|||
| { |
|||
/** |
|||
* Each key is a `constants.BROTLI_*` constant. |
|||
*/ |
|||
[key: number]: boolean | number; |
|||
} |
|||
| undefined; |
|||
maxOutputLength?: number | undefined; |
|||
} |
|||
interface Zlib { |
|||
/** @deprecated Use bytesWritten instead. */ |
|||
readonly bytesRead: number; |
|||
readonly bytesWritten: number; |
|||
shell?: boolean | string | undefined; |
|||
close(callback?: () => void): void; |
|||
flush(kind?: number, callback?: () => void): void; |
|||
flush(callback?: () => void): void; |
|||
} |
|||
interface ZlibParams { |
|||
params(level: number, strategy: number, callback: () => void): void; |
|||
} |
|||
interface ZlibReset { |
|||
reset(): void; |
|||
} |
|||
interface BrotliCompress extends stream.Transform, Zlib {} |
|||
interface BrotliDecompress extends stream.Transform, Zlib {} |
|||
interface Gzip extends stream.Transform, Zlib {} |
|||
interface Gunzip extends stream.Transform, Zlib {} |
|||
interface Deflate extends stream.Transform, Zlib, ZlibReset, ZlibParams {} |
|||
interface Inflate extends stream.Transform, Zlib, ZlibReset {} |
|||
interface DeflateRaw extends stream.Transform, Zlib, ZlibReset, ZlibParams {} |
|||
interface InflateRaw extends stream.Transform, Zlib, ZlibReset {} |
|||
interface Unzip extends stream.Transform, Zlib {} |
|||
/** |
|||
* Creates and returns a new `BrotliCompress` object. |
|||
* @since v11.7.0, v10.16.0 |
|||
*/ |
|||
function createBrotliCompress(options?: BrotliOptions): BrotliCompress; |
|||
/** |
|||
* Creates and returns a new `BrotliDecompress` object. |
|||
* @since v11.7.0, v10.16.0 |
|||
*/ |
|||
function createBrotliDecompress(options?: BrotliOptions): BrotliDecompress; |
|||
/** |
|||
* Creates and returns a new `Gzip` object. |
|||
* See `example`. |
|||
* @since v0.5.8 |
|||
*/ |
|||
function createGzip(options?: ZlibOptions): Gzip; |
|||
/** |
|||
* Creates and returns a new `Gunzip` object. |
|||
* @since v0.5.8 |
|||
*/ |
|||
function createGunzip(options?: ZlibOptions): Gunzip; |
|||
/** |
|||
* Creates and returns a new `Deflate` object. |
|||
* @since v0.5.8 |
|||
*/ |
|||
function createDeflate(options?: ZlibOptions): Deflate; |
|||
/** |
|||
* Creates and returns a new `Inflate` object. |
|||
* @since v0.5.8 |
|||
*/ |
|||
function createInflate(options?: ZlibOptions): Inflate; |
|||
/** |
|||
* Creates and returns a new `DeflateRaw` object. |
|||
* |
|||
* An upgrade of zlib from 1.2.8 to 1.2.11 changed behavior when `windowBits`is set to 8 for raw deflate streams. zlib would automatically set `windowBits`to 9 if was initially set to 8\. Newer |
|||
* versions of zlib will throw an exception, |
|||
* so Node.js restored the original behavior of upgrading a value of 8 to 9, |
|||
* since passing `windowBits = 9` to zlib actually results in a compressed stream |
|||
* that effectively uses an 8-bit window only. |
|||
* @since v0.5.8 |
|||
*/ |
|||
function createDeflateRaw(options?: ZlibOptions): DeflateRaw; |
|||
/** |
|||
* Creates and returns a new `InflateRaw` object. |
|||
* @since v0.5.8 |
|||
*/ |
|||
function createInflateRaw(options?: ZlibOptions): InflateRaw; |
|||
/** |
|||
* Creates and returns a new `Unzip` object. |
|||
* @since v0.5.8 |
|||
*/ |
|||
function createUnzip(options?: ZlibOptions): Unzip; |
|||
type InputType = string | ArrayBuffer | NodeJS.ArrayBufferView; |
|||
type CompressCallback = (error: Error | null, result: Buffer) => void; |
|||
/** |
|||
* @since v11.7.0, v10.16.0 |
|||
*/ |
|||
function brotliCompress(buf: InputType, options: BrotliOptions, callback: CompressCallback): void; |
|||
function brotliCompress(buf: InputType, callback: CompressCallback): void; |
|||
namespace brotliCompress { |
|||
function __promisify__(buffer: InputType, options?: BrotliOptions): Promise<Buffer>; |
|||
} |
|||
/** |
|||
* Compress a chunk of data with `BrotliCompress`. |
|||
* @since v11.7.0, v10.16.0 |
|||
*/ |
|||
function brotliCompressSync(buf: InputType, options?: BrotliOptions): Buffer; |
|||
/** |
|||
* @since v11.7.0, v10.16.0 |
|||
*/ |
|||
function brotliDecompress(buf: InputType, options: BrotliOptions, callback: CompressCallback): void; |
|||
function brotliDecompress(buf: InputType, callback: CompressCallback): void; |
|||
namespace brotliDecompress { |
|||
function __promisify__(buffer: InputType, options?: BrotliOptions): Promise<Buffer>; |
|||
} |
|||
/** |
|||
* Decompress a chunk of data with `BrotliDecompress`. |
|||
* @since v11.7.0, v10.16.0 |
|||
*/ |
|||
function brotliDecompressSync(buf: InputType, options?: BrotliOptions): Buffer; |
|||
/** |
|||
* @since v0.6.0 |
|||
*/ |
|||
function deflate(buf: InputType, callback: CompressCallback): void; |
|||
function deflate(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; |
|||
namespace deflate { |
|||
function __promisify__(buffer: InputType, options?: ZlibOptions): Promise<Buffer>; |
|||
} |
|||
/** |
|||
* Compress a chunk of data with `Deflate`. |
|||
* @since v0.11.12 |
|||
*/ |
|||
function deflateSync(buf: InputType, options?: ZlibOptions): Buffer; |
|||
/** |
|||
* @since v0.6.0 |
|||
*/ |
|||
function deflateRaw(buf: InputType, callback: CompressCallback): void; |
|||
function deflateRaw(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; |
|||
namespace deflateRaw { |
|||
function __promisify__(buffer: InputType, options?: ZlibOptions): Promise<Buffer>; |
|||
} |
|||
/** |
|||
* Compress a chunk of data with `DeflateRaw`. |
|||
* @since v0.11.12 |
|||
*/ |
|||
function deflateRawSync(buf: InputType, options?: ZlibOptions): Buffer; |
|||
/** |
|||
* @since v0.6.0 |
|||
*/ |
|||
function gzip(buf: InputType, callback: CompressCallback): void; |
|||
function gzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; |
|||
namespace gzip { |
|||
function __promisify__(buffer: InputType, options?: ZlibOptions): Promise<Buffer>; |
|||
} |
|||
/** |
|||
* Compress a chunk of data with `Gzip`. |
|||
* @since v0.11.12 |
|||
*/ |
|||
function gzipSync(buf: InputType, options?: ZlibOptions): Buffer; |
|||
/** |
|||
* @since v0.6.0 |
|||
*/ |
|||
function gunzip(buf: InputType, callback: CompressCallback): void; |
|||
function gunzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; |
|||
namespace gunzip { |
|||
function __promisify__(buffer: InputType, options?: ZlibOptions): Promise<Buffer>; |
|||
} |
|||
/** |
|||
* Decompress a chunk of data with `Gunzip`. |
|||
* @since v0.11.12 |
|||
*/ |
|||
function gunzipSync(buf: InputType, options?: ZlibOptions): Buffer; |
|||
/** |
|||
* @since v0.6.0 |
|||
*/ |
|||
function inflate(buf: InputType, callback: CompressCallback): void; |
|||
function inflate(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; |
|||
namespace inflate { |
|||
function __promisify__(buffer: InputType, options?: ZlibOptions): Promise<Buffer>; |
|||
} |
|||
/** |
|||
* Decompress a chunk of data with `Inflate`. |
|||
* @since v0.11.12 |
|||
*/ |
|||
function inflateSync(buf: InputType, options?: ZlibOptions): Buffer; |
|||
/** |
|||
* @since v0.6.0 |
|||
*/ |
|||
function inflateRaw(buf: InputType, callback: CompressCallback): void; |
|||
function inflateRaw(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; |
|||
namespace inflateRaw { |
|||
function __promisify__(buffer: InputType, options?: ZlibOptions): Promise<Buffer>; |
|||
} |
|||
/** |
|||
* Decompress a chunk of data with `InflateRaw`. |
|||
* @since v0.11.12 |
|||
*/ |
|||
function inflateRawSync(buf: InputType, options?: ZlibOptions): Buffer; |
|||
/** |
|||
* @since v0.6.0 |
|||
*/ |
|||
function unzip(buf: InputType, callback: CompressCallback): void; |
|||
function unzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; |
|||
namespace unzip { |
|||
function __promisify__(buffer: InputType, options?: ZlibOptions): Promise<Buffer>; |
|||
} |
|||
/** |
|||
* Decompress a chunk of data with `Unzip`. |
|||
* @since v0.11.12 |
|||
*/ |
|||
function unzipSync(buf: InputType, options?: ZlibOptions): Buffer; |
|||
namespace constants { |
|||
const BROTLI_DECODE: number; |
|||
const BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: number; |
|||
const BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: number; |
|||
const BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: number; |
|||
const BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: number; |
|||
const BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: number; |
|||
const BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: number; |
|||
const BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_DISTANCE: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_PADDING_1: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_PADDING_2: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_RESERVED: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: number; |
|||
const BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: number; |
|||
const BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: number; |
|||
const BROTLI_DECODER_ERROR_UNREACHABLE: number; |
|||
const BROTLI_DECODER_NEEDS_MORE_INPUT: number; |
|||
const BROTLI_DECODER_NEEDS_MORE_OUTPUT: number; |
|||
const BROTLI_DECODER_NO_ERROR: number; |
|||
const BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: number; |
|||
const BROTLI_DECODER_PARAM_LARGE_WINDOW: number; |
|||
const BROTLI_DECODER_RESULT_ERROR: number; |
|||
const BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: number; |
|||
const BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: number; |
|||
const BROTLI_DECODER_RESULT_SUCCESS: number; |
|||
const BROTLI_DECODER_SUCCESS: number; |
|||
const BROTLI_DEFAULT_MODE: number; |
|||
const BROTLI_DEFAULT_QUALITY: number; |
|||
const BROTLI_DEFAULT_WINDOW: number; |
|||
const BROTLI_ENCODE: number; |
|||
const BROTLI_LARGE_MAX_WINDOW_BITS: number; |
|||
const BROTLI_MAX_INPUT_BLOCK_BITS: number; |
|||
const BROTLI_MAX_QUALITY: number; |
|||
const BROTLI_MAX_WINDOW_BITS: number; |
|||
const BROTLI_MIN_INPUT_BLOCK_BITS: number; |
|||
const BROTLI_MIN_QUALITY: number; |
|||
const BROTLI_MIN_WINDOW_BITS: number; |
|||
const BROTLI_MODE_FONT: number; |
|||
const BROTLI_MODE_GENERIC: number; |
|||
const BROTLI_MODE_TEXT: number; |
|||
const BROTLI_OPERATION_EMIT_METADATA: number; |
|||
const BROTLI_OPERATION_FINISH: number; |
|||
const BROTLI_OPERATION_FLUSH: number; |
|||
const BROTLI_OPERATION_PROCESS: number; |
|||
const BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: number; |
|||
const BROTLI_PARAM_LARGE_WINDOW: number; |
|||
const BROTLI_PARAM_LGBLOCK: number; |
|||
const BROTLI_PARAM_LGWIN: number; |
|||
const BROTLI_PARAM_MODE: number; |
|||
const BROTLI_PARAM_NDIRECT: number; |
|||
const BROTLI_PARAM_NPOSTFIX: number; |
|||
const BROTLI_PARAM_QUALITY: number; |
|||
const BROTLI_PARAM_SIZE_HINT: number; |
|||
const DEFLATE: number; |
|||
const DEFLATERAW: number; |
|||
const GUNZIP: number; |
|||
const GZIP: number; |
|||
const INFLATE: number; |
|||
const INFLATERAW: number; |
|||
const UNZIP: number; |
|||
// Allowed flush values.
|
|||
const Z_NO_FLUSH: number; |
|||
const Z_PARTIAL_FLUSH: number; |
|||
const Z_SYNC_FLUSH: number; |
|||
const Z_FULL_FLUSH: number; |
|||
const Z_FINISH: number; |
|||
const Z_BLOCK: number; |
|||
const Z_TREES: number; |
|||
// Return codes for the compression/decompression functions.
|
|||
// Negative values are errors, positive values are used for special but normal events.
|
|||
const Z_OK: number; |
|||
const Z_STREAM_END: number; |
|||
const Z_NEED_DICT: number; |
|||
const Z_ERRNO: number; |
|||
const Z_STREAM_ERROR: number; |
|||
const Z_DATA_ERROR: number; |
|||
const Z_MEM_ERROR: number; |
|||
const Z_BUF_ERROR: number; |
|||
const Z_VERSION_ERROR: number; |
|||
// Compression levels.
|
|||
const Z_NO_COMPRESSION: number; |
|||
const Z_BEST_SPEED: number; |
|||
const Z_BEST_COMPRESSION: number; |
|||
const Z_DEFAULT_COMPRESSION: number; |
|||
// Compression strategy.
|
|||
const Z_FILTERED: number; |
|||
const Z_HUFFMAN_ONLY: number; |
|||
const Z_RLE: number; |
|||
const Z_FIXED: number; |
|||
const Z_DEFAULT_STRATEGY: number; |
|||
const Z_DEFAULT_WINDOWBITS: number; |
|||
const Z_MIN_WINDOWBITS: number; |
|||
const Z_MAX_WINDOWBITS: number; |
|||
const Z_MIN_CHUNK: number; |
|||
const Z_MAX_CHUNK: number; |
|||
const Z_DEFAULT_CHUNK: number; |
|||
const Z_MIN_MEMLEVEL: number; |
|||
const Z_MAX_MEMLEVEL: number; |
|||
const Z_DEFAULT_MEMLEVEL: number; |
|||
const Z_MIN_LEVEL: number; |
|||
const Z_MAX_LEVEL: number; |
|||
const Z_DEFAULT_LEVEL: number; |
|||
const ZLIB_VERNUM: number; |
|||
} |
|||
// Allowed flush values.
|
|||
/** @deprecated Use `constants.Z_NO_FLUSH` */ |
|||
const Z_NO_FLUSH: number; |
|||
/** @deprecated Use `constants.Z_PARTIAL_FLUSH` */ |
|||
const Z_PARTIAL_FLUSH: number; |
|||
/** @deprecated Use `constants.Z_SYNC_FLUSH` */ |
|||
const Z_SYNC_FLUSH: number; |
|||
/** @deprecated Use `constants.Z_FULL_FLUSH` */ |
|||
const Z_FULL_FLUSH: number; |
|||
/** @deprecated Use `constants.Z_FINISH` */ |
|||
const Z_FINISH: number; |
|||
/** @deprecated Use `constants.Z_BLOCK` */ |
|||
const Z_BLOCK: number; |
|||
/** @deprecated Use `constants.Z_TREES` */ |
|||
const Z_TREES: number; |
|||
// Return codes for the compression/decompression functions.
|
|||
// Negative values are errors, positive values are used for special but normal events.
|
|||
/** @deprecated Use `constants.Z_OK` */ |
|||
const Z_OK: number; |
|||
/** @deprecated Use `constants.Z_STREAM_END` */ |
|||
const Z_STREAM_END: number; |
|||
/** @deprecated Use `constants.Z_NEED_DICT` */ |
|||
const Z_NEED_DICT: number; |
|||
/** @deprecated Use `constants.Z_ERRNO` */ |
|||
const Z_ERRNO: number; |
|||
/** @deprecated Use `constants.Z_STREAM_ERROR` */ |
|||
const Z_STREAM_ERROR: number; |
|||
/** @deprecated Use `constants.Z_DATA_ERROR` */ |
|||
const Z_DATA_ERROR: number; |
|||
/** @deprecated Use `constants.Z_MEM_ERROR` */ |
|||
const Z_MEM_ERROR: number; |
|||
/** @deprecated Use `constants.Z_BUF_ERROR` */ |
|||
const Z_BUF_ERROR: number; |
|||
/** @deprecated Use `constants.Z_VERSION_ERROR` */ |
|||
const Z_VERSION_ERROR: number; |
|||
// Compression levels.
|
|||
/** @deprecated Use `constants.Z_NO_COMPRESSION` */ |
|||
const Z_NO_COMPRESSION: number; |
|||
/** @deprecated Use `constants.Z_BEST_SPEED` */ |
|||
const Z_BEST_SPEED: number; |
|||
/** @deprecated Use `constants.Z_BEST_COMPRESSION` */ |
|||
const Z_BEST_COMPRESSION: number; |
|||
/** @deprecated Use `constants.Z_DEFAULT_COMPRESSION` */ |
|||
const Z_DEFAULT_COMPRESSION: number; |
|||
// Compression strategy.
|
|||
/** @deprecated Use `constants.Z_FILTERED` */ |
|||
const Z_FILTERED: number; |
|||
/** @deprecated Use `constants.Z_HUFFMAN_ONLY` */ |
|||
const Z_HUFFMAN_ONLY: number; |
|||
/** @deprecated Use `constants.Z_RLE` */ |
|||
const Z_RLE: number; |
|||
/** @deprecated Use `constants.Z_FIXED` */ |
|||
const Z_FIXED: number; |
|||
/** @deprecated Use `constants.Z_DEFAULT_STRATEGY` */ |
|||
const Z_DEFAULT_STRATEGY: number; |
|||
/** @deprecated */ |
|||
const Z_BINARY: number; |
|||
/** @deprecated */ |
|||
const Z_TEXT: number; |
|||
/** @deprecated */ |
|||
const Z_ASCII: number; |
|||
/** @deprecated */ |
|||
const Z_UNKNOWN: number; |
|||
/** @deprecated */ |
|||
const Z_DEFLATED: number; |
|||
} |
|||
declare module 'node:zlib' { |
|||
export * from 'zlib'; |
|||
} |
|||
@ -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/webidl-conversions` |
|||
|
|||
# Summary |
|||
This package contains type definitions for webidl-conversions (https://github.com/jsdom/webidl-conversions#readme). |
|||
|
|||
# Details |
|||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/webidl-conversions. |
|||
|
|||
### Additional Details |
|||
* Last updated: Fri, 02 Jul 2021 18:05:21 GMT |
|||
* Dependencies: none |
|||
* Global values: none |
|||
|
|||
# Credits |
|||
These definitions were written by [ExE Boss](https://github.com/ExE-Boss). |
|||
@ -0,0 +1,103 @@ |
|||
// Type definitions for webidl-conversions 6.1
|
|||
// Project: https://github.com/jsdom/webidl-conversions#readme
|
|||
// Definitions by: ExE Boss <https://github.com/ExE-Boss>
|
|||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
|||
// TypeScript Version: 3.0
|
|||
|
|||
type Parameters<T extends (...args: any[]) => any> = T extends (...args: infer P) => any ? P : never; |
|||
|
|||
declare namespace WebIDLConversions { |
|||
interface Globals { |
|||
[key: string]: any; |
|||
|
|||
Number: (value?: any) => number; |
|||
String: (value?: any) => string; |
|||
TypeError: new (message?: string) => TypeError; |
|||
} |
|||
|
|||
interface Options { |
|||
context?: string | undefined; |
|||
globals?: Globals | undefined; |
|||
} |
|||
|
|||
interface IntegerOptions extends Options { |
|||
enforceRange?: boolean | undefined; |
|||
clamp?: boolean | undefined; |
|||
} |
|||
|
|||
interface StringOptions extends Options { |
|||
treatNullAsEmptyString?: boolean | undefined; |
|||
} |
|||
|
|||
interface BufferSourceOptions extends Options { |
|||
allowShared?: boolean | undefined; |
|||
} |
|||
|
|||
type IntegerConversion = (V: any, opts?: IntegerOptions) => number; |
|||
type StringConversion = (V: any, opts?: StringOptions) => string; |
|||
type NumberConversion = (V: any, opts?: Options) => number; |
|||
} |
|||
|
|||
declare const WebIDLConversions: { |
|||
any<V>(V: V, opts?: WebIDLConversions.Options): V; |
|||
void(V?: any, opts?: WebIDLConversions.Options): void; |
|||
boolean(V: any, opts?: WebIDLConversions.Options): boolean; |
|||
|
|||
byte(V: any, opts?: WebIDLConversions.IntegerOptions): number; |
|||
octet(V: any, opts?: WebIDLConversions.IntegerOptions): number; |
|||
|
|||
short(V: any, opts?: WebIDLConversions.IntegerOptions): number; |
|||
['unsigned short'](V: any, opts?: WebIDLConversions.IntegerOptions): number; |
|||
|
|||
long(V: any, opts?: WebIDLConversions.IntegerOptions): number; |
|||
['unsigned long'](V: any, opts?: WebIDLConversions.IntegerOptions): number; |
|||
|
|||
['long long'](V: any, opts?: WebIDLConversions.IntegerOptions): number; |
|||
['unsigned long long'](V: any, opts?: WebIDLConversions.IntegerOptions): number; |
|||
|
|||
double(V: any, opts?: WebIDLConversions.Options): number; |
|||
['unrestricted double'](V: any, opts?: WebIDLConversions.Options): number; |
|||
|
|||
float(V: any, opts?: WebIDLConversions.Options): number; |
|||
['unrestricted float'](V: any, opts?: WebIDLConversions.Options): number; |
|||
|
|||
DOMString(V: any, opts?: WebIDLConversions.StringOptions): string; |
|||
ByteString(V: any, opts?: WebIDLConversions.StringOptions): string; |
|||
USVString(V: any, opts?: WebIDLConversions.StringOptions): string; |
|||
|
|||
object<V>(V: V, opts?: WebIDLConversions.Options): V extends object ? V : V & object; |
|||
ArrayBuffer(V: any, opts?: WebIDLConversions.BufferSourceOptions & { allowShared?: false | undefined }): ArrayBuffer; |
|||
ArrayBuffer(V: any, opts?: WebIDLConversions.BufferSourceOptions): ArrayBufferLike; |
|||
DataView(V: any, opts?: WebIDLConversions.BufferSourceOptions): DataView; |
|||
|
|||
Int8Array(V: any, opts?: WebIDLConversions.BufferSourceOptions): Int8Array; |
|||
Int16Array(V: any, opts?: WebIDLConversions.BufferSourceOptions): Int16Array; |
|||
Int32Array(V: any, opts?: WebIDLConversions.BufferSourceOptions): Int32Array; |
|||
|
|||
Uint8Array(V: any, opts?: WebIDLConversions.BufferSourceOptions): Uint8Array; |
|||
Uint16Array(V: any, opts?: WebIDLConversions.BufferSourceOptions): Uint16Array; |
|||
Uint32Array(V: any, opts?: WebIDLConversions.BufferSourceOptions): Uint32Array; |
|||
Uint8ClampedArray(V: any, opts?: WebIDLConversions.BufferSourceOptions): Uint8ClampedArray; |
|||
|
|||
Float32Array(V: any, opts?: WebIDLConversions.BufferSourceOptions): Float32Array; |
|||
Float64Array(V: any, opts?: WebIDLConversions.BufferSourceOptions): Float64Array; |
|||
|
|||
ArrayBufferView(V: any, opts?: WebIDLConversions.BufferSourceOptions): ArrayBufferView; |
|||
BufferSource(V: any, opts?: WebIDLConversions.BufferSourceOptions & { allowShared?: false | undefined }): ArrayBuffer | ArrayBufferView; |
|||
BufferSource(V: any, opts?: WebIDLConversions.BufferSourceOptions): ArrayBufferLike | ArrayBufferView; |
|||
|
|||
DOMTimeStamp(V: any, opts?: WebIDLConversions.Options): number; |
|||
|
|||
// tslint:disable:ban-types
|
|||
/** @deprecated Will be removed in v7.0 */ |
|||
Function<V>(V: V, opts?: WebIDLConversions.Options): V extends (...args: any[]) => any ? V : Function; |
|||
|
|||
/** @deprecated Will be removed in v7.0 */ |
|||
VoidFunction<V>( |
|||
V: V, |
|||
opts?: WebIDLConversions.Options, |
|||
): V extends (...args: any[]) => any ? (...args: Parameters<V>) => void : Function; |
|||
}; |
|||
|
|||
// This can't use ES6 style exports, as those can't have spaces in export names.
|
|||
export = WebIDLConversions; |
|||
@ -0,0 +1,53 @@ |
|||
{ |
|||
"_from": "@types/webidl-conversions@*", |
|||
"_id": "@types/webidl-conversions@6.1.1", |
|||
"_inBundle": false, |
|||
"_integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==", |
|||
"_location": "/@types/webidl-conversions", |
|||
"_phantomChildren": {}, |
|||
"_requested": { |
|||
"type": "range", |
|||
"registry": true, |
|||
"raw": "@types/webidl-conversions@*", |
|||
"name": "@types/webidl-conversions", |
|||
"escapedName": "@types%2fwebidl-conversions", |
|||
"scope": "@types", |
|||
"rawSpec": "*", |
|||
"saveSpec": null, |
|||
"fetchSpec": "*" |
|||
}, |
|||
"_requiredBy": [ |
|||
"/@types/whatwg-url" |
|||
], |
|||
"_resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", |
|||
"_shasum": "e33bc8ea812a01f63f90481c666334844b12a09e", |
|||
"_spec": "@types/webidl-conversions@*", |
|||
"_where": "/Users/satish.ganga/Desktop/EKAM/ekamv5/ahc/node_modules/@types/whatwg-url", |
|||
"bugs": { |
|||
"url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues" |
|||
}, |
|||
"bundleDependencies": false, |
|||
"contributors": [ |
|||
{ |
|||
"name": "ExE Boss", |
|||
"url": "https://github.com/ExE-Boss" |
|||
} |
|||
], |
|||
"dependencies": {}, |
|||
"deprecated": false, |
|||
"description": "TypeScript definitions for webidl-conversions", |
|||
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/webidl-conversions", |
|||
"license": "MIT", |
|||
"main": "", |
|||
"name": "@types/webidl-conversions", |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git", |
|||
"directory": "types/webidl-conversions" |
|||
}, |
|||
"scripts": {}, |
|||
"typeScriptVersion": "3.6", |
|||
"types": "index.d.ts", |
|||
"typesPublisherContentHash": "bc47f919faf031afa91cea9b170f96f05eeac452057ba17794386552a99d0ad7", |
|||
"version": "6.1.1" |
|||
} |
|||
@ -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/whatwg-url` |
|||
|
|||
# Summary |
|||
This package contains type definitions for whatwg-url (https://github.com/jsdom/whatwg-url#readme). |
|||
|
|||
# Details |
|||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/whatwg-url. |
|||
|
|||
### Additional Details |
|||
* Last updated: Fri, 02 Jul 2021 18:05:37 GMT |
|||
* Dependencies: [@types/webidl-conversions](https://npmjs.com/package/@types/webidl-conversions), [@types/node](https://npmjs.com/package/@types/node) |
|||
* Global values: none |
|||
|
|||
# Credits |
|||
These definitions were written by [Alexander Marks](https://github.com/aomarks), and [ExE Boss](https://github.com/ExE-Boss). |
|||
@ -0,0 +1,23 @@ |
|||
declare class URLImpl { |
|||
constructor( |
|||
globalObject: object, |
|||
constructorArgs: readonly [url: string, base?: string], |
|||
privateData?: {}, |
|||
); |
|||
|
|||
href: string; |
|||
readonly origin: string; |
|||
protocol: string; |
|||
username: string; |
|||
password: string; |
|||
host: string; |
|||
hostname: string; |
|||
port: string; |
|||
pathname: string; |
|||
search: string; |
|||
readonly searchParams: URLSearchParams; |
|||
hash: string; |
|||
|
|||
toJSON(): string; |
|||
} |
|||
export { URLImpl as implementation }; |
|||
@ -0,0 +1,76 @@ |
|||
import { Options as WebIDLConversionOptions } from "webidl-conversions"; |
|||
import { URL } from "../index"; |
|||
import { implementation as URLImpl } from "./URL-impl"; |
|||
|
|||
/** |
|||
* Checks whether `obj` is a `URL` object with an implementation |
|||
* provided by this package. |
|||
*/ |
|||
export function is(obj: unknown): obj is URL; |
|||
|
|||
/** |
|||
* Checks whether `obj` is a `URLImpl` WebIDL2JS implementation object |
|||
* provided by this package. |
|||
*/ |
|||
export function isImpl(obj: unknown): obj is URLImpl; |
|||
|
|||
/** |
|||
* Converts the `URL` wrapper into a `URLImpl` object. |
|||
* |
|||
* @throws {TypeError} If `obj` is not a `URL` wrapper instance provided by this package. |
|||
*/ |
|||
export function convert(obj: unknown, options?: WebIDLConversionOptions): URLImpl; |
|||
|
|||
/** |
|||
* Creates a new `URL` instance. |
|||
* |
|||
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor |
|||
* registry or a `URL` constructor provided by this package |
|||
* in the WebIDL2JS constructor registry. |
|||
*/ |
|||
export function create( |
|||
globalObject: object, |
|||
constructorArgs: readonly [url: string, base?: string], |
|||
privateData?: {}, |
|||
): URL; |
|||
|
|||
/** |
|||
* Calls `create()` and returns the internal `URLImpl`. |
|||
* |
|||
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor |
|||
* registry or a `URL` constructor provided by this package |
|||
* in the WebIDL2JS constructor registry. |
|||
*/ |
|||
export function createImpl( |
|||
globalObject: object, |
|||
constructorArgs: readonly [url: string, base?: string], |
|||
privateData?: {}, |
|||
): URLImpl; |
|||
|
|||
/** |
|||
* Initializes the `URL` instance, called by `create()`. |
|||
* |
|||
* Useful when manually sub-classing a non-constructable wrapper object. |
|||
*/ |
|||
export function setup<T extends URL>( |
|||
obj: T, |
|||
globalObject: object, |
|||
constructorArgs: readonly [url: string, base?: string], |
|||
privateData?: {}, |
|||
): T; |
|||
|
|||
/** |
|||
* Creates a new `URL` object without runing the constructor steps. |
|||
* |
|||
* Useful when implementing specifications that initialize objects |
|||
* in different ways than their constructors do. |
|||
*/ |
|||
declare function _new(globalObject: object): URLImpl; |
|||
export { _new as new }; |
|||
|
|||
/** |
|||
* Installs the `URL` constructor onto the `globalObject`. |
|||
* |
|||
* @throws {Error} If the target `globalObject` doesn't have an `Error` constructor. |
|||
*/ |
|||
export function install(globalObject: object, globalNames: readonly string[]): void; |
|||
@ -0,0 +1,23 @@ |
|||
declare class URLSearchParamsImpl { |
|||
constructor( |
|||
globalObject: object, |
|||
constructorArgs: readonly [ |
|||
init?: |
|||
| ReadonlyArray<readonly [name: string, value: string]> |
|||
| { readonly [name: string]: string } |
|||
| string, |
|||
], |
|||
privateData: { readonly doNotStripQMark?: boolean | undefined }, |
|||
); |
|||
|
|||
append(name: string, value: string): void; |
|||
delete(name: string): void; |
|||
get(name: string): string | null; |
|||
getAll(name: string): string[]; |
|||
has(name: string): boolean; |
|||
set(name: string, value: string): void; |
|||
sort(): void; |
|||
|
|||
[Symbol.iterator](): IterableIterator<[name: string, value: string]>; |
|||
} |
|||
export { URLSearchParamsImpl as implementation }; |
|||
@ -0,0 +1,91 @@ |
|||
import { Options as WebIDLConversionOptions } from "webidl-conversions"; |
|||
import { URLSearchParams } from "../index"; |
|||
import { implementation as URLSearchParamsImpl } from "./URLSearchParams-impl"; |
|||
|
|||
/** |
|||
* Checks whether `obj` is a `URLSearchParams` object with an implementation |
|||
* provided by this package. |
|||
*/ |
|||
export function is(obj: unknown): obj is URLSearchParams; |
|||
|
|||
/** |
|||
* Checks whether `obj` is a `URLSearchParamsImpl` WebIDL2JS implementation object |
|||
* provided by this package. |
|||
*/ |
|||
export function isImpl(obj: unknown): obj is URLSearchParamsImpl; |
|||
|
|||
/** |
|||
* Converts the `URLSearchParams` wrapper into a `URLSearchParamsImpl` object. |
|||
* |
|||
* @throws {TypeError} If `obj` is not a `URLSearchParams` wrapper instance provided by this package. |
|||
*/ |
|||
export function convert(obj: unknown, options?: WebIDLConversionOptions): URLSearchParamsImpl; |
|||
|
|||
/** |
|||
* Creates a new `URLSearchParams` instance. |
|||
* |
|||
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor |
|||
* registry or a `URLSearchParams` constructor provided by this package |
|||
* in the WebIDL2JS constructor registry. |
|||
*/ |
|||
export function create( |
|||
globalObject: object, |
|||
constructorArgs?: readonly [ |
|||
init: |
|||
| ReadonlyArray<[name: string, value: string]> |
|||
| { readonly [name: string]: string } |
|||
| string, |
|||
], |
|||
privateData?: { doNotStripQMark?: boolean | undefined }, |
|||
): URLSearchParams; |
|||
|
|||
/** |
|||
* Calls `create()` and returns the internal `URLSearchParamsImpl`. |
|||
* |
|||
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor |
|||
* registry or a `URLSearchParams` constructor provided by this package |
|||
* in the WebIDL2JS constructor registry. |
|||
*/ |
|||
export function createImpl( |
|||
globalObject: object, |
|||
constructorArgs?: readonly [ |
|||
init: |
|||
| ReadonlyArray<[name: string, value: string]> |
|||
| { readonly [name: string]: string } |
|||
| string, |
|||
], |
|||
privateData?: { doNotStripQMark?: boolean | undefined }, |
|||
): URLSearchParamsImpl; |
|||
|
|||
/** |
|||
* Initializes the `URLSearchParams` instance, called by `create()`. |
|||
* |
|||
* Useful when manually sub-classing a non-constructable wrapper object. |
|||
*/ |
|||
export function setup<T extends URLSearchParams>( |
|||
obj: T, |
|||
globalObject: object, |
|||
constructorArgs?: readonly [ |
|||
init: |
|||
| ReadonlyArray<[name: string, value: string]> |
|||
| { readonly [name: string]: string } |
|||
| string, |
|||
], |
|||
privateData?: { doNotStripQMark?: boolean | undefined }, |
|||
): T; |
|||
|
|||
/** |
|||
* Creates a new `URLSearchParams` object without runing the constructor steps. |
|||
* |
|||
* Useful when implementing specifications that initialize objects |
|||
* in different ways than their constructors do. |
|||
*/ |
|||
declare function _new(globalObject: object): URLSearchParamsImpl; |
|||
export { _new as new }; |
|||
|
|||
/** |
|||
* Installs the `URLSearchParams` constructor onto the `globalObject`. |
|||
* |
|||
* @throws {Error} If the target `globalObject` doesn't have an `Error` constructor. |
|||
*/ |
|||
export function install(globalObject: object, globalNames: readonly string[]): void; |
|||
@ -0,0 +1,162 @@ |
|||
// Type definitions for whatwg-url 8.2
|
|||
// Project: https://github.com/jsdom/whatwg-url#readme
|
|||
// Definitions by: Alexander Marks <https://github.com/aomarks>
|
|||
// ExE Boss <https://github.com/ExE-Boss>
|
|||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
|||
// Minimum TypeScript Version: 3.6
|
|||
|
|||
/// <reference types="node"/>
|
|||
|
|||
/** https://url.spec.whatwg.org/#url-representation */ |
|||
export interface URLRecord { |
|||
scheme: string; |
|||
username: string; |
|||
password: string; |
|||
host: string | number | IPv6Address | null; |
|||
port: number | null; |
|||
path: string[]; |
|||
query: string | null; |
|||
fragment: string | null; |
|||
cannotBeABaseURL?: boolean | undefined; |
|||
} |
|||
|
|||
/** https://url.spec.whatwg.org/#concept-ipv6 */ |
|||
export type IPv6Address = [number, number, number, number, number, number, number, number]; |
|||
|
|||
/** https://url.spec.whatwg.org/#url-class */ |
|||
export class URL { |
|||
constructor(url: string, base?: string | URL); |
|||
|
|||
get href(): string; |
|||
set href(V: string); |
|||
|
|||
get origin(): string; |
|||
|
|||
get protocol(): string; |
|||
set protocol(V: string); |
|||
|
|||
get username(): string; |
|||
set username(V: string); |
|||
|
|||
get password(): string; |
|||
set password(V: string); |
|||
|
|||
get host(): string; |
|||
set host(V: string); |
|||
|
|||
get hostname(): string; |
|||
set hostname(V: string); |
|||
|
|||
get port(): string; |
|||
set port(V: string); |
|||
|
|||
get pathname(): string; |
|||
set pathname(V: string); |
|||
|
|||
get search(): string; |
|||
set search(V: string); |
|||
|
|||
get searchParams(): URLSearchParams; |
|||
|
|||
get hash(): string; |
|||
set hash(V: string); |
|||
|
|||
toJSON(): string; |
|||
|
|||
readonly [Symbol.toStringTag]: "URL"; |
|||
} |
|||
|
|||
/** https://url.spec.whatwg.org/#interface-urlsearchparams */ |
|||
export class URLSearchParams { |
|||
constructor( |
|||
init?: |
|||
| ReadonlyArray<readonly [name: string, value: string]> |
|||
| Iterable<readonly [name: string, value: string]> |
|||
| { readonly [name: string]: string } |
|||
| string, |
|||
); |
|||
|
|||
append(name: string, value: string): void; |
|||
delete(name: string): void; |
|||
get(name: string): string | null; |
|||
getAll(name: string): string[]; |
|||
has(name: string): boolean; |
|||
set(name: string, value: string): void; |
|||
sort(): void; |
|||
|
|||
keys(): IterableIterator<string>; |
|||
values(): IterableIterator<string>; |
|||
entries(): IterableIterator<[name: string, value: string]>; |
|||
forEach<THIS_ARG = void>( |
|||
callback: (this: THIS_ARG, value: string, name: string, searchParams: this) => void, |
|||
thisArg?: THIS_ARG, |
|||
): void; |
|||
|
|||
readonly [Symbol.toStringTag]: "URLSearchParams"; |
|||
[Symbol.iterator](): IterableIterator<[name: string, value: string]>; |
|||
} |
|||
|
|||
/** https://url.spec.whatwg.org/#concept-url-parser */ |
|||
export function parseURL( |
|||
input: string, |
|||
options?: { readonly baseURL?: string | undefined; readonly encodingOverride?: string | undefined }, |
|||
): URLRecord | null; |
|||
|
|||
/** https://url.spec.whatwg.org/#concept-basic-url-parser */ |
|||
export function basicURLParse( |
|||
input: string, |
|||
options?: { |
|||
baseURL?: string | undefined; |
|||
encodingOverride?: string | undefined; |
|||
url?: URLRecord | undefined; |
|||
stateOverride?: StateOverride | undefined; |
|||
}, |
|||
): URLRecord | null; |
|||
|
|||
/** https://url.spec.whatwg.org/#scheme-start-state */ |
|||
export type StateOverride = |
|||
| "scheme start" |
|||
| "scheme" |
|||
| "no scheme" |
|||
| "special relative or authority" |
|||
| "path or authority" |
|||
| "relative" |
|||
| "relative slash" |
|||
| "special authority slashes" |
|||
| "special authority ignore slashes" |
|||
| "authority" |
|||
| "host" |
|||
| "hostname" |
|||
| "port" |
|||
| "file" |
|||
| "file slash" |
|||
| "file host" |
|||
| "path start" |
|||
| "path" |
|||
| "cannot-be-a-base-URL path" |
|||
| "query" |
|||
| "fragment"; |
|||
|
|||
/** https://url.spec.whatwg.org/#concept-url-serializer */ |
|||
export function serializeURL(urlRecord: URLRecord, excludeFragment?: boolean): string; |
|||
|
|||
/** https://url.spec.whatwg.org/#concept-host-serializer */ |
|||
export function serializeHost(host: string | number | IPv6Address): string; |
|||
|
|||
/** https://url.spec.whatwg.org/#serialize-an-integer */ |
|||
export function serializeInteger(number: number): string; |
|||
|
|||
/** https://html.spec.whatwg.org#ascii-serialisation-of-an-origin */ |
|||
export function serializeURLOrigin(urlRecord: URLRecord): string; |
|||
|
|||
/** https://url.spec.whatwg.org/#set-the-username */ |
|||
export function setTheUsername(urlRecord: URLRecord, username: string): void; |
|||
|
|||
/** https://url.spec.whatwg.org/#set-the-password */ |
|||
export function setThePassword(urlRecord: URLRecord, password: string): void; |
|||
|
|||
/** https://url.spec.whatwg.org/#cannot-have-a-username-password-port */ |
|||
export function cannotHaveAUsernamePasswordPort(urlRecord: URLRecord): boolean; |
|||
|
|||
/** https://url.spec.whatwg.org/#percent-decode */ |
|||
export function percentDecode(buffer: Extract<NodeJS.TypedArray, ArrayLike<number>>): Buffer; |
|||
@ -0,0 +1,67 @@ |
|||
{ |
|||
"_from": "@types/whatwg-url@^8.2.1", |
|||
"_id": "@types/whatwg-url@8.2.1", |
|||
"_inBundle": false, |
|||
"_integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", |
|||
"_location": "/@types/whatwg-url", |
|||
"_phantomChildren": {}, |
|||
"_requested": { |
|||
"type": "range", |
|||
"registry": true, |
|||
"raw": "@types/whatwg-url@^8.2.1", |
|||
"name": "@types/whatwg-url", |
|||
"escapedName": "@types%2fwhatwg-url", |
|||
"scope": "@types", |
|||
"rawSpec": "^8.2.1", |
|||
"saveSpec": null, |
|||
"fetchSpec": "^8.2.1" |
|||
}, |
|||
"_requiredBy": [ |
|||
"/mongodb-connection-string-url" |
|||
], |
|||
"_resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", |
|||
"_shasum": "f1aac222dab7c59e011663a0cb0a3117b2ef05d4", |
|||
"_spec": "@types/whatwg-url@^8.2.1", |
|||
"_where": "/Users/satish.ganga/Desktop/EKAM/ekamv5/ahc/node_modules/mongodb-connection-string-url", |
|||
"bugs": { |
|||
"url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues" |
|||
}, |
|||
"bundleDependencies": false, |
|||
"contributors": [ |
|||
{ |
|||
"name": "Alexander Marks", |
|||
"url": "https://github.com/aomarks" |
|||
}, |
|||
{ |
|||
"name": "ExE Boss", |
|||
"url": "https://github.com/ExE-Boss" |
|||
} |
|||
], |
|||
"dependencies": { |
|||
"@types/node": "*", |
|||
"@types/webidl-conversions": "*" |
|||
}, |
|||
"deprecated": false, |
|||
"description": "TypeScript definitions for whatwg-url", |
|||
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/whatwg-url", |
|||
"license": "MIT", |
|||
"main": "", |
|||
"name": "@types/whatwg-url", |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git", |
|||
"directory": "types/whatwg-url" |
|||
}, |
|||
"scripts": {}, |
|||
"typeScriptVersion": "3.6", |
|||
"types": "index.d.ts", |
|||
"typesPublisherContentHash": "a1260472a5aaba17ca5053dad6f0e88d68682ac63f5ddf4bc333657bdd7e9e96", |
|||
"typesVersions": { |
|||
"<=3.9": { |
|||
"*": [ |
|||
"ts3.9/*" |
|||
] |
|||
} |
|||
}, |
|||
"version": "8.2.1" |
|||
} |
|||
@ -0,0 +1,23 @@ |
|||
declare class URLImpl { |
|||
constructor( |
|||
globalObject: object, |
|||
[url, base]: readonly [string, string?], |
|||
privateData?: {}, |
|||
); |
|||
|
|||
href: string; |
|||
readonly origin: string; |
|||
protocol: string; |
|||
username: string; |
|||
password: string; |
|||
host: string; |
|||
hostname: string; |
|||
port: string; |
|||
pathname: string; |
|||
search: string; |
|||
readonly searchParams: URLSearchParams; |
|||
hash: string; |
|||
|
|||
toJSON(): string; |
|||
} |
|||
export { URLImpl as implementation }; |
|||
@ -0,0 +1,76 @@ |
|||
import { Options as WebIDLConversionOptions } from "webidl-conversions"; |
|||
import { URL } from "../index"; |
|||
import { implementation as URLImpl } from "./URL-impl"; |
|||
|
|||
/** |
|||
* Checks whether `obj` is a `URL` object with an implementation |
|||
* provided by this package. |
|||
*/ |
|||
export function is(obj: unknown): obj is URL; |
|||
|
|||
/** |
|||
* Checks whether `obj` is a `URLImpl` WebIDL2JS implementation object |
|||
* provided by this package. |
|||
*/ |
|||
export function isImpl(obj: unknown): obj is URLImpl; |
|||
|
|||
/** |
|||
* Converts the `URL` wrapper into a `URLImpl` object. |
|||
* |
|||
* @throws {TypeError} If `obj` is not a `URL` wrapper instance provided by this package. |
|||
*/ |
|||
export function convert(obj: unknown, options?: WebIDLConversionOptions): URLImpl; |
|||
|
|||
/** |
|||
* Creates a new `URL` instance. |
|||
* |
|||
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor |
|||
* registry or a `URL` constructor provided by this package |
|||
* in the WebIDL2JS constructor registry. |
|||
*/ |
|||
export function create( |
|||
globalObject: object, |
|||
[url, base]: readonly [string, string?], |
|||
privateData?: {}, |
|||
): URL; |
|||
|
|||
/** |
|||
* Calls `create()` and returns the internal `URLImpl`. |
|||
* |
|||
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor |
|||
* registry or a `URL` constructor provided by this package |
|||
* in the WebIDL2JS constructor registry. |
|||
*/ |
|||
export function createImpl( |
|||
globalObject: object, |
|||
[url, base]: readonly [string, string?], |
|||
privateData?: {}, |
|||
): URLImpl; |
|||
|
|||
/** |
|||
* Initializes the `URL` instance, called by `create()`. |
|||
* |
|||
* Useful when manually sub-classing a non-constructable wrapper object. |
|||
*/ |
|||
export function setup<T extends URL>( |
|||
obj: T, |
|||
globalObject: object, |
|||
[url, base]: readonly [string, string?], |
|||
privateData?: {}, |
|||
): T; |
|||
|
|||
/** |
|||
* Creates a new `URL` object without runing the constructor steps. |
|||
* |
|||
* Useful when implementing specifications that initialize objects |
|||
* in different ways than their constructors do. |
|||
*/ |
|||
declare function _new(globalObject: object): URLImpl; |
|||
export { _new as new }; |
|||
|
|||
/** |
|||
* Installs the `URL` constructor onto the `globalObject`. |
|||
* |
|||
* @throws {Error} If the target `globalObject` doesn't have an `Error` constructor. |
|||
*/ |
|||
export function install(globalObject: object, globalNames: readonly string[]): void; |
|||
@ -0,0 +1,24 @@ |
|||
declare class URLSearchParamsImpl { |
|||
constructor( |
|||
globalObject: object, |
|||
[init]: readonly [ |
|||
( |
|||
| ReadonlyArray<readonly [string, string]> |
|||
| { readonly [name: string]: string } |
|||
| string |
|||
)?, |
|||
], |
|||
privateData: { readonly doNotStripQMark?: boolean }, |
|||
); |
|||
|
|||
append(name: string, value: string): void; |
|||
delete(name: string): void; |
|||
get(name: string): string | null; |
|||
getAll(name: string): string[]; |
|||
has(name: string): boolean; |
|||
set(name: string, value: string): void; |
|||
sort(): void; |
|||
|
|||
[Symbol.iterator](): IterableIterator<[string, string]>; |
|||
} |
|||
export { URLSearchParamsImpl as implementation }; |
|||
@ -0,0 +1,94 @@ |
|||
import { Options as WebIDLConversionOptions } from "webidl-conversions"; |
|||
import { URLSearchParams } from "../index"; |
|||
import { implementation as URLSearchParamsImpl } from "./URLSearchParams-impl"; |
|||
|
|||
/** |
|||
* Checks whether `obj` is a `URLSearchParams` object with an implementation |
|||
* provided by this package. |
|||
*/ |
|||
export function is(obj: unknown): obj is URLSearchParams; |
|||
|
|||
/** |
|||
* Checks whether `obj` is a `URLSearchParamsImpl` WebIDL2JS implementation object |
|||
* provided by this package. |
|||
*/ |
|||
export function isImpl(obj: unknown): obj is URLSearchParamsImpl; |
|||
|
|||
/** |
|||
* Converts the `URLSearchParams` wrapper into a `URLSearchParamsImpl` object. |
|||
* |
|||
* @throws {TypeError} If `obj` is not a `URLSearchParams` wrapper instance provided by this package. |
|||
*/ |
|||
export function convert(obj: unknown, options?: WebIDLConversionOptions): URLSearchParamsImpl; |
|||
|
|||
/** |
|||
* Creates a new `URLSearchParams` instance. |
|||
* |
|||
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor |
|||
* registry or a `URLSearchParams` constructor provided by this package |
|||
* in the WebIDL2JS constructor registry. |
|||
*/ |
|||
export function create( |
|||
globalObject: object, |
|||
[init]?: readonly [ |
|||
( |
|||
| ReadonlyArray<readonly [string, string]> |
|||
| { readonly [name: string]: string } |
|||
| string |
|||
)?, |
|||
], |
|||
privateData?: { doNotStripQMark?: boolean }, |
|||
): URLSearchParams; |
|||
|
|||
/** |
|||
* Calls `create()` and returns the internal `URLSearchParamsImpl`. |
|||
* |
|||
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor |
|||
* registry or a `URLSearchParams` constructor provided by this package |
|||
* in the WebIDL2JS constructor registry. |
|||
*/ |
|||
export function createImpl( |
|||
globalObject: object, |
|||
[init]?: readonly [ |
|||
( |
|||
| ReadonlyArray<readonly [string, string]> |
|||
| { readonly [name: string]: string } |
|||
| string |
|||
)?, |
|||
], |
|||
privateData?: { doNotStripQMark?: boolean }, |
|||
): URLSearchParamsImpl; |
|||
|
|||
/** |
|||
* Initializes the `URLSearchParams` instance, called by `create()`. |
|||
* |
|||
* Useful when manually sub-classing a non-constructable wrapper object. |
|||
*/ |
|||
export function setup<T extends URLSearchParams>( |
|||
obj: T, |
|||
globalObject: object, |
|||
[init]?: readonly [ |
|||
( |
|||
| ReadonlyArray<readonly [string, string]> |
|||
| { readonly [name: string]: string } |
|||
| string |
|||
)?, |
|||
], |
|||
privateData?: { doNotStripQMark?: boolean }, |
|||
): T; |
|||
|
|||
/** |
|||
* Creates a new `URLSearchParams` object without runing the constructor steps. |
|||
* |
|||
* Useful when implementing specifications that initialize objects |
|||
* in different ways than their constructors do. |
|||
*/ |
|||
declare function _new(globalObject: object): URLSearchParamsImpl; |
|||
export { _new as new }; |
|||
|
|||
/** |
|||
* Installs the `URLSearchParams` constructor onto the `globalObject`. |
|||
* |
|||
* @throws {Error} If the target `globalObject` doesn't have an `Error` constructor. |
|||
*/ |
|||
export function install(globalObject: object, globalNames: readonly string[]): void; |
|||
@ -0,0 +1,155 @@ |
|||
/// <reference types="node"/>
|
|||
|
|||
/** https://url.spec.whatwg.org/#url-representation */ |
|||
export interface URLRecord { |
|||
scheme: string; |
|||
username: string; |
|||
password: string; |
|||
host: string | number | IPv6Address | null; |
|||
port: number | null; |
|||
path: string[]; |
|||
query: string | null; |
|||
fragment: string | null; |
|||
cannotBeABaseURL?: boolean; |
|||
} |
|||
|
|||
/** https://url.spec.whatwg.org/#concept-ipv6 */ |
|||
export type IPv6Address = [number, number, number, number, number, number, number, number]; |
|||
|
|||
/** https://url.spec.whatwg.org/#url-class */ |
|||
export class URL { |
|||
constructor(url: string, base?: string | URL); |
|||
|
|||
get href(): string; |
|||
set href(V: string); |
|||
|
|||
get origin(): string; |
|||
|
|||
get protocol(): string; |
|||
set protocol(V: string); |
|||
|
|||
get username(): string; |
|||
set username(V: string); |
|||
|
|||
get password(): string; |
|||
set password(V: string); |
|||
|
|||
get host(): string; |
|||
set host(V: string); |
|||
|
|||
get hostname(): string; |
|||
set hostname(V: string); |
|||
|
|||
get port(): string; |
|||
set port(V: string); |
|||
|
|||
get pathname(): string; |
|||
set pathname(V: string); |
|||
|
|||
get search(): string; |
|||
set search(V: string); |
|||
|
|||
get searchParams(): URLSearchParams; |
|||
|
|||
get hash(): string; |
|||
set hash(V: string); |
|||
|
|||
toJSON(): string; |
|||
|
|||
readonly [Symbol.toStringTag]: "URL"; |
|||
} |
|||
|
|||
/** https://url.spec.whatwg.org/#interface-urlsearchparams */ |
|||
export class URLSearchParams { |
|||
constructor( |
|||
init?: |
|||
| ReadonlyArray<readonly [string, string]> |
|||
| Iterable<readonly [string, string]> |
|||
| { readonly [name: string]: string } |
|||
| string, |
|||
); |
|||
|
|||
append(name: string, value: string): void; |
|||
delete(name: string): void; |
|||
get(name: string): string | null; |
|||
getAll(name: string): string[]; |
|||
has(name: string): boolean; |
|||
set(name: string, value: string): void; |
|||
sort(): void; |
|||
|
|||
keys(): IterableIterator<string>; |
|||
values(): IterableIterator<string>; |
|||
entries(): IterableIterator<[string, string]>; |
|||
forEach<THIS_ARG = void>( |
|||
callback: (this: THIS_ARG, value: string, name: string, searchParams: this) => void, |
|||
thisArg?: THIS_ARG, |
|||
): void; |
|||
|
|||
readonly [Symbol.toStringTag]: "URLSearchParams"; |
|||
[Symbol.iterator](): IterableIterator<[string, string]>; |
|||
} |
|||
|
|||
/** https://url.spec.whatwg.org/#concept-url-parser */ |
|||
export function parseURL( |
|||
input: string, |
|||
options?: { readonly baseURL?: string; readonly encodingOverride?: string }, |
|||
): URLRecord | null; |
|||
|
|||
/** https://url.spec.whatwg.org/#concept-basic-url-parser */ |
|||
export function basicURLParse( |
|||
input: string, |
|||
options?: { |
|||
baseURL?: string; |
|||
encodingOverride?: string; |
|||
url?: URLRecord; |
|||
stateOverride?: StateOverride; |
|||
}, |
|||
): URLRecord | null; |
|||
|
|||
/** https://url.spec.whatwg.org/#scheme-start-state */ |
|||
export type StateOverride = |
|||
| "scheme start" |
|||
| "scheme" |
|||
| "no scheme" |
|||
| "special relative or authority" |
|||
| "path or authority" |
|||
| "relative" |
|||
| "relative slash" |
|||
| "special authority slashes" |
|||
| "special authority ignore slashes" |
|||
| "authority" |
|||
| "host" |
|||
| "hostname" |
|||
| "port" |
|||
| "file" |
|||
| "file slash" |
|||
| "file host" |
|||
| "path start" |
|||
| "path" |
|||
| "cannot-be-a-base-URL path" |
|||
| "query" |
|||
| "fragment"; |
|||
|
|||
/** https://url.spec.whatwg.org/#concept-url-serializer */ |
|||
export function serializeURL(urlRecord: URLRecord, excludeFragment?: boolean): string; |
|||
|
|||
/** https://url.spec.whatwg.org/#concept-host-serializer */ |
|||
export function serializeHost(host: string | number | IPv6Address): string; |
|||
|
|||
/** https://url.spec.whatwg.org/#serialize-an-integer */ |
|||
export function serializeInteger(number: number): string; |
|||
|
|||
/** https://html.spec.whatwg.org#ascii-serialisation-of-an-origin */ |
|||
export function serializeURLOrigin(urlRecord: URLRecord): string; |
|||
|
|||
/** https://url.spec.whatwg.org/#set-the-username */ |
|||
export function setTheUsername(urlRecord: URLRecord, username: string): void; |
|||
|
|||
/** https://url.spec.whatwg.org/#set-the-password */ |
|||
export function setThePassword(urlRecord: URLRecord, password: string): void; |
|||
|
|||
/** https://url.spec.whatwg.org/#cannot-have-a-username-password-port */ |
|||
export function cannotHaveAUsernamePasswordPort(urlRecord: URLRecord): boolean; |
|||
|
|||
/** https://url.spec.whatwg.org/#percent-decode */ |
|||
export function percentDecode(buffer: Extract<NodeJS.TypedArray, ArrayLike<number>>): Buffer; |
|||
@ -0,0 +1,4 @@ |
|||
import * as URL from "./dist/URL"; |
|||
import * as URLSearchParams from "./dist/URLSearchParams"; |
|||
|
|||
export { URL, URLSearchParams }; |
|||
@ -0,0 +1,4 @@ |
|||
import * as URL from "./dist/URL"; |
|||
import * as URLSearchParams from "./dist/URLSearchParams"; |
|||
|
|||
export { URL, URLSearchParams }; |
|||
@ -0,0 +1,243 @@ |
|||
1.3.8 / 2022-02-02 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.1.34 |
|||
- deps: mime-db@~1.51.0 |
|||
* deps: negotiator@0.6.3 |
|||
|
|||
1.3.7 / 2019-04-29 |
|||
================== |
|||
|
|||
* deps: negotiator@0.6.2 |
|||
- Fix sorting charset, encoding, and language with extra parameters |
|||
|
|||
1.3.6 / 2019-04-28 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.1.24 |
|||
- deps: mime-db@~1.40.0 |
|||
|
|||
1.3.5 / 2018-02-28 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.1.18 |
|||
- deps: mime-db@~1.33.0 |
|||
|
|||
1.3.4 / 2017-08-22 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.1.16 |
|||
- deps: mime-db@~1.29.0 |
|||
|
|||
1.3.3 / 2016-05-02 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.1.11 |
|||
- deps: mime-db@~1.23.0 |
|||
* deps: negotiator@0.6.1 |
|||
- perf: improve `Accept` parsing speed |
|||
- perf: improve `Accept-Charset` parsing speed |
|||
- perf: improve `Accept-Encoding` parsing speed |
|||
- perf: improve `Accept-Language` parsing speed |
|||
|
|||
1.3.2 / 2016-03-08 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.1.10 |
|||
- Fix extension of `application/dash+xml` |
|||
- Update primary extension for `audio/mp4` |
|||
- deps: mime-db@~1.22.0 |
|||
|
|||
1.3.1 / 2016-01-19 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.1.9 |
|||
- deps: mime-db@~1.21.0 |
|||
|
|||
1.3.0 / 2015-09-29 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.1.7 |
|||
- deps: mime-db@~1.19.0 |
|||
* deps: negotiator@0.6.0 |
|||
- Fix including type extensions in parameters in `Accept` parsing |
|||
- Fix parsing `Accept` parameters with quoted equals |
|||
- Fix parsing `Accept` parameters with quoted semicolons |
|||
- Lazy-load modules from main entry point |
|||
- perf: delay type concatenation until needed |
|||
- perf: enable strict mode |
|||
- perf: hoist regular expressions |
|||
- perf: remove closures getting spec properties |
|||
- perf: remove a closure from media type parsing |
|||
- perf: remove property delete from media type parsing |
|||
|
|||
1.2.13 / 2015-09-06 |
|||
=================== |
|||
|
|||
* deps: mime-types@~2.1.6 |
|||
- deps: mime-db@~1.18.0 |
|||
|
|||
1.2.12 / 2015-07-30 |
|||
=================== |
|||
|
|||
* deps: mime-types@~2.1.4 |
|||
- deps: mime-db@~1.16.0 |
|||
|
|||
1.2.11 / 2015-07-16 |
|||
=================== |
|||
|
|||
* deps: mime-types@~2.1.3 |
|||
- deps: mime-db@~1.15.0 |
|||
|
|||
1.2.10 / 2015-07-01 |
|||
=================== |
|||
|
|||
* deps: mime-types@~2.1.2 |
|||
- deps: mime-db@~1.14.0 |
|||
|
|||
1.2.9 / 2015-06-08 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.1.1 |
|||
- perf: fix deopt during mapping |
|||
|
|||
1.2.8 / 2015-06-07 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.1.0 |
|||
- deps: mime-db@~1.13.0 |
|||
* perf: avoid argument reassignment & argument slice |
|||
* perf: avoid negotiator recursive construction |
|||
* perf: enable strict mode |
|||
* perf: remove unnecessary bitwise operator |
|||
|
|||
1.2.7 / 2015-05-10 |
|||
================== |
|||
|
|||
* deps: negotiator@0.5.3 |
|||
- Fix media type parameter matching to be case-insensitive |
|||
|
|||
1.2.6 / 2015-05-07 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.0.11 |
|||
- deps: mime-db@~1.9.1 |
|||
* deps: negotiator@0.5.2 |
|||
- Fix comparing media types with quoted values |
|||
- Fix splitting media types with quoted commas |
|||
|
|||
1.2.5 / 2015-03-13 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.0.10 |
|||
- deps: mime-db@~1.8.0 |
|||
|
|||
1.2.4 / 2015-02-14 |
|||
================== |
|||
|
|||
* Support Node.js 0.6 |
|||
* deps: mime-types@~2.0.9 |
|||
- deps: mime-db@~1.7.0 |
|||
* deps: negotiator@0.5.1 |
|||
- Fix preference sorting to be stable for long acceptable lists |
|||
|
|||
1.2.3 / 2015-01-31 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.0.8 |
|||
- deps: mime-db@~1.6.0 |
|||
|
|||
1.2.2 / 2014-12-30 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.0.7 |
|||
- deps: mime-db@~1.5.0 |
|||
|
|||
1.2.1 / 2014-12-30 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.0.5 |
|||
- deps: mime-db@~1.3.1 |
|||
|
|||
1.2.0 / 2014-12-19 |
|||
================== |
|||
|
|||
* deps: negotiator@0.5.0 |
|||
- Fix list return order when large accepted list |
|||
- Fix missing identity encoding when q=0 exists |
|||
- Remove dynamic building of Negotiator class |
|||
|
|||
1.1.4 / 2014-12-10 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.0.4 |
|||
- deps: mime-db@~1.3.0 |
|||
|
|||
1.1.3 / 2014-11-09 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.0.3 |
|||
- deps: mime-db@~1.2.0 |
|||
|
|||
1.1.2 / 2014-10-14 |
|||
================== |
|||
|
|||
* deps: negotiator@0.4.9 |
|||
- Fix error when media type has invalid parameter |
|||
|
|||
1.1.1 / 2014-09-28 |
|||
================== |
|||
|
|||
* deps: mime-types@~2.0.2 |
|||
- deps: mime-db@~1.1.0 |
|||
* deps: negotiator@0.4.8 |
|||
- Fix all negotiations to be case-insensitive |
|||
- Stable sort preferences of same quality according to client order |
|||
|
|||
1.1.0 / 2014-09-02 |
|||
================== |
|||
|
|||
* update `mime-types` |
|||
|
|||
1.0.7 / 2014-07-04 |
|||
================== |
|||
|
|||
* Fix wrong type returned from `type` when match after unknown extension |
|||
|
|||
1.0.6 / 2014-06-24 |
|||
================== |
|||
|
|||
* deps: negotiator@0.4.7 |
|||
|
|||
1.0.5 / 2014-06-20 |
|||
================== |
|||
|
|||
* fix crash when unknown extension given |
|||
|
|||
1.0.4 / 2014-06-19 |
|||
================== |
|||
|
|||
* use `mime-types` |
|||
|
|||
1.0.3 / 2014-06-11 |
|||
================== |
|||
|
|||
* deps: negotiator@0.4.6 |
|||
- Order by specificity when quality is the same |
|||
|
|||
1.0.2 / 2014-05-29 |
|||
================== |
|||
|
|||
* Fix interpretation when header not in request |
|||
* deps: pin negotiator@0.4.5 |
|||
|
|||
1.0.1 / 2014-01-18 |
|||
================== |
|||
|
|||
* Identity encoding isn't always acceptable |
|||
* deps: negotiator@~0.4.0 |
|||
|
|||
1.0.0 / 2013-12-27 |
|||
================== |
|||
|
|||
* Genesis |
|||
@ -0,0 +1,23 @@ |
|||
(The MIT License) |
|||
|
|||
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com> |
|||
Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com> |
|||
|
|||
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,140 @@ |
|||
# accepts |
|||
|
|||
[![NPM Version][npm-version-image]][npm-url] |
|||
[![NPM Downloads][npm-downloads-image]][npm-url] |
|||
[![Node.js Version][node-version-image]][node-version-url] |
|||
[![Build Status][github-actions-ci-image]][github-actions-ci-url] |
|||
[![Test Coverage][coveralls-image]][coveralls-url] |
|||
|
|||
Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator). |
|||
Extracted from [koa](https://www.npmjs.com/package/koa) for general use. |
|||
|
|||
In addition to negotiator, it allows: |
|||
|
|||
- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` |
|||
as well as `('text/html', 'application/json')`. |
|||
- Allows type shorthands such as `json`. |
|||
- Returns `false` when no types match |
|||
- Treats non-existent headers as `*` |
|||
|
|||
## Installation |
|||
|
|||
This is a [Node.js](https://nodejs.org/en/) module available through the |
|||
[npm registry](https://www.npmjs.com/). Installation is done using the |
|||
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): |
|||
|
|||
```sh |
|||
$ npm install accepts |
|||
``` |
|||
|
|||
## API |
|||
|
|||
```js |
|||
var accepts = require('accepts') |
|||
``` |
|||
|
|||
### accepts(req) |
|||
|
|||
Create a new `Accepts` object for the given `req`. |
|||
|
|||
#### .charset(charsets) |
|||
|
|||
Return the first accepted charset. If nothing in `charsets` is accepted, |
|||
then `false` is returned. |
|||
|
|||
#### .charsets() |
|||
|
|||
Return the charsets that the request accepts, in the order of the client's |
|||
preference (most preferred first). |
|||
|
|||
#### .encoding(encodings) |
|||
|
|||
Return the first accepted encoding. If nothing in `encodings` is accepted, |
|||
then `false` is returned. |
|||
|
|||
#### .encodings() |
|||
|
|||
Return the encodings that the request accepts, in the order of the client's |
|||
preference (most preferred first). |
|||
|
|||
#### .language(languages) |
|||
|
|||
Return the first accepted language. If nothing in `languages` is accepted, |
|||
then `false` is returned. |
|||
|
|||
#### .languages() |
|||
|
|||
Return the languages that the request accepts, in the order of the client's |
|||
preference (most preferred first). |
|||
|
|||
#### .type(types) |
|||
|
|||
Return the first accepted type (and it is returned as the same text as what |
|||
appears in the `types` array). If nothing in `types` is accepted, then `false` |
|||
is returned. |
|||
|
|||
The `types` array can contain full MIME types or file extensions. Any value |
|||
that is not a full MIME types is passed to `require('mime-types').lookup`. |
|||
|
|||
#### .types() |
|||
|
|||
Return the types that the request accepts, in the order of the client's |
|||
preference (most preferred first). |
|||
|
|||
## Examples |
|||
|
|||
### Simple type negotiation |
|||
|
|||
This simple example shows how to use `accepts` to return a different typed |
|||
respond body based on what the client wants to accept. The server lists it's |
|||
preferences in order and will get back the best match between the client and |
|||
server. |
|||
|
|||
```js |
|||
var accepts = require('accepts') |
|||
var http = require('http') |
|||
|
|||
function app (req, res) { |
|||
var accept = accepts(req) |
|||
|
|||
// the order of this list is significant; should be server preferred order |
|||
switch (accept.type(['json', 'html'])) { |
|||
case 'json': |
|||
res.setHeader('Content-Type', 'application/json') |
|||
res.write('{"hello":"world!"}') |
|||
break |
|||
case 'html': |
|||
res.setHeader('Content-Type', 'text/html') |
|||
res.write('<b>hello, world!</b>') |
|||
break |
|||
default: |
|||
// the fallback is text/plain, so no need to specify it above |
|||
res.setHeader('Content-Type', 'text/plain') |
|||
res.write('hello, world!') |
|||
break |
|||
} |
|||
|
|||
res.end() |
|||
} |
|||
|
|||
http.createServer(app).listen(3000) |
|||
``` |
|||
|
|||
You can test this out with the cURL program: |
|||
```sh |
|||
curl -I -H'Accept: text/html' http://localhost:3000/ |
|||
``` |
|||
|
|||
## License |
|||
|
|||
[MIT](LICENSE) |
|||
|
|||
[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master |
|||
[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master |
|||
[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci |
|||
[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml |
|||
[node-version-image]: https://badgen.net/npm/node/accepts |
|||
[node-version-url]: https://nodejs.org/en/download |
|||
[npm-downloads-image]: https://badgen.net/npm/dm/accepts |
|||
[npm-url]: https://npmjs.org/package/accepts |
|||
[npm-version-image]: https://badgen.net/npm/v/accepts |
|||
@ -0,0 +1,238 @@ |
|||
/*! |
|||
* accepts |
|||
* Copyright(c) 2014 Jonathan Ong |
|||
* Copyright(c) 2015 Douglas Christopher Wilson |
|||
* MIT Licensed |
|||
*/ |
|||
|
|||
'use strict' |
|||
|
|||
/** |
|||
* Module dependencies. |
|||
* @private |
|||
*/ |
|||
|
|||
var Negotiator = require('negotiator') |
|||
var mime = require('mime-types') |
|||
|
|||
/** |
|||
* Module exports. |
|||
* @public |
|||
*/ |
|||
|
|||
module.exports = Accepts |
|||
|
|||
/** |
|||
* Create a new Accepts object for the given req. |
|||
* |
|||
* @param {object} req |
|||
* @public |
|||
*/ |
|||
|
|||
function Accepts (req) { |
|||
if (!(this instanceof Accepts)) { |
|||
return new Accepts(req) |
|||
} |
|||
|
|||
this.headers = req.headers |
|||
this.negotiator = new Negotiator(req) |
|||
} |
|||
|
|||
/** |
|||
* Check if the given `type(s)` is acceptable, returning |
|||
* the best match when true, otherwise `undefined`, in which |
|||
* case you should respond with 406 "Not Acceptable". |
|||
* |
|||
* The `type` value may be a single mime type string |
|||
* such as "application/json", the extension name |
|||
* such as "json" or an array `["json", "html", "text/plain"]`. When a list |
|||
* or array is given the _best_ match, if any is returned. |
|||
* |
|||
* Examples: |
|||
* |
|||
* // Accept: text/html
|
|||
* this.types('html'); |
|||
* // => "html"
|
|||
* |
|||
* // Accept: text/*, application/json
|
|||
* this.types('html'); |
|||
* // => "html"
|
|||
* this.types('text/html'); |
|||
* // => "text/html"
|
|||
* this.types('json', 'text'); |
|||
* // => "json"
|
|||
* this.types('application/json'); |
|||
* // => "application/json"
|
|||
* |
|||
* // Accept: text/*, application/json
|
|||
* this.types('image/png'); |
|||
* this.types('png'); |
|||
* // => undefined
|
|||
* |
|||
* // Accept: text/*;q=.5, application/json
|
|||
* this.types(['html', 'json']); |
|||
* this.types('html', 'json'); |
|||
* // => "json"
|
|||
* |
|||
* @param {String|Array} types... |
|||
* @return {String|Array|Boolean} |
|||
* @public |
|||
*/ |
|||
|
|||
Accepts.prototype.type = |
|||
Accepts.prototype.types = function (types_) { |
|||
var types = types_ |
|||
|
|||
// support flattened arguments
|
|||
if (types && !Array.isArray(types)) { |
|||
types = new Array(arguments.length) |
|||
for (var i = 0; i < types.length; i++) { |
|||
types[i] = arguments[i] |
|||
} |
|||
} |
|||
|
|||
// no types, return all requested types
|
|||
if (!types || types.length === 0) { |
|||
return this.negotiator.mediaTypes() |
|||
} |
|||
|
|||
// no accept header, return first given type
|
|||
if (!this.headers.accept) { |
|||
return types[0] |
|||
} |
|||
|
|||
var mimes = types.map(extToMime) |
|||
var accepts = this.negotiator.mediaTypes(mimes.filter(validMime)) |
|||
var first = accepts[0] |
|||
|
|||
return first |
|||
? types[mimes.indexOf(first)] |
|||
: false |
|||
} |
|||
|
|||
/** |
|||
* Return accepted encodings or best fit based on `encodings`. |
|||
* |
|||
* Given `Accept-Encoding: gzip, deflate` |
|||
* an array sorted by quality is returned: |
|||
* |
|||
* ['gzip', 'deflate'] |
|||
* |
|||
* @param {String|Array} encodings... |
|||
* @return {String|Array} |
|||
* @public |
|||
*/ |
|||
|
|||
Accepts.prototype.encoding = |
|||
Accepts.prototype.encodings = function (encodings_) { |
|||
var encodings = encodings_ |
|||
|
|||
// support flattened arguments
|
|||
if (encodings && !Array.isArray(encodings)) { |
|||
encodings = new Array(arguments.length) |
|||
for (var i = 0; i < encodings.length; i++) { |
|||
encodings[i] = arguments[i] |
|||
} |
|||
} |
|||
|
|||
// no encodings, return all requested encodings
|
|||
if (!encodings || encodings.length === 0) { |
|||
return this.negotiator.encodings() |
|||
} |
|||
|
|||
return this.negotiator.encodings(encodings)[0] || false |
|||
} |
|||
|
|||
/** |
|||
* Return accepted charsets or best fit based on `charsets`. |
|||
* |
|||
* Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5` |
|||
* an array sorted by quality is returned: |
|||
* |
|||
* ['utf-8', 'utf-7', 'iso-8859-1'] |
|||
* |
|||
* @param {String|Array} charsets... |
|||
* @return {String|Array} |
|||
* @public |
|||
*/ |
|||
|
|||
Accepts.prototype.charset = |
|||
Accepts.prototype.charsets = function (charsets_) { |
|||
var charsets = charsets_ |
|||
|
|||
// support flattened arguments
|
|||
if (charsets && !Array.isArray(charsets)) { |
|||
charsets = new Array(arguments.length) |
|||
for (var i = 0; i < charsets.length; i++) { |
|||
charsets[i] = arguments[i] |
|||
} |
|||
} |
|||
|
|||
// no charsets, return all requested charsets
|
|||
if (!charsets || charsets.length === 0) { |
|||
return this.negotiator.charsets() |
|||
} |
|||
|
|||
return this.negotiator.charsets(charsets)[0] || false |
|||
} |
|||
|
|||
/** |
|||
* Return accepted languages or best fit based on `langs`. |
|||
* |
|||
* Given `Accept-Language: en;q=0.8, es, pt` |
|||
* an array sorted by quality is returned: |
|||
* |
|||
* ['es', 'pt', 'en'] |
|||
* |
|||
* @param {String|Array} langs... |
|||
* @return {Array|String} |
|||
* @public |
|||
*/ |
|||
|
|||
Accepts.prototype.lang = |
|||
Accepts.prototype.langs = |
|||
Accepts.prototype.language = |
|||
Accepts.prototype.languages = function (languages_) { |
|||
var languages = languages_ |
|||
|
|||
// support flattened arguments
|
|||
if (languages && !Array.isArray(languages)) { |
|||
languages = new Array(arguments.length) |
|||
for (var i = 0; i < languages.length; i++) { |
|||
languages[i] = arguments[i] |
|||
} |
|||
} |
|||
|
|||
// no languages, return all requested languages
|
|||
if (!languages || languages.length === 0) { |
|||
return this.negotiator.languages() |
|||
} |
|||
|
|||
return this.negotiator.languages(languages)[0] || false |
|||
} |
|||
|
|||
/** |
|||
* Convert extnames to mime. |
|||
* |
|||
* @param {String} type |
|||
* @return {String} |
|||
* @private |
|||
*/ |
|||
|
|||
function extToMime (type) { |
|||
return type.indexOf('/') === -1 |
|||
? mime.lookup(type) |
|||
: type |
|||
} |
|||
|
|||
/** |
|||
* Check if mime is valid. |
|||
* |
|||
* @param {String} type |
|||
* @return {String} |
|||
* @private |
|||
*/ |
|||
|
|||
function validMime (type) { |
|||
return typeof type === 'string' |
|||
} |
|||
@ -0,0 +1,86 @@ |
|||
{ |
|||
"_from": "accepts@~1.3.8", |
|||
"_id": "accepts@1.3.8", |
|||
"_inBundle": false, |
|||
"_integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", |
|||
"_location": "/accepts", |
|||
"_phantomChildren": {}, |
|||
"_requested": { |
|||
"type": "range", |
|||
"registry": true, |
|||
"raw": "accepts@~1.3.8", |
|||
"name": "accepts", |
|||
"escapedName": "accepts", |
|||
"rawSpec": "~1.3.8", |
|||
"saveSpec": null, |
|||
"fetchSpec": "~1.3.8" |
|||
}, |
|||
"_requiredBy": [ |
|||
"/express" |
|||
], |
|||
"_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", |
|||
"_shasum": "0bf0be125b67014adcb0b0921e62db7bffe16b2e", |
|||
"_spec": "accepts@~1.3.8", |
|||
"_where": "/Users/satish.ganga/Desktop/EKAM/ekamv5/ahc/node_modules/express", |
|||
"bugs": { |
|||
"url": "https://github.com/jshttp/accepts/issues" |
|||
}, |
|||
"bundleDependencies": false, |
|||
"contributors": [ |
|||
{ |
|||
"name": "Douglas Christopher Wilson", |
|||
"email": "doug@somethingdoug.com" |
|||
}, |
|||
{ |
|||
"name": "Jonathan Ong", |
|||
"email": "me@jongleberry.com", |
|||
"url": "http://jongleberry.com" |
|||
} |
|||
], |
|||
"dependencies": { |
|||
"mime-types": "~2.1.34", |
|||
"negotiator": "0.6.3" |
|||
}, |
|||
"deprecated": false, |
|||
"description": "Higher-level content negotiation", |
|||
"devDependencies": { |
|||
"deep-equal": "1.0.1", |
|||
"eslint": "7.32.0", |
|||
"eslint-config-standard": "14.1.1", |
|||
"eslint-plugin-import": "2.25.4", |
|||
"eslint-plugin-markdown": "2.2.1", |
|||
"eslint-plugin-node": "11.1.0", |
|||
"eslint-plugin-promise": "4.3.1", |
|||
"eslint-plugin-standard": "4.1.0", |
|||
"mocha": "9.2.0", |
|||
"nyc": "15.1.0" |
|||
}, |
|||
"engines": { |
|||
"node": ">= 0.6" |
|||
}, |
|||
"files": [ |
|||
"LICENSE", |
|||
"HISTORY.md", |
|||
"index.js" |
|||
], |
|||
"homepage": "https://github.com/jshttp/accepts#readme", |
|||
"keywords": [ |
|||
"content", |
|||
"negotiation", |
|||
"accept", |
|||
"accepts" |
|||
], |
|||
"license": "MIT", |
|||
"name": "accepts", |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "git+https://github.com/jshttp/accepts.git" |
|||
}, |
|||
"scripts": { |
|||
"lint": "eslint .", |
|||
"test": "mocha --reporter spec --check-leaks --bail test/", |
|||
"test-ci": "nyc --reporter=lcov --reporter=text npm test", |
|||
"test-cov": "nyc --reporter=html --reporter=text npm test" |
|||
}, |
|||
"version": "1.3.8" |
|||
} |
|||
@ -0,0 +1,21 @@ |
|||
The MIT License (MIT) |
|||
|
|||
Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) |
|||
|
|||
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,43 @@ |
|||
# Array Flatten |
|||
|
|||
[![NPM version][npm-image]][npm-url] |
|||
[![NPM downloads][downloads-image]][downloads-url] |
|||
[![Build status][travis-image]][travis-url] |
|||
[![Test coverage][coveralls-image]][coveralls-url] |
|||
|
|||
> Flatten an array of nested arrays into a single flat array. Accepts an optional depth. |
|||
|
|||
## Installation |
|||
|
|||
``` |
|||
npm install array-flatten --save |
|||
``` |
|||
|
|||
## Usage |
|||
|
|||
```javascript |
|||
var flatten = require('array-flatten') |
|||
|
|||
flatten([1, [2, [3, [4, [5], 6], 7], 8], 9]) |
|||
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9] |
|||
|
|||
flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2) |
|||
//=> [1, 2, 3, [4, [5], 6], 7, 8, 9] |
|||
|
|||
(function () { |
|||
flatten(arguments) //=> [1, 2, 3] |
|||
})(1, [2, 3]) |
|||
``` |
|||
|
|||
## License |
|||
|
|||
MIT |
|||
|
|||
[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat |
|||
[npm-url]: https://npmjs.org/package/array-flatten |
|||
[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat |
|||
[downloads-url]: https://npmjs.org/package/array-flatten |
|||
[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat |
|||
[travis-url]: https://travis-ci.org/blakeembrey/array-flatten |
|||
[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat |
|||
[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master |
|||
@ -0,0 +1,64 @@ |
|||
'use strict' |
|||
|
|||
/** |
|||
* Expose `arrayFlatten`. |
|||
*/ |
|||
module.exports = arrayFlatten |
|||
|
|||
/** |
|||
* Recursive flatten function with depth. |
|||
* |
|||
* @param {Array} array |
|||
* @param {Array} result |
|||
* @param {Number} depth |
|||
* @return {Array} |
|||
*/ |
|||
function flattenWithDepth (array, result, depth) { |
|||
for (var i = 0; i < array.length; i++) { |
|||
var value = array[i] |
|||
|
|||
if (depth > 0 && Array.isArray(value)) { |
|||
flattenWithDepth(value, result, depth - 1) |
|||
} else { |
|||
result.push(value) |
|||
} |
|||
} |
|||
|
|||
return result |
|||
} |
|||
|
|||
/** |
|||
* Recursive flatten function. Omitting depth is slightly faster. |
|||
* |
|||
* @param {Array} array |
|||
* @param {Array} result |
|||
* @return {Array} |
|||
*/ |
|||
function flattenForever (array, result) { |
|||
for (var i = 0; i < array.length; i++) { |
|||
var value = array[i] |
|||
|
|||
if (Array.isArray(value)) { |
|||
flattenForever(value, result) |
|||
} else { |
|||
result.push(value) |
|||
} |
|||
} |
|||
|
|||
return result |
|||
} |
|||
|
|||
/** |
|||
* Flatten an array, with the ability to define a depth. |
|||
* |
|||
* @param {Array} array |
|||
* @param {Number} depth |
|||
* @return {Array} |
|||
*/ |
|||
function arrayFlatten (array, depth) { |
|||
if (depth == null) { |
|||
return flattenForever(array, []) |
|||
} |
|||
|
|||
return flattenWithDepth(array, [], depth) |
|||
} |
|||
@ -0,0 +1,64 @@ |
|||
{ |
|||
"_from": "array-flatten@1.1.1", |
|||
"_id": "array-flatten@1.1.1", |
|||
"_inBundle": false, |
|||
"_integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", |
|||
"_location": "/array-flatten", |
|||
"_phantomChildren": {}, |
|||
"_requested": { |
|||
"type": "version", |
|||
"registry": true, |
|||
"raw": "array-flatten@1.1.1", |
|||
"name": "array-flatten", |
|||
"escapedName": "array-flatten", |
|||
"rawSpec": "1.1.1", |
|||
"saveSpec": null, |
|||
"fetchSpec": "1.1.1" |
|||
}, |
|||
"_requiredBy": [ |
|||
"/express" |
|||
], |
|||
"_resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", |
|||
"_shasum": "9a5f699051b1e7073328f2a008968b64ea2955d2", |
|||
"_spec": "array-flatten@1.1.1", |
|||
"_where": "/Users/satish.ganga/Desktop/EKAM/ekamv5/ahc/node_modules/express", |
|||
"author": { |
|||
"name": "Blake Embrey", |
|||
"email": "hello@blakeembrey.com", |
|||
"url": "http://blakeembrey.me" |
|||
}, |
|||
"bugs": { |
|||
"url": "https://github.com/blakeembrey/array-flatten/issues" |
|||
}, |
|||
"bundleDependencies": false, |
|||
"deprecated": false, |
|||
"description": "Flatten an array of nested arrays into a single flat array", |
|||
"devDependencies": { |
|||
"istanbul": "^0.3.13", |
|||
"mocha": "^2.2.4", |
|||
"pre-commit": "^1.0.7", |
|||
"standard": "^3.7.3" |
|||
}, |
|||
"files": [ |
|||
"array-flatten.js", |
|||
"LICENSE" |
|||
], |
|||
"homepage": "https://github.com/blakeembrey/array-flatten", |
|||
"keywords": [ |
|||
"array", |
|||
"flatten", |
|||
"arguments", |
|||
"depth" |
|||
], |
|||
"license": "MIT", |
|||
"main": "array-flatten.js", |
|||
"name": "array-flatten", |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "git://github.com/blakeembrey/array-flatten.git" |
|||
}, |
|||
"scripts": { |
|||
"test": "istanbul cover _mocha -- -R spec" |
|||
}, |
|||
"version": "1.1.1" |
|||
} |
|||
@ -0,0 +1,21 @@ |
|||
The MIT License (MIT) |
|||
|
|||
Copyright (c) 2014 Jameson Little |
|||
|
|||
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,34 @@ |
|||
base64-js |
|||
========= |
|||
|
|||
`base64-js` does basic base64 encoding/decoding in pure JS. |
|||
|
|||
[](http://travis-ci.org/beatgammit/base64-js) |
|||
|
|||
Many browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data. |
|||
|
|||
Sometimes encoding/decoding binary data in the browser is useful, and that is what this module does. |
|||
|
|||
## install |
|||
|
|||
With [npm](https://npmjs.org) do: |
|||
|
|||
`npm install base64-js` and `var base64js = require('base64-js')` |
|||
|
|||
For use in web browsers do: |
|||
|
|||
`<script src="base64js.min.js"></script>` |
|||
|
|||
[Get supported base64-js with the Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-base64-js?utm_source=npm-base64-js&utm_medium=referral&utm_campaign=readme) |
|||
|
|||
## methods |
|||
|
|||
`base64js` has three exposed functions, `byteLength`, `toByteArray` and `fromByteArray`, which both take a single argument. |
|||
|
|||
* `byteLength` - Takes a base64 string and returns length of byte array |
|||
* `toByteArray` - Takes a base64 string and returns a byte array |
|||
* `fromByteArray` - Takes a byte array and returns a base64 string |
|||
|
|||
## license |
|||
|
|||
MIT |
|||
@ -0,0 +1 @@ |
|||
(function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"==typeof window?"undefined"==typeof global?"undefined"==typeof self?this:self:global:window,b.base64js=a()}})(function(){return function(){function b(d,e,g){function a(j,i){if(!e[j]){if(!d[j]){var f="function"==typeof require&&require;if(!i&&f)return f(j,!0);if(h)return h(j,!0);var c=new Error("Cannot find module '"+j+"'");throw c.code="MODULE_NOT_FOUND",c}var k=e[j]={exports:{}};d[j][0].call(k.exports,function(b){var c=d[j][1][b];return a(c||b)},k,k.exports,b,d,e,g)}return e[j].exports}for(var h="function"==typeof require&&require,c=0;c<g.length;c++)a(g[c]);return a}return b}()({"/":[function(a,b,c){'use strict';function d(a){var b=a.length;if(0<b%4)throw new Error("Invalid string. Length must be a multiple of 4");var c=a.indexOf("=");-1===c&&(c=b);var d=c===b?0:4-c%4;return[c,d]}function e(a,b,c){return 3*(b+c)/4-c}function f(a){var b,c,f=d(a),g=f[0],h=f[1],j=new m(e(a,g,h)),k=0,n=0<h?g-4:g;for(c=0;c<n;c+=4)b=l[a.charCodeAt(c)]<<18|l[a.charCodeAt(c+1)]<<12|l[a.charCodeAt(c+2)]<<6|l[a.charCodeAt(c+3)],j[k++]=255&b>>16,j[k++]=255&b>>8,j[k++]=255&b;return 2===h&&(b=l[a.charCodeAt(c)]<<2|l[a.charCodeAt(c+1)]>>4,j[k++]=255&b),1===h&&(b=l[a.charCodeAt(c)]<<10|l[a.charCodeAt(c+1)]<<4|l[a.charCodeAt(c+2)]>>2,j[k++]=255&b>>8,j[k++]=255&b),j}function g(a){return k[63&a>>18]+k[63&a>>12]+k[63&a>>6]+k[63&a]}function h(a,b,c){for(var d,e=[],f=b;f<c;f+=3)d=(16711680&a[f]<<16)+(65280&a[f+1]<<8)+(255&a[f+2]),e.push(g(d));return e.join("")}function j(a){for(var b,c=a.length,d=c%3,e=[],f=16383,g=0,j=c-d;g<j;g+=f)e.push(h(a,g,g+f>j?j:g+f));return 1===d?(b=a[c-1],e.push(k[b>>2]+k[63&b<<4]+"==")):2===d&&(b=(a[c-2]<<8)+a[c-1],e.push(k[b>>10]+k[63&b>>4]+k[63&b<<2]+"=")),e.join("")}c.byteLength=function(a){var b=d(a),c=b[0],e=b[1];return 3*(c+e)/4-e},c.toByteArray=f,c.fromByteArray=j;for(var k=[],l=[],m="undefined"==typeof Uint8Array?Array:Uint8Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,p=n.length;o<p;++o)k[o]=n[o],l[n.charCodeAt(o)]=o;l[45]=62,l[95]=63},{}]},{},[])("/")}); |
|||
@ -0,0 +1,3 @@ |
|||
export function byteLength(b64: string): number; |
|||
export function toByteArray(b64: string): Uint8Array; |
|||
export function fromByteArray(uint8: Uint8Array): string; |
|||
@ -0,0 +1,150 @@ |
|||
'use strict' |
|||
|
|||
exports.byteLength = byteLength |
|||
exports.toByteArray = toByteArray |
|||
exports.fromByteArray = fromByteArray |
|||
|
|||
var lookup = [] |
|||
var revLookup = [] |
|||
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array |
|||
|
|||
var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' |
|||
for (var i = 0, len = code.length; i < len; ++i) { |
|||
lookup[i] = code[i] |
|||
revLookup[code.charCodeAt(i)] = i |
|||
} |
|||
|
|||
// Support decoding URL-safe base64 strings, as Node.js does.
|
|||
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
|
|||
revLookup['-'.charCodeAt(0)] = 62 |
|||
revLookup['_'.charCodeAt(0)] = 63 |
|||
|
|||
function getLens (b64) { |
|||
var len = b64.length |
|||
|
|||
if (len % 4 > 0) { |
|||
throw new Error('Invalid string. Length must be a multiple of 4') |
|||
} |
|||
|
|||
// Trim off extra bytes after placeholder bytes are found
|
|||
// See: https://github.com/beatgammit/base64-js/issues/42
|
|||
var validLen = b64.indexOf('=') |
|||
if (validLen === -1) validLen = len |
|||
|
|||
var placeHoldersLen = validLen === len |
|||
? 0 |
|||
: 4 - (validLen % 4) |
|||
|
|||
return [validLen, placeHoldersLen] |
|||
} |
|||
|
|||
// base64 is 4/3 + up to two characters of the original data
|
|||
function byteLength (b64) { |
|||
var lens = getLens(b64) |
|||
var validLen = lens[0] |
|||
var placeHoldersLen = lens[1] |
|||
return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen |
|||
} |
|||
|
|||
function _byteLength (b64, validLen, placeHoldersLen) { |
|||
return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen |
|||
} |
|||
|
|||
function toByteArray (b64) { |
|||
var tmp |
|||
var lens = getLens(b64) |
|||
var validLen = lens[0] |
|||
var placeHoldersLen = lens[1] |
|||
|
|||
var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) |
|||
|
|||
var curByte = 0 |
|||
|
|||
// if there are placeholders, only get up to the last complete 4 chars
|
|||
var len = placeHoldersLen > 0 |
|||
? validLen - 4 |
|||
: validLen |
|||
|
|||
var i |
|||
for (i = 0; i < len; i += 4) { |
|||
tmp = |
|||
(revLookup[b64.charCodeAt(i)] << 18) | |
|||
(revLookup[b64.charCodeAt(i + 1)] << 12) | |
|||
(revLookup[b64.charCodeAt(i + 2)] << 6) | |
|||
revLookup[b64.charCodeAt(i + 3)] |
|||
arr[curByte++] = (tmp >> 16) & 0xFF |
|||
arr[curByte++] = (tmp >> 8) & 0xFF |
|||
arr[curByte++] = tmp & 0xFF |
|||
} |
|||
|
|||
if (placeHoldersLen === 2) { |
|||
tmp = |
|||
(revLookup[b64.charCodeAt(i)] << 2) | |
|||
(revLookup[b64.charCodeAt(i + 1)] >> 4) |
|||
arr[curByte++] = tmp & 0xFF |
|||
} |
|||
|
|||
if (placeHoldersLen === 1) { |
|||
tmp = |
|||
(revLookup[b64.charCodeAt(i)] << 10) | |
|||
(revLookup[b64.charCodeAt(i + 1)] << 4) | |
|||
(revLookup[b64.charCodeAt(i + 2)] >> 2) |
|||
arr[curByte++] = (tmp >> 8) & 0xFF |
|||
arr[curByte++] = tmp & 0xFF |
|||
} |
|||
|
|||
return arr |
|||
} |
|||
|
|||
function tripletToBase64 (num) { |
|||
return lookup[num >> 18 & 0x3F] + |
|||
lookup[num >> 12 & 0x3F] + |
|||
lookup[num >> 6 & 0x3F] + |
|||
lookup[num & 0x3F] |
|||
} |
|||
|
|||
function encodeChunk (uint8, start, end) { |
|||
var tmp |
|||
var output = [] |
|||
for (var i = start; i < end; i += 3) { |
|||
tmp = |
|||
((uint8[i] << 16) & 0xFF0000) + |
|||
((uint8[i + 1] << 8) & 0xFF00) + |
|||
(uint8[i + 2] & 0xFF) |
|||
output.push(tripletToBase64(tmp)) |
|||
} |
|||
return output.join('') |
|||
} |
|||
|
|||
function fromByteArray (uint8) { |
|||
var tmp |
|||
var len = uint8.length |
|||
var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
|
|||
var parts = [] |
|||
var maxChunkLength = 16383 // must be multiple of 3
|
|||
|
|||
// go through the array every three bytes, we'll deal with trailing stuff later
|
|||
for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { |
|||
parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) |
|||
} |
|||
|
|||
// pad the end with zeros, but make sure to not forget the extra bytes
|
|||
if (extraBytes === 1) { |
|||
tmp = uint8[len - 1] |
|||
parts.push( |
|||
lookup[tmp >> 2] + |
|||
lookup[(tmp << 4) & 0x3F] + |
|||
'==' |
|||
) |
|||
} else if (extraBytes === 2) { |
|||
tmp = (uint8[len - 2] << 8) + uint8[len - 1] |
|||
parts.push( |
|||
lookup[tmp >> 10] + |
|||
lookup[(tmp >> 4) & 0x3F] + |
|||
lookup[(tmp << 2) & 0x3F] + |
|||
'=' |
|||
) |
|||
} |
|||
|
|||
return parts.join('') |
|||
} |
|||
@ -0,0 +1,75 @@ |
|||
{ |
|||
"_from": "base64-js@^1.3.1", |
|||
"_id": "base64-js@1.5.1", |
|||
"_inBundle": false, |
|||
"_integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", |
|||
"_location": "/base64-js", |
|||
"_phantomChildren": {}, |
|||
"_requested": { |
|||
"type": "range", |
|||
"registry": true, |
|||
"raw": "base64-js@^1.3.1", |
|||
"name": "base64-js", |
|||
"escapedName": "base64-js", |
|||
"rawSpec": "^1.3.1", |
|||
"saveSpec": null, |
|||
"fetchSpec": "^1.3.1" |
|||
}, |
|||
"_requiredBy": [ |
|||
"/buffer" |
|||
], |
|||
"_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", |
|||
"_shasum": "1b1b440160a5bf7ad40b650f095963481903930a", |
|||
"_spec": "base64-js@^1.3.1", |
|||
"_where": "/Users/satish.ganga/Desktop/EKAM/ekamv5/ahc/node_modules/buffer", |
|||
"author": { |
|||
"name": "T. Jameson Little", |
|||
"email": "t.jameson.little@gmail.com" |
|||
}, |
|||
"bugs": { |
|||
"url": "https://github.com/beatgammit/base64-js/issues" |
|||
}, |
|||
"bundleDependencies": false, |
|||
"deprecated": false, |
|||
"description": "Base64 encoding/decoding in pure JS", |
|||
"devDependencies": { |
|||
"babel-minify": "^0.5.1", |
|||
"benchmark": "^2.1.4", |
|||
"browserify": "^16.3.0", |
|||
"standard": "*", |
|||
"tape": "4.x" |
|||
}, |
|||
"funding": [ |
|||
{ |
|||
"type": "github", |
|||
"url": "https://github.com/sponsors/feross" |
|||
}, |
|||
{ |
|||
"type": "patreon", |
|||
"url": "https://www.patreon.com/feross" |
|||
}, |
|||
{ |
|||
"type": "consulting", |
|||
"url": "https://feross.org/support" |
|||
} |
|||
], |
|||
"homepage": "https://github.com/beatgammit/base64-js", |
|||
"keywords": [ |
|||
"base64" |
|||
], |
|||
"license": "MIT", |
|||
"main": "index.js", |
|||
"name": "base64-js", |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "git://github.com/beatgammit/base64-js.git" |
|||
}, |
|||
"scripts": { |
|||
"build": "browserify -s base64js -r ./ | minify > base64js.min.js", |
|||
"lint": "standard", |
|||
"test": "npm run lint && npm run unit", |
|||
"unit": "tape test/*.js" |
|||
}, |
|||
"typings": "index.d.ts", |
|||
"version": "1.5.1" |
|||
} |
|||
@ -0,0 +1,633 @@ |
|||
1.19.2 / 2022-02-15 |
|||
=================== |
|||
|
|||
* deps: bytes@3.1.2 |
|||
* deps: qs@6.9.7 |
|||
* Fix handling of `__proto__` keys |
|||
* deps: raw-body@2.4.3 |
|||
- deps: bytes@3.1.2 |
|||
|
|||
1.19.1 / 2021-12-10 |
|||
=================== |
|||
|
|||
* deps: bytes@3.1.1 |
|||
* deps: http-errors@1.8.1 |
|||
- deps: inherits@2.0.4 |
|||
- deps: toidentifier@1.0.1 |
|||
- deps: setprototypeof@1.2.0 |
|||
* deps: qs@6.9.6 |
|||
* deps: raw-body@2.4.2 |
|||
- deps: bytes@3.1.1 |
|||
- deps: http-errors@1.8.1 |
|||
* deps: safe-buffer@5.2.1 |
|||
* deps: type-is@~1.6.18 |
|||
|
|||
1.19.0 / 2019-04-25 |
|||
=================== |
|||
|
|||
* deps: bytes@3.1.0 |
|||
- Add petabyte (`pb`) support |
|||
* deps: http-errors@1.7.2 |
|||
- Set constructor name when possible |
|||
- deps: setprototypeof@1.1.1 |
|||
- deps: statuses@'>= 1.5.0 < 2' |
|||
* deps: iconv-lite@0.4.24 |
|||
- Added encoding MIK |
|||
* deps: qs@6.7.0 |
|||
- Fix parsing array brackets after index |
|||
* deps: raw-body@2.4.0 |
|||
- deps: bytes@3.1.0 |
|||
- deps: http-errors@1.7.2 |
|||
- deps: iconv-lite@0.4.24 |
|||
* deps: type-is@~1.6.17 |
|||
- deps: mime-types@~2.1.24 |
|||
- perf: prevent internal `throw` on invalid type |
|||
|
|||
1.18.3 / 2018-05-14 |
|||
=================== |
|||
|
|||
* Fix stack trace for strict json parse error |
|||
* deps: depd@~1.1.2 |
|||
- perf: remove argument reassignment |
|||
* deps: http-errors@~1.6.3 |
|||
- deps: depd@~1.1.2 |
|||
- deps: setprototypeof@1.1.0 |
|||
- deps: statuses@'>= 1.3.1 < 2' |
|||
* deps: iconv-lite@0.4.23 |
|||
- Fix loading encoding with year appended |
|||
- Fix deprecation warnings on Node.js 10+ |
|||
* deps: qs@6.5.2 |
|||
* deps: raw-body@2.3.3 |
|||
- deps: http-errors@1.6.3 |
|||
- deps: iconv-lite@0.4.23 |
|||
* deps: type-is@~1.6.16 |
|||
- deps: mime-types@~2.1.18 |
|||
|
|||
1.18.2 / 2017-09-22 |
|||
=================== |
|||
|
|||
* deps: debug@2.6.9 |
|||
* perf: remove argument reassignment |
|||
|
|||
1.18.1 / 2017-09-12 |
|||
=================== |
|||
|
|||
* deps: content-type@~1.0.4 |
|||
- perf: remove argument reassignment |
|||
- perf: skip parameter parsing when no parameters |
|||
* deps: iconv-lite@0.4.19 |
|||
- Fix ISO-8859-1 regression |
|||
- Update Windows-1255 |
|||
* deps: qs@6.5.1 |
|||
- Fix parsing & compacting very deep objects |
|||
* deps: raw-body@2.3.2 |
|||
- deps: iconv-lite@0.4.19 |
|||
|
|||
1.18.0 / 2017-09-08 |
|||
=================== |
|||
|
|||
* Fix JSON strict violation error to match native parse error |
|||
* Include the `body` property on verify errors |
|||
* Include the `type` property on all generated errors |
|||
* Use `http-errors` to set status code on errors |
|||
* deps: bytes@3.0.0 |
|||
* deps: debug@2.6.8 |
|||
* deps: depd@~1.1.1 |
|||
- Remove unnecessary `Buffer` loading |
|||
* deps: http-errors@~1.6.2 |
|||
- deps: depd@1.1.1 |
|||
* deps: iconv-lite@0.4.18 |
|||
- Add support for React Native |
|||
- Add a warning if not loaded as utf-8 |
|||
- Fix CESU-8 decoding in Node.js 8 |
|||
- Improve speed of ISO-8859-1 encoding |
|||
* deps: qs@6.5.0 |
|||
* deps: raw-body@2.3.1 |
|||
- Use `http-errors` for standard emitted errors |
|||
- deps: bytes@3.0.0 |
|||
- deps: iconv-lite@0.4.18 |
|||
- perf: skip buffer decoding on overage chunk |
|||
* perf: prevent internal `throw` when missing charset |
|||
|
|||
1.17.2 / 2017-05-17 |
|||
=================== |
|||
|
|||
* deps: debug@2.6.7 |
|||
- Fix `DEBUG_MAX_ARRAY_LENGTH` |
|||
- deps: ms@2.0.0 |
|||
* deps: type-is@~1.6.15 |
|||
- deps: mime-types@~2.1.15 |
|||
|
|||
1.17.1 / 2017-03-06 |
|||
=================== |
|||
|
|||
* deps: qs@6.4.0 |
|||
- Fix regression parsing keys starting with `[` |
|||
|
|||
1.17.0 / 2017-03-01 |
|||
=================== |
|||
|
|||
* deps: http-errors@~1.6.1 |
|||
- Make `message` property enumerable for `HttpError`s |
|||
- deps: setprototypeof@1.0.3 |
|||
* deps: qs@6.3.1 |
|||
- Fix compacting nested arrays |
|||
|
|||
1.16.1 / 2017-02-10 |
|||
=================== |
|||
|
|||
* deps: debug@2.6.1 |
|||
- Fix deprecation messages in WebStorm and other editors |
|||
- Undeprecate `DEBUG_FD` set to `1` or `2` |
|||
|
|||
1.16.0 / 2017-01-17 |
|||
=================== |
|||
|
|||
* deps: debug@2.6.0 |
|||
- Allow colors in workers |
|||
- Deprecated `DEBUG_FD` environment variable |
|||
- Fix error when running under React Native |
|||
- Use same color for same namespace |
|||
- deps: ms@0.7.2 |
|||
* deps: http-errors@~1.5.1 |
|||
- deps: inherits@2.0.3 |
|||
- deps: setprototypeof@1.0.2 |
|||
- deps: statuses@'>= 1.3.1 < 2' |
|||
* deps: iconv-lite@0.4.15 |
|||
- Added encoding MS-31J |
|||
- Added encoding MS-932 |
|||
- Added encoding MS-936 |
|||
- Added encoding MS-949 |
|||
- Added encoding MS-950 |
|||
- Fix GBK/GB18030 handling of Euro character |
|||
* deps: qs@6.2.1 |
|||
- Fix array parsing from skipping empty values |
|||
* deps: raw-body@~2.2.0 |
|||
- deps: iconv-lite@0.4.15 |
|||
* deps: type-is@~1.6.14 |
|||
- deps: mime-types@~2.1.13 |
|||
|
|||
1.15.2 / 2016-06-19 |
|||
=================== |
|||
|
|||
* deps: bytes@2.4.0 |
|||
* deps: content-type@~1.0.2 |
|||
- perf: enable strict mode |
|||
* deps: http-errors@~1.5.0 |
|||
- Use `setprototypeof` module to replace `__proto__` setting |
|||
- deps: statuses@'>= 1.3.0 < 2' |
|||
- perf: enable strict mode |
|||
* deps: qs@6.2.0 |
|||
* deps: raw-body@~2.1.7 |
|||
- deps: bytes@2.4.0 |
|||
- perf: remove double-cleanup on happy path |
|||
* deps: type-is@~1.6.13 |
|||
- deps: mime-types@~2.1.11 |
|||
|
|||
1.15.1 / 2016-05-05 |
|||
=================== |
|||
|
|||
* deps: bytes@2.3.0 |
|||
- Drop partial bytes on all parsed units |
|||
- Fix parsing byte string that looks like hex |
|||
* deps: raw-body@~2.1.6 |
|||
- deps: bytes@2.3.0 |
|||
* deps: type-is@~1.6.12 |
|||
- deps: mime-types@~2.1.10 |
|||
|
|||
1.15.0 / 2016-02-10 |
|||
=================== |
|||
|
|||
* deps: http-errors@~1.4.0 |
|||
- Add `HttpError` export, for `err instanceof createError.HttpError` |
|||
- deps: inherits@2.0.1 |
|||
- deps: statuses@'>= 1.2.1 < 2' |
|||
* deps: qs@6.1.0 |
|||
* deps: type-is@~1.6.11 |
|||
- deps: mime-types@~2.1.9 |
|||
|
|||
1.14.2 / 2015-12-16 |
|||
=================== |
|||
|
|||
* deps: bytes@2.2.0 |
|||
* deps: iconv-lite@0.4.13 |
|||
* deps: qs@5.2.0 |
|||
* deps: raw-body@~2.1.5 |
|||
- deps: bytes@2.2.0 |
|||
- deps: iconv-lite@0.4.13 |
|||
* deps: type-is@~1.6.10 |
|||
- deps: mime-types@~2.1.8 |
|||
|
|||
1.14.1 / 2015-09-27 |
|||
=================== |
|||
|
|||
* Fix issue where invalid charset results in 400 when `verify` used |
|||
* deps: iconv-lite@0.4.12 |
|||
- Fix CESU-8 decoding in Node.js 4.x |
|||
* deps: raw-body@~2.1.4 |
|||
- Fix masking critical errors from `iconv-lite` |
|||
- deps: iconv-lite@0.4.12 |
|||
* deps: type-is@~1.6.9 |
|||
- deps: mime-types@~2.1.7 |
|||
|
|||
1.14.0 / 2015-09-16 |
|||
=================== |
|||
|
|||
* Fix JSON strict parse error to match syntax errors |
|||
* Provide static `require` analysis in `urlencoded` parser |
|||
* deps: depd@~1.1.0 |
|||
- Support web browser loading |
|||
* deps: qs@5.1.0 |
|||
* deps: raw-body@~2.1.3 |
|||
- Fix sync callback when attaching data listener causes sync read |
|||
* deps: type-is@~1.6.8 |
|||
- Fix type error when given invalid type to match against |
|||
- deps: mime-types@~2.1.6 |
|||
|
|||
1.13.3 / 2015-07-31 |
|||
=================== |
|||
|
|||
* deps: type-is@~1.6.6 |
|||
- deps: mime-types@~2.1.4 |
|||
|
|||
1.13.2 / 2015-07-05 |
|||
=================== |
|||
|
|||
* deps: iconv-lite@0.4.11 |
|||
* deps: qs@4.0.0 |
|||
- Fix dropping parameters like `hasOwnProperty` |
|||
- Fix user-visible incompatibilities from 3.1.0 |
|||
- Fix various parsing edge cases |
|||
* deps: raw-body@~2.1.2 |
|||
- Fix error stack traces to skip `makeError` |
|||
- deps: iconv-lite@0.4.11 |
|||
* deps: type-is@~1.6.4 |
|||
- deps: mime-types@~2.1.2 |
|||
- perf: enable strict mode |
|||
- perf: remove argument reassignment |
|||
|
|||
1.13.1 / 2015-06-16 |
|||
=================== |
|||
|
|||
* deps: qs@2.4.2 |
|||
- Downgraded from 3.1.0 because of user-visible incompatibilities |
|||
|
|||
1.13.0 / 2015-06-14 |
|||
=================== |
|||
|
|||
* Add `statusCode` property on `Error`s, in addition to `status` |
|||
* Change `type` default to `application/json` for JSON parser |
|||
* Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser |
|||
* Provide static `require` analysis |
|||
* Use the `http-errors` module to generate errors |
|||
* deps: bytes@2.1.0 |
|||
- Slight optimizations |
|||
* deps: iconv-lite@0.4.10 |
|||
- The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails |
|||
- Leading BOM is now removed when decoding |
|||
* deps: on-finished@~2.3.0 |
|||
- Add defined behavior for HTTP `CONNECT` requests |
|||
- Add defined behavior for HTTP `Upgrade` requests |
|||
- deps: ee-first@1.1.1 |
|||
* deps: qs@3.1.0 |
|||
- Fix dropping parameters like `hasOwnProperty` |
|||
- Fix various parsing edge cases |
|||
- Parsed object now has `null` prototype |
|||
* deps: raw-body@~2.1.1 |
|||
- Use `unpipe` module for unpiping requests |
|||
- deps: iconv-lite@0.4.10 |
|||
* deps: type-is@~1.6.3 |
|||
- deps: mime-types@~2.1.1 |
|||
- perf: reduce try block size |
|||
- perf: remove bitwise operations |
|||
* perf: enable strict mode |
|||
* perf: remove argument reassignment |
|||
* perf: remove delete call |
|||
|
|||
1.12.4 / 2015-05-10 |
|||
=================== |
|||
|
|||
* deps: debug@~2.2.0 |
|||
* deps: qs@2.4.2 |
|||
- Fix allowing parameters like `constructor` |
|||
* deps: on-finished@~2.2.1 |
|||
* deps: raw-body@~2.0.1 |
|||
- Fix a false-positive when unpiping in Node.js 0.8 |
|||
- deps: bytes@2.0.1 |
|||
* deps: type-is@~1.6.2 |
|||
- deps: mime-types@~2.0.11 |
|||
|
|||
1.12.3 / 2015-04-15 |
|||
=================== |
|||
|
|||
* Slight efficiency improvement when not debugging |
|||
* deps: depd@~1.0.1 |
|||
* deps: iconv-lite@0.4.8 |
|||
- Add encoding alias UNICODE-1-1-UTF-7 |
|||
* deps: raw-body@1.3.4 |
|||
- Fix hanging callback if request aborts during read |
|||
- deps: iconv-lite@0.4.8 |
|||
|
|||
1.12.2 / 2015-03-16 |
|||
=================== |
|||
|
|||
* deps: qs@2.4.1 |
|||
- Fix error when parameter `hasOwnProperty` is present |
|||
|
|||
1.12.1 / 2015-03-15 |
|||
=================== |
|||
|
|||
* deps: debug@~2.1.3 |
|||
- Fix high intensity foreground color for bold |
|||
- deps: ms@0.7.0 |
|||
* deps: type-is@~1.6.1 |
|||
- deps: mime-types@~2.0.10 |
|||
|
|||
1.12.0 / 2015-02-13 |
|||
=================== |
|||
|
|||
* add `debug` messages |
|||
* accept a function for the `type` option |
|||
* use `content-type` to parse `Content-Type` headers |
|||
* deps: iconv-lite@0.4.7 |
|||
- Gracefully support enumerables on `Object.prototype` |
|||
* deps: raw-body@1.3.3 |
|||
- deps: iconv-lite@0.4.7 |
|||
* deps: type-is@~1.6.0 |
|||
- fix argument reassignment |
|||
- fix false-positives in `hasBody` `Transfer-Encoding` check |
|||
- support wildcard for both type and subtype (`*/*`) |
|||
- deps: mime-types@~2.0.9 |
|||
|
|||
1.11.0 / 2015-01-30 |
|||
=================== |
|||
|
|||
* make internal `extended: true` depth limit infinity |
|||
* deps: type-is@~1.5.6 |
|||
- deps: mime-types@~2.0.8 |
|||
|
|||
1.10.2 / 2015-01-20 |
|||
=================== |
|||
|
|||
* deps: iconv-lite@0.4.6 |
|||
- Fix rare aliases of single-byte encodings |
|||
* deps: raw-body@1.3.2 |
|||
- deps: iconv-lite@0.4.6 |
|||
|
|||
1.10.1 / 2015-01-01 |
|||
=================== |
|||
|
|||
* deps: on-finished@~2.2.0 |
|||
* deps: type-is@~1.5.5 |
|||
- deps: mime-types@~2.0.7 |
|||
|
|||
1.10.0 / 2014-12-02 |
|||
=================== |
|||
|
|||
* make internal `extended: true` array limit dynamic |
|||
|
|||
1.9.3 / 2014-11-21 |
|||
================== |
|||
|
|||
* deps: iconv-lite@0.4.5 |
|||
- Fix Windows-31J and X-SJIS encoding support |
|||
* deps: qs@2.3.3 |
|||
- Fix `arrayLimit` behavior |
|||
* deps: raw-body@1.3.1 |
|||
- deps: iconv-lite@0.4.5 |
|||
* deps: type-is@~1.5.3 |
|||
- deps: mime-types@~2.0.3 |
|||
|
|||
1.9.2 / 2014-10-27 |
|||
================== |
|||
|
|||
* deps: qs@2.3.2 |
|||
- Fix parsing of mixed objects and values |
|||
|
|||
1.9.1 / 2014-10-22 |
|||
================== |
|||
|
|||
* deps: on-finished@~2.1.1 |
|||
- Fix handling of pipelined requests |
|||
* deps: qs@2.3.0 |
|||
- Fix parsing of mixed implicit and explicit arrays |
|||
* deps: type-is@~1.5.2 |
|||
- deps: mime-types@~2.0.2 |
|||
|
|||
1.9.0 / 2014-09-24 |
|||
================== |
|||
|
|||
* include the charset in "unsupported charset" error message |
|||
* include the encoding in "unsupported content encoding" error message |
|||
* deps: depd@~1.0.0 |
|||
|
|||
1.8.4 / 2014-09-23 |
|||
================== |
|||
|
|||
* fix content encoding to be case-insensitive |
|||
|
|||
1.8.3 / 2014-09-19 |
|||
================== |
|||
|
|||
* deps: qs@2.2.4 |
|||
- Fix issue with object keys starting with numbers truncated |
|||
|
|||
1.8.2 / 2014-09-15 |
|||
================== |
|||
|
|||
* deps: depd@0.4.5 |
|||
|
|||
1.8.1 / 2014-09-07 |
|||
================== |
|||
|
|||
* deps: media-typer@0.3.0 |
|||
* deps: type-is@~1.5.1 |
|||
|
|||
1.8.0 / 2014-09-05 |
|||
================== |
|||
|
|||
* make empty-body-handling consistent between chunked requests |
|||
- empty `json` produces `{}` |
|||
- empty `raw` produces `new Buffer(0)` |
|||
- empty `text` produces `''` |
|||
- empty `urlencoded` produces `{}` |
|||
* deps: qs@2.2.3 |
|||
- Fix issue where first empty value in array is discarded |
|||
* deps: type-is@~1.5.0 |
|||
- fix `hasbody` to be true for `content-length: 0` |
|||
|
|||
1.7.0 / 2014-09-01 |
|||
================== |
|||
|
|||
* add `parameterLimit` option to `urlencoded` parser |
|||
* change `urlencoded` extended array limit to 100 |
|||
* respond with 413 when over `parameterLimit` in `urlencoded` |
|||
|
|||
1.6.7 / 2014-08-29 |
|||
================== |
|||
|
|||
* deps: qs@2.2.2 |
|||
- Remove unnecessary cloning |
|||
|
|||
1.6.6 / 2014-08-27 |
|||
================== |
|||
|
|||
* deps: qs@2.2.0 |
|||
- Array parsing fix |
|||
- Performance improvements |
|||
|
|||
1.6.5 / 2014-08-16 |
|||
================== |
|||
|
|||
* deps: on-finished@2.1.0 |
|||
|
|||
1.6.4 / 2014-08-14 |
|||
================== |
|||
|
|||
* deps: qs@1.2.2 |
|||
|
|||
1.6.3 / 2014-08-10 |
|||
================== |
|||
|
|||
* deps: qs@1.2.1 |
|||
|
|||
1.6.2 / 2014-08-07 |
|||
================== |
|||
|
|||
* deps: qs@1.2.0 |
|||
- Fix parsing array of objects |
|||
|
|||
1.6.1 / 2014-08-06 |
|||
================== |
|||
|
|||
* deps: qs@1.1.0 |
|||
- Accept urlencoded square brackets |
|||
- Accept empty values in implicit array notation |
|||
|
|||
1.6.0 / 2014-08-05 |
|||
================== |
|||
|
|||
* deps: qs@1.0.2 |
|||
- Complete rewrite |
|||
- Limits array length to 20 |
|||
- Limits object depth to 5 |
|||
- Limits parameters to 1,000 |
|||
|
|||
1.5.2 / 2014-07-27 |
|||
================== |
|||
|
|||
* deps: depd@0.4.4 |
|||
- Work-around v8 generating empty stack traces |
|||
|
|||
1.5.1 / 2014-07-26 |
|||
================== |
|||
|
|||
* deps: depd@0.4.3 |
|||
- Fix exception when global `Error.stackTraceLimit` is too low |
|||
|
|||
1.5.0 / 2014-07-20 |
|||
================== |
|||
|
|||
* deps: depd@0.4.2 |
|||
- Add `TRACE_DEPRECATION` environment variable |
|||
- Remove non-standard grey color from color output |
|||
- Support `--no-deprecation` argument |
|||
- Support `--trace-deprecation` argument |
|||
* deps: iconv-lite@0.4.4 |
|||
- Added encoding UTF-7 |
|||
* deps: raw-body@1.3.0 |
|||
- deps: iconv-lite@0.4.4 |
|||
- Added encoding UTF-7 |
|||
- Fix `Cannot switch to old mode now` error on Node.js 0.10+ |
|||
* deps: type-is@~1.3.2 |
|||
|
|||
1.4.3 / 2014-06-19 |
|||
================== |
|||
|
|||
* deps: type-is@1.3.1 |
|||
- fix global variable leak |
|||
|
|||
1.4.2 / 2014-06-19 |
|||
================== |
|||
|
|||
* deps: type-is@1.3.0 |
|||
- improve type parsing |
|||
|
|||
1.4.1 / 2014-06-19 |
|||
================== |
|||
|
|||
* fix urlencoded extended deprecation message |
|||
|
|||
1.4.0 / 2014-06-19 |
|||
================== |
|||
|
|||
* add `text` parser |
|||
* add `raw` parser |
|||
* check accepted charset in content-type (accepts utf-8) |
|||
* check accepted encoding in content-encoding (accepts identity) |
|||
* deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed |
|||
* deprecate `urlencoded()` without provided `extended` option |
|||
* lazy-load urlencoded parsers |
|||
* parsers split into files for reduced mem usage |
|||
* support gzip and deflate bodies |
|||
- set `inflate: false` to turn off |
|||
* deps: raw-body@1.2.2 |
|||
- Support all encodings from `iconv-lite` |
|||
|
|||
1.3.1 / 2014-06-11 |
|||
================== |
|||
|
|||
* deps: type-is@1.2.1 |
|||
- Switch dependency from mime to mime-types@1.0.0 |
|||
|
|||
1.3.0 / 2014-05-31 |
|||
================== |
|||
|
|||
* add `extended` option to urlencoded parser |
|||
|
|||
1.2.2 / 2014-05-27 |
|||
================== |
|||
|
|||
* deps: raw-body@1.1.6 |
|||
- assert stream encoding on node.js 0.8 |
|||
- assert stream encoding on node.js < 0.10.6 |
|||
- deps: bytes@1 |
|||
|
|||
1.2.1 / 2014-05-26 |
|||
================== |
|||
|
|||
* invoke `next(err)` after request fully read |
|||
- prevents hung responses and socket hang ups |
|||
|
|||
1.2.0 / 2014-05-11 |
|||
================== |
|||
|
|||
* add `verify` option |
|||
* deps: type-is@1.2.0 |
|||
- support suffix matching |
|||
|
|||
1.1.2 / 2014-05-11 |
|||
================== |
|||
|
|||
* improve json parser speed |
|||
|
|||
1.1.1 / 2014-05-11 |
|||
================== |
|||
|
|||
* fix repeated limit parsing with every request |
|||
|
|||
1.1.0 / 2014-05-10 |
|||
================== |
|||
|
|||
* add `type` option |
|||
* deps: pin for safety and consistency |
|||
|
|||
1.0.2 / 2014-04-14 |
|||
================== |
|||
|
|||
* use `type-is` module |
|||
|
|||
1.0.1 / 2014-03-20 |
|||
================== |
|||
|
|||
* lower default limits to 100kb |
|||
@ -0,0 +1,23 @@ |
|||
(The MIT License) |
|||
|
|||
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com> |
|||
Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com> |
|||
|
|||
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,456 @@ |
|||
# body-parser |
|||
|
|||
[![NPM Version][npm-image]][npm-url] |
|||
[![NPM Downloads][downloads-image]][downloads-url] |
|||
[![Build Status][github-actions-ci-image]][github-actions-ci-url] |
|||
[![Test Coverage][coveralls-image]][coveralls-url] |
|||
|
|||
Node.js body parsing middleware. |
|||
|
|||
Parse incoming request bodies in a middleware before your handlers, available |
|||
under the `req.body` property. |
|||
|
|||
**Note** As `req.body`'s shape is based on user-controlled input, all |
|||
properties and values in this object are untrusted and should be validated |
|||
before trusting. For example, `req.body.foo.toString()` may fail in multiple |
|||
ways, for example the `foo` property may not be there or may not be a string, |
|||
and `toString` may not be a function and instead a string or other user input. |
|||
|
|||
[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/). |
|||
|
|||
_This does not handle multipart bodies_, due to their complex and typically |
|||
large nature. For multipart bodies, you may be interested in the following |
|||
modules: |
|||
|
|||
* [busboy](https://www.npmjs.org/package/busboy#readme) and |
|||
[connect-busboy](https://www.npmjs.org/package/connect-busboy#readme) |
|||
* [multiparty](https://www.npmjs.org/package/multiparty#readme) and |
|||
[connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme) |
|||
* [formidable](https://www.npmjs.org/package/formidable#readme) |
|||
* [multer](https://www.npmjs.org/package/multer#readme) |
|||
|
|||
This module provides the following parsers: |
|||
|
|||
* [JSON body parser](#bodyparserjsonoptions) |
|||
* [Raw body parser](#bodyparserrawoptions) |
|||
* [Text body parser](#bodyparsertextoptions) |
|||
* [URL-encoded form body parser](#bodyparserurlencodedoptions) |
|||
|
|||
Other body parsers you might be interested in: |
|||
|
|||
- [body](https://www.npmjs.org/package/body#readme) |
|||
- [co-body](https://www.npmjs.org/package/co-body#readme) |
|||
|
|||
## Installation |
|||
|
|||
```sh |
|||
$ npm install body-parser |
|||
``` |
|||
|
|||
## API |
|||
|
|||
```js |
|||
var bodyParser = require('body-parser') |
|||
``` |
|||
|
|||
The `bodyParser` object exposes various factories to create middlewares. All |
|||
middlewares will populate the `req.body` property with the parsed body when |
|||
the `Content-Type` request header matches the `type` option, or an empty |
|||
object (`{}`) if there was no body to parse, the `Content-Type` was not matched, |
|||
or an error occurred. |
|||
|
|||
The various errors returned by this module are described in the |
|||
[errors section](#errors). |
|||
|
|||
### bodyParser.json([options]) |
|||
|
|||
Returns middleware that only parses `json` and only looks at requests where |
|||
the `Content-Type` header matches the `type` option. This parser accepts any |
|||
Unicode encoding of the body and supports automatic inflation of `gzip` and |
|||
`deflate` encodings. |
|||
|
|||
A new `body` object containing the parsed data is populated on the `request` |
|||
object after the middleware (i.e. `req.body`). |
|||
|
|||
#### Options |
|||
|
|||
The `json` function takes an optional `options` object that may contain any of |
|||
the following keys: |
|||
|
|||
##### inflate |
|||
|
|||
When set to `true`, then deflated (compressed) bodies will be inflated; when |
|||
`false`, deflated bodies are rejected. Defaults to `true`. |
|||
|
|||
##### limit |
|||
|
|||
Controls the maximum request body size. If this is a number, then the value |
|||
specifies the number of bytes; if it is a string, the value is passed to the |
|||
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults |
|||
to `'100kb'`. |
|||
|
|||
##### reviver |
|||
|
|||
The `reviver` option is passed directly to `JSON.parse` as the second |
|||
argument. You can find more information on this argument |
|||
[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter). |
|||
|
|||
##### strict |
|||
|
|||
When set to `true`, will only accept arrays and objects; when `false` will |
|||
accept anything `JSON.parse` accepts. Defaults to `true`. |
|||
|
|||
##### type |
|||
|
|||
The `type` option is used to determine what media type the middleware will |
|||
parse. This option can be a string, array of strings, or a function. If not a |
|||
function, `type` option is passed directly to the |
|||
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can |
|||
be an extension name (like `json`), a mime type (like `application/json`), or |
|||
a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type` |
|||
option is called as `fn(req)` and the request is parsed if it returns a truthy |
|||
value. Defaults to `application/json`. |
|||
|
|||
##### verify |
|||
|
|||
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, |
|||
where `buf` is a `Buffer` of the raw request body and `encoding` is the |
|||
encoding of the request. The parsing can be aborted by throwing an error. |
|||
|
|||
### bodyParser.raw([options]) |
|||
|
|||
Returns middleware that parses all bodies as a `Buffer` and only looks at |
|||
requests where the `Content-Type` header matches the `type` option. This |
|||
parser supports automatic inflation of `gzip` and `deflate` encodings. |
|||
|
|||
A new `body` object containing the parsed data is populated on the `request` |
|||
object after the middleware (i.e. `req.body`). This will be a `Buffer` object |
|||
of the body. |
|||
|
|||
#### Options |
|||
|
|||
The `raw` function takes an optional `options` object that may contain any of |
|||
the following keys: |
|||
|
|||
##### inflate |
|||
|
|||
When set to `true`, then deflated (compressed) bodies will be inflated; when |
|||
`false`, deflated bodies are rejected. Defaults to `true`. |
|||
|
|||
##### limit |
|||
|
|||
Controls the maximum request body size. If this is a number, then the value |
|||
specifies the number of bytes; if it is a string, the value is passed to the |
|||
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults |
|||
to `'100kb'`. |
|||
|
|||
##### type |
|||
|
|||
The `type` option is used to determine what media type the middleware will |
|||
parse. This option can be a string, array of strings, or a function. |
|||
If not a function, `type` option is passed directly to the |
|||
[type-is](https://www.npmjs.org/package/type-is#readme) library and this |
|||
can be an extension name (like `bin`), a mime type (like |
|||
`application/octet-stream`), or a mime type with a wildcard (like `*/*` or |
|||
`application/*`). If a function, the `type` option is called as `fn(req)` |
|||
and the request is parsed if it returns a truthy value. Defaults to |
|||
`application/octet-stream`. |
|||
|
|||
##### verify |
|||
|
|||
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, |
|||
where `buf` is a `Buffer` of the raw request body and `encoding` is the |
|||
encoding of the request. The parsing can be aborted by throwing an error. |
|||
|
|||
### bodyParser.text([options]) |
|||
|
|||
Returns middleware that parses all bodies as a string and only looks at |
|||
requests where the `Content-Type` header matches the `type` option. This |
|||
parser supports automatic inflation of `gzip` and `deflate` encodings. |
|||
|
|||
A new `body` string containing the parsed data is populated on the `request` |
|||
object after the middleware (i.e. `req.body`). This will be a string of the |
|||
body. |
|||
|
|||
#### Options |
|||
|
|||
The `text` function takes an optional `options` object that may contain any of |
|||
the following keys: |
|||
|
|||
##### defaultCharset |
|||
|
|||
Specify the default character set for the text content if the charset is not |
|||
specified in the `Content-Type` header of the request. Defaults to `utf-8`. |
|||
|
|||
##### inflate |
|||
|
|||
When set to `true`, then deflated (compressed) bodies will be inflated; when |
|||
`false`, deflated bodies are rejected. Defaults to `true`. |
|||
|
|||
##### limit |
|||
|
|||
Controls the maximum request body size. If this is a number, then the value |
|||
specifies the number of bytes; if it is a string, the value is passed to the |
|||
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults |
|||
to `'100kb'`. |
|||
|
|||
##### type |
|||
|
|||
The `type` option is used to determine what media type the middleware will |
|||
parse. This option can be a string, array of strings, or a function. If not |
|||
a function, `type` option is passed directly to the |
|||
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can |
|||
be an extension name (like `txt`), a mime type (like `text/plain`), or a mime |
|||
type with a wildcard (like `*/*` or `text/*`). If a function, the `type` |
|||
option is called as `fn(req)` and the request is parsed if it returns a |
|||
truthy value. Defaults to `text/plain`. |
|||
|
|||
##### verify |
|||
|
|||
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, |
|||
where `buf` is a `Buffer` of the raw request body and `encoding` is the |
|||
encoding of the request. The parsing can be aborted by throwing an error. |
|||
|
|||
### bodyParser.urlencoded([options]) |
|||
|
|||
Returns middleware that only parses `urlencoded` bodies and only looks at |
|||
requests where the `Content-Type` header matches the `type` option. This |
|||
parser accepts only UTF-8 encoding of the body and supports automatic |
|||
inflation of `gzip` and `deflate` encodings. |
|||
|
|||
A new `body` object containing the parsed data is populated on the `request` |
|||
object after the middleware (i.e. `req.body`). This object will contain |
|||
key-value pairs, where the value can be a string or array (when `extended` is |
|||
`false`), or any type (when `extended` is `true`). |
|||
|
|||
#### Options |
|||
|
|||
The `urlencoded` function takes an optional `options` object that may contain |
|||
any of the following keys: |
|||
|
|||
##### extended |
|||
|
|||
The `extended` option allows to choose between parsing the URL-encoded data |
|||
with the `querystring` library (when `false`) or the `qs` library (when |
|||
`true`). The "extended" syntax allows for rich objects and arrays to be |
|||
encoded into the URL-encoded format, allowing for a JSON-like experience |
|||
with URL-encoded. For more information, please |
|||
[see the qs library](https://www.npmjs.org/package/qs#readme). |
|||
|
|||
Defaults to `true`, but using the default has been deprecated. Please |
|||
research into the difference between `qs` and `querystring` and choose the |
|||
appropriate setting. |
|||
|
|||
##### inflate |
|||
|
|||
When set to `true`, then deflated (compressed) bodies will be inflated; when |
|||
`false`, deflated bodies are rejected. Defaults to `true`. |
|||
|
|||
##### limit |
|||
|
|||
Controls the maximum request body size. If this is a number, then the value |
|||
specifies the number of bytes; if it is a string, the value is passed to the |
|||
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults |
|||
to `'100kb'`. |
|||
|
|||
##### parameterLimit |
|||
|
|||
The `parameterLimit` option controls the maximum number of parameters that |
|||
are allowed in the URL-encoded data. If a request contains more parameters |
|||
than this value, a 413 will be returned to the client. Defaults to `1000`. |
|||
|
|||
##### type |
|||
|
|||
The `type` option is used to determine what media type the middleware will |
|||
parse. This option can be a string, array of strings, or a function. If not |
|||
a function, `type` option is passed directly to the |
|||
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can |
|||
be an extension name (like `urlencoded`), a mime type (like |
|||
`application/x-www-form-urlencoded`), or a mime type with a wildcard (like |
|||
`*/x-www-form-urlencoded`). If a function, the `type` option is called as |
|||
`fn(req)` and the request is parsed if it returns a truthy value. Defaults |
|||
to `application/x-www-form-urlencoded`. |
|||
|
|||
##### verify |
|||
|
|||
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, |
|||
where `buf` is a `Buffer` of the raw request body and `encoding` is the |
|||
encoding of the request. The parsing can be aborted by throwing an error. |
|||
|
|||
## Errors |
|||
|
|||
The middlewares provided by this module create errors using the |
|||
[`http-errors` module](https://www.npmjs.com/package/http-errors). The errors |
|||
will typically have a `status`/`statusCode` property that contains the suggested |
|||
HTTP response code, an `expose` property to determine if the `message` property |
|||
should be displayed to the client, a `type` property to determine the type of |
|||
error without matching against the `message`, and a `body` property containing |
|||
the read body, if available. |
|||
|
|||
The following are the common errors created, though any error can come through |
|||
for various reasons. |
|||
|
|||
### content encoding unsupported |
|||
|
|||
This error will occur when the request had a `Content-Encoding` header that |
|||
contained an encoding but the "inflation" option was set to `false`. The |
|||
`status` property is set to `415`, the `type` property is set to |
|||
`'encoding.unsupported'`, and the `charset` property will be set to the |
|||
encoding that is unsupported. |
|||
|
|||
### entity parse failed |
|||
|
|||
This error will occur when the request contained an entity that could not be |
|||
parsed by the middleware. The `status` property is set to `400`, the `type` |
|||
property is set to `'entity.parse.failed'`, and the `body` property is set to |
|||
the entity value that failed parsing. |
|||
|
|||
### entity verify failed |
|||
|
|||
This error will occur when the request contained an entity that could not be |
|||
failed verification by the defined `verify` option. The `status` property is |
|||
set to `403`, the `type` property is set to `'entity.verify.failed'`, and the |
|||
`body` property is set to the entity value that failed verification. |
|||
|
|||
### request aborted |
|||
|
|||
This error will occur when the request is aborted by the client before reading |
|||
the body has finished. The `received` property will be set to the number of |
|||
bytes received before the request was aborted and the `expected` property is |
|||
set to the number of expected bytes. The `status` property is set to `400` |
|||
and `type` property is set to `'request.aborted'`. |
|||
|
|||
### request entity too large |
|||
|
|||
This error will occur when the request body's size is larger than the "limit" |
|||
option. The `limit` property will be set to the byte limit and the `length` |
|||
property will be set to the request body's length. The `status` property is |
|||
set to `413` and the `type` property is set to `'entity.too.large'`. |
|||
|
|||
### request size did not match content length |
|||
|
|||
This error will occur when the request's length did not match the length from |
|||
the `Content-Length` header. This typically occurs when the request is malformed, |
|||
typically when the `Content-Length` header was calculated based on characters |
|||
instead of bytes. The `status` property is set to `400` and the `type` property |
|||
is set to `'request.size.invalid'`. |
|||
|
|||
### stream encoding should not be set |
|||
|
|||
This error will occur when something called the `req.setEncoding` method prior |
|||
to this middleware. This module operates directly on bytes only and you cannot |
|||
call `req.setEncoding` when using this module. The `status` property is set to |
|||
`500` and the `type` property is set to `'stream.encoding.set'`. |
|||
|
|||
### too many parameters |
|||
|
|||
This error will occur when the content of the request exceeds the configured |
|||
`parameterLimit` for the `urlencoded` parser. The `status` property is set to |
|||
`413` and the `type` property is set to `'parameters.too.many'`. |
|||
|
|||
### unsupported charset "BOGUS" |
|||
|
|||
This error will occur when the request had a charset parameter in the |
|||
`Content-Type` header, but the `iconv-lite` module does not support it OR the |
|||
parser does not support it. The charset is contained in the message as well |
|||
as in the `charset` property. The `status` property is set to `415`, the |
|||
`type` property is set to `'charset.unsupported'`, and the `charset` property |
|||
is set to the charset that is unsupported. |
|||
|
|||
### unsupported content encoding "bogus" |
|||
|
|||
This error will occur when the request had a `Content-Encoding` header that |
|||
contained an unsupported encoding. The encoding is contained in the message |
|||
as well as in the `encoding` property. The `status` property is set to `415`, |
|||
the `type` property is set to `'encoding.unsupported'`, and the `encoding` |
|||
property is set to the encoding that is unsupported. |
|||
|
|||
## Examples |
|||
|
|||
### Express/Connect top-level generic |
|||
|
|||
This example demonstrates adding a generic JSON and URL-encoded parser as a |
|||
top-level middleware, which will parse the bodies of all incoming requests. |
|||
This is the simplest setup. |
|||
|
|||
```js |
|||
var express = require('express') |
|||
var bodyParser = require('body-parser') |
|||
|
|||
var app = express() |
|||
|
|||
// parse application/x-www-form-urlencoded |
|||
app.use(bodyParser.urlencoded({ extended: false })) |
|||
|
|||
// parse application/json |
|||
app.use(bodyParser.json()) |
|||
|
|||
app.use(function (req, res) { |
|||
res.setHeader('Content-Type', 'text/plain') |
|||
res.write('you posted:\n') |
|||
res.end(JSON.stringify(req.body, null, 2)) |
|||
}) |
|||
``` |
|||
|
|||
### Express route-specific |
|||
|
|||
This example demonstrates adding body parsers specifically to the routes that |
|||
need them. In general, this is the most recommended way to use body-parser with |
|||
Express. |
|||
|
|||
```js |
|||
var express = require('express') |
|||
var bodyParser = require('body-parser') |
|||
|
|||
var app = express() |
|||
|
|||
// create application/json parser |
|||
var jsonParser = bodyParser.json() |
|||
|
|||
// create application/x-www-form-urlencoded parser |
|||
var urlencodedParser = bodyParser.urlencoded({ extended: false }) |
|||
|
|||
// POST /login gets urlencoded bodies |
|||
app.post('/login', urlencodedParser, function (req, res) { |
|||
res.send('welcome, ' + req.body.username) |
|||
}) |
|||
|
|||
// POST /api/users gets JSON bodies |
|||
app.post('/api/users', jsonParser, function (req, res) { |
|||
// create user in req.body |
|||
}) |
|||
``` |
|||
|
|||
### Change accepted type for parsers |
|||
|
|||
All the parsers accept a `type` option which allows you to change the |
|||
`Content-Type` that the middleware will parse. |
|||
|
|||
```js |
|||
var express = require('express') |
|||
var bodyParser = require('body-parser') |
|||
|
|||
var app = express() |
|||
|
|||
// parse various different custom JSON types as JSON |
|||
app.use(bodyParser.json({ type: 'application/*+json' })) |
|||
|
|||
// parse some custom thing into a Buffer |
|||
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' })) |
|||
|
|||
// parse an HTML body into a string |
|||
app.use(bodyParser.text({ type: 'text/html' })) |
|||
``` |
|||
|
|||
## License |
|||
|
|||
[MIT](LICENSE) |
|||
|
|||
[npm-image]: https://img.shields.io/npm/v/body-parser.svg |
|||
[npm-url]: https://npmjs.org/package/body-parser |
|||
[coveralls-image]: https://img.shields.io/coveralls/expressjs/body-parser/master.svg |
|||
[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master |
|||
[downloads-image]: https://img.shields.io/npm/dm/body-parser.svg |
|||
[downloads-url]: https://npmjs.org/package/body-parser |
|||
[github-actions-ci-image]: https://img.shields.io/github/workflow/status/expressjs/body-parser/ci/master?label=ci |
|||
[github-actions-ci-url]: https://github.com/expressjs/body-parser?query=workflow%3Aci |
|||
@ -0,0 +1,157 @@ |
|||
/*! |
|||
* body-parser |
|||
* Copyright(c) 2014-2015 Douglas Christopher Wilson |
|||
* MIT Licensed |
|||
*/ |
|||
|
|||
'use strict' |
|||
|
|||
/** |
|||
* Module dependencies. |
|||
* @private |
|||
*/ |
|||
|
|||
var deprecate = require('depd')('body-parser') |
|||
|
|||
/** |
|||
* Cache of loaded parsers. |
|||
* @private |
|||
*/ |
|||
|
|||
var parsers = Object.create(null) |
|||
|
|||
/** |
|||
* @typedef Parsers |
|||
* @type {function} |
|||
* @property {function} json |
|||
* @property {function} raw |
|||
* @property {function} text |
|||
* @property {function} urlencoded |
|||
*/ |
|||
|
|||
/** |
|||
* Module exports. |
|||
* @type {Parsers} |
|||
*/ |
|||
|
|||
exports = module.exports = deprecate.function(bodyParser, |
|||
'bodyParser: use individual json/urlencoded middlewares') |
|||
|
|||
/** |
|||
* JSON parser. |
|||
* @public |
|||
*/ |
|||
|
|||
Object.defineProperty(exports, 'json', { |
|||
configurable: true, |
|||
enumerable: true, |
|||
get: createParserGetter('json') |
|||
}) |
|||
|
|||
/** |
|||
* Raw parser. |
|||
* @public |
|||
*/ |
|||
|
|||
Object.defineProperty(exports, 'raw', { |
|||
configurable: true, |
|||
enumerable: true, |
|||
get: createParserGetter('raw') |
|||
}) |
|||
|
|||
/** |
|||
* Text parser. |
|||
* @public |
|||
*/ |
|||
|
|||
Object.defineProperty(exports, 'text', { |
|||
configurable: true, |
|||
enumerable: true, |
|||
get: createParserGetter('text') |
|||
}) |
|||
|
|||
/** |
|||
* URL-encoded parser. |
|||
* @public |
|||
*/ |
|||
|
|||
Object.defineProperty(exports, 'urlencoded', { |
|||
configurable: true, |
|||
enumerable: true, |
|||
get: createParserGetter('urlencoded') |
|||
}) |
|||
|
|||
/** |
|||
* Create a middleware to parse json and urlencoded bodies. |
|||
* |
|||
* @param {object} [options] |
|||
* @return {function} |
|||
* @deprecated |
|||
* @public |
|||
*/ |
|||
|
|||
function bodyParser (options) { |
|||
var opts = {} |
|||
|
|||
// exclude type option
|
|||
if (options) { |
|||
for (var prop in options) { |
|||
if (prop !== 'type') { |
|||
opts[prop] = options[prop] |
|||
} |
|||
} |
|||
} |
|||
|
|||
var _urlencoded = exports.urlencoded(opts) |
|||
var _json = exports.json(opts) |
|||
|
|||
return function bodyParser (req, res, next) { |
|||
_json(req, res, function (err) { |
|||
if (err) return next(err) |
|||
_urlencoded(req, res, next) |
|||
}) |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Create a getter for loading a parser. |
|||
* @private |
|||
*/ |
|||
|
|||
function createParserGetter (name) { |
|||
return function get () { |
|||
return loadParser(name) |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Load a parser module. |
|||
* @private |
|||
*/ |
|||
|
|||
function loadParser (parserName) { |
|||
var parser = parsers[parserName] |
|||
|
|||
if (parser !== undefined) { |
|||
return parser |
|||
} |
|||
|
|||
// this uses a switch for static require analysis
|
|||
switch (parserName) { |
|||
case 'json': |
|||
parser = require('./lib/types/json') |
|||
break |
|||
case 'raw': |
|||
parser = require('./lib/types/raw') |
|||
break |
|||
case 'text': |
|||
parser = require('./lib/types/text') |
|||
break |
|||
case 'urlencoded': |
|||
parser = require('./lib/types/urlencoded') |
|||
break |
|||
} |
|||
|
|||
// store to prevent invoking require()
|
|||
return (parsers[parserName] = parser) |
|||
} |
|||
@ -0,0 +1,181 @@ |
|||
/*! |
|||
* body-parser |
|||
* Copyright(c) 2014-2015 Douglas Christopher Wilson |
|||
* MIT Licensed |
|||
*/ |
|||
|
|||
'use strict' |
|||
|
|||
/** |
|||
* Module dependencies. |
|||
* @private |
|||
*/ |
|||
|
|||
var createError = require('http-errors') |
|||
var getBody = require('raw-body') |
|||
var iconv = require('iconv-lite') |
|||
var onFinished = require('on-finished') |
|||
var zlib = require('zlib') |
|||
|
|||
/** |
|||
* Module exports. |
|||
*/ |
|||
|
|||
module.exports = read |
|||
|
|||
/** |
|||
* Read a request into a buffer and parse. |
|||
* |
|||
* @param {object} req |
|||
* @param {object} res |
|||
* @param {function} next |
|||
* @param {function} parse |
|||
* @param {function} debug |
|||
* @param {object} options |
|||
* @private |
|||
*/ |
|||
|
|||
function read (req, res, next, parse, debug, options) { |
|||
var length |
|||
var opts = options |
|||
var stream |
|||
|
|||
// flag as parsed
|
|||
req._body = true |
|||
|
|||
// read options
|
|||
var encoding = opts.encoding !== null |
|||
? opts.encoding |
|||
: null |
|||
var verify = opts.verify |
|||
|
|||
try { |
|||
// get the content stream
|
|||
stream = contentstream(req, debug, opts.inflate) |
|||
length = stream.length |
|||
stream.length = undefined |
|||
} catch (err) { |
|||
return next(err) |
|||
} |
|||
|
|||
// set raw-body options
|
|||
opts.length = length |
|||
opts.encoding = verify |
|||
? null |
|||
: encoding |
|||
|
|||
// assert charset is supported
|
|||
if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) { |
|||
return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { |
|||
charset: encoding.toLowerCase(), |
|||
type: 'charset.unsupported' |
|||
})) |
|||
} |
|||
|
|||
// read body
|
|||
debug('read body') |
|||
getBody(stream, opts, function (error, body) { |
|||
if (error) { |
|||
var _error |
|||
|
|||
if (error.type === 'encoding.unsupported') { |
|||
// echo back charset
|
|||
_error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { |
|||
charset: encoding.toLowerCase(), |
|||
type: 'charset.unsupported' |
|||
}) |
|||
} else { |
|||
// set status code on error
|
|||
_error = createError(400, error) |
|||
} |
|||
|
|||
// read off entire request
|
|||
stream.resume() |
|||
onFinished(req, function onfinished () { |
|||
next(createError(400, _error)) |
|||
}) |
|||
return |
|||
} |
|||
|
|||
// verify
|
|||
if (verify) { |
|||
try { |
|||
debug('verify body') |
|||
verify(req, res, body, encoding) |
|||
} catch (err) { |
|||
next(createError(403, err, { |
|||
body: body, |
|||
type: err.type || 'entity.verify.failed' |
|||
})) |
|||
return |
|||
} |
|||
} |
|||
|
|||
// parse
|
|||
var str = body |
|||
try { |
|||
debug('parse body') |
|||
str = typeof body !== 'string' && encoding !== null |
|||
? iconv.decode(body, encoding) |
|||
: body |
|||
req.body = parse(str) |
|||
} catch (err) { |
|||
next(createError(400, err, { |
|||
body: str, |
|||
type: err.type || 'entity.parse.failed' |
|||
})) |
|||
return |
|||
} |
|||
|
|||
next() |
|||
}) |
|||
} |
|||
|
|||
/** |
|||
* Get the content stream of the request. |
|||
* |
|||
* @param {object} req |
|||
* @param {function} debug |
|||
* @param {boolean} [inflate=true] |
|||
* @return {object} |
|||
* @api private |
|||
*/ |
|||
|
|||
function contentstream (req, debug, inflate) { |
|||
var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase() |
|||
var length = req.headers['content-length'] |
|||
var stream |
|||
|
|||
debug('content-encoding "%s"', encoding) |
|||
|
|||
if (inflate === false && encoding !== 'identity') { |
|||
throw createError(415, 'content encoding unsupported', { |
|||
encoding: encoding, |
|||
type: 'encoding.unsupported' |
|||
}) |
|||
} |
|||
|
|||
switch (encoding) { |
|||
case 'deflate': |
|||
stream = zlib.createInflate() |
|||
debug('inflate body') |
|||
req.pipe(stream) |
|||
break |
|||
case 'gzip': |
|||
stream = zlib.createGunzip() |
|||
debug('gunzip body') |
|||
req.pipe(stream) |
|||
break |
|||
case 'identity': |
|||
stream = req |
|||
stream.length = length |
|||
break |
|||
default: |
|||
throw createError(415, 'unsupported content encoding "' + encoding + '"', { |
|||
encoding: encoding, |
|||
type: 'encoding.unsupported' |
|||
}) |
|||
} |
|||
|
|||
return stream |
|||
} |
|||
@ -0,0 +1,230 @@ |
|||
/*! |
|||
* body-parser |
|||
* Copyright(c) 2014 Jonathan Ong |
|||
* Copyright(c) 2014-2015 Douglas Christopher Wilson |
|||
* MIT Licensed |
|||
*/ |
|||
|
|||
'use strict' |
|||
|
|||
/** |
|||
* Module dependencies. |
|||
* @private |
|||
*/ |
|||
|
|||
var bytes = require('bytes') |
|||
var contentType = require('content-type') |
|||
var createError = require('http-errors') |
|||
var debug = require('debug')('body-parser:json') |
|||
var read = require('../read') |
|||
var typeis = require('type-is') |
|||
|
|||
/** |
|||
* Module exports. |
|||
*/ |
|||
|
|||
module.exports = json |
|||
|
|||
/** |
|||
* RegExp to match the first non-space in a string. |
|||
* |
|||
* Allowed whitespace is defined in RFC 7159: |
|||
* |
|||
* ws = *( |
|||
* %x20 / ; Space |
|||
* %x09 / ; Horizontal tab |
|||
* %x0A / ; Line feed or New line |
|||
* %x0D ) ; Carriage return |
|||
*/ |
|||
|
|||
var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*(.)/ // eslint-disable-line no-control-regex
|
|||
|
|||
/** |
|||
* Create a middleware to parse JSON bodies. |
|||
* |
|||
* @param {object} [options] |
|||
* @return {function} |
|||
* @public |
|||
*/ |
|||
|
|||
function json (options) { |
|||
var opts = options || {} |
|||
|
|||
var limit = typeof opts.limit !== 'number' |
|||
? bytes.parse(opts.limit || '100kb') |
|||
: opts.limit |
|||
var inflate = opts.inflate !== false |
|||
var reviver = opts.reviver |
|||
var strict = opts.strict !== false |
|||
var type = opts.type || 'application/json' |
|||
var verify = opts.verify || false |
|||
|
|||
if (verify !== false && typeof verify !== 'function') { |
|||
throw new TypeError('option verify must be function') |
|||
} |
|||
|
|||
// create the appropriate type checking function
|
|||
var shouldParse = typeof type !== 'function' |
|||
? typeChecker(type) |
|||
: type |
|||
|
|||
function parse (body) { |
|||
if (body.length === 0) { |
|||
// special-case empty json body, as it's a common client-side mistake
|
|||
// TODO: maybe make this configurable or part of "strict" option
|
|||
return {} |
|||
} |
|||
|
|||
if (strict) { |
|||
var first = firstchar(body) |
|||
|
|||
if (first !== '{' && first !== '[') { |
|||
debug('strict violation') |
|||
throw createStrictSyntaxError(body, first) |
|||
} |
|||
} |
|||
|
|||
try { |
|||
debug('parse json') |
|||
return JSON.parse(body, reviver) |
|||
} catch (e) { |
|||
throw normalizeJsonSyntaxError(e, { |
|||
message: e.message, |
|||
stack: e.stack |
|||
}) |
|||
} |
|||
} |
|||
|
|||
return function jsonParser (req, res, next) { |
|||
if (req._body) { |
|||
debug('body already parsed') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
req.body = req.body || {} |
|||
|
|||
// skip requests without bodies
|
|||
if (!typeis.hasBody(req)) { |
|||
debug('skip empty body') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
debug('content-type %j', req.headers['content-type']) |
|||
|
|||
// determine if request should be parsed
|
|||
if (!shouldParse(req)) { |
|||
debug('skip parsing') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
// assert charset per RFC 7159 sec 8.1
|
|||
var charset = getCharset(req) || 'utf-8' |
|||
if (charset.substr(0, 4) !== 'utf-') { |
|||
debug('invalid charset') |
|||
next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { |
|||
charset: charset, |
|||
type: 'charset.unsupported' |
|||
})) |
|||
return |
|||
} |
|||
|
|||
// read
|
|||
read(req, res, next, parse, debug, { |
|||
encoding: charset, |
|||
inflate: inflate, |
|||
limit: limit, |
|||
verify: verify |
|||
}) |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Create strict violation syntax error matching native error. |
|||
* |
|||
* @param {string} str |
|||
* @param {string} char |
|||
* @return {Error} |
|||
* @private |
|||
*/ |
|||
|
|||
function createStrictSyntaxError (str, char) { |
|||
var index = str.indexOf(char) |
|||
var partial = str.substring(0, index) + '#' |
|||
|
|||
try { |
|||
JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') |
|||
} catch (e) { |
|||
return normalizeJsonSyntaxError(e, { |
|||
message: e.message.replace('#', char), |
|||
stack: e.stack |
|||
}) |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Get the first non-whitespace character in a string. |
|||
* |
|||
* @param {string} str |
|||
* @return {function} |
|||
* @private |
|||
*/ |
|||
|
|||
function firstchar (str) { |
|||
return FIRST_CHAR_REGEXP.exec(str)[1] |
|||
} |
|||
|
|||
/** |
|||
* Get the charset of a request. |
|||
* |
|||
* @param {object} req |
|||
* @api private |
|||
*/ |
|||
|
|||
function getCharset (req) { |
|||
try { |
|||
return (contentType.parse(req).parameters.charset || '').toLowerCase() |
|||
} catch (e) { |
|||
return undefined |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Normalize a SyntaxError for JSON.parse. |
|||
* |
|||
* @param {SyntaxError} error |
|||
* @param {object} obj |
|||
* @return {SyntaxError} |
|||
*/ |
|||
|
|||
function normalizeJsonSyntaxError (error, obj) { |
|||
var keys = Object.getOwnPropertyNames(error) |
|||
|
|||
for (var i = 0; i < keys.length; i++) { |
|||
var key = keys[i] |
|||
if (key !== 'stack' && key !== 'message') { |
|||
delete error[key] |
|||
} |
|||
} |
|||
|
|||
// replace stack before message for Node.js 0.10 and below
|
|||
error.stack = obj.stack.replace(error.message, obj.message) |
|||
error.message = obj.message |
|||
|
|||
return error |
|||
} |
|||
|
|||
/** |
|||
* Get the simple type checker. |
|||
* |
|||
* @param {string} type |
|||
* @return {function} |
|||
*/ |
|||
|
|||
function typeChecker (type) { |
|||
return function checkType (req) { |
|||
return Boolean(typeis(req, type)) |
|||
} |
|||
} |
|||
@ -0,0 +1,101 @@ |
|||
/*! |
|||
* body-parser |
|||
* Copyright(c) 2014-2015 Douglas Christopher Wilson |
|||
* MIT Licensed |
|||
*/ |
|||
|
|||
'use strict' |
|||
|
|||
/** |
|||
* Module dependencies. |
|||
*/ |
|||
|
|||
var bytes = require('bytes') |
|||
var debug = require('debug')('body-parser:raw') |
|||
var read = require('../read') |
|||
var typeis = require('type-is') |
|||
|
|||
/** |
|||
* Module exports. |
|||
*/ |
|||
|
|||
module.exports = raw |
|||
|
|||
/** |
|||
* Create a middleware to parse raw bodies. |
|||
* |
|||
* @param {object} [options] |
|||
* @return {function} |
|||
* @api public |
|||
*/ |
|||
|
|||
function raw (options) { |
|||
var opts = options || {} |
|||
|
|||
var inflate = opts.inflate !== false |
|||
var limit = typeof opts.limit !== 'number' |
|||
? bytes.parse(opts.limit || '100kb') |
|||
: opts.limit |
|||
var type = opts.type || 'application/octet-stream' |
|||
var verify = opts.verify || false |
|||
|
|||
if (verify !== false && typeof verify !== 'function') { |
|||
throw new TypeError('option verify must be function') |
|||
} |
|||
|
|||
// create the appropriate type checking function
|
|||
var shouldParse = typeof type !== 'function' |
|||
? typeChecker(type) |
|||
: type |
|||
|
|||
function parse (buf) { |
|||
return buf |
|||
} |
|||
|
|||
return function rawParser (req, res, next) { |
|||
if (req._body) { |
|||
debug('body already parsed') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
req.body = req.body || {} |
|||
|
|||
// skip requests without bodies
|
|||
if (!typeis.hasBody(req)) { |
|||
debug('skip empty body') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
debug('content-type %j', req.headers['content-type']) |
|||
|
|||
// determine if request should be parsed
|
|||
if (!shouldParse(req)) { |
|||
debug('skip parsing') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
// read
|
|||
read(req, res, next, parse, debug, { |
|||
encoding: null, |
|||
inflate: inflate, |
|||
limit: limit, |
|||
verify: verify |
|||
}) |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Get the simple type checker. |
|||
* |
|||
* @param {string} type |
|||
* @return {function} |
|||
*/ |
|||
|
|||
function typeChecker (type) { |
|||
return function checkType (req) { |
|||
return Boolean(typeis(req, type)) |
|||
} |
|||
} |
|||
@ -0,0 +1,121 @@ |
|||
/*! |
|||
* body-parser |
|||
* Copyright(c) 2014-2015 Douglas Christopher Wilson |
|||
* MIT Licensed |
|||
*/ |
|||
|
|||
'use strict' |
|||
|
|||
/** |
|||
* Module dependencies. |
|||
*/ |
|||
|
|||
var bytes = require('bytes') |
|||
var contentType = require('content-type') |
|||
var debug = require('debug')('body-parser:text') |
|||
var read = require('../read') |
|||
var typeis = require('type-is') |
|||
|
|||
/** |
|||
* Module exports. |
|||
*/ |
|||
|
|||
module.exports = text |
|||
|
|||
/** |
|||
* Create a middleware to parse text bodies. |
|||
* |
|||
* @param {object} [options] |
|||
* @return {function} |
|||
* @api public |
|||
*/ |
|||
|
|||
function text (options) { |
|||
var opts = options || {} |
|||
|
|||
var defaultCharset = opts.defaultCharset || 'utf-8' |
|||
var inflate = opts.inflate !== false |
|||
var limit = typeof opts.limit !== 'number' |
|||
? bytes.parse(opts.limit || '100kb') |
|||
: opts.limit |
|||
var type = opts.type || 'text/plain' |
|||
var verify = opts.verify || false |
|||
|
|||
if (verify !== false && typeof verify !== 'function') { |
|||
throw new TypeError('option verify must be function') |
|||
} |
|||
|
|||
// create the appropriate type checking function
|
|||
var shouldParse = typeof type !== 'function' |
|||
? typeChecker(type) |
|||
: type |
|||
|
|||
function parse (buf) { |
|||
return buf |
|||
} |
|||
|
|||
return function textParser (req, res, next) { |
|||
if (req._body) { |
|||
debug('body already parsed') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
req.body = req.body || {} |
|||
|
|||
// skip requests without bodies
|
|||
if (!typeis.hasBody(req)) { |
|||
debug('skip empty body') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
debug('content-type %j', req.headers['content-type']) |
|||
|
|||
// determine if request should be parsed
|
|||
if (!shouldParse(req)) { |
|||
debug('skip parsing') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
// get charset
|
|||
var charset = getCharset(req) || defaultCharset |
|||
|
|||
// read
|
|||
read(req, res, next, parse, debug, { |
|||
encoding: charset, |
|||
inflate: inflate, |
|||
limit: limit, |
|||
verify: verify |
|||
}) |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Get the charset of a request. |
|||
* |
|||
* @param {object} req |
|||
* @api private |
|||
*/ |
|||
|
|||
function getCharset (req) { |
|||
try { |
|||
return (contentType.parse(req).parameters.charset || '').toLowerCase() |
|||
} catch (e) { |
|||
return undefined |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Get the simple type checker. |
|||
* |
|||
* @param {string} type |
|||
* @return {function} |
|||
*/ |
|||
|
|||
function typeChecker (type) { |
|||
return function checkType (req) { |
|||
return Boolean(typeis(req, type)) |
|||
} |
|||
} |
|||
@ -0,0 +1,284 @@ |
|||
/*! |
|||
* body-parser |
|||
* Copyright(c) 2014 Jonathan Ong |
|||
* Copyright(c) 2014-2015 Douglas Christopher Wilson |
|||
* MIT Licensed |
|||
*/ |
|||
|
|||
'use strict' |
|||
|
|||
/** |
|||
* Module dependencies. |
|||
* @private |
|||
*/ |
|||
|
|||
var bytes = require('bytes') |
|||
var contentType = require('content-type') |
|||
var createError = require('http-errors') |
|||
var debug = require('debug')('body-parser:urlencoded') |
|||
var deprecate = require('depd')('body-parser') |
|||
var read = require('../read') |
|||
var typeis = require('type-is') |
|||
|
|||
/** |
|||
* Module exports. |
|||
*/ |
|||
|
|||
module.exports = urlencoded |
|||
|
|||
/** |
|||
* Cache of parser modules. |
|||
*/ |
|||
|
|||
var parsers = Object.create(null) |
|||
|
|||
/** |
|||
* Create a middleware to parse urlencoded bodies. |
|||
* |
|||
* @param {object} [options] |
|||
* @return {function} |
|||
* @public |
|||
*/ |
|||
|
|||
function urlencoded (options) { |
|||
var opts = options || {} |
|||
|
|||
// notice because option default will flip in next major
|
|||
if (opts.extended === undefined) { |
|||
deprecate('undefined extended: provide extended option') |
|||
} |
|||
|
|||
var extended = opts.extended !== false |
|||
var inflate = opts.inflate !== false |
|||
var limit = typeof opts.limit !== 'number' |
|||
? bytes.parse(opts.limit || '100kb') |
|||
: opts.limit |
|||
var type = opts.type || 'application/x-www-form-urlencoded' |
|||
var verify = opts.verify || false |
|||
|
|||
if (verify !== false && typeof verify !== 'function') { |
|||
throw new TypeError('option verify must be function') |
|||
} |
|||
|
|||
// create the appropriate query parser
|
|||
var queryparse = extended |
|||
? extendedparser(opts) |
|||
: simpleparser(opts) |
|||
|
|||
// create the appropriate type checking function
|
|||
var shouldParse = typeof type !== 'function' |
|||
? typeChecker(type) |
|||
: type |
|||
|
|||
function parse (body) { |
|||
return body.length |
|||
? queryparse(body) |
|||
: {} |
|||
} |
|||
|
|||
return function urlencodedParser (req, res, next) { |
|||
if (req._body) { |
|||
debug('body already parsed') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
req.body = req.body || {} |
|||
|
|||
// skip requests without bodies
|
|||
if (!typeis.hasBody(req)) { |
|||
debug('skip empty body') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
debug('content-type %j', req.headers['content-type']) |
|||
|
|||
// determine if request should be parsed
|
|||
if (!shouldParse(req)) { |
|||
debug('skip parsing') |
|||
next() |
|||
return |
|||
} |
|||
|
|||
// assert charset
|
|||
var charset = getCharset(req) || 'utf-8' |
|||
if (charset !== 'utf-8') { |
|||
debug('invalid charset') |
|||
next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { |
|||
charset: charset, |
|||
type: 'charset.unsupported' |
|||
})) |
|||
return |
|||
} |
|||
|
|||
// read
|
|||
read(req, res, next, parse, debug, { |
|||
debug: debug, |
|||
encoding: charset, |
|||
inflate: inflate, |
|||
limit: limit, |
|||
verify: verify |
|||
}) |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Get the extended query parser. |
|||
* |
|||
* @param {object} options |
|||
*/ |
|||
|
|||
function extendedparser (options) { |
|||
var parameterLimit = options.parameterLimit !== undefined |
|||
? options.parameterLimit |
|||
: 1000 |
|||
var parse = parser('qs') |
|||
|
|||
if (isNaN(parameterLimit) || parameterLimit < 1) { |
|||
throw new TypeError('option parameterLimit must be a positive number') |
|||
} |
|||
|
|||
if (isFinite(parameterLimit)) { |
|||
parameterLimit = parameterLimit | 0 |
|||
} |
|||
|
|||
return function queryparse (body) { |
|||
var paramCount = parameterCount(body, parameterLimit) |
|||
|
|||
if (paramCount === undefined) { |
|||
debug('too many parameters') |
|||
throw createError(413, 'too many parameters', { |
|||
type: 'parameters.too.many' |
|||
}) |
|||
} |
|||
|
|||
var arrayLimit = Math.max(100, paramCount) |
|||
|
|||
debug('parse extended urlencoding') |
|||
return parse(body, { |
|||
allowPrototypes: true, |
|||
arrayLimit: arrayLimit, |
|||
depth: Infinity, |
|||
parameterLimit: parameterLimit |
|||
}) |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Get the charset of a request. |
|||
* |
|||
* @param {object} req |
|||
* @api private |
|||
*/ |
|||
|
|||
function getCharset (req) { |
|||
try { |
|||
return (contentType.parse(req).parameters.charset || '').toLowerCase() |
|||
} catch (e) { |
|||
return undefined |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Count the number of parameters, stopping once limit reached |
|||
* |
|||
* @param {string} body |
|||
* @param {number} limit |
|||
* @api private |
|||
*/ |
|||
|
|||
function parameterCount (body, limit) { |
|||
var count = 0 |
|||
var index = 0 |
|||
|
|||
while ((index = body.indexOf('&', index)) !== -1) { |
|||
count++ |
|||
index++ |
|||
|
|||
if (count === limit) { |
|||
return undefined |
|||
} |
|||
} |
|||
|
|||
return count |
|||
} |
|||
|
|||
/** |
|||
* Get parser for module name dynamically. |
|||
* |
|||
* @param {string} name |
|||
* @return {function} |
|||
* @api private |
|||
*/ |
|||
|
|||
function parser (name) { |
|||
var mod = parsers[name] |
|||
|
|||
if (mod !== undefined) { |
|||
return mod.parse |
|||
} |
|||
|
|||
// this uses a switch for static require analysis
|
|||
switch (name) { |
|||
case 'qs': |
|||
mod = require('qs') |
|||
break |
|||
case 'querystring': |
|||
mod = require('querystring') |
|||
break |
|||
} |
|||
|
|||
// store to prevent invoking require()
|
|||
parsers[name] = mod |
|||
|
|||
return mod.parse |
|||
} |
|||
|
|||
/** |
|||
* Get the simple query parser. |
|||
* |
|||
* @param {object} options |
|||
*/ |
|||
|
|||
function simpleparser (options) { |
|||
var parameterLimit = options.parameterLimit !== undefined |
|||
? options.parameterLimit |
|||
: 1000 |
|||
var parse = parser('querystring') |
|||
|
|||
if (isNaN(parameterLimit) || parameterLimit < 1) { |
|||
throw new TypeError('option parameterLimit must be a positive number') |
|||
} |
|||
|
|||
if (isFinite(parameterLimit)) { |
|||
parameterLimit = parameterLimit | 0 |
|||
} |
|||
|
|||
return function queryparse (body) { |
|||
var paramCount = parameterCount(body, parameterLimit) |
|||
|
|||
if (paramCount === undefined) { |
|||
debug('too many parameters') |
|||
throw createError(413, 'too many parameters', { |
|||
type: 'parameters.too.many' |
|||
}) |
|||
} |
|||
|
|||
debug('parse urlencoding') |
|||
return parse(body, undefined, undefined, { maxKeys: parameterLimit }) |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Get the simple type checker. |
|||
* |
|||
* @param {string} type |
|||
* @return {function} |
|||
*/ |
|||
|
|||
function typeChecker (type) { |
|||
return function checkType (req) { |
|||
return Boolean(typeis(req, type)) |
|||
} |
|||
} |
|||
@ -0,0 +1,93 @@ |
|||
{ |
|||
"_from": "body-parser", |
|||
"_id": "body-parser@1.19.2", |
|||
"_inBundle": false, |
|||
"_integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", |
|||
"_location": "/body-parser", |
|||
"_phantomChildren": {}, |
|||
"_requested": { |
|||
"type": "tag", |
|||
"registry": true, |
|||
"raw": "body-parser", |
|||
"name": "body-parser", |
|||
"escapedName": "body-parser", |
|||
"rawSpec": "", |
|||
"saveSpec": null, |
|||
"fetchSpec": "latest" |
|||
}, |
|||
"_requiredBy": [ |
|||
"#USER", |
|||
"/", |
|||
"/express" |
|||
], |
|||
"_resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", |
|||
"_shasum": "4714ccd9c157d44797b8b5607d72c0b89952f26e", |
|||
"_spec": "body-parser", |
|||
"_where": "/Users/satish.ganga/Desktop/EKAM/ekamv5/ahc", |
|||
"bugs": { |
|||
"url": "https://github.com/expressjs/body-parser/issues" |
|||
}, |
|||
"bundleDependencies": false, |
|||
"contributors": [ |
|||
{ |
|||
"name": "Douglas Christopher Wilson", |
|||
"email": "doug@somethingdoug.com" |
|||
}, |
|||
{ |
|||
"name": "Jonathan Ong", |
|||
"email": "me@jongleberry.com", |
|||
"url": "http://jongleberry.com" |
|||
} |
|||
], |
|||
"dependencies": { |
|||
"bytes": "3.1.2", |
|||
"content-type": "~1.0.4", |
|||
"debug": "2.6.9", |
|||
"depd": "~1.1.2", |
|||
"http-errors": "1.8.1", |
|||
"iconv-lite": "0.4.24", |
|||
"on-finished": "~2.3.0", |
|||
"qs": "6.9.7", |
|||
"raw-body": "2.4.3", |
|||
"type-is": "~1.6.18" |
|||
}, |
|||
"deprecated": false, |
|||
"description": "Node.js body parsing middleware", |
|||
"devDependencies": { |
|||
"eslint": "7.32.0", |
|||
"eslint-config-standard": "14.1.1", |
|||
"eslint-plugin-import": "2.25.4", |
|||
"eslint-plugin-markdown": "2.2.1", |
|||
"eslint-plugin-node": "11.1.0", |
|||
"eslint-plugin-promise": "5.2.0", |
|||
"eslint-plugin-standard": "4.1.0", |
|||
"methods": "1.1.2", |
|||
"mocha": "9.2.0", |
|||
"nyc": "15.1.0", |
|||
"safe-buffer": "5.2.1", |
|||
"supertest": "6.2.2" |
|||
}, |
|||
"engines": { |
|||
"node": ">= 0.8" |
|||
}, |
|||
"files": [ |
|||
"lib/", |
|||
"LICENSE", |
|||
"HISTORY.md", |
|||
"index.js" |
|||
], |
|||
"homepage": "https://github.com/expressjs/body-parser#readme", |
|||
"license": "MIT", |
|||
"name": "body-parser", |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "git+https://github.com/expressjs/body-parser.git" |
|||
}, |
|||
"scripts": { |
|||
"lint": "eslint .", |
|||
"test": "mocha --require test/support/env --reporter spec --check-leaks --bail test/", |
|||
"test-ci": "nyc --reporter=lcov --reporter=text npm test", |
|||
"test-cov": "nyc --reporter=html --reporter=text npm test" |
|||
}, |
|||
"version": "1.19.2" |
|||
} |
|||
Some files were not shown because too many files changed in this diff
Write
Preview
Loading…
Cancel
Save
Reference in new issue