diff --git a/package.json b/package.json index 70ca6527..064de33d 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ }, "devDependencies": { "@parcel/watcher": "^2.4.1", - "@types/node": "^22.7.4", + "@types/node": "^22.9.3", "automd": "^0.3.12", "changelogen": "^0.5.7", "consola": "^3.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 191ea8de..0dfc0a31 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,8 +25,8 @@ importers: specifier: ^2.4.1 version: 2.4.1 '@types/node': - specifier: ^22.7.4 - version: 22.7.4 + specifier: ^22.9.3 + version: 22.9.3 automd: specifier: ^0.3.12 version: 0.3.12 @@ -852,8 +852,8 @@ packages: '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - '@types/node@22.7.4': - resolution: {integrity: sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==} + '@types/node@22.9.3': + resolution: {integrity: sha512-F3u1fs/fce3FFk+DAxbxc78DF8x0cY09RRL8GnXLmkJ1jvx3TtPdWoTT5/NiYfI5ASqXBmfqJi9dZ3gxMx4lzw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3065,9 +3065,9 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.7.4 + '@types/node': 22.9.3 - '@types/node@22.7.4': + '@types/node@22.9.3': dependencies: undici-types: 6.19.8 diff --git a/src/runtime/node/http/internal/response.ts b/src/runtime/node/http/internal/response.ts index b9430cad..3e0def13 100644 --- a/src/runtime/node/http/internal/response.ts +++ b/src/runtime/node/http/internal/response.ts @@ -93,8 +93,19 @@ export class ServerResponse extends Writable implements http.ServerResponse { return this; } - setHeader(name: string, value: number | string | string[]): this { - this._headers[name.toLowerCase()] = value; + setHeader(name: string, value: number | string | readonly string[]): this { + this._headers[name.toLowerCase()] = Array.isArray(value) + ? ([...value] as string[]) + : (value as number | string); + return this; + } + + setHeaders( + headers: Headers | Map, + ): this { + for (const [key, value] of headers.entries()) { + this.setHeader(key, value); + } return this; } diff --git a/src/runtime/node/module/$cloudflare.ts b/src/runtime/node/module/$cloudflare.ts index dad6e89c..b94fefc2 100644 --- a/src/runtime/node/module/$cloudflare.ts +++ b/src/runtime/node/module/$cloudflare.ts @@ -16,7 +16,10 @@ export { _resolveFilename, _resolveLookupPaths, builtinModules, + constants, + enableCompileCache, findSourceMap, + getCompileCacheDir, globalPaths, isBuiltin, register, @@ -40,7 +43,10 @@ import { _resolveFilename, _resolveLookupPaths, builtinModules, + constants, + enableCompileCache, findSourceMap, + getCompileCacheDir, globalPaths, isBuiltin, register, @@ -80,8 +86,11 @@ export default { _resolveFilename, _resolveLookupPaths, builtinModules, + enableCompileCache, + constants, createRequire, findSourceMap, + getCompileCacheDir, globalPaths, isBuiltin, register, diff --git a/src/runtime/node/module/index.ts b/src/runtime/node/module/index.ts index 74b6b7cc..348621f5 100644 --- a/src/runtime/node/module/index.ts +++ b/src/runtime/node/module/index.ts @@ -21,6 +21,28 @@ export const createRequire = function (filename: string) { }); }; +export const getCompileCacheDir: typeof nodeModule.getCompileCacheDir = + function () { + return undefined; + }; + +export const enableCompileCache: typeof nodeModule.enableCompileCache = + function (caheDir: string) { + return { + status: 0 /* compileCacheStatus.FAILED */, + message: "not implemented", + }; + }; + +export const constants: typeof nodeModule.constants = Object.freeze({ + compileCacheStatus: Object.freeze({ + FAILED: 0, + ENABLED: 1, + ALREADY_ENABLED: 2, + DISABLED: 3, + }), +}); + // prettier-ignore export const builtinModules: typeof nodeModule.builtinModules = [ '_http_agent', '_http_client', '_http_common', @@ -67,10 +89,7 @@ export const findSourceMap: typeof nodeModule.findSourceMap = function ( path: string, error?: Error, ) { - // The cast is necessary because Node types wrongly set the return type to `SourceMap`. - // Comments on Node types say "Returns `module.SourceMap` if a source map is found, `undefined` otherwise." - // Returning `undefined` is the verified behavior. - return undefined as unknown as nodeModule.SourceMap; + return undefined; }; export const wrap: typeof nodeModule.wrap = function (source) { @@ -130,8 +149,11 @@ export const Module = { _resolveFilename, _resolveLookupPaths, builtinModules, + constants, createRequire, + enableCompileCache, findSourceMap, + getCompileCacheDir, globalPaths, isBuiltin, register, diff --git a/src/runtime/node/perf_hooks/internal/performance.ts b/src/runtime/node/perf_hooks/internal/performance.ts index e5b3c834..e131be75 100644 --- a/src/runtime/node/perf_hooks/internal/performance.ts +++ b/src/runtime/node/perf_hooks/internal/performance.ts @@ -16,20 +16,19 @@ export { PerformanceObserverEntryList, } from "../../../web/performance/index"; -// grabbed from Node.js v22.3.0 using: -// performance.nodeTiming const nodeTiming = { name: "node", entryType: "node", startTime: 0, - duration: 305_963.045_666, - nodeStart: 1.662_124_991_416_931_2, - v8Start: 44.762_125_015_258_79, - bootstrapComplete: 49.992_666_006_088_26, - environment: 46.754_665_970_802_31, - loopStart: 63.262_040_972_709_656, - loopExit: -1, - idleTime: 305_360.555_328, + duration: 0, + nodeStart: 0, + v8Start: 0, + bootstrapComplete: 0, + environment: 0, + loopStart: 0, + loopExit: 0, + idleTime: 0, + uvMetricsInfo: { loopCount: 0, events: 0, eventsWaiting: 0 }, // only present in Node.js 18.x detail: undefined, } satisfies Omit; diff --git a/src/runtime/node/readline/internal/interface.ts b/src/runtime/node/readline/internal/interface.ts index 039dbea6..6d1a981b 100644 --- a/src/runtime/node/readline/internal/interface.ts +++ b/src/runtime/node/readline/internal/interface.ts @@ -39,7 +39,7 @@ export class Interface extends EventEmitter implements readline.Interface { return this; } - async *[Symbol.asyncIterator](): AsyncIterableIterator { + async *[Symbol.asyncIterator](): NodeJS.AsyncIterator { yield ""; } } diff --git a/src/runtime/node/stream/internal/readable.ts b/src/runtime/node/stream/internal/readable.ts index b050da1a..d7d56c5e 100644 --- a/src/runtime/node/stream/internal/readable.ts +++ b/src/runtime/node/stream/internal/readable.ts @@ -102,13 +102,13 @@ export class _Readable extends EventEmitter implements stream.Readable { } // eslint-disable-next-line require-yield - async *[Symbol.asyncIterator](): AsyncIterableIterator { + async *[Symbol.asyncIterator](): NodeJS.AsyncIterator { throw createNotImplementedError("Readable.asyncIterator"); } iterator( options?: { destroyOnReturn?: boolean | undefined } | undefined, - ): AsyncIterableIterator { + ): NodeJS.AsyncIterator { throw createNotImplementedError("Readable.iterator"); } diff --git a/src/runtime/node/util/$cloudflare.ts b/src/runtime/node/util/$cloudflare.ts index 43b60dc1..48cf92df 100644 --- a/src/runtime/node/util/$cloudflare.ts +++ b/src/runtime/node/util/$cloudflare.ts @@ -69,6 +69,7 @@ export const { deprecate, format, formatWithOptions, + getCallSite, inherits, inspect, log, @@ -125,6 +126,7 @@ export default { deprecate, format, formatWithOptions, + getCallSite, inherits, inspect, log, diff --git a/src/runtime/node/util/index.ts b/src/runtime/node/util/index.ts index b449ef67..a7b3fb66 100644 --- a/src/runtime/node/util/index.ts +++ b/src/runtime/node/util/index.ts @@ -59,6 +59,9 @@ export const parseEnv = notImplemented("util.parseEnv"); export const styleText = notImplemented("util.styleText"); +export const getCallSite = + notImplemented("util.getCallSites"); + export default { _errnoException, _exceptionWithHostPort, @@ -66,6 +69,7 @@ export default { aborted, callbackify, deprecate, + getCallSite, getSystemErrorMap, getSystemErrorName, inherits, diff --git a/src/runtime/node/vm/internal/constants.ts b/src/runtime/node/vm/internal/constants.ts index 8e44594a..b92f6f23 100644 --- a/src/runtime/node/vm/internal/constants.ts +++ b/src/runtime/node/vm/internal/constants.ts @@ -1,3 +1,6 @@ import type vm from "node:vm"; +// Actual values in Node are Symbols +// See https://github.com/nodejs/node/blob/92c7dde/lib/vm.js#L66 export const USE_MAIN_CONTEXT_DEFAULT_LOADER: typeof vm.constants.USE_MAIN_CONTEXT_DEFAULT_LOADER = 0; +export const DONT_CONTEXTIFY: typeof vm.constants.DONT_CONTEXTIFY = 1;