mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-06 01:49:14 +08:00
396 lines
16 KiB
Text
Executable file
396 lines
16 KiB
Text
Executable file
/**
|
||
* 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/v18.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.
|
||
*
|
||
* Creating a heap snapshot requires memory about twice the size of the heap at
|
||
* the time the snapshot is created. This results in the risk of OOM killers
|
||
* terminating the process.
|
||
*
|
||
* Generating a snapshot is a synchronous operation which blocks the event loop
|
||
* for a duration depending on the heap size.
|
||
*
|
||
* ```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.
|
||
*
|
||
* Creating a heap snapshot requires memory about twice the size of the heap at
|
||
* the time the snapshot is created. This results in the risk of OOM killers
|
||
* terminating the process.
|
||
*
|
||
* Generating a snapshot is a synchronous operation which blocks the event loop
|
||
* for a duration depending on the heap size.
|
||
*
|
||
* ```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.
|
||
*
|
||
* `ERR_BUFFER_TOO_LARGE` will be thrown when trying to
|
||
* serialize a huge object which requires buffer
|
||
* larger than `buffer.constants.MAX_LENGTH`.
|
||
* @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';
|
||
}
|