@@ -43,13 +43,11 @@ class TransformationResultImpl implements ImageTransformationResult {
43
43
public image (
44
44
options ?: ImageTransformationOutputOptions
45
45
) : ReadableStream < Uint8Array > {
46
- let stream = this . bindingsResponse . body || new ReadableStream ( ) ;
46
+ const stream = this . bindingsResponse . body || new Blob ( ) . stream ( ) ;
47
47
48
- if ( options ?. encoding === 'base64' ) {
49
- stream = stream . pipeThrough ( createBase64EncoderTransformStream ( ) ) ;
50
- }
51
-
52
- return stream ;
48
+ return options ?. encoding === 'base64'
49
+ ? stream . pipeThrough ( createBase64EncoderTransformStream ( ) )
50
+ : stream ;
53
51
}
54
52
55
53
public response ( ) : Response {
@@ -216,10 +214,10 @@ class ImagesBindingImpl implements ImagesBinding {
216
214
) : Promise < ImageInfoResponse > {
217
215
const body = new StreamableFormData ( ) ;
218
216
219
- let decodedStream = stream ;
220
- if ( options ?. encoding === 'base64' ) {
221
- decodedStream = stream . pipeThrough ( createBase64DecoderTransformStream ( ) ) ;
222
- }
217
+ const decodedStream =
218
+ options ?. encoding === 'base64'
219
+ ? stream . pipeThrough ( createBase64DecoderTransformStream ( ) )
220
+ : stream ;
223
221
224
222
body . append ( 'image' , decodedStream , { type : 'file' } ) ;
225
223
@@ -254,11 +252,10 @@ class ImagesBindingImpl implements ImagesBinding {
254
252
stream : ReadableStream < Uint8Array > ,
255
253
options ?: ImageInputOptions
256
254
) : ImageTransformer {
257
- let decodedStream = stream ;
258
-
259
- if ( options ?. encoding === 'base64' ) {
260
- decodedStream = stream . pipeThrough ( createBase64DecoderTransformStream ( ) ) ;
261
- }
255
+ const decodedStream =
256
+ options ?. encoding === 'base64'
257
+ ? stream . pipeThrough ( createBase64DecoderTransformStream ( ) )
258
+ : stream ;
262
259
263
260
return new ImageTransformerImpl ( this . fetcher , decodedStream ) ;
264
261
}
@@ -334,13 +331,15 @@ function concatUint8Arrays(a: Uint8Array, b: Uint8Array): Uint8Array {
334
331
return result ;
335
332
}
336
333
337
- class Base64Error extends Error {
338
- public constructor ( cause : unknown ) {
339
- if ( cause instanceof Error ) {
340
- super ( `base64 error: ${ cause . message } ` , { cause } ) ;
341
- } else {
342
- super ( 'unknown base64 error' ) ;
343
- }
334
+ function base64Error ( cause : unknown ) : Error {
335
+ // @ts -expect-error: Error.isError seems to be missing from types?
336
+ const isError : ( _ : unknown ) => boolean = Error . isError ; // eslint-disable-line @typescript-eslint/no-unsafe-assignment
337
+
338
+ if ( isError ( cause ) ) {
339
+ const e = cause as Error ;
340
+ return new Error ( `base64 error: ${ e . message } ` , { cause } ) ;
341
+ } else {
342
+ return new Error ( 'unknown base64 error' ) ;
344
343
}
345
344
}
346
345
@@ -373,28 +372,28 @@ function createBase64EncoderTransformStream(
373
372
374
373
while ( currentData . length - offset >= maxEncodeChunkSize ) {
375
374
const sliceToEnd = offset + maxEncodeChunkSize ;
376
- const processChunk = currentData . slice ( offset , sliceToEnd ) ;
375
+ const processChunk = currentData . subarray ( offset , sliceToEnd ) ;
377
376
offset = sliceToEnd ;
378
377
379
378
try {
380
379
controller . enqueue ( toBase64 ( processChunk ) ) ;
381
380
} catch ( error ) {
382
- controller . error ( new Base64Error ( error ) ) ;
381
+ controller . error ( base64Error ( error ) ) ;
383
382
buffer = null ;
384
383
return ;
385
384
}
386
385
}
387
386
388
- buffer = offset < currentData . length ? currentData . slice ( offset ) : null ;
387
+ buffer =
388
+ offset < currentData . length ? currentData . subarray ( offset ) : null ;
389
389
} ,
390
390
391
391
flush ( controller ) : void {
392
392
if ( buffer && buffer . length > 0 ) {
393
393
try {
394
394
controller . enqueue ( toBase64 ( buffer ) ) ;
395
395
} catch ( error ) {
396
- const errMsg = error instanceof Error ? error . message : String ( error ) ;
397
- controller . error ( new Error ( `base64 encoding error: ${ errMsg } ` ) ) ;
396
+ controller . error ( base64Error ( error ) ) ;
398
397
}
399
398
}
400
399
buffer = null ;
@@ -430,7 +429,7 @@ function createBase64DecoderTransformStream(
430
429
}
431
430
return true ;
432
431
} catch ( error ) {
433
- controller . error ( new Base64Error ( error ) ) ;
432
+ controller . error ( base64Error ( error ) ) ;
434
433
return false ;
435
434
}
436
435
} ;
@@ -442,10 +441,10 @@ function createBase64DecoderTransformStream(
442
441
: chunk ;
443
442
444
443
while ( base64Buffer && base64Buffer . length >= maxChunkSize ) {
445
- const base64SegmentBytes = base64Buffer . slice ( 0 , maxChunkSize ) ;
444
+ const base64SegmentBytes = base64Buffer . subarray ( 0 , maxChunkSize ) ;
446
445
base64Buffer =
447
446
base64Buffer . length > maxChunkSize
448
- ? base64Buffer . slice ( maxChunkSize )
447
+ ? base64Buffer . subarray ( maxChunkSize )
449
448
: null ;
450
449
451
450
if ( ! decodeAndEnqueueSegment ( base64SegmentBytes , controller ) ) {
@@ -458,13 +457,13 @@ function createBase64DecoderTransformStream(
458
457
Math . floor ( base64Buffer ?. length ?? 0 / 4 ) * 4 ;
459
458
if ( remainingProcessableLength > 0 ) {
460
459
if ( base64Buffer ) {
461
- const base64SegmentBytes = base64Buffer . slice (
460
+ const base64SegmentBytes = base64Buffer . subarray (
462
461
0 ,
463
462
remainingProcessableLength
464
463
) ;
465
464
base64Buffer =
466
465
base64Buffer . length > remainingProcessableLength
467
- ? base64Buffer . slice ( remainingProcessableLength )
466
+ ? base64Buffer . subarray ( remainingProcessableLength )
468
467
: null ;
469
468
470
469
if ( ! decodeAndEnqueueSegment ( base64SegmentBytes , controller ) ) {
@@ -477,9 +476,7 @@ function createBase64DecoderTransformStream(
477
476
478
477
flush ( controller ) : void {
479
478
if ( base64Buffer && base64Buffer . length > 0 ) {
480
- if ( ! decodeAndEnqueueSegment ( base64Buffer , controller ) ) {
481
- // Error already handled within the helper
482
- }
479
+ decodeAndEnqueueSegment ( base64Buffer , controller ) ;
483
480
}
484
481
base64Buffer = null ;
485
482
} ,
0 commit comments