@@ -5,7 +5,7 @@ import { expect } from 'chai';
55import { Jimp } from 'jimp' ;
66import piexif from 'piexifjs' ;
77
8- import { resize , compress , strip , metadata , toBase64 , toBuffer } from '../src/Adaptor.js' ;
8+ import { resize , compress , strip , metadata } from '../src/Adaptor.js' ;
99import { resizeImage } from '../src/Utils.js' ;
1010
1111const __dirname = dirname ( fileURLToPath ( import . meta. url ) ) ;
@@ -148,6 +148,19 @@ describe('resize', () => {
148148 expect ( finalState . references [ 0 ] ) . to . deep . equal ( seed . data ) ;
149149 } ) ;
150150 } ) ;
151+
152+ describe ( 'base64 option' , ( ) => {
153+ it ( 'returns { base64, width, height } when base64: true' , async ( ) => {
154+ const finalState = await resize (
155+ toBase64Str ( 'portrait-small.jpg' ) ,
156+ { ...DEFAULT_RESIZE_OPTS , base64 : true } ,
157+ ) ( state ) ;
158+
159+ expect ( finalState . data ) . to . have . keys ( [ 'base64' , 'width' , 'height' ] ) ;
160+ expect ( finalState . data . base64 ) . to . be . a ( 'string' ) ;
161+ expect ( finalState . data . base64 . length ) . to . be . greaterThan ( 0 ) ;
162+ } ) ;
163+ } ) ;
151164} ) ;
152165
153166// ─── compress ────────────────────────────────────────────────────────────────
@@ -272,6 +285,19 @@ describe('compress', () => {
272285 expect ( finalState . references [ 0 ] ) . to . deep . equal ( seed . data ) ;
273286 } ) ;
274287 } ) ;
288+
289+ describe ( 'base64 option' , ( ) => {
290+ it ( 'returns { base64, size, quality } when base64: true' , async ( ) => {
291+ const inputBuffer = await getResizedBuffer ( 'portrait-small.jpg' ) ;
292+ const finalState = await compress (
293+ inputBuffer ,
294+ { ...DEFAULT_COMPRESS_OPTS , base64 : true } ,
295+ ) ( state ) ;
296+
297+ expect ( finalState . data ) . to . have . keys ( [ 'base64' , 'size' , 'quality' ] ) ;
298+ expect ( finalState . data . base64 ) . to . be . a ( 'string' ) ;
299+ } ) ;
300+ } ) ;
275301} ) ;
276302
277303// ─── strip ───────────────────────────────────────────────────────────────────
@@ -329,6 +355,13 @@ describe('strip', () => {
329355 expect ( finalState . data ) . to . have . keys ( [ 'buffer' ] ) ;
330356 expect ( finalState . data . buffer ) . to . be . instanceOf ( Buffer ) ;
331357 } ) ;
358+
359+ it ( 'returns { base64 } when base64: true' , async ( ) => {
360+ const finalState = await strip ( toBase64Str ( 'portrait-small.jpg' ) , { base64 : true } ) ( state ) ;
361+
362+ expect ( finalState . data ) . to . have . keys ( [ 'base64' ] ) ;
363+ expect ( finalState . data . base64 ) . to . be . a ( 'string' ) ;
364+ } ) ;
332365} ) ;
333366
334367// ─── metadata ────────────────────────────────────────────────────────────────
@@ -384,73 +417,34 @@ describe('metadata', () => {
384417 } ) ;
385418} ) ;
386419
387- // ─── toBase64 / toBuffer ───────── ────────────────────────────────────────────
420+ // ─── buffer passing between steps ────────────────────────────────────────────
388421
389- describe ( 'toBase64' , ( ) => {
390- it ( 'converts a Buffer to a base64 string' , async ( ) => {
391- const buf = toBuf ( 'portrait-small.jpg' ) ;
392- const finalState = await toBase64 ( buf ) ( state ) ;
393-
394- expect ( finalState . data ) . to . be . a ( 'string' ) ;
395- expect ( finalState . data ) . to . equal ( buf . toString ( 'base64' ) ) ;
396- } ) ;
397-
398- it ( 'writes the base64 string to state.data' , async ( ) => {
399- const buf = toBuf ( 'portrait-small.jpg' ) ;
400- const finalState = await toBase64 ( buf ) ( state ) ;
401-
402- expect ( finalState . data ) . to . be . a ( 'string' ) ;
403- expect ( finalState . data . length ) . to . be . greaterThan ( 0 ) ;
404- } ) ;
405-
406- it ( 'is a no-op when given a string (already base64)' , async ( ) => {
407- const b64 = toBase64Str ( 'portrait-small.jpg' ) ;
408- const finalState = await toBase64 ( b64 ) ( state ) ;
409-
410- expect ( finalState . data ) . to . equal ( b64 ) ;
411- } ) ;
412- } ) ;
413-
414- describe ( 'toBuffer' , ( ) => {
415- it ( 'converts a base64 string to a Buffer' , async ( ) => {
416- const b64 = toBase64Str ( 'portrait-small.jpg' ) ;
417- const finalState = await toBuffer ( b64 ) ( state ) ;
418-
419- expect ( finalState . data ) . to . be . instanceOf ( Buffer ) ;
420- expect ( finalState . data ) . to . deep . equal ( toBuf ( 'portrait-small.jpg' ) ) ;
421- } ) ;
422-
423- it ( 'converts a data URL to a Buffer' , async ( ) => {
424- const dataUrl = `data:image/jpeg;base64,${ toBase64Str ( 'portrait-small.jpg' ) } ` ;
425- const finalState = await toBuffer ( dataUrl ) ( state ) ;
426-
427- expect ( finalState . data ) . to . be . instanceOf ( Buffer ) ;
428- expect ( finalState . data ) . to . deep . equal ( toBuf ( 'portrait-small.jpg' ) ) ;
429- } ) ;
430-
431- it ( 'is a no-op when given a Buffer' , async ( ) => {
432- const buf = toBuf ( 'portrait-small.jpg' ) ;
433- const finalState = await toBuffer ( buf ) ( state ) ;
422+ describe ( 'buffer passing between steps' , ( ) => {
423+ it ( 'passes buffer from resize() to compress() explicitly' , async ( ) => {
424+ const resizeState = await resize ( toBase64Str ( 'portrait-large.jpg' ) , DEFAULT_RESIZE_OPTS ) ( state ) ;
425+ const compressState = await compress ( resizeState . data . buffer , DEFAULT_COMPRESS_OPTS ) ( resizeState ) ;
434426
435- expect ( finalState . data ) . to . deep . equal ( buf ) ;
427+ expect ( compressState . data . size ) . to . be . at . most ( DEFAULT_COMPRESS_OPTS . maxBytes ) ;
428+ expect ( compressState . data . buffer ) . to . be . instanceOf ( Buffer ) ;
436429 } ) ;
437430
438- it ( 'round-trips a buffer through base64 without data loss ' , async ( ) => {
439- const resizeState = await resize ( toBase64Str ( 'portrait-small.jpg ' ) , DEFAULT_RESIZE_OPTS ) ( state ) ;
440- const originalBuffer = resizeState . data . buffer ;
431+ it ( 'passes buffer from resize() to strip() explicitly ' , async ( ) => {
432+ const resizeState = await resize ( toBase64Str ( 'with-gps.JPG ' ) , DEFAULT_RESIZE_OPTS ) ( state ) ;
433+ const stripState = await strip ( resizeState . data . buffer ) ( resizeState ) ;
441434
442- const b64State = await toBase64 ( originalBuffer ) ( resizeState ) ;
443- expect ( b64State . data ) . to . be . a ( 'string' ) ;
444-
445- const bufState = await toBuffer ( b64State . data ) ( b64State ) ;
446- expect ( bufState . data ) . to . deep . equal ( originalBuffer ) ;
435+ expect ( stripState . data . buffer ) . to . be . instanceOf ( Buffer ) ;
436+ expect ( stripState . data . buffer [ 0 ] ) . to . equal ( 0xff ) ;
437+ expect ( stripState . data . buffer [ 1 ] ) . to . equal ( 0xd8 ) ;
447438 } ) ;
448439
449- it ( 'passes a buffer from resize() to compress() as an explicit argument' , async ( ) => {
450- const resizeState = await resize ( toBase64Str ( 'portrait-large.jpg' ) , DEFAULT_RESIZE_OPTS ) ( state ) ;
451- const compressState = await compress ( resizeState . data . buffer , DEFAULT_COMPRESS_OPTS ) ( resizeState ) ;
440+ it ( 'base64 output from resize() can be fed directly into compress()' , async ( ) => {
441+ const resizeState = await resize (
442+ toBase64Str ( 'portrait-large.jpg' ) ,
443+ { ...DEFAULT_RESIZE_OPTS , base64 : true } ,
444+ ) ( state ) ;
445+ expect ( resizeState . data . base64 ) . to . be . a ( 'string' ) ;
452446
447+ const compressState = await compress ( resizeState . data . base64 , DEFAULT_COMPRESS_OPTS ) ( resizeState ) ;
453448 expect ( compressState . data . size ) . to . be . at . most ( DEFAULT_COMPRESS_OPTS . maxBytes ) ;
454- expect ( compressState . data . buffer ) . to . be . instanceOf ( Buffer ) ;
455449 } ) ;
456450} ) ;
0 commit comments