import { validateFunction, validateString } from "./validators.mjs";import { normalizeEncoding, slowCases } from "./normalize_encoding.mjs";export { normalizeEncoding, slowCases };
export const customInspectSymbol = Symbol.for("nodejs.util.inspect.custom");export const kEnumerableProperty = Object.create(null);kEnumerableProperty.enumerable = true;
export function once(callback) { let called = false; return function (...args) { if (called) return; called = true; Reflect.apply(callback, this, args); };}
export function createDeferredPromise() { let resolve; let reject; const promise = new Promise((res, rej) => { resolve = res; reject = rej; });
return { promise, resolve, reject };}
const codesWarned = new Set();
export function deprecate(fn, msg, code) {
if (code !== undefined) { validateString(code, "code"); }
let warned = false; function deprecated(...args) { if (!warned) { warned = true; if (code !== undefined) { if (!codesWarned.has(code)) { process.emitWarning(msg, "DeprecationWarning", code, deprecated); codesWarned.add(code); } } else { process.emitWarning(msg, "DeprecationWarning", deprecated); } } if (new.target) { return Reflect.construct(fn, args, new.target); } return Reflect.apply(fn, this, args); }
Object.setPrototypeOf(deprecated, fn); if (fn.prototype) { deprecated.prototype = fn.prototype; }
return deprecated;}
const kCustomPromisifiedSymbol = Symbol.for("nodejs.util.promisify.custom");const kCustomPromisifyArgsSymbol = Symbol.for( "nodejs.util.promisify.customArgs",);
export const customPromisifyArgs = kCustomPromisifyArgsSymbol;
export function promisify( original,) { validateFunction(original, "original"); if (original[kCustomPromisifiedSymbol]) { const fn = original[kCustomPromisifiedSymbol];
validateFunction(fn, "util.promisify.custom");
return Object.defineProperty(fn, kCustomPromisifiedSymbol, { value: fn, enumerable: false, writable: false, configurable: true, }); }
const argumentNames = original[kCustomPromisifyArgsSymbol]; function fn(...args) { return new Promise((resolve, reject) => { args.push((err, ...values) => { if (err) { return reject(err); } if (argumentNames !== undefined && values.length > 1) { const obj = {}; for (let i = 0; i < argumentNames.length; i++) { obj[argumentNames[i]] = values[i]; } resolve(obj); } else { resolve(values[0]); } }); Reflect.apply(original, this, args); }); }
Object.setPrototypeOf(fn, Object.getPrototypeOf(original));
Object.defineProperty(fn, kCustomPromisifiedSymbol, { value: fn, enumerable: false, writable: false, configurable: true, }); return Object.defineProperties( fn, Object.getOwnPropertyDescriptors(original), );}
promisify.custom = kCustomPromisifiedSymbol;
export default { createDeferredPromise, customInspectSymbol, kEnumerableProperty, normalizeEncoding, once, deprecate, promisify,};