mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
Add types for readline, tls, net (#1817)
* Add readline, tls, net types * Remove unimplemented methods Co-authored-by: Colin McDonnell <colinmcd@alum.mit.edu>
This commit is contained in:
@@ -1,6 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
[test]
|
[test]
|
||||||
# Large monorepos (like Bun) may want to specify the test directory more specifically
|
# Large monorepos (like Bun) may want to specify the test directory more specifically
|
||||||
# By default, `bun wiptest` scans every single folder recurisvely which, if you
|
# By default, `bun wiptest` scans every single folder recurisvely which, if you
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
Can reference images included here in code comments, ex
|
|
||||||
|
|
||||||
```ts
|
|
||||||
/**
|
|
||||||
* ## Large headline
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* **Images** are relative to images/ directory
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
export class MyUtil<T = { BOT_TOKEN: string }> {
|
|
||||||
constructor(public config: T) {}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
49
packages/bun-types/index.d.ts
vendored
49
packages/bun-types/index.d.ts
vendored
@@ -5,32 +5,39 @@
|
|||||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||||
/// <reference no-default-lib="true" />
|
/// <reference no-default-lib="true" />
|
||||||
/// <reference lib="esnext" />
|
/// <reference lib="esnext" />
|
||||||
/// <reference path="./bun.d.ts" />
|
/// <reference path="./assert.d.ts" />
|
||||||
/// <reference path="./buffer.d.ts" />
|
/// <reference path="./buffer.d.ts" />
|
||||||
/// <reference path="./sqlite.d.ts" />
|
/// <reference path="./bun-test.d.ts" />
|
||||||
|
/// <reference path="./bun.d.ts" />
|
||||||
|
/// <reference path="./child_process.d.ts" />
|
||||||
|
/// <reference path="./constants.d.ts" />
|
||||||
|
/// <reference path="./crypto.d.ts" />
|
||||||
|
/// <reference path="./dns.d.ts" />
|
||||||
|
/// <reference path="./dns/promises.d.ts" />
|
||||||
|
/// <reference path="./domain.d.ts" />
|
||||||
|
/// <reference path="./events.d.ts" />
|
||||||
/// <reference path="./ffi.d.ts" />
|
/// <reference path="./ffi.d.ts" />
|
||||||
/// <reference path="./fs.d.ts" />
|
/// <reference path="./fs.d.ts" />
|
||||||
/// <reference path="./fs/promises.d.ts" />
|
/// <reference path="./fs/promises.d.ts" />
|
||||||
/// <reference path="./html-rewriter.d.ts" />
|
|
||||||
/// <reference path="./globals.d.ts" />
|
/// <reference path="./globals.d.ts" />
|
||||||
/// <reference path="./path.d.ts" />
|
/// <reference path="./html-rewriter.d.ts" />
|
||||||
/// <reference path="./bun-test.d.ts" />
|
|
||||||
/// <reference path="./jsc.d.ts" />
|
|
||||||
/// <reference path="./assert.d.ts" />
|
|
||||||
/// <reference path="./events.d.ts" />
|
|
||||||
/// <reference path="./os.d.ts" />
|
|
||||||
/// <reference path="./domain.d.ts" />
|
|
||||||
/// <reference path="./util.d.ts" />
|
|
||||||
/// <reference path="./querystring.d.ts" />
|
|
||||||
/// <reference path="./string_decoder.d.ts" />
|
|
||||||
/// <reference path="./timers.d.ts" />
|
|
||||||
/// <reference path="./stream.d.ts" />
|
|
||||||
/// <reference path="./crypto.d.ts" />
|
|
||||||
/// <reference path="./child_process.d.ts" />
|
|
||||||
/// <reference path="./constants.d.ts" />
|
|
||||||
/// <reference path="./url.d.ts" />
|
|
||||||
/// <reference path="./tty.d.ts" />
|
|
||||||
/// <reference path="./http.d.ts" />
|
/// <reference path="./http.d.ts" />
|
||||||
|
/// <reference path="./jsc.d.ts" />
|
||||||
|
/// <reference path="./module.d.ts" />
|
||||||
|
/// <reference path="./net.d.ts" />
|
||||||
|
/// <reference path="./os.d.ts" />
|
||||||
|
/// <reference path="./path.d.ts" />
|
||||||
/// <reference path="./punycode.d.ts" />
|
/// <reference path="./punycode.d.ts" />
|
||||||
/// <reference path="./zlib.d.ts" />
|
/// <reference path="./querystring.d.ts" />
|
||||||
|
/// <reference path="./readline.d.ts" />
|
||||||
|
/// <reference path="./readline/promises.d.ts" />
|
||||||
|
/// <reference path="./sqlite.d.ts" />
|
||||||
|
/// <reference path="./stream.d.ts" />
|
||||||
|
/// <reference path="./string_decoder.d.ts" />
|
||||||
/// <reference path="./supports-color.d.ts" />
|
/// <reference path="./supports-color.d.ts" />
|
||||||
|
/// <reference path="./timers.d.ts" />
|
||||||
|
/// <reference path="./tls.d.ts" />
|
||||||
|
/// <reference path="./tty.d.ts" />
|
||||||
|
/// <reference path="./url.d.ts" />
|
||||||
|
/// <reference path="./util.d.ts" />
|
||||||
|
/// <reference path="./zlib.d.ts" />
|
||||||
|
|||||||
20
packages/bun-types/net.d.ts
vendored
20
packages/bun-types/net.d.ts
vendored
@@ -18,16 +18,16 @@ declare module "net" {
|
|||||||
Abortable,
|
Abortable,
|
||||||
// EventEmitter
|
// EventEmitter
|
||||||
} from "node:events";
|
} from "node:events";
|
||||||
// import * as dns from "node:dns";
|
import * as dns from "node:dns";
|
||||||
// type LookupFunction = (
|
type LookupFunction = (
|
||||||
// hostname: string,
|
hostname: string,
|
||||||
// options: dns.LookupOneOptions,
|
options: dns.LookupOneOptions,
|
||||||
// callback: (
|
callback: (
|
||||||
// err: NodeJS.ErrnoException | null,
|
err: ErrnoException | null,
|
||||||
// address: string,
|
address: string,
|
||||||
// family: number,
|
family: number,
|
||||||
// ) => void,
|
) => void,
|
||||||
// ) => void;
|
) => void;
|
||||||
interface AddressInfo {
|
interface AddressInfo {
|
||||||
address: string;
|
address: string;
|
||||||
family: string;
|
family: string;
|
||||||
|
|||||||
699
packages/bun-types/readline.d.ts
vendored
Normal file
699
packages/bun-types/readline.d.ts
vendored
Normal file
@@ -0,0 +1,699 @@
|
|||||||
|
/**
|
||||||
|
* 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 'node: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/v18.0.0/lib/readline.js)
|
||||||
|
*/
|
||||||
|
declare module "readline" {
|
||||||
|
import { Abortable, EventEmitter } from "node:events";
|
||||||
|
import * as promises from "node:readline/promises";
|
||||||
|
|
||||||
|
export { promises };
|
||||||
|
export 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
|
||||||
|
*/
|
||||||
|
export 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: ReadableStream,
|
||||||
|
output?: 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>;
|
||||||
|
}
|
||||||
|
export type ReadLine = Interface; // type forwarded for backwards compatibility
|
||||||
|
export type Completer = (line: string) => CompleterResult;
|
||||||
|
export type AsyncCompleter = (
|
||||||
|
line: string,
|
||||||
|
callback: (err?: null | Error, result?: CompleterResult) => void,
|
||||||
|
) => void;
|
||||||
|
export type CompleterResult = [string[], string];
|
||||||
|
export interface ReadLineOptions {
|
||||||
|
input: ReadableStream;
|
||||||
|
output?: 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
|
||||||
|
*/
|
||||||
|
export function createInterface(
|
||||||
|
input: ReadableStream,
|
||||||
|
output?: WritableStream,
|
||||||
|
completer?: Completer | AsyncCompleter,
|
||||||
|
terminal?: boolean,
|
||||||
|
): Interface;
|
||||||
|
export 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
|
||||||
|
*/
|
||||||
|
export function emitKeypressEvents(
|
||||||
|
stream: ReadableStream,
|
||||||
|
readlineInterface?: Interface,
|
||||||
|
): void;
|
||||||
|
export type Direction = -1 | 0 | 1;
|
||||||
|
export 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`.
|
||||||
|
*/
|
||||||
|
export function clearLine(
|
||||||
|
stream: 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`.
|
||||||
|
*/
|
||||||
|
export function clearScreenDown(
|
||||||
|
stream: 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`.
|
||||||
|
*/
|
||||||
|
export function cursorTo(
|
||||||
|
stream: 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`.
|
||||||
|
*/
|
||||||
|
export function moveCursor(
|
||||||
|
stream: WritableStream,
|
||||||
|
dx: number,
|
||||||
|
dy: number,
|
||||||
|
callback?: () => void,
|
||||||
|
): boolean;
|
||||||
|
}
|
||||||
|
declare module "node:readline" {
|
||||||
|
export * from "readline";
|
||||||
|
}
|
||||||
149
packages/bun-types/readline/promises.d.ts
vendored
Normal file
149
packages/bun-types/readline/promises.d.ts
vendored
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
/**
|
||||||
|
* The `readline/promise` module provides an API for reading lines of input from a Readable stream one line at a time.
|
||||||
|
*
|
||||||
|
* @see [source](https://github.com/nodejs/node/blob/v18.0.0/lib/readline/promises.js)
|
||||||
|
* @since v17.0.0
|
||||||
|
*/
|
||||||
|
declare module "readline/promises" {
|
||||||
|
import {
|
||||||
|
Interface as _Interface,
|
||||||
|
ReadLineOptions,
|
||||||
|
Completer,
|
||||||
|
AsyncCompleter,
|
||||||
|
Direction,
|
||||||
|
} from "node:readline";
|
||||||
|
import { Abortable } from "node:events";
|
||||||
|
|
||||||
|
class Interface extends _Interface {
|
||||||
|
/**
|
||||||
|
* 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 readlinePromises.Interface was created with output set to null or undefined the query is not written.
|
||||||
|
*
|
||||||
|
* If the question is called after rl.close(), it returns a rejected promise.
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* const answer = await rl.question('What is your favorite food? ');
|
||||||
|
* console.log(`Oh, so your favorite food is ${answer}`);
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Using an AbortSignal to cancel a question.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* const signal = AbortSignal.timeout(10_000);
|
||||||
|
*
|
||||||
|
* signal.addEventListener('abort', () => {
|
||||||
|
* console.log('The food question timed out');
|
||||||
|
* }, { once: true });
|
||||||
|
*
|
||||||
|
* const answer = await rl.question('What is your favorite food? ', { signal });
|
||||||
|
* console.log(`Oh, so your favorite food is ${answer}`);
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @since v17.0.0
|
||||||
|
* @param query A statement or query to write to output, prepended to the prompt.
|
||||||
|
*/
|
||||||
|
question(query: string): Promise<string>;
|
||||||
|
question(query: string, options: Abortable): Promise<string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Readline {
|
||||||
|
/**
|
||||||
|
* @param stream A TTY stream.
|
||||||
|
*/
|
||||||
|
constructor(stream: WritableStream, options?: { autoCommit?: boolean });
|
||||||
|
/**
|
||||||
|
* The `rl.clearLine()` method adds to the internal list of pending action an action that clears current line of the associated `stream` in a specified direction identified by `dir`.
|
||||||
|
* Call `rl.commit()` to see the effect of this method, unless `autoCommit: true` was passed to the constructor.
|
||||||
|
*/
|
||||||
|
clearLine(dir: Direction): this;
|
||||||
|
/**
|
||||||
|
* The `rl.clearScreenDown()` method adds to the internal list of pending action an action that clears the associated `stream` from the current position of the cursor down.
|
||||||
|
* Call `rl.commit()` to see the effect of this method, unless `autoCommit: true` was passed to the constructor.
|
||||||
|
*/
|
||||||
|
clearScreenDown(): this;
|
||||||
|
/**
|
||||||
|
* The `rl.commit()` method sends all the pending actions to the associated `stream` and clears the internal list of pending actions.
|
||||||
|
*/
|
||||||
|
commit(): Promise<void>;
|
||||||
|
/**
|
||||||
|
* The `rl.cursorTo()` method adds to the internal list of pending action an action that moves cursor to the specified position in the associated `stream`.
|
||||||
|
* Call `rl.commit()` to see the effect of this method, unless `autoCommit: true` was passed to the constructor.
|
||||||
|
*/
|
||||||
|
cursorTo(x: number, y?: number): this;
|
||||||
|
/**
|
||||||
|
* The `rl.moveCursor()` method adds to the internal list of pending action an action that moves the cursor relative to its current position in the associated `stream`.
|
||||||
|
* Call `rl.commit()` to see the effect of this method, unless autoCommit: true was passed to the constructor.
|
||||||
|
*/
|
||||||
|
moveCursor(dx: number, dy: number): this;
|
||||||
|
/**
|
||||||
|
* The `rl.rollback()` method clears the internal list of pending actions without sending it to the associated `stream`.
|
||||||
|
*/
|
||||||
|
rollback(): this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `readlinePromises.createInterface()` method creates a new `readlinePromises.Interface` instance.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* const readlinePromises = require('node:readline/promises');
|
||||||
|
* const rl = readlinePromises.createInterface({
|
||||||
|
* input: process.stdin,
|
||||||
|
* output: process.stdout
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Once the `readlinePromises.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).
|
||||||
|
*
|
||||||
|
* ## Use of the `completer` function
|
||||||
|
*
|
||||||
|
* The `completer` function takes the current line entered by the user as an argument, and returns an `Array` with 2 entries:
|
||||||
|
*
|
||||||
|
* - An Array with matching entries for the completion.
|
||||||
|
* - The substring that was used for the matching.
|
||||||
|
*
|
||||||
|
* For instance: `[[substr1, substr2, ...], originalsubstring]`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* function completer(line) {
|
||||||
|
* const completions = '.help .error .exit .quit .q'.split(' ');
|
||||||
|
* const hits = completions.filter((c) => c.startsWith(line));
|
||||||
|
* // Show all completions if none found
|
||||||
|
* return [hits.length ? hits : completions, line];
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* The `completer` function can also returns a `Promise`, or be asynchronous:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* async function completer(linePartial) {
|
||||||
|
* await someAsyncWork();
|
||||||
|
* return [['123'], linePartial];
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
function createInterface(
|
||||||
|
input: ReadableStream,
|
||||||
|
output?: WritableStream,
|
||||||
|
completer?: Completer | AsyncCompleter,
|
||||||
|
terminal?: boolean,
|
||||||
|
): Interface;
|
||||||
|
function createInterface(options: ReadLineOptions): Interface;
|
||||||
|
}
|
||||||
|
declare module "node:readline/promises" {
|
||||||
|
export * from "readline/promises";
|
||||||
|
}
|
||||||
11
packages/bun-types/tests/net.test-d.ts
Normal file
11
packages/bun-types/tests/net.test-d.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import * as net from "node:net";
|
||||||
|
|
||||||
|
const socket = net.connect({
|
||||||
|
port: 80,
|
||||||
|
host: "localhost",
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.connect({
|
||||||
|
port: 80,
|
||||||
|
host: "localhost",
|
||||||
|
});
|
||||||
6
packages/bun-types/tests/tls.test-d.ts
Normal file
6
packages/bun-types/tests/tls.test-d.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import tls from "node:tls";
|
||||||
|
|
||||||
|
tls.connect({
|
||||||
|
host: "localhost",
|
||||||
|
port: 80,
|
||||||
|
});
|
||||||
1261
packages/bun-types/tls.d.ts
vendored
Normal file
1261
packages/bun-types/tls.d.ts
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user