APIs do Node.js
Os módulos do Node.js que uma function pode importar no Azion Runtime, o status de suporte de cada um e o que as chamadas deles retornam ou lançam.
O Azion Runtime é compatível com uma parte das APIs do Node.js, não com todas. Uma function, e cada pacote npm de que ela depende, pode importar os 68 módulos do Node.js da tabela abaixo. Cada um é resolvido quando o build empacota a function e carrega em uma function após o deploy e no azion dev. O status de um módulo informa quanto da API dele funciona quando a function o chama.
Importação de módulos
Uma function importa um módulo do Node.js com a sintaxe padrão de import e o prefixo node::
Um polyfill é um código que adiciona um recurso a um ambiente que não o tem. O build resolve por meio de polyfills as APIs do Node.js que o runtime não oferece, e a configuração polyfills do azion.config.js define se o build os adiciona. A lista de APIs que o build resolve por meio de polyfills está no pacote @aziontech/unenv-preset, que também aceita contribuições.
Suporte aos módulos
A tabela lista cada módulo com o seu status. Quando existe uma página do módulo, o nome do módulo leva a ela. A coluna Observações informa o que uma function recebe quando chama o módulo, quando esse comportamento é conhecido.
- 🟢 Suportado: a API funciona normalmente em tempo de execução.
- 🟡 Parcialmente suportado: apenas alguns métodos ou recursos estão disponíveis.
- 🔴 Somente para build: o módulo é incluído para que o build seja concluído sem erros, mas as chamadas à API dele não funcionam em tempo de execução.
| Módulo | Status | Observações |
|---|---|---|
| _http_agent | 🟡 Parcialmente suportado | — |
| _http_client | 🟡 Parcialmente suportado | — |
| _http_common | 🟡 Parcialmente suportado | — |
| _http_incoming | 🟡 Parcialmente suportado | — |
| _http_outgoing | 🟡 Parcialmente suportado | — |
| _http_server | 🟡 Parcialmente suportado | — |
| _stream_duplex | 🟡 Parcialmente suportado | — |
| _stream_passthrough | 🟡 Parcialmente suportado | — |
| _stream_readable | 🟡 Parcialmente suportado | — |
| _stream_transform | 🟡 Parcialmente suportado | — |
| _stream_wrap | 🟡 Parcialmente suportado | — |
| _stream_writable | 🟡 Parcialmente suportado | — |
| _tls_common | 🟡 Parcialmente suportado | — |
| _tls_wrap | 🟡 Parcialmente suportado | — |
| assert | 🟡 Parcialmente suportado | assert.strictEqual(1, 2) lança um AssertionError. |
| assert/strict | 🟡 Parcialmente suportado | — |
| async_hooks | 🟡 Parcialmente suportado | Apenas AsyncLocalStorage e AsyncResource estão implementados, e ambos funcionam. Exemplo de código. |
| buffer | 🟡 Parcialmente suportado | Buffer também é uma global. As funções de nível de módulo, como buffer.isAscii(), não são suportadas. |
| child_process | 🟡 Parcialmente suportado | — |
| cluster | 🟢 Suportado | — |
| console | 🟢 Suportado | — |
| constants | 🟢 Suportado | — |
| crypto | 🟡 Parcialmente suportado | createHash(), createHmac(), randomBytes(), randomUUID() e subtle funcionam. |
| dgram | 🟢 Suportado | — |
| diagnostics_channel | 🟢 Suportado | — |
| dns | 🔴 Somente para build | dns.lookup() lança Error: [unenv] dns.lookup is not implemented yet!. |
| dns/promises | 🔴 Somente para build | — |
| domain | 🟢 Suportado | — |
| events | 🟢 Suportado | — |
| fs | 🟡 Parcialmente suportado | Uma function não pode gravar arquivos: fs.writeFileSync() lança Error: unsupported. As leituras síncronas usam o sistema de arquivos em memória que a configuração build.memoryFS preenche. Em um caminho que o build não incorporou, fs.readFileSync() lança ENOENT, e a forma com callback de fs.readFile() recebe Error: missing storage annotation. |
| fs/promises | 🟡 Parcialmente suportado | Em um caminho que o build não incorporou, readFile(), writeFile(), readdir() e stat() rejeitam com Error: missing storage annotation. |
| http | 🟡 Parcialmente suportado | http.STATUS_CODES e http.METHODS podem ser lidos. http.request(), http.get() e http.createServer() lançam [unenv] … is not implemented yet!. |
| http2 | 🟡 Parcialmente suportado | — |
| https | 🟡 Parcialmente suportado | https.get() lança Error: [unenv] https.get is not implemented yet!. |
| inspector | 🟢 Suportado | — |
| inspector/promises | 🟡 Parcialmente suportado | — |
| module | 🟡 Parcialmente suportado | Comporta-se da mesma forma em uma function após o deploy e no azion dev. module.builtinModules lista 65 nomes, e module.createRequire() retorna undefined. |
| net | 🟡 Parcialmente suportado | — |
| os | 🟡 Parcialmente suportado | Todos os membros retornam sem lançar erro, com valores fixos que não descrevem a máquina: os.platform() retorna linux, os.type() retorna Linux e os.hostname() retorna uma string vazia. |
| path | 🟢 Suportado | Todas as funções operam sobre strings de caminho, sem acesso ao sistema de arquivos. |
| path/posix | 🟢 Suportado | path.posix.join() retorna os mesmos caminhos que path.join(). |
| path/win32 | 🟡 Parcialmente suportado | Une os segmentos com /: path.win32.join("C:\\a", "b") retorna C:/a/b. |
| perf_hooks | 🟢 Suportado | performance.now() é uma função. |
| process | 🟡 Parcialmente suportado | process.env contém as variáveis de ambiente da sua conta: leia uma delas como process.env.VAR_NAME. process.platform e process.arch são strings vazias, e process.pid é 200. |
| punycode | 🟡 Parcialmente suportado | — |
| querystring | 🟡 Parcialmente suportado | querystring.stringify({ a: [1, 2], b: 'x y' }) retorna a=1&a=2&b=x%20y. |
| readline | 🟢 Suportado | — |
| readline/promises | 🟢 Suportado | — |
| repl | 🟡 Parcialmente suportado | — |
| stream | 🟡 Parcialmente suportado | Readable, Writable, Duplex, Transform, PassThrough e a forma com callback de pipeline() funcionam. |
| stream/consumers | 🟡 Parcialmente suportado | — |
| stream/promises | 🟡 Parcialmente suportado | pipeline() lança Error: [unenv] stream.promises.pipeline is not implemented yet!. |
| stream/web | 🟢 Suportado | — |
| string_decoder | 🟢 Suportado | — |
| sys | 🟡 Parcialmente suportado | — |
| timers | 🟡 Parcialmente suportado | O callback de um timer deve ser uma função: uma string ou um número no lugar dele lança EvalError: eval not allowed on setTimeout/setInterval parameter. |
| timers/promises | 🟡 Parcialmente suportado | O iterador assíncrono que setInterval() retorna produz um valor e depois termina. |
| tls | 🟡 Parcialmente suportado | — |
| trace_events | 🟢 Suportado | — |
| tty | 🟢 Suportado | — |
| url | 🟡 Parcialmente suportado | URL e URLSearchParams são globais. url.parse(), url.format(), url.resolve(), url.fileURLToPath(), url.pathToFileURL() e url.domainToASCII() funcionam. |
| util | 🟡 Parcialmente suportado | util.promisify(), util.inspect() e util.format() funcionam. |
| util/types | 🟡 Parcialmente suportado | util.types.isNativeError() lança Error: [unenv] util.types.isNativeError is not implemented yet!. |
| v8 | 🟢 Suportado | — |
| vm | 🟡 Parcialmente suportado | Nenhum método executa código: runInThisContext(), runInNewContext(), runInContext() e Script.runInThisContext() lançam [unenv] … is not implemented yet!. |
| wasi | 🟢 Suportado | — |
| worker_threads | 🟡 Parcialmente suportado | — |
| zlib | 🟡 Parcialmente suportado | zlib.constants está disponível, mas nenhuma função comprime dados: zlib.gzipSync() lança Error: [unenv] zlib.gzipSync is not implemented yet!. Para comprimir dados, use a API Web CompressionStream. |