node:util
O módulo node:util no Azion Runtime: helpers para converter callbacks em promises, inspecionar objetos, formatar strings e verificar tipos.
O módulo node:util reúne as funções auxiliares do Node.js para tarefas comuns com dados: formatar strings, inspecionar objetos para depuração, converter funções no estilo callback em promises e verificar tipos de valores em tempo de execução. O Azion Runtime oferece suporte ao módulo por meio da compatibilidade com Node.js. Dentro de uma function, use util.promisify() para adaptar código baseado em callbacks a async/await e util.inspect() para registrar dados estruturados no log.
Exemplos
Cada exemplo é uma function completa que importa util de node:util. A resposta abaixo de cada exemplo é a que uma function com deploy feito retorna.
Promisify e inspect
Esta function converte uma função no estilo callback em uma promise, aguarda a promise e registra o resultado no log com util.inspect():
A function registra "Success!" no log e responde com:
Conversão de callback em promise
Esta function encapsula uma API baseada em callbacks com util.promisify() e a chama duas vezes com await:
A function responde com os dois resultados:
Os dois timestamps são iguais porque, em uma function após o deploy, Date.now() não avança durante uma requisição.
Inspeção profunda de objetos
Esta function inspeciona os detalhes da requisição e um objeto aninhado, e monta uma string com util.format():
Para uma requisição GET a https://example.com/, a function responde com os detalhes da requisição, a string formatada e o objeto inspecionado:
No Azion Runtime, util.inspect() imprime complexData como texto JSON indentado, com todos os níveis expandidos, embora a chamada passe depth: 2.
Formatação de strings e descontinuação
Esta function formata strings com placeholders, marca uma função como obsoleta com util.deprecate() e a chama:
A function responde com as strings formatadas e o resultado de cada função:
Os placeholders %s, %d, %j e %% funcionam como o exemplo mostra. O placeholder %i não é substituído: util.format() mantém %i na saída como foi escrito.
APIs suportadas
A tabela lista o status de cada API de node:util no Azion Runtime:
| API | Status |
|---|---|
util.promisify() | 🟢 Com suporte |
util.inspect() | 🟢 Com suporte |
util.format() | 🟢 Com suporte |
util.deprecate() | 🟢 Com suporte |
util.isDeepStrictEqual() | 🟢 Com suporte |
util.inherits() | 🟡 Obsoleta (use classes ES6) |
util.callbackify() | 🟡 Parcialmente suportado |
util.formatWithOptions() | 🟡 Parcialmente suportado |
util.getSystemErrorMap() | 🟡 Parcialmente suportado |
util.getSystemErrorName() | 🟡 Parcialmente suportado |
util.log() | 🟡 Parcialmente suportado |
util.stripVTControlCharacters() | 🟡 Parcialmente suportado |
util.styleText() | 🟡 Parcialmente suportado |
util.types.isDate() | 🟢 Com suporte |
util.types.isRegExp() | 🟢 Com suporte |
util.types.isPromise() | 🟢 Com suporte |
util.types.isArrayBuffer() | 🟢 Com suporte |
util.types.isNativeError() | 🔴 Sem suporte |
util.types.isTypedArray() | 🟢 Com suporte |
util.types.isMap() | 🟢 Com suporte |
util.types.isSet() | 🟢 Com suporte |
util.types.isCryptoKey() | 🟢 Com suporte |
util.types.isKeyObject() | 🟢 Com suporte |
As APIs marcadas como 🟡 Parcialmente suportado têm funcionalidade limitada em comparação com a implementação completa do Node.js.
util.types verifica o tipo de um valor em tempo de execução, como alternativa a instanceof. util.types.isDate(), util.types.isPromise() e util.types.isRegExp() retornam true para um valor correspondente. util.types.isNativeError() lança Error: [unenv] util.types.isNativeError is not implemented yet! em uma function após o deploy e com azion dev.
O Node.js considera util.inherits() obsoleta desde a v5.0.0; use a sintaxe class com extends. No Azion Runtime, EventEmitter de node:events é uma classe, então uma função construtora que chama EventEmitter.call(this) para herdar dela lança TypeError: Class constructor e cannot be invoked without 'new'.