mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00

Implementing the inspector session object as an async resource causes unwanted context change when a breakpoint callback function is being called. Modelling the inspector api without the AsyncWrap base class ensures that the callback has access to the AsyncLocalStorage instance that is active in the affected user function. See `test-inspector-async-context-brk.js` for an illustration of the use case. PR-URL: https://github.com/nodejs/node/pull/51501 Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
131 lines
3.5 KiB
TypeScript
131 lines
3.5 KiB
TypeScript
import { owner_symbol } from './symbols';
|
|
|
|
declare namespace InternalAsyncWrapBinding {
|
|
interface Resource {
|
|
[owner_symbol]?: PublicResource;
|
|
}
|
|
type PublicResource = object;
|
|
|
|
type EmitHook = (asyncId: number) => void;
|
|
|
|
type PromiseHook = (promise: Promise<unknown>, parent: Promise<unknown>) => void;
|
|
|
|
interface Providers {
|
|
NONE: 0;
|
|
DIRHANDLE: 1;
|
|
DNSCHANNEL: 2;
|
|
ELDHISTOGRAM: 3;
|
|
FILEHANDLE: 4;
|
|
FILEHANDLECLOSEREQ: 5;
|
|
FIXEDSIZEBLOBCOPY: 6;
|
|
FSEVENTWRAP: 7;
|
|
FSREQCALLBACK: 8;
|
|
FSREQPROMISE: 9;
|
|
GETADDRINFOREQWRAP: 10;
|
|
GETNAMEINFOREQWRAP: 11;
|
|
HEAPSNAPSHOT: 12;
|
|
HTTP2SESSION: 13;
|
|
HTTP2STREAM: 14;
|
|
HTTP2PING: 15;
|
|
HTTP2SETTINGS: 16;
|
|
HTTPINCOMINGMESSAGE: 17;
|
|
HTTPCLIENTREQUEST: 18;
|
|
JSSTREAM: 19;
|
|
JSUDPWRAP: 20;
|
|
MESSAGEPORT: 21;
|
|
PIPECONNECTWRAP: 22;
|
|
PIPESERVERWRAP: 23;
|
|
PIPEWRAP: 24;
|
|
PROCESSWRAP: 25;
|
|
PROMISE: 26;
|
|
QUERYWRAP: 27;
|
|
SHUTDOWNWRAP: 28;
|
|
SIGNALWRAP: 29;
|
|
STATWATCHER: 30;
|
|
STREAMPIPE: 31;
|
|
TCPCONNECTWRAP: 32;
|
|
TCPSERVERWRAP: 33;
|
|
TCPWRAP: 34;
|
|
TTYWRAP: 35;
|
|
UDPSENDWRAP: 36;
|
|
UDPWRAP: 37;
|
|
SIGINTWATCHDOG: 38;
|
|
WORKER: 39;
|
|
WORKERHEAPSNAPSHOT: 40;
|
|
WRITEWRAP: 41;
|
|
ZLIB: 42;
|
|
CHECKPRIMEREQUEST: 43;
|
|
PBKDF2REQUEST: 44;
|
|
KEYPAIRGENREQUEST: 45;
|
|
KEYGENREQUEST: 46;
|
|
KEYEXPORTREQUEST: 47;
|
|
CIPHERREQUEST: 48;
|
|
DERIVEBITSREQUEST: 49;
|
|
HASHREQUEST: 50;
|
|
RANDOMBYTESREQUEST: 51;
|
|
RANDOMPRIMEREQUEST: 52;
|
|
SCRYPTREQUEST: 53;
|
|
SIGNREQUEST: 54;
|
|
TLSWRAP: 55;
|
|
VERIFYREQUEST: 56;
|
|
}
|
|
}
|
|
|
|
export interface AsyncWrapBinding {
|
|
setupHooks(): {
|
|
init: (
|
|
asyncId: number,
|
|
type: keyof InternalAsyncWrapBinding.Providers,
|
|
triggerAsyncId: number,
|
|
resource: InternalAsyncWrapBinding.Resource,
|
|
) => void;
|
|
before: InternalAsyncWrapBinding.EmitHook;
|
|
after: InternalAsyncWrapBinding.EmitHook;
|
|
destroy: InternalAsyncWrapBinding.EmitHook;
|
|
promise_resolve: InternalAsyncWrapBinding.EmitHook;
|
|
};
|
|
setCallbackTrampoline(
|
|
callback: (
|
|
asyncId: number,
|
|
resource: InternalAsyncWrapBinding.Resource,
|
|
cb: (
|
|
cb: (...args: any[]) => boolean | undefined,
|
|
...args: any[]
|
|
) => boolean | undefined,
|
|
...args: any[]
|
|
) => boolean | undefined
|
|
): void;
|
|
pushAsyncContext(asyncId: number, triggerAsyncId: number): void;
|
|
popAsyncContext(asyncId: number): boolean;
|
|
executionAsyncResource(index: number): InternalAsyncWrapBinding.PublicResource | null;
|
|
clearAsyncIdStack(): void;
|
|
queueDestroyAsyncId(asyncId: number): void;
|
|
setPromiseHooks(
|
|
initHook: ((promise: Promise<unknown>, parent?: Promise<unknown>) => void) | undefined,
|
|
promiseBeforeHook: InternalAsyncWrapBinding.PromiseHook | undefined,
|
|
promiseAfterHook: InternalAsyncWrapBinding.PromiseHook | undefined,
|
|
promiseResolveHook: InternalAsyncWrapBinding.PromiseHook | undefined
|
|
): void;
|
|
registerDestroyHook(resource: object, asyncId: number, destroyed?: { destroyed: boolean }): void;
|
|
async_hook_fields: Uint32Array;
|
|
async_id_fields: Float64Array;
|
|
async_ids_stack: Float64Array;
|
|
execution_async_resources: InternalAsyncWrapBinding.Resource[];
|
|
constants: {
|
|
kInit: 0;
|
|
kBefore: 1;
|
|
kAfter: 2;
|
|
kDestroy: 3;
|
|
kPromiseResolve: 4;
|
|
kTotals: 5;
|
|
kCheck: 6;
|
|
kStackLength: 7;
|
|
kUsesExecutionAsyncResource: 8;
|
|
|
|
kExecutionAsyncId: 0;
|
|
kTriggerAsyncId: 1;
|
|
kAsyncIdCounter: 2;
|
|
kDefaultTriggerAsyncId: 3;
|
|
};
|
|
Providers: InternalAsyncWrapBinding.Providers;
|
|
}
|