summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/util.ts
diff options
context:
space:
mode:
authorLuca Casonato <hello@lcas.dev>2024-09-05 09:22:52 +0200
committerGitHub <noreply@github.com>2024-09-05 09:22:52 +0200
commit49e3ee010c7d4423fbab89bf12749235e156c9be (patch)
tree92185d6cf32a94ae4b241a23a64309bec3f92e59 /ext/node/polyfills/util.ts
parent17b5e98b822dc23407a0292dcf61e624fbf2a4b1 (diff)
feat(ext/node): add abort helpers, process & streams fix (#25262)
This commit adds: - `addAbortListener` in `node:events` - `aborted` in `node:util` - `execPath` and `execvArgs` named export from `node:process` - `getDefaultHighWaterMark` from `node:stream` The `execPath` is very hacky - because module namespaces can not have real getters, `execPath` is an object with a `toString()` method that on call returns the actual `execPath`, and replaces the `execPath` binding with the string. This is done so that we don't require the `execPath` permission on startup.
Diffstat (limited to 'ext/node/polyfills/util.ts')
-rw-r--r--ext/node/polyfills/util.ts32
1 files changed, 30 insertions, 2 deletions
diff --git a/ext/node/polyfills/util.ts b/ext/node/polyfills/util.ts
index cb4e6498a..c94d0f14b 100644
--- a/ext/node/polyfills/util.ts
+++ b/ext/node/polyfills/util.ts
@@ -25,9 +25,13 @@ const {
StringPrototypeIsWellFormed,
StringPrototypePadStart,
StringPrototypeToWellFormed,
+ PromiseResolve,
} = primordials;
-import { promisify } from "ext:deno_node/internal/util.mjs";
+import {
+ createDeferredPromise,
+ promisify,
+} from "ext:deno_node/internal/util.mjs";
import { callbackify } from "ext:deno_node/_util/_util_callbackify.js";
import { debuglog } from "ext:deno_node/internal/util/debuglog.ts";
import {
@@ -41,8 +45,13 @@ import types from "node:util/types";
import { Buffer } from "node:buffer";
import { isDeepStrictEqual } from "ext:deno_node/internal/util/comparisons.ts";
import process from "node:process";
-import { validateString } from "ext:deno_node/internal/validators.mjs";
+import {
+ validateAbortSignal,
+ validateString,
+} from "ext:deno_node/internal/validators.mjs";
import { parseArgs } from "ext:deno_node/internal/util/parse_args/parse_args.js";
+import * as abortSignal from "ext:deno_web/03_abort_signal.js";
+import { ERR_INVALID_ARG_TYPE } from "ext:deno_node/internal/errors.ts";
export {
callbackify,
@@ -288,6 +297,24 @@ export function deprecate(fn: any, msg: string, code?: any) {
return deprecated;
}
+// deno-lint-ignore require-await
+export async function aborted(
+ signal: AbortSignal,
+ // deno-lint-ignore no-explicit-any
+ _resource: any,
+): Promise<void> {
+ if (signal === undefined) {
+ throw new ERR_INVALID_ARG_TYPE("signal", "AbortSignal", signal);
+ }
+ validateAbortSignal(signal, "signal");
+ if (signal.aborted) {
+ return PromiseResolve();
+ }
+ const abortPromise = createDeferredPromise();
+ signal[abortSignal.add](abortPromise.resolve);
+ return abortPromise.promise;
+}
+
export { getSystemErrorName, isDeepStrictEqual };
export default {
@@ -311,6 +338,7 @@ export default {
isBuffer,
_extend,
getSystemErrorName,
+ aborted,
deprecate,
callbackify,
parseArgs,