diff --git a/lib/internal/bootstrap/realm.js b/lib/internal/bootstrap/realm.js index c8cdaeff7d369b..3abe9048da1f34 100644 --- a/lib/internal/bootstrap/realm.js +++ b/lib/internal/bootstrap/realm.js @@ -170,8 +170,8 @@ const experimentalModuleList = new SafeSet(); }; } -// Set up internalBinding() in the closure. /** + * Set up internalBinding() in the closure. * @type {InternalBinding} */ let internalBinding; @@ -439,3 +439,4 @@ setInternalLoaders(internalBinding, requireBuiltin); // Setup per-realm bindings. setupPrepareStackTrace(); +setInternalLoaders(internalBinding, requireBuiltin); diff --git a/tsconfig.json b/tsconfig.json index 5204d83c1e7f8a..8dadd1c3349401 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,22 +2,8 @@ "include": ["lib", "doc"], "exclude": ["src", "tools", "out"], "files": [ - "./typings/internalBinding/async_wrap.d.ts", - "./typings/internalBinding/blob.d.ts", - "./typings/internalBinding/config.d.ts", - "./typings/internalBinding/constants.d.ts", - "./typings/internalBinding/fs.d.ts", - "./typings/internalBinding/http_parser.d.ts", - "./typings/internalBinding/messaging.d.ts", - "./typings/internalBinding/options.d.ts", - "./typings/internalBinding/os.d.ts", - "./typings/internalBinding/serdes.d.ts", - "./typings/internalBinding/symbols.d.ts", - "./typings/internalBinding/timers.d.ts", - "./typings/internalBinding/types.d.ts", - "./typings/internalBinding/url.d.ts", - "./typings/internalBinding/util.d.ts", - "./typings/internalBinding/worker.d.ts", + "./typings/internalBinding/*.d.ts", + "./typings/bindings.d.ts", "./typings/globals.d.ts", "./typings/primordials.d.ts" ], diff --git a/typings/bindings.d.ts b/typings/bindings.d.ts new file mode 100644 index 00000000000000..1ed65174c85f22 --- /dev/null +++ b/typings/bindings.d.ts @@ -0,0 +1,37 @@ +import type { AsyncWrapBinding } from './internalBinding/async_wrap'; +import type { BlobBinding } from "./internalBinding/blob"; +import type { ConfigBinding } from "./internalBinding/config"; +import type { ConstantsBinding } from "./internalBinding/constants"; +import type { FSBinding } from "./internalBinding/fs"; +import type { HttpParserBinding } from "./internalBinding/http_parser"; +import type { MessagingBinding } from "./internalBinding/messaging"; +import type { OptionsBinding } from "./internalBinding/options"; +import type { OSBinding } from "./internalBinding/os"; +import type { SerdesBinding } from "./internalBinding/serdes"; +import type { SymbolsBinding } from "./internalBinding/symbols"; +import type { TimersBinding } from "./internalBinding/timers"; +import type { TypesBinding } from "./internalBinding/types"; +import type { URLBinding } from "./internalBinding/url"; +import type { UtilBindings } from "./internalBinding/util"; +import type { WorkerBinding } from "./internalBinding/worker"; + +export type InternalBindingMap = { + async_wrap: AsyncWrapBinding; + blob: BlobBinding; + config: ConfigBinding; + constants: ConstantsBinding; + fs: FSBinding; + http_parser: HttpParserBinding; + messaging: MessagingBinding; + options: OptionsBinding; + os: OSBinding; + serdes: SerdesBinding; + symbols: SymbolsBinding; + timers: TimersBinding; + types: TypesBinding; + url: URLBinding; + util: UtilBindings; + worker: WorkerBinding; +} + +export type InternalBinding = (binding: T) => InternalBindingMap[T]; diff --git a/typings/internalBinding/async_wrap.d.ts b/typings/internalBinding/async_wrap.d.ts index bfbda3d7ed890b..40e8f9fbd06a64 100644 --- a/typings/internalBinding/async_wrap.d.ts +++ b/typings/internalBinding/async_wrap.d.ts @@ -72,7 +72,7 @@ declare namespace InternalAsyncWrapBinding { } } -declare function InternalBinding(binding: 'async_wrap'): { +export type AsyncWrapBinding = { setupHooks(): { init: ( asyncId: number, @@ -129,4 +129,4 @@ declare function InternalBinding(binding: 'async_wrap'): { kDefaultTriggerAsyncId: 3; }; Providers: InternalAsyncWrapBinding.Providers; -}; +} diff --git a/typings/internalBinding/blob.d.ts b/typings/internalBinding/blob.d.ts index 41813d0a619607..c91e88f703d31d 100644 --- a/typings/internalBinding/blob.d.ts +++ b/typings/internalBinding/blob.d.ts @@ -10,7 +10,7 @@ declare namespace InternalBlobBinding { } } -declare function InternalBinding(binding: 'blob'): { +export type BlobBinding = { createBlob(sources: Array, length: number): InternalBlobBinding.BlobHandle; FixedSizeBlobCopyJob: typeof InternalBlobBinding.FixedSizeBlobCopyJob; getDataObject(id: string): [handle: InternalBlobBinding.BlobHandle | undefined, length: number, type: string] | undefined; diff --git a/typings/internalBinding/config.d.ts b/typings/internalBinding/config.d.ts index d9f34e1131ced5..de3a1c6efa75ea 100644 --- a/typings/internalBinding/config.d.ts +++ b/typings/internalBinding/config.d.ts @@ -1,4 +1,4 @@ -declare function InternalBinding(binding: 'config'): { +export type ConfigBinding = { isDebugBuild: boolean; hasOpenSSL: boolean; fipsMode: boolean; diff --git a/typings/internalBinding/constants.d.ts b/typings/internalBinding/constants.d.ts index 68fead278cc64e..3ed3f1f29f0929 100644 --- a/typings/internalBinding/constants.d.ts +++ b/typings/internalBinding/constants.d.ts @@ -1,4 +1,4 @@ -declare function InternalBinding(binding: 'constants'): { +export type ConstantsBinding = { os: { UV_UDP_REUSEADDR: 4; dlopen: { diff --git a/typings/internalBinding/fs.d.ts b/typings/internalBinding/fs.d.ts index 4576913bf1366b..d3251a15a80368 100644 --- a/typings/internalBinding/fs.d.ts +++ b/typings/internalBinding/fs.d.ts @@ -109,7 +109,7 @@ declare namespace InternalFSBinding { function internalModuleReadJSON(path: string): [] | [string, boolean]; function internalModuleStat(path: string): number; - + function lchown(path: string, uid: number, gid: number, req: FSReqCallback): void; function lchown(path: string, uid: number, gid: number, req: undefined, ctx: FSSyncContext): void; function lchown(path: string, uid: number, gid: number, usePromises: typeof kUsePromises): Promise; @@ -198,7 +198,7 @@ declare namespace InternalFSBinding { function symlink(target: StringOrBuffer, path: StringOrBuffer, type: number, req: FSReqCallback): void; function symlink(target: StringOrBuffer, path: StringOrBuffer, type: number, req: undefined, ctx: FSSyncContext): void; function symlink(target: StringOrBuffer, path: StringOrBuffer, type: number, usePromises: typeof kUsePromises): Promise; - + function unlink(path: string, req: FSReqCallback): void; function unlink(path: string, req: undefined, ctx: FSSyncContext): void; function unlink(path: string, usePromises: typeof kUsePromises): Promise; @@ -220,7 +220,7 @@ declare namespace InternalFSBinding { function writeString(fd: number, value: string, pos: unknown, encoding: unknown, usePromises: typeof kUsePromises): Promise; } -declare function InternalBinding(binding: 'fs'): { +export type FSBinding = { FSReqCallback: typeof InternalFSBinding.FSReqCallback; FileHandle: typeof InternalFSBinding.FileHandle; diff --git a/typings/internalBinding/http_parser.d.ts b/typings/internalBinding/http_parser.d.ts index bd9a22e55b12e5..2bfc1b3903304d 100644 --- a/typings/internalBinding/http_parser.d.ts +++ b/typings/internalBinding/http_parser.d.ts @@ -39,7 +39,7 @@ declare namespace InternalHttpParserBinding { } } -declare function InternalBinding(binding: 'http_parser'): { +export type HttpParserBinding = { methods: string[]; HTTPParser: typeof InternalHttpParserBinding.HTTPParser; }; diff --git a/typings/internalBinding/messaging.d.ts b/typings/internalBinding/messaging.d.ts index ca5be84848408d..082791034c556d 100644 --- a/typings/internalBinding/messaging.d.ts +++ b/typings/internalBinding/messaging.d.ts @@ -1,3 +1,5 @@ +import type { DOMException } from 'internal/per_context/domexception'; + declare namespace InternalMessagingBinding { class MessageChannel { port1: MessagePort; @@ -17,8 +19,8 @@ declare namespace InternalMessagingBinding { } -declare function InternalBinding(binding: 'messaging'): { - DOMException: typeof import('internal/per_context/domexception').DOMException; +export type MessagingBinding = { + DOMException: typeof DOMException; MessageChannel: typeof InternalMessagingBinding.MessageChannel; MessagePort: typeof InternalMessagingBinding.MessagePort; JSTransferable: typeof InternalMessagingBinding.JSTransferable; diff --git a/typings/internalBinding/options.d.ts b/typings/internalBinding/options.d.ts index ded726f9d71127..487ba83db23a33 100644 --- a/typings/internalBinding/options.d.ts +++ b/typings/internalBinding/options.d.ts @@ -1,4 +1,4 @@ -declare function InternalBinding(binding: 'options'): { +export type OptionsBinding = { getOptions(): { options: Map< string, diff --git a/typings/internalBinding/os.d.ts b/typings/internalBinding/os.d.ts index 161d9fd4b46836..465503fea4d0e1 100644 --- a/typings/internalBinding/os.d.ts +++ b/typings/internalBinding/os.d.ts @@ -2,7 +2,7 @@ declare namespace InternalOSBinding { type OSContext = {}; } -declare function InternalBinding(binding: 'os'): { +export type OSBinding = { getHostname(ctx: InternalOSBinding.OSContext): string | undefined; getLoadAvg(array: Float64Array): void; getUptime(): number; diff --git a/typings/internalBinding/serdes.d.ts b/typings/internalBinding/serdes.d.ts index b3577c658d2a9f..81163373721ea1 100644 --- a/typings/internalBinding/serdes.d.ts +++ b/typings/internalBinding/serdes.d.ts @@ -30,7 +30,7 @@ declare namespace InternalSerdesBinding { } } -declare function InternalBinding(binding: 'serdes'): { +export type SerdesBinding = { Serializer: typeof InternalSerdesBinding.Serializer; Deserializer: typeof InternalSerdesBinding.Deserializer; }; diff --git a/typings/internalBinding/symbols.d.ts b/typings/internalBinding/symbols.d.ts index ac85f9e67e8aa2..e660e1a72e5b43 100644 --- a/typings/internalBinding/symbols.d.ts +++ b/typings/internalBinding/symbols.d.ts @@ -10,7 +10,7 @@ export const owner_symbol: unique symbol; export const onpskexchange_symbol: unique symbol; export const trigger_async_id_symbol: unique symbol; -declare function InternalBinding(binding: 'symbols'): { +export type SymbolsBinding = { async_id_symbol: typeof async_id_symbol; handle_onclose_symbol: typeof handle_onclose_symbol; no_message_symbol: typeof no_message_symbol; diff --git a/typings/internalBinding/timers.d.ts b/typings/internalBinding/timers.d.ts index fd6d40ecfee5cc..ad5536ec6b0495 100644 --- a/typings/internalBinding/timers.d.ts +++ b/typings/internalBinding/timers.d.ts @@ -1,4 +1,4 @@ -declare function InternalBinding(binding: 'timers'): { +export type TimersBinding = { getLibuvNow(): number; setupTimers(immediateCallback: () => void, timersCallback: (now: number) => void): void; scheduleTimer(msecs: number): void; diff --git a/typings/internalBinding/types.d.ts b/typings/internalBinding/types.d.ts index c8efea84b69e9d..21f798f893dc06 100644 --- a/typings/internalBinding/types.d.ts +++ b/typings/internalBinding/types.d.ts @@ -1,4 +1,4 @@ -declare function InternalBinding(binding: 'types'): { +export type TypesBinding = { isAsyncFunction(value: unknown): value is (...args: unknown[]) => Promise; isGeneratorFunction(value: unknown): value is GeneratorFunction; isAnyArrayBuffer(value: unknown): value is (ArrayBuffer | SharedArrayBuffer); diff --git a/typings/internalBinding/url.d.ts b/typings/internalBinding/url.d.ts index 54d1cb1f93d790..91d0e96762c51d 100644 --- a/typings/internalBinding/url.d.ts +++ b/typings/internalBinding/url.d.ts @@ -1,6 +1,6 @@ import type { urlUpdateActions } from 'internal/url' -declare function InternalBinding(binding: 'url'): { +export type URLBinding = { urlComponents: Uint32Array; domainToASCII(input: string): string; diff --git a/typings/internalBinding/util.d.ts b/typings/internalBinding/util.d.ts index 002f8eb26d93e6..e63953e401d5c9 100644 --- a/typings/internalBinding/util.d.ts +++ b/typings/internalBinding/util.d.ts @@ -7,7 +7,7 @@ declare namespace InternalUtilBinding { } } -declare function InternalBinding(binding: 'util'): { +export type UtilBindings = { // PER_ISOLATE_PRIVATE_SYMBOL_PROPERTIES, defined in src/env_properties.h arrow_message_private_symbol: 1; contextify_context_private_symbol: 2; diff --git a/typings/internalBinding/worker.d.ts b/typings/internalBinding/worker.d.ts index 52bfc53c29dc0a..5eb0ad34bb187d 100644 --- a/typings/internalBinding/worker.d.ts +++ b/typings/internalBinding/worker.d.ts @@ -1,3 +1,5 @@ +import type { InternalMessagingBinding } from "./messaging"; + declare namespace InternalWorkerBinding { class Worker { constructor( @@ -18,7 +20,7 @@ declare namespace InternalWorkerBinding { } } -declare function InternalBinding(binding: 'worker'): { +export type WorkerBinding = { Worker: typeof InternalWorkerBinding.Worker; getEnvMessagePort(): InternalMessagingBinding.MessagePort; threadId: number; diff --git a/typings/primordials.d.ts b/typings/primordials.d.ts index e1aa6419031115..bdd9df317a5e3b 100644 --- a/typings/primordials.d.ts +++ b/typings/primordials.d.ts @@ -1,3 +1,5 @@ +import type { TypedArray } from './globals'; + type UncurryThis unknown> = (self: ThisParameterType, ...args: Parameters) => ReturnType; type UncurryThisStaticApply unknown> =