Поделиться через


util module

Модуль node:util поддерживает потребности Node.js внутренних API. Многие служебные программы также полезны для разработчиков приложений и модулей. Чтобы получить доступ к нему, выполните приведенные далее действия.

import util from 'node:util';

См. источник

Классы

MIMEParams

API MIMEParams предоставляет доступ на чтение и запись к параметрам MIMEType.

MIMEType

Реализация класса MIMEType.

В соответствии с соглашениями браузера все свойства объектов MIMEType реализуются как методы получения и задания прототипа класса, а не как свойства данных в самом объекте.

Строка MIME — это структурированная строка, содержащая несколько значимых компонентов. При синтаксическом анализе возвращается объект MIMEType, содержащий свойства для каждого из этих компонентов.

TextDecoder

Реализация API кодировки WHATWG standardTextDecoder.

const decoder = new TextDecoder();
const u8arr = new Uint8Array([72, 101, 108, 108, 111]);
console.log(decoder.decode(u8arr)); // Hello
TextEncoder

Реализация API кодировки WHATWG standardTextEncoder. Все экземпляры TextEncoder поддерживают только кодировку UTF-8.

const encoder = new TextEncoder();
const uint8array = encoder.encode('this is some data');

Класс TextEncoder также доступен в глобальном объекте.

Интерфейсы

CallSiteObject
CustomPromisifyLegacy
CustomPromisifySymbol
DebugLogger
EncodeIntoResult
InspectOptions
InspectOptionsStylized
IsDeepStrictEqualOptions
ParseArgsConfig
ParseArgsOptionDescriptor
ParseArgsOptionsConfig
StyleTextOptions

Псевдонимы типа

CustomInspectFunction
CustomPromisify
DebugLoggerFunction
DiffEntry
ParseArgsOptionsType

Тип аргумента, используемого в parseArgs.

Style

Функции

aborted(AbortSignal, any)

Прослушивает событие прерывания в предоставленном signal и возвращает обещание, которое разрешается при прерывании signal. Если resource предоставлено, он слабо ссылается на связанный объект операции, поэтому если resource собирается мусор до прерывания signal, то возвращенное обещание остается ожидаемым. Это предотвращает утечку памяти в длительных или неотменяемых операциях.

import { aborted } from 'node:util';

// Obtain an object with an abortable signal, like a custom resource or operation.
const dependent = obtainSomethingAbortable();

// Pass `dependent` as the resource, indicating the promise should only resolve
// if `dependent` is still in memory when the signal is aborted.
aborted(dependent.signal, dependent).then(() => {
  // This code runs when `dependent` is aborted.
  console.log('Dependent resource was aborted.');
});

// Simulate an event that triggers the abort.
dependent.on('event', () => {
  dependent.abort(); // This will cause the `aborted` promise to resolve.
});
addParamToUrl(string, string, string)

Добавляет параметр в заданный URL-адрес

assign(any[])

Копирует значения всех перечисленных свойств из одного или нескольких исходных объектов в целевой объект и возвращает целевой объект.

autoAuthInEmbedUrl(string)

Проверяет, содержит ли URL-адрес внедрения autoAuth=true.

callbackify(() => Promise<void>)

Принимает функцию async (или функцию, возвращающую Promise) и возвращает функцию после стиля обратного вызова с ошибкой первого вызова, т. е. при выполнении обратного вызова (err, value) => ... в качестве последнего аргумента. В обратном вызове первый аргумент будет причиной отклонения (или null, если разрешено Promise), а второй аргумент будет разрешенным значением.

import { callbackify } from 'node:util';

async function fn() {
  return 'hello world';
}
const callbackFunction = callbackify(fn);

callbackFunction((err, ret) => {
  if (err) throw err;
  console.log(ret);
});

Будет напечатано:

hello world

Обратный вызов выполняется асинхронно и будет иметь ограниченную трассировку стека. Если обратный вызов вызывается, процесс выдает событие 'uncaughtException', а если не обработано, завершится.

Так как null имеет особое значение в качестве первого аргумента обратного вызова, если завернутая функция отклоняет Promise с ложным значением в качестве причины, значение упаковывается в Error с исходным значением, хранящимся в поле с именем reason.

function fn() {
  return Promise.reject(null);
}
const callbackFunction = util.callbackify(fn);

callbackFunction((err, ret) => {
  // When the Promise was rejected with `null` it is wrapped with an Error and
  // the original value is stored in `reason`.
  err && Object.hasOwn(err, 'reason') && err.reason === null;  // true
});
callbackify<T1, T2, T3, T4, T5, T6, TResult>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<TResult>)
callbackify<T1, T2, T3, T4, T5, T6>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<void>)
callbackify<T1, T2, T3, T4, T5, TResult>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<TResult>)
callbackify<T1, T2, T3, T4, T5>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<void>)
callbackify<T1, T2, T3, T4, TResult>((arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<TResult>)
callbackify<T1, T2, T3, T4>((arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<void>)
callbackify<T1, T2, T3, TResult>((arg1: T1, arg2: T2, arg3: T3) => Promise<TResult>)
callbackify<T1, T2, T3>((arg1: T1, arg2: T2, arg3: T3) => Promise<void>)
callbackify<T1, T2, TResult>((arg1: T1, arg2: T2) => Promise<TResult>)
callbackify<T1, T2>((arg1: T1, arg2: T2) => Promise<void>)
callbackify<T1, TResult>((arg1: T1) => Promise<TResult>)
callbackify<T1>((arg1: T1) => Promise<void>)
callbackify<TResult>(() => Promise<TResult>)
createRandomString()

Создает случайное от 5 до 6 символьных строк.

debuglog(string, (fn: DebugLoggerFunction) => void)

Метод util.debuglog() используется для создания функции, которая условно записывает отладочные сообщения stderr в зависимости от существования переменной NODE_DEBUG среды. Если имя section отображается в значении этой переменной среды, возвращаемая функция работает аналогично console.error(). Если нет, возвращаемая функция является no-op.

import { debuglog } from 'node:util';
const log = debuglog('foo');

log('hello from foo [%d]', 123);

Если эта программа выполняется с NODE_DEBUG=foo в среде, она выдаст примерно следующее:

FOO 3245: hello from foo [123]

где 3245 является идентификатором процесса. Если он не выполняется с этим набором переменных среды, он не будет выводить ничего.

Кроме того, section поддерживает подстановочный знак:

import { debuglog } from 'node:util';
const log = debuglog('foo');

log('hi there, it\'s foo-bar [%d]', 2333);

Если он выполняется с NODE_DEBUG=foo* в среде, он выдаст примерно следующее:

FOO-BAR 3257: hi there, it's foo-bar [2333]

В переменной section среды могут быть указаны несколько имен, разделенных NODE_DEBUG запятыми: NODE_DEBUG=fs,net,tls

Необязательный аргумент callback можно использовать для замены функции ведения журнала другой функцией, которая не имеет инициализации или ненужной оболочки.

import { debuglog } from 'node:util';
let log = debuglog('internals', (debug) => {
  // Replace with a logging function that optimizes out
  // testing if the section is enabled
  log = debug;
});
deprecate<T>(T, string, string)

Метод util.deprecate() упаковывает fn (который может быть функцией или классом), таким образом, чтобы он был помечен как устаревший.

import { deprecate } from 'node:util';

export const obsoleteFunction = deprecate(() => {
  // Do something here.
}, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.');

При вызове util.deprecate() возвращает функцию, которая будет выдавать DeprecationWarning с помощью события 'warning'. Предупреждение будет выведено и напечатано для stderr при первом вызове возвращаемой функции. После выдачи предупреждения функция-оболочка вызывается без предупреждения.

Если один и тот же необязательный code предоставляется в нескольких вызовах util.deprecate(), предупреждение будет выдаваться только один раз для этого code.

import { deprecate } from 'node:util';

const fn1 = deprecate(
  () => 'a value',
  'deprecation message',
  'DEP0001',
);
const fn2 = deprecate(
  () => 'a  different value',
  'other dep message',
  'DEP0001',
);
fn1(); // Emits a deprecation warning with code DEP0001
fn2(); // Does not emit a deprecation warning because it has the same code

Если используются флаги командной строки --no-deprecation или --no-warnings, либо если для свойства process.noDeprecation задано значение trueдо в качестве первого предупреждения об отмене, метод util.deprecate() ничего не делает.

Если заданы флаги командной строки --trace-deprecation или --trace-warnings, либо для свойства process.traceDeprecation задано значение true, предупреждение и трассировка стека печатаются в stderr при первом вызове нерекомендуемой функции.

Если установлен флаг командной строки --throw-deprecation или свойство process.throwDeprecation имеет значение true, то при вызове нерекомендуемой функции будет возникать исключение.

Флаг командной строки --throw-deprecation и свойство process.throwDeprecation имеет приоритет над --trace-deprecation и process.traceDeprecation.

diff(string | (readonly string[]), string | (readonly string[]))

util.diff() сравнивает два значения строки или массива и возвращает массив записей разницы. Он использует алгоритм диффа Myers для вычисления минимальных различий, который является тем же алгоритмом, который используется внутренне в сообщениях об ошибках утверждения.

Если значения равны, возвращается пустой массив.

const { diff } = require('node:util');

// Comparing strings
const actualString = '12345678';
const expectedString = '12!!5!7!';
console.log(diff(actualString, expectedString));
// [
//   [0, '1'],
//   [0, '2'],
//   [1, '3'],
//   [1, '4'],
//   [-1, '!'],
//   [-1, '!'],
//   [0, '5'],
//   [1, '6'],
//   [-1, '!'],
//   [0, '7'],
//   [1, '8'],
//   [-1, '!'],
// ]
// Comparing arrays
const actualArray = ['1', '2', '3'];
const expectedArray = ['1', '3', '4'];
console.log(diff(actualArray, expectedArray));
// [
//   [0, '1'],
//   [1, '2'],
//   [0, '3'],
//   [-1, '4'],
// ]
// Equal values return empty array
console.log(diff('same', 'same'));
// []
find<T>((x: T) => boolean, T[])

Находит первое значение в массиве, который соответствует указанному предикату.

findIndex<T>((x: T) => boolean, T[])

Находит индекс первого значения в массиве, который соответствует указанному предикату.

format(any, any[])

Метод util.format() возвращает форматированную строку с помощью первого аргумента в виде строки формата printf, которая может содержать ноль или более описателей формата. Каждый описатель заменяется преобразованным значением из соответствующего аргумента. Поддерживаемые описатели:

Если у описателя нет соответствующего аргумента, он не заменен:

util.format('%s:%s', 'foo');
// Returns: 'foo:%s'

Значения, которые не являются частью строки форматирования, форматируются с помощью util.inspect(), если их тип не string.

Если в методе util.format() передается больше аргументов, чем число описателей, дополнительные аргументы объединяются в возвращаемую строку, разделенные пробелами:

util.format('%s:%s', 'foo', 'bar', 'baz');
// Returns: 'foo:bar baz'

Если первый аргумент не содержит допустимый описатель формата, util.format() возвращает строку, которая является объединением всех аргументов, разделенных пробелами:

util.format(1, 2, 3);
// Returns: '1 2 3'

Если в util.format()передается только один аргумент, он возвращается без форматирования:

util.format('%% %s');
// Returns: '%% %s'

util.format() — это синхронный метод, предназначенный в качестве средства отладки. Некоторые входные значения могут иметь значительные затраты на производительность, которые могут блокировать цикл событий. Используйте эту функцию с осторожностью и никогда не в пути к горячему коду.

formatWithOptions(InspectOptions, any, any[])

Эта функция идентична формату, за исключением того, что он принимает аргумент inspectOptions, который задает параметры, передаваемые проверки.

util.formatWithOptions({ colors: true }, 'See object %O', { foo: 42 });
// Returns 'See object { foo: 42 }', where `42` is colored as a number
// when printed to a terminal.
generateUUID()

Создает 20 символов uuid.

getCallSites(GetCallSitesOptions)
getCallSites(number, GetCallSitesOptions)

Возвращает массив объектов сайта вызова, содержащих стек функции вызывающего объекта.

import { getCallSites } from 'node:util';

function exampleFunction() {
  const callSites = getCallSites();

  console.log('Call Sites:');
  callSites.forEach((callSite, index) => {
    console.log(`CallSite ${index + 1}:`);
    console.log(`Function Name: ${callSite.functionName}`);
    console.log(`Script Name: ${callSite.scriptName}`);
    console.log(`Line Number: ${callSite.lineNumber}`);
    console.log(`Column Number: ${callSite.column}`);
  });
  // CallSite 1:
  // Function Name: exampleFunction
  // Script Name: /home/example.js
  // Line Number: 5
  // Column Number: 26

  // CallSite 2:
  // Function Name: anotherFunction
  // Script Name: /home/example.js
  // Line Number: 22
  // Column Number: 3

  // ...
}

// A function to simulate another stack layer
function anotherFunction() {
  exampleFunction();
}

anotherFunction();

Можно восстановить исходные расположения, установив параметр sourceMap для true. Если исходная карта недоступна, исходное расположение будет совпадать с текущим расположением. Если флаг --enable-source-maps включен, например при использовании --experimental-transform-types, sourceMap будет true по умолчанию.

import { getCallSites } from 'node:util';

interface Foo {
  foo: string;
}

const callSites = getCallSites({ sourceMap: true });

// With sourceMap:
// Function Name: ''
// Script Name: example.js
// Line Number: 7
// Column Number: 26

// Without sourceMap:
// Function Name: ''
// Script Name: example.js
// Line Number: 2
// Column Number: 26
getRandomValue()

Возвращает случайное число

getSystemErrorMap()

Возвращает карту всех системных кодов ошибок, доступных в API Node.js. Сопоставление кодов ошибок и имен ошибок зависит от платформы. См. Common System Errors имена распространенных ошибок.

fs.access('file/that/does/not/exist', (err) => {
  const errorMap = util.getSystemErrorMap();
  const name = errorMap.get(err.errno);
  console.error(name);  // ENOENT
});
getSystemErrorMessage(number)

Возвращает строковое сообщение для числового кода ошибки, полученного из API Node.js. Сопоставление кодов ошибок и строковых сообщений зависит от платформы.

fs.access('file/that/does/not/exist', (err) => {
  const message = util.getSystemErrorMessage(err.errno);
  console.error(message);  // no such file or directory
});
getSystemErrorName(number)

Возвращает строковое имя числового кода ошибки, полученного из API Node.js. Сопоставление кодов ошибок и имен ошибок зависит от платформы. См. Common System Errors имена распространенных ошибок.

fs.access('file/that/does/not/exist', (err) => {
  const name = util.getSystemErrorName(err.errno);
  console.error(name);  // ENOENT
});
getTimeDiffInMilliseconds(Date, Date)

Возвращает интервал времени между двумя датами в миллисекундах

inherits(unknown, unknown)

Использование util.inherits() не рекомендуется. Чтобы получить поддержку наследования на уровне языка, используйте ключевые слова ES6 class и extends. Кроме того, обратите внимание, что два стиля семантически несовместимы.

Наследуйте методы прототипа от одного конструктора в другой. Прототип constructor будет установлен на новый объект, созданный из superConstructor.

Это в основном добавляет некоторую проверку входных данных поверх Object.setPrototypeOf(constructor.prototype, superConstructor.prototype). В качестве дополнительного удобства superConstructor будет доступен через свойство constructor.super_.

const util = require('node:util');
const EventEmitter = require('node:events');

function MyStream() {
  EventEmitter.call(this);
}

util.inherits(MyStream, EventEmitter);

MyStream.prototype.write = function(data) {
  this.emit('data', data);
};

const stream = new MyStream();

console.log(stream instanceof EventEmitter); // true
console.log(MyStream.super_ === EventEmitter); // true

stream.on('data', (data) => {
  console.log(`Received data: "${data}"`);
});
stream.write('It works!'); // Received data: "It works!"

Пример ES6 с помощью class и extends:

import EventEmitter from 'node:events';

class MyStream extends EventEmitter {
  write(data) {
    this.emit('data', data);
  }
}

const stream = new MyStream();

stream.on('data', (data) => {
  console.log(`Received data: "${data}"`);
});
stream.write('With ES6');
inspect(any, boolean, null | number, boolean)

Метод util.inspect() возвращает строковое представление object, предназначенное для отладки. Выходные данные util.inspect могут изменяться в любое время и не должны зависеть от программного использования. Дополнительные options могут быть переданы, изменяющие результат. util.inspect() будет использовать имя конструктора и /или Symbol.toStringTag свойство, чтобы сделать идентифицируемый тег для проверяемого значения.

class Foo {
  get [Symbol.toStringTag]() {
    return 'bar';
  }
}

class Bar {}

const baz = Object.create(null, { [Symbol.toStringTag]: { value: 'foo' } });

util.inspect(new Foo()); // 'Foo [bar] {}'
util.inspect(new Bar()); // 'Bar {}'
util.inspect(baz);       // '[foo] {}'

Циклические ссылки указывают на привязку с помощью эталонного индекса:

import { inspect } from 'node:util';

const obj = {};
obj.a = [obj];
obj.b = {};
obj.b.inner = obj.b;
obj.b.obj = obj;

console.log(inspect(obj));
// <ref *1> {
//   a: [ [Circular *1] ],
//   b: <ref *2> { inner: [Circular *2], obj: [Circular *1] }
// }

В следующем примере проверяются все свойства объекта util:

import util from 'node:util';

console.log(util.inspect(util, { showHidden: true, depth: null }));

В следующем примере показан эффект параметра compact.

import { inspect } from 'node:util';

const o = {
  a: [1, 2, [[
    'Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit, sed do ' +
      'eiusmod \ntempor incididunt ut labore et dolore magna aliqua.',
    'test',
    'foo']], 4],
  b: new Map([['za', 1], ['zb', 'test']]),
};
console.log(inspect(o, { compact: true, depth: 5, breakLength: 80 }));

// { a:
//   [ 1,
//     2,
//     [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // A long line
//           'test',
//           'foo' ] ],
//     4 ],
//   b: Map(2) { 'za' => 1, 'zb' => 'test' } }

// Setting `compact` to false or an integer creates more reader friendly output.
console.log(inspect(o, { compact: false, depth: 5, breakLength: 80 }));

// {
//   a: [
//     1,
//     2,
//     [
//       [
//         'Lorem ipsum dolor sit amet,\n' +
//           'consectetur adipiscing elit, sed do eiusmod \n' +
//           'tempor incididunt ut labore et dolore magna aliqua.',
//         'test',
//         'foo'
//       ]
//     ],
//     4
//   ],
//   b: Map(2) {
//     'za' => 1,
//     'zb' => 'test'
//   }
// }

// Setting `breakLength` to e.g. 150 will print the "Lorem ipsum" text in a
// single line.

Параметр showHidden позволяет проверять WeakMap и WeakSet записи. Если есть больше записей, чем maxArrayLength, нет гарантии, какие записи отображаются. Это означает, что получение одного и того же WeakSet записей дважды может привести к разным выходным данным. Кроме того, записи без оставшихся надежных ссылок могут собираться в любое время.

import { inspect } from 'node:util';

const obj = { a: 1 };
const obj2 = { b: 2 };
const weakSet = new WeakSet([obj, obj2]);

console.log(inspect(weakSet, { showHidden: true }));
// WeakSet { { a: 1 }, { b: 2 } }

Параметр sorted гарантирует, что порядок вставки свойств объекта не влияет на результат util.inspect().

import { inspect } from 'node:util';
import assert from 'node:assert';

const o1 = {
  b: [2, 3, 1],
  a: '`a` comes before `b`',
  c: new Set([2, 3, 1]),
};
console.log(inspect(o1, { sorted: true }));
// { a: '`a` comes before `b`', b: [ 2, 3, 1 ], c: Set(3) { 1, 2, 3 } }
console.log(inspect(o1, { sorted: (a, b) => b.localeCompare(a) }));
// { c: Set(3) { 3, 2, 1 }, b: [ 2, 3, 1 ], a: '`a` comes before `b`' }

const o2 = {
  c: new Set([2, 1, 3]),
  a: '`a` comes before `b`',
  b: [2, 3, 1],
};
assert.strict.equal(
  inspect(o1, { sorted: true }),
  inspect(o2, { sorted: true }),
);

Параметр numericSeparator добавляет символ подчеркивания каждые три цифры ко всем числам.

import { inspect } from 'node:util';

const thousand = 1000;
const million = 1000000;
const bigNumber = 123456789n;
const bigDecimal = 1234.12345;

console.log(inspect(thousand, { numericSeparator: true }));
// 1_000
console.log(inspect(million, { numericSeparator: true }));
// 1_000_000
console.log(inspect(bigNumber, { numericSeparator: true }));
// 123_456_789n
console.log(inspect(bigDecimal, { numericSeparator: true }));
// 1_234.123_45

util.inspect() — это синхронный метод, предназначенный для отладки. Максимальная длина выходных данных составляет примерно 128 МиБ. Входные данные, которые приводят к более длительным выходным данным, будут усечены.

inspect(any, InspectOptions)
isArray(unknown)

Псевдоним для Array.isArray().

Возвращает true, если заданный object является Array. В противном случае возвращается false.

import util from 'node:util';

util.isArray([]);
// Returns: true
util.isArray(new Array());
// Returns: true
util.isArray({});
// Returns: false
isCreate(string)

Проверяет, является ли тип внедрения для создания

isDeepStrictEqual(unknown, unknown, IsDeepStrictEqualOptions)

Возвращает true, если существует глубокое строгое равенство между val1 и val2. В противном случае возвращается false.

Дополнительные сведения о глубоком равенства см. в assert.deepStrictEqual().

isRDLEmbed(string)

Проверяет, является ли URL-адрес внедрения отчетом RDL.

isSavedInternal(HttpPostMessage, string, Window)

Проверяет, сохранен ли отчет.

parseArgs<T>(T)

Предоставляет API более высокого уровня для синтаксического анализа аргументов командной строки, чем взаимодействие с process.argv напрямую. Принимает спецификацию ожидаемых аргументов и возвращает структурированный объект с проанализированными параметрами и позициями.

import { parseArgs } from 'node:util';
const args = ['-f', '--bar', 'b'];
const options = {
  foo: {
    type: 'boolean',
    short: 'f',
  },
  bar: {
    type: 'string',
  },
};
const {
  values,
  positionals,
} = parseArgs({ args, options });
console.log(values, positionals);
// Prints: [Object: null prototype] { foo: true, bar: 'b' } []
parseEnv(string)

Стабильность: 1.1 — активная разработка с учетом примера файла .env:

import { parseEnv } from 'node:util';

parseEnv('HELLO=world\nHELLO=oh my\n');
// Returns: { HELLO: 'oh my' }
promisify((callback: (err?: any) => void) => void)
promisify(Function)
promisify<T1, T2, T3, T4, T5, TResult>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void)
promisify<T1, T2, T3, T4, T5>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void)
promisify<T1, T2, T3, T4, TResult>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void)
promisify<T1, T2, T3, T4>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void)
promisify<T1, T2, T3, TResult>((arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void)
promisify<T1, T2, T3>((arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void)
promisify<T1, T2, TResult>((arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void)
promisify<T1, T2>((arg1: T1, arg2: T2, callback: (err?: any) => void) => void)
promisify<T1, TResult>((arg1: T1, callback: (err: any, result: TResult) => void) => void)
promisify<T1>((arg1: T1, callback: (err?: any) => void) => void)
promisify<TCustom>(CustomPromisify<TCustom>)

Принимает функцию после стандартного стиля обратного вызова с первой ошибкой, т. е. принимая (err, value) => ... обратный вызов в качестве последнего аргумента, и возвращает версию, которая возвращает обещания.

import { promisify } from 'node:util';
import { stat } from 'node:fs';

const promisifiedStat = promisify(stat);
promisifiedStat('.').then((stats) => {
  // Do something with `stats`
}).catch((error) => {
  // Handle the error.
});

Или, эквивалентно используя async functions:

import { promisify } from 'node:util';
import { stat } from 'node:fs';

const promisifiedStat = promisify(stat);

async function callStat() {
  const stats = await promisifiedStat('.');
  console.log(`This directory is owned by ${stats.uid}`);
}

callStat();

Если имеется original[util.promisify.custom] свойство, возвращает его значение, promisify см. сведения о пользовательских функциях.

promisify() предполагает, что original является функцией обратного вызова в качестве окончательного аргумента во всех случаях. Если original не является функцией, promisify() вызовет ошибку. Если original является функцией, но его последний аргумент не является обратным вызовом с ошибкой, он по-прежнему будет передан обратному вызову в качестве последнего аргумента.

Использование promisify() в методах класса или других методах, использующих this, может не работать должным образом, если только не обработано специально:

import { promisify } from 'node:util';

class Foo {
  constructor() {
    this.a = 42;
  }

  bar(callback) {
    callback(null, this.a);
  }
}

const foo = new Foo();

const naiveBar = promisify(foo.bar);
// TypeError: Cannot read properties of undefined (reading 'a')
// naiveBar().then(a => console.log(a));

naiveBar.call(foo).then((a) => console.log(a)); // '42'

const bindBar = naiveBar.bind(foo);
bindBar().then((a) => console.log(a)); // '42'
promisify<TResult>((callback: (err: any, result: TResult) => void) => void)
raiseCustomEvent(HTMLElement, string, any)

Вызывает настраиваемое событие с данными о событиях в указанном элементе HTML.

remove<T>((x: T) => boolean, T[])
setTraceSigInt(boolean)

Включение или отключение печати трассировки стека в SIGINT. API доступен только в основном потоке.

stripVTControlCharacters(string)

Возвращает str с удаленными кодами escape-кода ANSI.

console.log(util.stripVTControlCharacters('\u001B[4mvalue\u001B[0m'));
// Prints "value"
styleText(ForegroundColors | BackgroundColors | Modifiers | (ForegroundColors | BackgroundColors | Modifiers)[], string, StyleTextOptions)

Эта функция возвращает форматированный текст, учитывая format переданный для печати в терминале. Он знает о возможностях терминала и действует в соответствии с набором конфигурации с помощью NO_COLORNODE_DISABLE_COLORS переменных среды и FORCE_COLOR среды.

import { styleText } from 'node:util';
import { stderr } from 'node:process';

const successMessage = styleText('green', 'Success!');
console.log(successMessage);

const errorMessage = styleText(
  'red',
  'Error! Error!',
  // Validate if process.stderr has TTY
  { stream: stderr },
);
console.error(errorMessage);

util.inspect.colors также предоставляет текстовые форматы, такие как italic, и underline, и можно объединить оба:

console.log(
  util.styleText(['underline', 'italic'], 'My italic underlined message'),
);

При передаче массива форматов порядок применения формата слева направо, поэтому следующий стиль может перезаписать предыдущий.

console.log(
  util.styleText(['red', 'green'], 'text'), // green
);

Значение специального формата none не применяет к тексту дополнительные стили.

Полный список форматов можно найти в модификаторах.

toUSVString(string)

Возвращает string после замены любых суррогатных точек кода (или аналогично неоплачиваемых суррогатных единиц кода) с символом замены Юникода U+FFFD.

transferableAbortController()

Создает и возвращает экземпляр AbortController, AbortSignal которого помечены как переносимые и могут использоваться с structuredClone() или postMessage().

transferableAbortSignal(AbortSignal)

Помечает указанный AbortSignal как переносимый, чтобы его можно было использовать сstructuredClone() и postMessage().

const signal = transferableAbortSignal(AbortSignal.timeout(100));
const channel = new MessageChannel();
channel.port2.postMessage(signal, [signal]);

Сведения о функции

aborted(AbortSignal, any)

Прослушивает событие прерывания в предоставленном signal и возвращает обещание, которое разрешается при прерывании signal. Если resource предоставлено, он слабо ссылается на связанный объект операции, поэтому если resource собирается мусор до прерывания signal, то возвращенное обещание остается ожидаемым. Это предотвращает утечку памяти в длительных или неотменяемых операциях.

import { aborted } from 'node:util';

// Obtain an object with an abortable signal, like a custom resource or operation.
const dependent = obtainSomethingAbortable();

// Pass `dependent` as the resource, indicating the promise should only resolve
// if `dependent` is still in memory when the signal is aborted.
aborted(dependent.signal, dependent).then(() => {
  // This code runs when `dependent` is aborted.
  console.log('Dependent resource was aborted.');
});

// Simulate an event that triggers the abort.
dependent.on('event', () => {
  dependent.abort(); // This will cause the `aborted` promise to resolve.
});
function aborted(signal: AbortSignal, resource: any): Promise<void>

Параметры

signal

AbortSignal

resource

any

Любой объект, не допускающий значения NULL, привязанный к неизменяемой операции и удерживаемый слабо. Если resource собирается мусор до прерывания signal, обещание остается ожидающих, что позволит Node.js прекратить отслеживание. Это помогает предотвратить утечку памяти в длительных или неотменяемых операциях.

Возвращаемое значение

Promise<void>

addParamToUrl(string, string, string)

Добавляет параметр в заданный URL-адрес

function addParamToUrl(url: string, paramName: string, value: string): string

Параметры

url

string

paramName

string

value

string

Возвращаемое значение

string

assign(any[])

Копирует значения всех перечисленных свойств из одного или нескольких исходных объектов в целевой объект и возвращает целевой объект.

function assign(args: any[]): any

Параметры

args

any[]

Возвращаемое значение

any

autoAuthInEmbedUrl(string)

Проверяет, содержит ли URL-адрес внедрения autoAuth=true.

function autoAuthInEmbedUrl(embedUrl: string): boolean

Параметры

embedUrl

string

Возвращаемое значение

boolean

callbackify(() => Promise<void>)

Принимает функцию async (или функцию, возвращающую Promise) и возвращает функцию после стиля обратного вызова с ошибкой первого вызова, т. е. при выполнении обратного вызова (err, value) => ... в качестве последнего аргумента. В обратном вызове первый аргумент будет причиной отклонения (или null, если разрешено Promise), а второй аргумент будет разрешенным значением.

import { callbackify } from 'node:util';

async function fn() {
  return 'hello world';
}
const callbackFunction = callbackify(fn);

callbackFunction((err, ret) => {
  if (err) throw err;
  console.log(ret);
});

Будет напечатано:

hello world

Обратный вызов выполняется асинхронно и будет иметь ограниченную трассировку стека. Если обратный вызов вызывается, процесс выдает событие 'uncaughtException', а если не обработано, завершится.

Так как null имеет особое значение в качестве первого аргумента обратного вызова, если завернутая функция отклоняет Promise с ложным значением в качестве причины, значение упаковывается в Error с исходным значением, хранящимся в поле с именем reason.

function fn() {
  return Promise.reject(null);
}
const callbackFunction = util.callbackify(fn);

callbackFunction((err, ret) => {
  // When the Promise was rejected with `null` it is wrapped with an Error and
  // the original value is stored in `reason`.
  err && Object.hasOwn(err, 'reason') && err.reason === null;  // true
});
function callbackify(fn: () => Promise<void>): (callback: (err: NodeJS.ErrnoException) => void) => void

Параметры

fn

() => Promise<void>

Функция async

Возвращаемое значение

(callback: (err: NodeJS.ErrnoException) => void) => void

функция стиля обратного вызова

callbackify<T1, T2, T3, T4, T5, T6, TResult>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<TResult>)

function callbackify<T1, T2, T3, T4, T5, T6, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<TResult>

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void

callbackify<T1, T2, T3, T4, T5, T6>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<void>)

function callbackify<T1, T2, T3, T4, T5, T6>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException) => void) => void

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<void>

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException) => void) => void

callbackify<T1, T2, T3, T4, T5, TResult>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<TResult>)

function callbackify<T1, T2, T3, T4, T5, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<TResult>

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void

callbackify<T1, T2, T3, T4, T5>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<void>)

function callbackify<T1, T2, T3, T4, T5>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<void>

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void

callbackify<T1, T2, T3, T4, TResult>((arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<TResult>)

function callbackify<T1, T2, T3, T4, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<TResult>

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void

callbackify<T1, T2, T3, T4>((arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<void>)

function callbackify<T1, T2, T3, T4>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<void>

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void

callbackify<T1, T2, T3, TResult>((arg1: T1, arg2: T2, arg3: T3) => Promise<TResult>)

function callbackify<T1, T2, T3, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3) => Promise<TResult>

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void

callbackify<T1, T2, T3>((arg1: T1, arg2: T2, arg3: T3) => Promise<void>)

function callbackify<T1, T2, T3>(fn: (arg1: T1, arg2: T2, arg3: T3) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3) => Promise<void>

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void

callbackify<T1, T2, TResult>((arg1: T1, arg2: T2) => Promise<TResult>)

function callbackify<T1, T2, TResult>(fn: (arg1: T1, arg2: T2) => Promise<TResult>): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void

Параметры

fn

(arg1: T1, arg2: T2) => Promise<TResult>

Возвращаемое значение

(arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void

callbackify<T1, T2>((arg1: T1, arg2: T2) => Promise<void>)

function callbackify<T1, T2>(fn: (arg1: T1, arg2: T2) => Promise<void>): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void

Параметры

fn

(arg1: T1, arg2: T2) => Promise<void>

Возвращаемое значение

(arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void

callbackify<T1, TResult>((arg1: T1) => Promise<TResult>)

function callbackify<T1, TResult>(fn: (arg1: T1) => Promise<TResult>): (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void

Параметры

fn

(arg1: T1) => Promise<TResult>

Возвращаемое значение

(arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void

callbackify<T1>((arg1: T1) => Promise<void>)

function callbackify<T1>(fn: (arg1: T1) => Promise<void>): (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void

Параметры

fn

(arg1: T1) => Promise<void>

Возвращаемое значение

(arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void

callbackify<TResult>(() => Promise<TResult>)

function callbackify<TResult>(fn: () => Promise<TResult>): (callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void

Параметры

fn

() => Promise<TResult>

Возвращаемое значение

(callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void

createRandomString()

Создает случайное от 5 до 6 символьных строк.

function createRandomString(): string

Возвращаемое значение

string

debuglog(string, (fn: DebugLoggerFunction) => void)

Метод util.debuglog() используется для создания функции, которая условно записывает отладочные сообщения stderr в зависимости от существования переменной NODE_DEBUG среды. Если имя section отображается в значении этой переменной среды, возвращаемая функция работает аналогично console.error(). Если нет, возвращаемая функция является no-op.

import { debuglog } from 'node:util';
const log = debuglog('foo');

log('hello from foo [%d]', 123);

Если эта программа выполняется с NODE_DEBUG=foo в среде, она выдаст примерно следующее:

FOO 3245: hello from foo [123]

где 3245 является идентификатором процесса. Если он не выполняется с этим набором переменных среды, он не будет выводить ничего.

Кроме того, section поддерживает подстановочный знак:

import { debuglog } from 'node:util';
const log = debuglog('foo');

log('hi there, it\'s foo-bar [%d]', 2333);

Если он выполняется с NODE_DEBUG=foo* в среде, он выдаст примерно следующее:

FOO-BAR 3257: hi there, it's foo-bar [2333]

В переменной section среды могут быть указаны несколько имен, разделенных NODE_DEBUG запятыми: NODE_DEBUG=fs,net,tls

Необязательный аргумент callback можно использовать для замены функции ведения журнала другой функцией, которая не имеет инициализации или ненужной оболочки.

import { debuglog } from 'node:util';
let log = debuglog('internals', (debug) => {
  // Replace with a logging function that optimizes out
  // testing if the section is enabled
  log = debug;
});
function debuglog(section: string, callback?: (fn: DebugLoggerFunction) => void): DebugLogger

Параметры

section

string

Строка, определяющая часть приложения, для которой создается debuglog функция.

callback

(fn: DebugLoggerFunction) => void

Обратный вызов вызывается при первом вызове функции ведения журнала с аргументом функции, который является более оптимизированной функцией ведения журнала.

Возвращаемое значение

Функция ведения журнала

deprecate<T>(T, string, string)

Метод util.deprecate() упаковывает fn (который может быть функцией или классом), таким образом, чтобы он был помечен как устаревший.

import { deprecate } from 'node:util';

export const obsoleteFunction = deprecate(() => {
  // Do something here.
}, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.');

При вызове util.deprecate() возвращает функцию, которая будет выдавать DeprecationWarning с помощью события 'warning'. Предупреждение будет выведено и напечатано для stderr при первом вызове возвращаемой функции. После выдачи предупреждения функция-оболочка вызывается без предупреждения.

Если один и тот же необязательный code предоставляется в нескольких вызовах util.deprecate(), предупреждение будет выдаваться только один раз для этого code.

import { deprecate } from 'node:util';

const fn1 = deprecate(
  () => 'a value',
  'deprecation message',
  'DEP0001',
);
const fn2 = deprecate(
  () => 'a  different value',
  'other dep message',
  'DEP0001',
);
fn1(); // Emits a deprecation warning with code DEP0001
fn2(); // Does not emit a deprecation warning because it has the same code

Если используются флаги командной строки --no-deprecation или --no-warnings, либо если для свойства process.noDeprecation задано значение trueдо в качестве первого предупреждения об отмене, метод util.deprecate() ничего не делает.

Если заданы флаги командной строки --trace-deprecation или --trace-warnings, либо для свойства process.traceDeprecation задано значение true, предупреждение и трассировка стека печатаются в stderr при первом вызове нерекомендуемой функции.

Если установлен флаг командной строки --throw-deprecation или свойство process.throwDeprecation имеет значение true, то при вызове нерекомендуемой функции будет возникать исключение.

Флаг командной строки --throw-deprecation и свойство process.throwDeprecation имеет приоритет над --trace-deprecation и process.traceDeprecation.

function deprecate<T>(fn: T, msg: string, code?: string): T

Параметры

fn

T

Нерекомендуемая функция.

msg

string

Предупреждение, отображаемое при вызове нерекомендуемой функции.

code

string

Код нерекомендуемого использования. Список кодов см. в list of deprecated APIs.

Возвращаемое значение

T

Нерекомендуемая функция, заключенная в оболочку, чтобы вывести предупреждение.

diff(string | (readonly string[]), string | (readonly string[]))

util.diff() сравнивает два значения строки или массива и возвращает массив записей разницы. Он использует алгоритм диффа Myers для вычисления минимальных различий, который является тем же алгоритмом, который используется внутренне в сообщениях об ошибках утверждения.

Если значения равны, возвращается пустой массив.

const { diff } = require('node:util');

// Comparing strings
const actualString = '12345678';
const expectedString = '12!!5!7!';
console.log(diff(actualString, expectedString));
// [
//   [0, '1'],
//   [0, '2'],
//   [1, '3'],
//   [1, '4'],
//   [-1, '!'],
//   [-1, '!'],
//   [0, '5'],
//   [1, '6'],
//   [-1, '!'],
//   [0, '7'],
//   [1, '8'],
//   [-1, '!'],
// ]
// Comparing arrays
const actualArray = ['1', '2', '3'];
const expectedArray = ['1', '3', '4'];
console.log(diff(actualArray, expectedArray));
// [
//   [0, '1'],
//   [1, '2'],
//   [0, '3'],
//   [-1, '4'],
// ]
// Equal values return empty array
console.log(diff('same', 'same'));
// []
function diff(actual: string | (readonly string[]), expected: string | (readonly string[])): DiffEntry[]

Параметры

actual

string | (readonly string[])

Первое значение для сравнения

expected

string | (readonly string[])

Второе значение для сравнения

Возвращаемое значение

Массив записей разницы. Каждая запись представляет собой массив с двумя элементами:

  • Индекс 0: код операции: number-1 для удаления для 0 no-op/без изменений 1 для вставки
  • Индекс 1. string Значение, связанное с операцией

find<T>((x: T) => boolean, T[])

Находит первое значение в массиве, который соответствует указанному предикату.

function find<T>(predicate: (x: T) => boolean, xs: T[]): T

Параметры

predicate

(x: T) => boolean

xs

T[]

Возвращаемое значение

T

findIndex<T>((x: T) => boolean, T[])

Находит индекс первого значения в массиве, который соответствует указанному предикату.

function findIndex<T>(predicate: (x: T) => boolean, xs: T[]): number

Параметры

predicate

(x: T) => boolean

xs

T[]

Возвращаемое значение

number

format(any, any[])

Метод util.format() возвращает форматированную строку с помощью первого аргумента в виде строки формата printf, которая может содержать ноль или более описателей формата. Каждый описатель заменяется преобразованным значением из соответствующего аргумента. Поддерживаемые описатели:

Если у описателя нет соответствующего аргумента, он не заменен:

util.format('%s:%s', 'foo');
// Returns: 'foo:%s'

Значения, которые не являются частью строки форматирования, форматируются с помощью util.inspect(), если их тип не string.

Если в методе util.format() передается больше аргументов, чем число описателей, дополнительные аргументы объединяются в возвращаемую строку, разделенные пробелами:

util.format('%s:%s', 'foo', 'bar', 'baz');
// Returns: 'foo:bar baz'

Если первый аргумент не содержит допустимый описатель формата, util.format() возвращает строку, которая является объединением всех аргументов, разделенных пробелами:

util.format(1, 2, 3);
// Returns: '1 2 3'

Если в util.format()передается только один аргумент, он возвращается без форматирования:

util.format('%% %s');
// Returns: '%% %s'

util.format() — это синхронный метод, предназначенный в качестве средства отладки. Некоторые входные значения могут иметь значительные затраты на производительность, которые могут блокировать цикл событий. Используйте эту функцию с осторожностью и никогда не в пути к горячему коду.

function format(format?: any, param: any[]): string

Параметры

format

any

Строка формата printf.

param

any[]

Возвращаемое значение

string

formatWithOptions(InspectOptions, any, any[])

Эта функция идентична формату, за исключением того, что он принимает аргумент inspectOptions, который задает параметры, передаваемые проверки.

util.formatWithOptions({ colors: true }, 'See object %O', { foo: 42 });
// Returns 'See object { foo: 42 }', where `42` is colored as a number
// when printed to a terminal.
function formatWithOptions(inspectOptions: InspectOptions, format?: any, param: any[]): string

Параметры

inspectOptions
InspectOptions
format

any

param

any[]

Возвращаемое значение

string

generateUUID()

Создает 20 символов uuid.

function generateUUID(): string

Возвращаемое значение

string

getCallSites(GetCallSitesOptions)

function getCallSites(options: GetCallSitesOptions): CallSiteObject[]

Параметры

options

GetCallSitesOptions

Возвращаемое значение

getCallSites(number, GetCallSitesOptions)

Возвращает массив объектов сайта вызова, содержащих стек функции вызывающего объекта.

import { getCallSites } from 'node:util';

function exampleFunction() {
  const callSites = getCallSites();

  console.log('Call Sites:');
  callSites.forEach((callSite, index) => {
    console.log(`CallSite ${index + 1}:`);
    console.log(`Function Name: ${callSite.functionName}`);
    console.log(`Script Name: ${callSite.scriptName}`);
    console.log(`Line Number: ${callSite.lineNumber}`);
    console.log(`Column Number: ${callSite.column}`);
  });
  // CallSite 1:
  // Function Name: exampleFunction
  // Script Name: /home/example.js
  // Line Number: 5
  // Column Number: 26

  // CallSite 2:
  // Function Name: anotherFunction
  // Script Name: /home/example.js
  // Line Number: 22
  // Column Number: 3

  // ...
}

// A function to simulate another stack layer
function anotherFunction() {
  exampleFunction();
}

anotherFunction();

Можно восстановить исходные расположения, установив параметр sourceMap для true. Если исходная карта недоступна, исходное расположение будет совпадать с текущим расположением. Если флаг --enable-source-maps включен, например при использовании --experimental-transform-types, sourceMap будет true по умолчанию.

import { getCallSites } from 'node:util';

interface Foo {
  foo: string;
}

const callSites = getCallSites({ sourceMap: true });

// With sourceMap:
// Function Name: ''
// Script Name: example.js
// Line Number: 7
// Column Number: 26

// Without sourceMap:
// Function Name: ''
// Script Name: example.js
// Line Number: 2
// Column Number: 26
function getCallSites(frameCount?: number, options?: GetCallSitesOptions): CallSiteObject[]

Параметры

frameCount

number

Количество кадров для записи в качестве объектов сайта вызова. по умолчанию:10. Допустимый диапазон составляет от 1 до 200.

options

GetCallSitesOptions

Возвращаемое значение

Массив объектов сайта вызова

getRandomValue()

Возвращает случайное число

function getRandomValue(): number

Возвращаемое значение

number

getSystemErrorMap()

Возвращает карту всех системных кодов ошибок, доступных в API Node.js. Сопоставление кодов ошибок и имен ошибок зависит от платформы. См. Common System Errors имена распространенных ошибок.

fs.access('file/that/does/not/exist', (err) => {
  const errorMap = util.getSystemErrorMap();
  const name = errorMap.get(err.errno);
  console.error(name);  // ENOENT
});
function getSystemErrorMap(): Map<number, [string, string]>

Возвращаемое значение

Map<number, [string, string]>

getSystemErrorMessage(number)

Возвращает строковое сообщение для числового кода ошибки, полученного из API Node.js. Сопоставление кодов ошибок и строковых сообщений зависит от платформы.

fs.access('file/that/does/not/exist', (err) => {
  const message = util.getSystemErrorMessage(err.errno);
  console.error(message);  // no such file or directory
});
function getSystemErrorMessage(err: number): string

Параметры

err

number

Возвращаемое значение

string

getSystemErrorName(number)

Возвращает строковое имя числового кода ошибки, полученного из API Node.js. Сопоставление кодов ошибок и имен ошибок зависит от платформы. См. Common System Errors имена распространенных ошибок.

fs.access('file/that/does/not/exist', (err) => {
  const name = util.getSystemErrorName(err.errno);
  console.error(name);  // ENOENT
});
function getSystemErrorName(err: number): string

Параметры

err

number

Возвращаемое значение

string

getTimeDiffInMilliseconds(Date, Date)

Возвращает интервал времени между двумя датами в миллисекундах

function getTimeDiffInMilliseconds(start: Date, end: Date): number

Параметры

start

Date

end

Date

Возвращаемое значение

number

inherits(unknown, unknown)

Использование util.inherits() не рекомендуется. Чтобы получить поддержку наследования на уровне языка, используйте ключевые слова ES6 class и extends. Кроме того, обратите внимание, что два стиля семантически несовместимы.

Наследуйте методы прототипа от одного конструктора в другой. Прототип constructor будет установлен на новый объект, созданный из superConstructor.

Это в основном добавляет некоторую проверку входных данных поверх Object.setPrototypeOf(constructor.prototype, superConstructor.prototype). В качестве дополнительного удобства superConstructor будет доступен через свойство constructor.super_.

const util = require('node:util');
const EventEmitter = require('node:events');

function MyStream() {
  EventEmitter.call(this);
}

util.inherits(MyStream, EventEmitter);

MyStream.prototype.write = function(data) {
  this.emit('data', data);
};

const stream = new MyStream();

console.log(stream instanceof EventEmitter); // true
console.log(MyStream.super_ === EventEmitter); // true

stream.on('data', (data) => {
  console.log(`Received data: "${data}"`);
});
stream.write('It works!'); // Received data: "It works!"

Пример ES6 с помощью class и extends:

import EventEmitter from 'node:events';

class MyStream extends EventEmitter {
  write(data) {
    this.emit('data', data);
  }
}

const stream = new MyStream();

stream.on('data', (data) => {
  console.log(`Received data: "${data}"`);
});
stream.write('With ES6');
function inherits(constructor: unknown, superConstructor: unknown)

Параметры

constructor

unknown

superConstructor

unknown

inspect(any, boolean, null | number, boolean)

Метод util.inspect() возвращает строковое представление object, предназначенное для отладки. Выходные данные util.inspect могут изменяться в любое время и не должны зависеть от программного использования. Дополнительные options могут быть переданы, изменяющие результат. util.inspect() будет использовать имя конструктора и /или Symbol.toStringTag свойство, чтобы сделать идентифицируемый тег для проверяемого значения.

class Foo {
  get [Symbol.toStringTag]() {
    return 'bar';
  }
}

class Bar {}

const baz = Object.create(null, { [Symbol.toStringTag]: { value: 'foo' } });

util.inspect(new Foo()); // 'Foo [bar] {}'
util.inspect(new Bar()); // 'Bar {}'
util.inspect(baz);       // '[foo] {}'

Циклические ссылки указывают на привязку с помощью эталонного индекса:

import { inspect } from 'node:util';

const obj = {};
obj.a = [obj];
obj.b = {};
obj.b.inner = obj.b;
obj.b.obj = obj;

console.log(inspect(obj));
// <ref *1> {
//   a: [ [Circular *1] ],
//   b: <ref *2> { inner: [Circular *2], obj: [Circular *1] }
// }

В следующем примере проверяются все свойства объекта util:

import util from 'node:util';

console.log(util.inspect(util, { showHidden: true, depth: null }));

В следующем примере показан эффект параметра compact.

import { inspect } from 'node:util';

const o = {
  a: [1, 2, [[
    'Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit, sed do ' +
      'eiusmod \ntempor incididunt ut labore et dolore magna aliqua.',
    'test',
    'foo']], 4],
  b: new Map([['za', 1], ['zb', 'test']]),
};
console.log(inspect(o, { compact: true, depth: 5, breakLength: 80 }));

// { a:
//   [ 1,
//     2,
//     [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // A long line
//           'test',
//           'foo' ] ],
//     4 ],
//   b: Map(2) { 'za' => 1, 'zb' => 'test' } }

// Setting `compact` to false or an integer creates more reader friendly output.
console.log(inspect(o, { compact: false, depth: 5, breakLength: 80 }));

// {
//   a: [
//     1,
//     2,
//     [
//       [
//         'Lorem ipsum dolor sit amet,\n' +
//           'consectetur adipiscing elit, sed do eiusmod \n' +
//           'tempor incididunt ut labore et dolore magna aliqua.',
//         'test',
//         'foo'
//       ]
//     ],
//     4
//   ],
//   b: Map(2) {
//     'za' => 1,
//     'zb' => 'test'
//   }
// }

// Setting `breakLength` to e.g. 150 will print the "Lorem ipsum" text in a
// single line.

Параметр showHidden позволяет проверять WeakMap и WeakSet записи. Если есть больше записей, чем maxArrayLength, нет гарантии, какие записи отображаются. Это означает, что получение одного и того же WeakSet записей дважды может привести к разным выходным данным. Кроме того, записи без оставшихся надежных ссылок могут собираться в любое время.

import { inspect } from 'node:util';

const obj = { a: 1 };
const obj2 = { b: 2 };
const weakSet = new WeakSet([obj, obj2]);

console.log(inspect(weakSet, { showHidden: true }));
// WeakSet { { a: 1 }, { b: 2 } }

Параметр sorted гарантирует, что порядок вставки свойств объекта не влияет на результат util.inspect().

import { inspect } from 'node:util';
import assert from 'node:assert';

const o1 = {
  b: [2, 3, 1],
  a: '`a` comes before `b`',
  c: new Set([2, 3, 1]),
};
console.log(inspect(o1, { sorted: true }));
// { a: '`a` comes before `b`', b: [ 2, 3, 1 ], c: Set(3) { 1, 2, 3 } }
console.log(inspect(o1, { sorted: (a, b) => b.localeCompare(a) }));
// { c: Set(3) { 3, 2, 1 }, b: [ 2, 3, 1 ], a: '`a` comes before `b`' }

const o2 = {
  c: new Set([2, 1, 3]),
  a: '`a` comes before `b`',
  b: [2, 3, 1],
};
assert.strict.equal(
  inspect(o1, { sorted: true }),
  inspect(o2, { sorted: true }),
);

Параметр numericSeparator добавляет символ подчеркивания каждые три цифры ко всем числам.

import { inspect } from 'node:util';

const thousand = 1000;
const million = 1000000;
const bigNumber = 123456789n;
const bigDecimal = 1234.12345;

console.log(inspect(thousand, { numericSeparator: true }));
// 1_000
console.log(inspect(million, { numericSeparator: true }));
// 1_000_000
console.log(inspect(bigNumber, { numericSeparator: true }));
// 123_456_789n
console.log(inspect(bigDecimal, { numericSeparator: true }));
// 1_234.123_45

util.inspect() — это синхронный метод, предназначенный для отладки. Максимальная длина выходных данных составляет примерно 128 МиБ. Входные данные, которые приводят к более длительным выходным данным, будут усечены.

function inspect(object: any, showHidden?: boolean, depth?: null | number, color?: boolean): string

Параметры

object

any

Любой примитив JavaScript или Object.

showHidden

boolean

depth

null | number

color

boolean

Возвращаемое значение

string

Представление object.

inspect(any, InspectOptions)

function inspect(object: any, options?: InspectOptions): string

Параметры

object

any

options
InspectOptions

Возвращаемое значение

string

isArray(unknown)

Предупреждение

Теперь этот API является нерекомендуемым.

Since v4.0.0 - Use isArray instead.

Псевдоним для Array.isArray().

Возвращает true, если заданный object является Array. В противном случае возвращается false.

import util from 'node:util';

util.isArray([]);
// Returns: true
util.isArray(new Array());
// Returns: true
util.isArray({});
// Returns: false
function isArray(object: unknown): object

Параметры

object

unknown

Возвращаемое значение

object

isCreate(string)

Проверяет, является ли тип внедрения для создания

function isCreate(embedType: string): boolean

Параметры

embedType

string

Возвращаемое значение

boolean

isDeepStrictEqual(unknown, unknown, IsDeepStrictEqualOptions)

Возвращает true, если существует глубокое строгое равенство между val1 и val2. В противном случае возвращается false.

Дополнительные сведения о глубоком равенства см. в assert.deepStrictEqual().

function isDeepStrictEqual(val1: unknown, val2: unknown, options?: IsDeepStrictEqualOptions): boolean

Параметры

val1

unknown

val2

unknown

Возвращаемое значение

boolean

isRDLEmbed(string)

Проверяет, является ли URL-адрес внедрения отчетом RDL.

function isRDLEmbed(embedUrl: string): boolean

Параметры

embedUrl

string

Возвращаемое значение

boolean

isSavedInternal(HttpPostMessage, string, Window)

Проверяет, сохранен ли отчет.

function isSavedInternal(hpm: HttpPostMessage, uid: string, contentWindow: Window): Promise<boolean>

Параметры

hpm

HttpPostMessage

uid

string

contentWindow

Window

Возвращаемое значение

Promise<boolean>

parseArgs<T>(T)

Предоставляет API более высокого уровня для синтаксического анализа аргументов командной строки, чем взаимодействие с process.argv напрямую. Принимает спецификацию ожидаемых аргументов и возвращает структурированный объект с проанализированными параметрами и позициями.

import { parseArgs } from 'node:util';
const args = ['-f', '--bar', 'b'];
const options = {
  foo: {
    type: 'boolean',
    short: 'f',
  },
  bar: {
    type: 'string',
  },
};
const {
  values,
  positionals,
} = parseArgs({ args, options });
console.log(values, positionals);
// Prints: [Object: null prototype] { foo: true, bar: 'b' } []
function parseArgs<T>(config?: T): ParsedResults<T>

Параметры

config

T

Используется для предоставления аргументов для синтаксического анализа и настройки средства синтаксического анализа. config поддерживает следующие свойства:

Возвращаемое значение

ParsedResults<T>

Аргументы командной строки синтаксического анализа:

parseEnv(string)

Стабильность: 1.1 — активная разработка с учетом примера файла .env:

import { parseEnv } from 'node:util';

parseEnv('HELLO=world\nHELLO=oh my\n');
// Returns: { HELLO: 'oh my' }
function parseEnv(content: string): NodeJS.Dict<string>

Параметры

content

string

Необработанное содержимое файла .env.

Возвращаемое значение

NodeJS.Dict<string>

promisify((callback: (err?: any) => void) => void)

function promisify(fn: (callback: (err?: any) => void) => void): () => Promise<void>

Параметры

fn

(callback: (err?: any) => void) => void

Возвращаемое значение

() => Promise<void>

promisify(Function)

function promisify(fn: Function): Function

Параметры

fn

Function

Возвращаемое значение

Function

promisify<T1, T2, T3, T4, T5, TResult>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void)

function promisify<T1, T2, T3, T4, T5, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<TResult>

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<TResult>

promisify<T1, T2, T3, T4, T5>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void)

function promisify<T1, T2, T3, T4, T5>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<void>

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<void>

promisify<T1, T2, T3, T4, TResult>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void)

function promisify<T1, T2, T3, T4, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<TResult>

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<TResult>

promisify<T1, T2, T3, T4>((arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void)

function promisify<T1, T2, T3, T4>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<void>

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<void>

promisify<T1, T2, T3, TResult>((arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void)

function promisify<T1, T2, T3, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void): (arg1: T1, arg2: T2, arg3: T3) => Promise<TResult>

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3) => Promise<TResult>

promisify<T1, T2, T3>((arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void)

function promisify<T1, T2, T3>(fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void): (arg1: T1, arg2: T2, arg3: T3) => Promise<void>

Параметры

fn

(arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void

Возвращаемое значение

(arg1: T1, arg2: T2, arg3: T3) => Promise<void>

promisify<T1, T2, TResult>((arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void)

function promisify<T1, T2, TResult>(fn: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void): (arg1: T1, arg2: T2) => Promise<TResult>

Параметры

fn

(arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void

Возвращаемое значение

(arg1: T1, arg2: T2) => Promise<TResult>

promisify<T1, T2>((arg1: T1, arg2: T2, callback: (err?: any) => void) => void)

function promisify<T1, T2>(fn: (arg1: T1, arg2: T2, callback: (err?: any) => void) => void): (arg1: T1, arg2: T2) => Promise<void>

Параметры

fn

(arg1: T1, arg2: T2, callback: (err?: any) => void) => void

Возвращаемое значение

(arg1: T1, arg2: T2) => Promise<void>

promisify<T1, TResult>((arg1: T1, callback: (err: any, result: TResult) => void) => void)

function promisify<T1, TResult>(fn: (arg1: T1, callback: (err: any, result: TResult) => void) => void): (arg1: T1) => Promise<TResult>

Параметры

fn

(arg1: T1, callback: (err: any, result: TResult) => void) => void

Возвращаемое значение

(arg1: T1) => Promise<TResult>

promisify<T1>((arg1: T1, callback: (err?: any) => void) => void)

function promisify<T1>(fn: (arg1: T1, callback: (err?: any) => void) => void): (arg1: T1) => Promise<void>

Параметры

fn

(arg1: T1, callback: (err?: any) => void) => void

Возвращаемое значение

(arg1: T1) => Promise<void>

promisify<TCustom>(CustomPromisify<TCustom>)

Принимает функцию после стандартного стиля обратного вызова с первой ошибкой, т. е. принимая (err, value) => ... обратный вызов в качестве последнего аргумента, и возвращает версию, которая возвращает обещания.

import { promisify } from 'node:util';
import { stat } from 'node:fs';

const promisifiedStat = promisify(stat);
promisifiedStat('.').then((stats) => {
  // Do something with `stats`
}).catch((error) => {
  // Handle the error.
});

Или, эквивалентно используя async functions:

import { promisify } from 'node:util';
import { stat } from 'node:fs';

const promisifiedStat = promisify(stat);

async function callStat() {
  const stats = await promisifiedStat('.');
  console.log(`This directory is owned by ${stats.uid}`);
}

callStat();

Если имеется original[util.promisify.custom] свойство, возвращает его значение, promisify см. сведения о пользовательских функциях.

promisify() предполагает, что original является функцией обратного вызова в качестве окончательного аргумента во всех случаях. Если original не является функцией, promisify() вызовет ошибку. Если original является функцией, но его последний аргумент не является обратным вызовом с ошибкой, он по-прежнему будет передан обратному вызову в качестве последнего аргумента.

Использование promisify() в методах класса или других методах, использующих this, может не работать должным образом, если только не обработано специально:

import { promisify } from 'node:util';

class Foo {
  constructor() {
    this.a = 42;
  }

  bar(callback) {
    callback(null, this.a);
  }
}

const foo = new Foo();

const naiveBar = promisify(foo.bar);
// TypeError: Cannot read properties of undefined (reading 'a')
// naiveBar().then(a => console.log(a));

naiveBar.call(foo).then((a) => console.log(a)); // '42'

const bindBar = naiveBar.bind(foo);
bindBar().then((a) => console.log(a)); // '42'
function promisify<TCustom>(fn: CustomPromisify<TCustom>): TCustom

Параметры

fn

CustomPromisify<TCustom>

Возвращаемое значение

TCustom

promisify<TResult>((callback: (err: any, result: TResult) => void) => void)

function promisify<TResult>(fn: (callback: (err: any, result: TResult) => void) => void): () => Promise<TResult>

Параметры

fn

(callback: (err: any, result: TResult) => void) => void

Возвращаемое значение

() => Promise<TResult>

raiseCustomEvent(HTMLElement, string, any)

Вызывает настраиваемое событие с данными о событиях в указанном элементе HTML.

function raiseCustomEvent(element: HTMLElement, eventName: string, eventData: any)

Параметры

element

HTMLElement

eventName

string

eventData

any

remove<T>((x: T) => boolean, T[])

function remove<T>(predicate: (x: T) => boolean, xs: T[])

Параметры

predicate

(x: T) => boolean

xs

T[]

setTraceSigInt(boolean)

Включение или отключение печати трассировки стека в SIGINT. API доступен только в основном потоке.

function setTraceSigInt(enable: boolean)

Параметры

enable

boolean

stripVTControlCharacters(string)

Возвращает str с удаленными кодами escape-кода ANSI.

console.log(util.stripVTControlCharacters('\u001B[4mvalue\u001B[0m'));
// Prints "value"
function stripVTControlCharacters(str: string): string

Параметры

str

string

Возвращаемое значение

string

styleText(ForegroundColors | BackgroundColors | Modifiers | (ForegroundColors | BackgroundColors | Modifiers)[], string, StyleTextOptions)

Эта функция возвращает форматированный текст, учитывая format переданный для печати в терминале. Он знает о возможностях терминала и действует в соответствии с набором конфигурации с помощью NO_COLORNODE_DISABLE_COLORS переменных среды и FORCE_COLOR среды.

import { styleText } from 'node:util';
import { stderr } from 'node:process';

const successMessage = styleText('green', 'Success!');
console.log(successMessage);

const errorMessage = styleText(
  'red',
  'Error! Error!',
  // Validate if process.stderr has TTY
  { stream: stderr },
);
console.error(errorMessage);

util.inspect.colors также предоставляет текстовые форматы, такие как italic, и underline, и можно объединить оба:

console.log(
  util.styleText(['underline', 'italic'], 'My italic underlined message'),
);

При передаче массива форматов порядок применения формата слева направо, поэтому следующий стиль может перезаписать предыдущий.

console.log(
  util.styleText(['red', 'green'], 'text'), // green
);

Значение специального формата none не применяет к тексту дополнительные стили.

Полный список форматов можно найти в модификаторах.

function styleText(format: ForegroundColors | BackgroundColors | Modifiers | (ForegroundColors | BackgroundColors | Modifiers)[], text: string, options?: StyleTextOptions): string

Параметры

format

ForegroundColors | BackgroundColors | Modifiers | (ForegroundColors | BackgroundColors | Modifiers)[]

Текстовый формат или массив текстовых форматов, определенных в util.inspect.colors.

text

string

Отформатированный текст.

Возвращаемое значение

string

toUSVString(string)

Возвращает string после замены любых суррогатных точек кода (или аналогично неоплачиваемых суррогатных единиц кода) с символом замены Юникода U+FFFD.

function toUSVString(string: string): string

Параметры

string

string

Возвращаемое значение

string

transferableAbortController()

Создает и возвращает экземпляр AbortController, AbortSignal которого помечены как переносимые и могут использоваться с structuredClone() или postMessage().

function transferableAbortController(): AbortController

Возвращаемое значение

AbortController

Переносимый abortController

transferableAbortSignal(AbortSignal)

Помечает указанный AbortSignal как переносимый, чтобы его можно было использовать сstructuredClone() и postMessage().

const signal = transferableAbortSignal(AbortSignal.timeout(100));
const channel = new MessageChannel();
channel.port2.postMessage(signal, [signal]);
function transferableAbortSignal(signal: AbortSignal): AbortSignal

Параметры

signal

AbortSignal

The AbortSignal

Возвращаемое значение

AbortSignal

Тот же abortSignal