# WritableStreamDefaultWriter

A interface `WritableStreamDefaultWriter` faz parte da Streams API do Azion Runtime. Uma chamada a [`WritableStream.getWriter()`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream/getWriter) retorna um writer e bloqueia o stream para ele, de modo que nenhum outro writer pode escrever no destino subjacente até que o bloqueio seja liberado. Para mais informações, consulte [WritableStreamDefaultWriter](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter) na MDN Web Docs.

---

## Construtor

O construtor [`WritableStreamDefaultWriter()`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter/WritableStreamDefaultWriter) cria um writer para o stream que você passa para ele:

```javascript
new WritableStreamDefaultWriter(stream)
```

O parâmetro `stream` é o `WritableStream` em que o writer escreve. Uma chamada a `stream.getWriter()` retorna um objeto do mesmo tipo.

---

## Propriedades

| Propriedade                                                                                               | Tipo    | Descrição                                                                                                                                                                       |
| --------------------------------------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`closed`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter/closed)           | Promise | É cumprida quando o stream é fechado. É rejeitada quando o stream lança um erro ou quando o bloqueio do writer é liberado. Use-a para executar código quando o stream termina.  |
| [`desiredSize`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter/desiredSize) | Number  | Tamanho que ainda falta para preencher a fila interna do stream. Um stream criado com `new CountQueuingStrategy({ highWaterMark: 2 })` informa `2` antes da primeira escrita.   |
| [`ready`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter/ready)             | Promise | É resolvida quando o tamanho desejado da fila interna do stream muda de zero ou menos para um valor positivo. Essa mudança sinaliza que o stream não aplica mais contrapressão. |

---

## Métodos

| Método                                                                                                             | Descrição                                                                                                                                                                                                                                                                                          |
| ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`writer.abort()`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter/abort)             | Aborta o stream. O produtor não pode mais escrever nele, o stream passa imediatamente para um estado de erro e as escritas que estão na fila são descartadas.                                                                                                                                      |
| [`writer.close()`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter/close)             | Fecha o writable stream do writer. Retorna uma promise.                                                                                                                                                                                                                                            |
| [`writer.releaseLock()`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter/releaseLock) | Libera o bloqueio do writer sobre o stream, e o writer deixa de estar ativo. Depois da chamada, a propriedade `locked` do stream é `false`. Se o stream está com erro quando o bloqueio é liberado, o writer passa a informar o mesmo erro; caso contrário, ele informa que o stream está fechado. |
| [`writer.write(chunk)`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter/write)        | Escreve `chunk` no stream e no sink subjacente dele. Retorna uma promise que é resolvida ou rejeitada para informar se a escrita teve sucesso.                                                                                                                                                     |

---

## Exemplo

Este handler cria um `WritableStream` cujo sink coleta cada chunk, obtém um writer, escreve dois chunks e fecha o writer. Ele retorna o estado do stream e do writer antes das escritas, junto com os chunks que o sink recebeu:

```javascript
export default {
  async fetch(request, env, ctx) {
    const got = [];
    const stream = new WritableStream(
      {
        write(chunk) {
          got.push(chunk);
        },
      },
      new CountQueuingStrategy({ highWaterMark: 2 }),
    );
    const writer = stream.getWriter();
    const info = {
      locked: stream.locked,
      ctor: writer.constructor.name,
      desiredSize: writer.desiredSize,
    };
    await writer.ready;
    await writer.write('one');
    await writer.write('two');
    await writer.close();
    await writer.closed;
    return Response.json({ ...info, got });
  },
};
```

A function retorna estes valores. O stream está bloqueado para o writer, e o sink recebe os dois chunks em ordem:

```json
{
 "locked": true,
 "ctor": "WritableStreamDefaultWriter",
 "desiredSize": 2,
 "got": [
  "one",
  "two"
 ]
}
```

---

## Recursos relacionados

- [WritableStream](/pt-br/documentacao/devtools/runtime/api-reference/writable-stream.md): O stream que um writer bloqueia e no qual escreve, com os métodos dele.
- [ReadableStream](/pt-br/documentacao/devtools/runtime/api-reference/readable-stream.md): Como canalizar um readable stream para um writable stream com `pipeTo()`.
- [TransformStream](/pt-br/documentacao/devtools/runtime/api-reference/transform-stream.md): Um par formado por um writable stream e um readable stream que altera os chunks à medida que eles passam.
- [Web APIs](/pt-br/documentacao/devtools/runtime/api-reference/javascript.md): As outras Web APIs que o Azion Runtime suporta.
