declare namespace emnapi { export class CallbackInfo { id: number; parent: CallbackInfo; child: CallbackInfo | null; thiz: any; data: void_p; args: ArrayLike; fn: Function; constructor(id: number, parent: CallbackInfo, child: CallbackInfo | null, thiz: any, data: void_p, args: ArrayLike, fn: Function); getNewTarget(envObject: Env): number; dispose(): void; } export class CallbackInfoStack { current: CallbackInfo; get(id: number): CallbackInfo | null; pop(): void; push(thiz: any, data: void_p, args: ArrayLike, fn: Function): number; dispose(): void; } export type CleanupHookCallbackFunction = number | ((arg: number) => void); export class ConstHandle extends Handle { constructor(id: number, value: S); dispose(): void; } export class Context { private _isStopping; private _canCallIntoJs; envStore: Store; scopeStore: ScopeStore; refStore: Store; deferredStore: Store>; handleStore: HandleStore; cbinfoStack: CallbackInfoStack; private readonly refCounter?; private readonly cleanupQueue; feature: { supportReflect: boolean; supportFinalizer: boolean; supportWeakSymbol: boolean; supportBigInt: boolean; supportNewFunction: boolean; canSetFunctionName: boolean; setImmediate: (callback: () => void) => void; Buffer: BufferCtor | undefined; MessageChannel: { new (): MessageChannel; prototype: MessageChannel; } | undefined; }; constructor(); getRuntimeVersions(): { version: string; NODE_API_SUPPORTED_VERSION_MAX: Version; NAPI_VERSION_EXPERIMENTAL: Version; NODE_API_DEFAULT_MODULE_API_VERSION: Version; }; createNotSupportWeakRefError(api: string, message: string): NotSupportWeakRefError; createNotSupportBufferError(api: string, message: string): NotSupportBufferError; createReference(envObject: Env, handle_id: napi_value, initialRefcount: uint32_t, ownership: 0 | 1, finalize_callback?: napi_finalize, finalize_data?: void_p, finalize_hint?: void_p): Reference; createDeferred(value: IDeferrdValue): Deferred; createEnv(filename: string, moduleApiVersion: number, makeDynCall_vppp: (cb: Ptr) => (a: Ptr, b: Ptr, c: Ptr) => void, makeDynCall_vp: (cb: Ptr) => (a: Ptr) => void, abort: (msg?: string) => never, nodeBinding?: any): Env; createTrackedFinalizer(envObject: Env, finalize_callback: napi_finalize, finalize_data: void_p, finalize_hint: void_p): TrackedFinalizer; getCurrentScope(): HandleScope | null; addToCurrentScope(value: V): Handle; openScope(envObject: Env): HandleScope; closeScope(envObject: Env, _scope?: HandleScope): void; ensureHandle(value: S): Handle; addCleanupHook(envObject: Env, fn: CleanupHookCallbackFunction, arg: number): void; removeCleanupHook(envObject: Env, fn: CleanupHookCallbackFunction, arg: number): void; runCleanup(): void; increaseWaitingRequestCounter(): void; decreaseWaitingRequestCounter(): void; setCanCallIntoJs(value: boolean): void; setStopping(value: boolean): void; canCallIntoJs(): boolean; destroy(): void; } export function createContext(): Context; export class Deferred implements IStoreValue { static create(ctx: Context, value: IDeferrdValue): Deferred; id: number; ctx: Context; value: IDeferrdValue; constructor(ctx: Context, value: IDeferrdValue); resolve(value: T): void; reject(reason?: any): void; dispose(): void; } export class EmnapiError extends Error { constructor(message?: string); } export class Env implements IStoreValue { readonly ctx: Context; moduleApiVersion: number; makeDynCall_vppp: (cb: Ptr) => (a: Ptr, b: Ptr, c: Ptr) => void; makeDynCall_vp: (cb: Ptr) => (a: Ptr) => void; abort: (msg?: string) => never; id: number; openHandleScopes: number; instanceData: RefBase | null; tryCatch: TryCatch; refs: number; reflist: RefTracker; finalizing_reflist: RefTracker; pendingFinalizers: RefTracker[]; lastError: { errorCode: napi_status; engineErrorCode: number; engineReserved: Ptr; }; inGcFinalizer: boolean; constructor(ctx: Context, moduleApiVersion: number, makeDynCall_vppp: (cb: Ptr) => (a: Ptr, b: Ptr, c: Ptr) => void, makeDynCall_vp: (cb: Ptr) => (a: Ptr) => void, abort: (msg?: string) => never); /** @virtual */ canCallIntoJs(): boolean; terminatedOrTerminating(): boolean; ref(): void; unref(): void; ensureHandle(value: S): Handle; ensureHandleId(value: any): napi_value; clearLastError(): napi_status; setLastError(error_code: napi_status, engine_error_code?: uint32_t, engine_reserved?: void_p): napi_status; getReturnStatus(): napi_status; callIntoModule(fn: (env: Env) => T, handleException?: (envObject: Env, value: any) => void): T; /** @virtual */ callFinalizer(cb: napi_finalize, data: void_p, hint: void_p): void; invokeFinalizerFromGC(finalizer: RefTracker): void; checkGCAccess(): void; /** @virtual */ enqueueFinalizer(finalizer: RefTracker): void; /** @virtual */ dequeueFinalizer(finalizer: RefTracker): void; /** @virtual */ deleteMe(): void; dispose(): void; private readonly _bindingMap; initObjectBinding(value: S): IReferenceBinding; getObjectBinding(value: S): IReferenceBinding; setInstanceData(data: number, finalize_cb: number, finalize_hint: number): void; getInstanceData(): number; } export class Finalizer { envObject: Env; protected _finalizeCallback: napi_finalize; protected _finalizeData: void_p; protected _finalizeHint: void_p; constructor(envObject: Env, _finalizeCallback?: napi_finalize, _finalizeData?: void_p, _finalizeHint?: void_p); callback(): napi_finalize; data(): void_p; hint(): void_p; resetFinalizer(): void; dispose(): void; } export function getDefaultContext(): Context; export class Handle { id: number; value: S; constructor(id: number, value: S); data(envObject: Env): void_p; isNumber(): boolean; isBigInt(): boolean; isString(): boolean; isFunction(): boolean; isExternal(): boolean; isObject(): boolean; isArray(): boolean; isArrayBuffer(): boolean; isTypedArray(): boolean; isBuffer(): boolean; isDataView(): boolean; isDate(): boolean; isPromise(): boolean; isBoolean(): boolean; isUndefined(): boolean; isSymbol(): boolean; isNull(): boolean; dispose(): void; } export class HandleScope { handleStore: HandleStore; id: number; parent: HandleScope | null; child: HandleScope | null; start: number; end: number; _escapeCalled: boolean; constructor(handleStore: HandleStore, id: number, parentScope: HandleScope | null, start: number, end?: number); add(value: V): Handle; addExternal(envObject: Env, data: void_p): Handle; dispose(): void; escape(handle: number): Handle | null; escapeCalled(): boolean; } export class HandleStore { static UNDEFINED: ConstHandle; static NULL: ConstHandle; static FALSE: ConstHandle; static TRUE: ConstHandle; static GLOBAL: ConstHandle; static MIN_ID: 6; private readonly _values; private _next; push(value: S): Handle; erase(start: number, end: number): void; get(id: Ptr): Handle | undefined; swap(a: number, b: number): void; dispose(): void; } export interface IDeferrdValue { resolve: (value: T) => void; reject: (reason?: any) => void; } export interface IReferenceBinding { wrapped: number; tag: Uint32Array | null; data: void_p; } export function isReferenceType(v: any): v is object; export interface IStoreValue { id: number; dispose(): void; [x: string]: any; } export const NAPI_VERSION_EXPERIMENTAL = Version.NAPI_VERSION_EXPERIMENTAL; export const NODE_API_DEFAULT_MODULE_API_VERSION = Version.NODE_API_DEFAULT_MODULE_API_VERSION; export const NODE_API_SUPPORTED_VERSION_MAX = Version.NODE_API_SUPPORTED_VERSION_MAX; export const NODE_API_SUPPORTED_VERSION_MIN = Version.NODE_API_SUPPORTED_VERSION_MIN; export class NodeEnv extends Env { filename: string; private readonly nodeBinding?; destructing: boolean; finalizationScheduled: boolean; constructor(ctx: Context, filename: string, moduleApiVersion: number, makeDynCall_vppp: (cb: Ptr) => (a: Ptr, b: Ptr, c: Ptr) => void, makeDynCall_vp: (cb: Ptr) => (a: Ptr) => void, abort: (msg?: string) => never, nodeBinding?: any); deleteMe(): void; canCallIntoJs(): boolean; triggerFatalException(err: any): void; callbackIntoModule(enforceUncaughtExceptionPolicy: boolean, fn: (env: Env) => T): T; callFinalizer(cb: napi_finalize, data: void_p, hint: void_p): void; callFinalizerInternal(forceUncaught: int, cb: napi_finalize, data: void_p, hint: void_p): void; enqueueFinalizer(finalizer: RefTracker): void; drainFinalizerQueue(): void; } export class NotSupportBufferError extends EmnapiError { constructor(api: string, message: string); } export class NotSupportWeakRefError extends EmnapiError { constructor(api: string, message: string); } export class Persistent { private _ref; private _param; private _callback; private static readonly _registry; constructor(value: T); setWeak

(param: P, callback: (param: P) => void): void; clearWeak(): void; reset(): void; isEmpty(): boolean; deref(): T | undefined; } export class RefBase extends TrackedFinalizer { private _refcount; private readonly _ownership; constructor(envObject: Env, initial_refcount: uint32_t, ownership: number, finalize_callback: napi_finalize, finalize_data: void_p, finalize_hint: void_p); data(): void_p; ref(): uint32_t; unref(): uint32_t; refCount(): uint32_t; ownership(): number; finalize(): void; } export class Reference extends RefBase implements IStoreValue { id: number; private canBeWeak; static create(envObject: Env, handle_id: napi_value, initialRefcount: uint32_t, ownership: 0 | 1, finalize_callback?: napi_finalize, finalize_data?: void_p, finalize_hint?: void_p): Reference; persistent: Persistent; private constructor(); ref(): number; unref(): number; get(): napi_value; private _setWeak; finalize(): void; dispose(): void; } export class RefTracker { /** @virtual */ finalize(): void; private _next; private _prev; link(list: RefTracker): void; unlink(): void; static finalizeAll(list: RefTracker): void; } export class ScopeStore { private readonly _rootScope; currentScope: HandleScope; constructor(); get(id: number): HandleScope | undefined; openScope(envObject: Env): HandleScope; closeScope(envObject: Env): void; dispose(): void; } export class Store { protected _values: Array; private _freeList; private _size; constructor(); add(value: V): void; get(id: Ptr): V | undefined; has(id: Ptr): boolean; remove(id: Ptr): void; dispose(): void; } export interface TrackedFinalizer extends Finalizer, RefTracker { } export class TrackedFinalizer extends Finalizer { static finalizeAll(list: RefTracker): void; link(list: RefTracker): void; unlink(): void; static create(envObject: Env, finalize_callback: napi_finalize, finalize_data: void_p, finalize_hint: void_p): TrackedFinalizer; protected constructor(envObject: Env, finalize_callback: napi_finalize, finalize_data: void_p, finalize_hint: void_p); dispose(): void; finalize(): void; protected finalizeCore(deleteMe: boolean): void; } export class TryCatch { private _exception; private _caught; isEmpty(): boolean; hasCaught(): boolean; exception(): any; setError(err: any): void; reset(): void; extractException(): any; } export const version: string; }