Skip to content

Commit f538843

Browse files
committed
fix: clean up convertTiffToPng signature and add wiring test
- Remove unused Uint8Array/ArrayBufferView branches (only strings are passed) - Add handleImageNode test verifying convertTiffToPng is called for .tif files
1 parent 34c8784 commit f538843

3 files changed

Lines changed: 34 additions & 17 deletions

File tree

packages/super-editor/src/core/super-converter/v3/handlers/wp/helpers/encode-image-node-helpers.test.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
22
import { handleImageNode, getVectorShape } from './encode-image-node-helpers.js';
33
import { emuToPixels, polygonToObj, rotToDegrees } from '@converter/helpers.js';
44
import { extractFillColor, extractStrokeColor, extractStrokeWidth, extractLineEnds } from './vector-shape-helpers.js';
5+
import { convertTiffToPng } from './tiff-converter.js';
56

67
vi.mock('@converter/helpers.js', async (importOriginal) => {
78
const actual = await importOriginal();
@@ -21,6 +22,14 @@ vi.mock('./vector-shape-helpers.js', () => ({
2122
extractCustomGeometry: vi.fn(),
2223
}));
2324

25+
vi.mock('./tiff-converter.js', async (importOriginal) => {
26+
const actual = await importOriginal();
27+
return {
28+
...actual,
29+
convertTiffToPng: vi.fn(actual.convertTiffToPng),
30+
};
31+
});
32+
2433
describe('handleImageNode', () => {
2534
beforeEach(() => {
2635
vi.clearAllMocks();
@@ -221,6 +230,20 @@ describe('handleImageNode', () => {
221230
expect(result.attrs.size).toEqual({ width: 5, height: 6 }); // emuToPixels mocked
222231
});
223232

233+
it('calls convertTiffToPng for .tif images', () => {
234+
convertTiffToPng.mockReturnValue({ dataUri: 'data:image/png;base64,fake', format: 'png' });
235+
const node = makeNode();
236+
const params = {
237+
...makeParams('media/photo.tif'),
238+
converter: { media: { 'word/media/photo.tif': 'data:image/tiff;base64,AAAA' } },
239+
};
240+
const result = handleImageNode(node, params, false);
241+
242+
expect(convertTiffToPng).toHaveBeenCalledWith('data:image/tiff;base64,AAAA');
243+
expect(result.attrs.src).toBe('data:image/png;base64,fake');
244+
expect(result.attrs.extension).toBe('png');
245+
});
246+
224247
it('captures unhandled drawing children for passthrough preservation', () => {
225248
const node = makeNode();
226249
node.elements.push({

packages/super-editor/src/core/super-converter/v3/handlers/wp/helpers/tiff-converter.js

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -66,23 +66,16 @@ function createCanvas() {
6666
*/
6767
export function convertTiffToPng(data) {
6868
try {
69+
if (typeof data !== 'string') return null;
70+
6971
// Parse input — accept data URI or raw base64
70-
let bytes;
71-
if (typeof data === 'string') {
72-
let base64 = data;
73-
if (data.startsWith('data:')) {
74-
const commaIndex = data.indexOf(',');
75-
if (commaIndex === -1) return null;
76-
base64 = data.substring(commaIndex + 1);
77-
}
78-
bytes = base64ToUint8Array(base64);
79-
} else if (data instanceof Uint8Array) {
80-
bytes = data;
81-
} else if (ArrayBuffer.isView(data)) {
82-
bytes = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
83-
} else {
84-
return null;
72+
let base64 = data;
73+
if (data.startsWith('data:')) {
74+
const commaIndex = data.indexOf(',');
75+
if (commaIndex === -1) return null;
76+
base64 = data.substring(commaIndex + 1);
8577
}
78+
const bytes = base64ToUint8Array(base64);
8679

8780
const buffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
8881

packages/super-editor/src/core/super-converter/v3/handlers/wp/helpers/tiff-converter.test.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ describe('tiff-converter', () => {
8383
const spy = vi.spyOn(document, 'createElement').mockReturnValue(mockCanvas);
8484

8585
return import('./tiff-converter.js?happy').then(({ convertTiffToPng: fn }) => {
86-
const result = fn(new Uint8Array([0x49, 0x49, 0x2a, 0x00]));
86+
// Pass base64-encoded string (the only input type the call site uses)
87+
const result = fn('SU8qAA==');
8788
expect(result).toEqual({ dataUri: 'data:image/png;base64,iVBORw0KGgo=', format: 'png' });
8889

8990
spy.mockRestore();
@@ -102,7 +103,7 @@ describe('tiff-converter', () => {
102103

103104
// Re-import to pick up the mock
104105
return import('./tiff-converter.js?oversized').then(({ convertTiffToPng: fn }) => {
105-
const result = fn(new Uint8Array([0x49, 0x49, 0x2a, 0x00]));
106+
const result = fn('SU8qAA==');
106107
expect(result).toBeNull();
107108
vi.doUnmock('utif2');
108109
});

0 commit comments

Comments
 (0)