buffer: implement blob.textStream() · nodejs/node@55f4844 · GitHub
Skip to content

Commit 55f4844

Browse files
KhafraDevrichardlau
authored andcommitted
buffer: implement blob.textStream()
Signed-off-by: Matthew Aitken <maitken033380023@gmail.com> PR-URL: #64036 Refs: w3c/FileAPI@cd1d1da Refs: nodejs/undici@0d6ecc5 Reviewed-By: René <contact.9a5d6388@renegade334.me.uk> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Mattias Buelens <mattias@buelens.com>
1 parent eda91b6 commit 55f4844

3 files changed

Lines changed: 54 additions & 1 deletion

File tree

doc/api/buffer.md

Lines changed: 14 additions & 0 deletions

lib/internal/blob.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ const kNotCloneable = Symbol('kNotCloneable');
8585
const disallowedTypeCharacters = /[^\u{0020}-\u{007E}]/u;
8686

8787
let ReadableStream;
88+
let TextDecoderStream;
8889

8990
const enc = new TextEncoder();
9091
let dec;
@@ -100,6 +101,13 @@ function lazyReadableStream(options) {
100101
return new ReadableStream(options);
101102
}
102103

104+
function lazyTextDecoderStream() {
105+
// eslint-disable-next-line no-global-assign
106+
TextDecoderStream ??=
107+
require('internal/webstreams/encoding').TextDecoderStream;
108+
return new TextDecoderStream();
109+
}
110+
103111
const { EOL } = require('internal/constants');
104112

105113
function isBlob(object) {
@@ -325,6 +333,17 @@ class Blob {
325333
throw new ERR_INVALID_THIS('Blob');
326334
return createBlobReaderStream(this[kHandle].getReader());
327335
}
336+
337+
/**
338+
* @returns {ReadableStream}
339+
*/
340+
textStream() {
341+
if (!isBlob(this))
342+
throw new ERR_INVALID_THIS('Blob');
343+
const stream = createBlobReaderStream(this[kHandle].getReader());
344+
const decoder = lazyTextDecoderStream();
345+
return stream.pipeThrough(decoder);
346+
}
328347
}
329348

330349
function TransferableBlob(handle, length, type = '') {
@@ -358,6 +377,7 @@ ObjectDefineProperties(Blob.prototype, {
358377
type: kEnumerableProperty,
359378
slice: kEnumerableProperty,
360379
stream: kEnumerableProperty,
380+
textStream: kEnumerableProperty,
361381
text: kEnumerableProperty,
362382
arrayBuffer: kEnumerableProperty,
363383
bytes: kEnumerableProperty,

test/parallel/test-blob.js

Lines changed: 20 additions & 1 deletion

0 commit comments

Comments
 (0)