Skip to content

Commit 17c58ec

Browse files
committed
Remove Jpeg parse event boilerplate
1 parent c3a7b35 commit 17c58ec

File tree

6 files changed

+52
-168
lines changed

6 files changed

+52
-168
lines changed

image/parsers/jpeg.js

Lines changed: 23 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import { ByteStream } from '../../io/bytestream.js';
1212
import { getExifProfile } from './exif.js';
13+
import { createEvent } from './parsers.js';
1314

1415
/** @typedef {import('./exif.js').ExifValue} ExifValue */
1516

@@ -73,15 +74,6 @@ export const JpegDensityUnits = {
7374
* @property {Uint8Array} thumbnailData RGB data. Size is 3 x thumbnailWidth x thumbnailHeight.
7475
*/
7576

76-
export class JpegApp0MarkerEvent extends Event {
77-
/** @param {JpegApp0Marker} */
78-
constructor(segment) {
79-
super(JpegParseEventType.APP0_MARKER);
80-
/** @type {JpegApp0Marker} */
81-
this.app0Marker = segment;
82-
}
83-
}
84-
8577
/** @enum {number} */
8678
export const JpegExtensionThumbnailFormat = {
8779
JPEG: 0x10,
@@ -95,23 +87,7 @@ export const JpegExtensionThumbnailFormat = {
9587
* @property {Uint8Array} thumbnailData Raw thumbnail data
9688
*/
9789

98-
export class JpegApp0ExtensionEvent extends Event {
99-
/** @param {JpegApp0Extension} */
100-
constructor(segment) {
101-
super(JpegParseEventType.APP0_EXTENSION);
102-
/** @type {JpegApp0Extension} */
103-
this.app0Extension = segment;
104-
}
105-
}
106-
107-
export class JpegApp1ExifEvent extends Event {
108-
/** @param {Map<number, ExifValue>} exifValueMap */
109-
constructor(exifValueMap) {
110-
super(JpegParseEventType.APP1_EXIF);
111-
/** @type {Map<number, ExifValue>} */
112-
this.exifValueMap = exifValueMap;
113-
}
114-
}
90+
/** @typedef {Map<number, ExifValue>} JpegExifProfile */
11591

11692
/**
11793
* @typedef JpegDefineQuantizationTable
@@ -120,15 +96,6 @@ export class JpegApp1ExifEvent extends Event {
12096
* @property {number[]} tableValues 64 numbers representing the quantization table.
12197
*/
12298

123-
export class JpegDefineQuantizationTableEvent extends Event {
124-
/** @param {JpegDefineQuantizationTable} table */
125-
constructor(table) {
126-
super(JpegParseEventType.DEFINE_QUANTIZATION_TABLE);
127-
/** @type {JpegDefineQuantizationTable} */
128-
this.quantizationTable = table;
129-
}
130-
}
131-
13299
/** @enum {number} */
133100
export const JpegHuffmanTableType = {
134101
DC: 0,
@@ -143,15 +110,6 @@ export const JpegHuffmanTableType = {
143110
* @property {number[]} symbols
144111
*/
145112

146-
export class JpegDefineHuffmanTableEvent extends Event {
147-
/** @param {JpegDefineHuffmanTable} table */
148-
constructor(table) {
149-
super(JpegParseEventType.DEFINE_HUFFMAN_TABLE);
150-
/** @type {JpegDefineHuffmanTable} */
151-
this.huffmanTable = table;
152-
}
153-
}
154-
155113
/** @enum {number} */
156114
export const JpegDctType = {
157115
BASELINE: 0,
@@ -186,15 +144,6 @@ export const JpegComponentType = {
186144
* @property {JpegComponentDetail[]} componentDetails
187145
*/
188146

189-
export class JpegStartOfFrameEvent extends Event {
190-
/** @param {JpegStartOfFrame} sof */
191-
constructor(sof) {
192-
super(JpegParseEventType.START_OF_FRAME);
193-
/** @type {JpegStartOfFrame} */
194-
this.startOfFrame = sof;
195-
}
196-
}
197-
198147
/**
199148
* @typedef JpegStartOfScan
200149
* @property {number} componentsInScan
@@ -238,8 +187,8 @@ export class JpegParser extends EventTarget {
238187
}
239188

240189
/**
241-
* Type-safe way to bind a listener for a JpegApp0MarkerEvent.
242-
* @param {function(JpegApp0MarkerEvent): void} listener
190+
* Type-safe way to bind a listener for a JpegApp0Marker.
191+
* @param {function(CustomEvent<JpegApp0Marker>): void} listener
243192
* @returns {JpegParser} for chaining
244193
*/
245194
onApp0Marker(listener) {
@@ -248,8 +197,8 @@ export class JpegParser extends EventTarget {
248197
}
249198

250199
/**
251-
* Type-safe way to bind a listener for a JpegApp0ExtensionEvent.
252-
* @param {function(JpegApp0MarkerEvent): void} listener
200+
* Type-safe way to bind a listener for a JpegApp0Extension.
201+
* @param {function(CustomEvent<JpegApp0Extension>): void} listener
253202
* @returns {JpegParser} for chaining
254203
*/
255204
onApp0Extension(listener) {
@@ -258,8 +207,8 @@ export class JpegParser extends EventTarget {
258207
}
259208

260209
/**
261-
* Type-safe way to bind a listener for a JpegApp1ExifEvent.
262-
* @param {function(JpegApp1ExifEvent): void} listener
210+
* Type-safe way to bind a listener for a JpegExifProfile.
211+
* @param {function(CustomEvent<JpegExifProfile>): void} listener
263212
* @returns {JpegParser} for chaining
264213
*/
265214
onApp1Exif(listener) {
@@ -268,8 +217,8 @@ export class JpegParser extends EventTarget {
268217
}
269218

270219
/**
271-
* Type-safe way to bind a listener for a JpegDefineQuantizationTableEvent.
272-
* @param {function(JpegDefineQuantizationTableEvent): void} listener
220+
* Type-safe way to bind a listener for a JpegDefineQuantizationTable.
221+
* @param {function(CustomEvent<JpegDefineQuantizationTable>): void} listener
273222
* @returns {JpegParser} for chaining
274223
*/
275224
onDefineQuantizationTable(listener) {
@@ -278,8 +227,8 @@ export class JpegParser extends EventTarget {
278227
}
279228

280229
/**
281-
* Type-safe way to bind a listener for a JpegDefineHuffmanTableEvent.
282-
* @param {function(JpegDefineHuffmanTableEvent): void} listener
230+
* Type-safe way to bind a listener for a JpegDefineHuffmanTable.
231+
* @param {function(CustomEvent<JpegDefineHuffmanTable>): void} listener
283232
* @returns {JpegParser} for chaining
284233
*/
285234
onDefineHuffmanTable(listener) {
@@ -288,8 +237,8 @@ export class JpegParser extends EventTarget {
288237
}
289238

290239
/**
291-
* Type-safe way to bind a listener for a JpegStartOfFrameEvent.
292-
* @param {function(JpegStartOfFrameEvent): void} listener
240+
* Type-safe way to bind a listener for a JpegStartOfFrame.
241+
* @param {function(CustomEvent<JpegStartOfFrame>): void} listener
293242
* @returns {JpegParser} for chaining
294243
*/
295244
onStartOfFrame(listener) {
@@ -298,8 +247,8 @@ export class JpegParser extends EventTarget {
298247
}
299248

300249
/**
301-
* Type-safe way to bind a listener for a JpegStartOfScanEvent.
302-
* @param {function(JpegStartOfScanEvent): void} listener
250+
* Type-safe way to bind a listener for a JpegStartOfScan.
251+
* @param {function(CustomEvent<JpegStartOfScan>): void} listener
303252
* @returns {JpegParser} for chaining
304253
*/
305254
onStartOfScan(listener) {
@@ -345,7 +294,7 @@ export class JpegParser extends EventTarget {
345294
yThumbnail,
346295
thumbnailData: this.bstream.readBytes(3 * xThumbnail * yThumbnail),
347296
};
348-
this.dispatchEvent(new JpegApp0MarkerEvent(app0MarkerSegment));
297+
this.dispatchEvent(createEvent(JpegParseEventType.APP0_MARKER, app0MarkerSegment));
349298
}
350299
else if (identifier === 'JFXX') {
351300
if (!this.hasApp0MarkerSegment) throw `JFXX found without JFIF`;
@@ -364,7 +313,7 @@ export class JpegParser extends EventTarget {
364313
thumbnailFormat,
365314
thumbnailData,
366315
};
367-
this.dispatchEvent(new JpegApp0ExtensionEvent(app0ExtensionSegment));
316+
this.dispatchEvent(createEvent(JpegParseEventType.APP0_EXTENSION, app0ExtensionSegment));
368317
}
369318
else {
370319
throw `Bad APP0 identifier: ${identifier}`;
@@ -387,7 +336,7 @@ export class JpegParser extends EventTarget {
387336
if (this.bstream.readNumber(2) !== 0) throw `No null byte termination`;
388337

389338
const exifValueMap = getExifProfile(this.bstream);
390-
this.dispatchEvent(new JpegApp1ExifEvent(exifValueMap));
339+
this.dispatchEvent(createEvent(JpegParseEventType.APP1_EXIF, exifValueMap));
391340

392341
this.bstream = skipAheadStream;
393342
} // End of APP1
@@ -418,7 +367,7 @@ export class JpegParser extends EventTarget {
418367
precision,
419368
tableValues,
420369
};
421-
this.dispatchEvent(new JpegDefineQuantizationTableEvent(table));
370+
this.dispatchEvent(createEvent(JpegParseEventType.DEFINE_QUANTIZATION_TABLE, table));
422371

423372
ptr += (1 + valSize * 64);
424373
}
@@ -452,7 +401,7 @@ export class JpegParser extends EventTarget {
452401
numberOfSymbols,
453402
symbols,
454403
};
455-
this.dispatchEvent(new JpegDefineHuffmanTableEvent(table));
404+
this.dispatchEvent(createEvent(JpegParseEventType.DEFINE_HUFFMAN_TABLE, table));
456405

457406
ptr += (1 + 16 + numCodes);
458407
}
@@ -497,7 +446,7 @@ export class JpegParser extends EventTarget {
497446
componentDetails,
498447
};
499448

500-
this.dispatchEvent(new JpegStartOfFrameEvent(sof));
449+
this.dispatchEvent(createEvent(JpegParseEventType.START_OF_FRAME, sof));
501450
} // End of SOF0, SOF1, SOF2
502451
else if (jpegMarker === JpegSegmentType.SOS) {
503452
this.bstream.setBigEndian();
@@ -536,7 +485,7 @@ export class JpegParser extends EventTarget {
536485
// NOTE: The below will have the null bytes after every 0xFF value.
537486
sos.rawImageData = rawImageDataStream.readBytes(numBytes);
538487

539-
this.dispatchEvent(new JpegStartOfScanEvent(sos));
488+
this.dispatchEvent(createEvent(JpegParseEventType.START_OF_SCAN, sos));
540489
} // End of SOS
541490
else {
542491
this.bstream.setBigEndian();

index.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,9 @@ export {
3535
export { getFullMIMEString, getShortMIMEString } from './codecs/codecs.js';
3636
export { findMimeType } from './file/sniffer.js';
3737
export { GifParseEventType, GifParser } from './image/parsers/gif.js';
38-
export { JpegApp0ExtensionEvent, JpegApp0MarkerEvent, JpegApp1ExifEvent, JpegComponentType,
39-
JpegDctType, JpegDefineHuffmanTableEvent, JpegDefineQuantizationTableEvent,
40-
JpegDensityUnits, JpegExtensionThumbnailFormat, JpegHuffmanTableType, JpegParseEventType,
41-
JpegParser, JpegSegmentType, JpegStartOfFrameEvent,
42-
JpegStartOfScanEvent } from './image/parsers/jpeg.js';
38+
export { JpegComponentType, JpegDctType, JpegDensityUnits, JpegExtensionThumbnailFormat,
39+
JpegHuffmanTableType, JpegParseEventType, JpegParser,
40+
JpegSegmentType } from './image/parsers/jpeg.js';
4341
export { convertWebPtoPNG, convertWebPtoJPG } from './image/webp-shim/webp-shim.js';
4442
export { BitBuffer } from './io/bitbuffer.js';
4543
export { BitStream } from './io/bitstream.js';

tests/image-parsers-jpeg.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ describe('bitjs.image.parsers.JpegParser', () => {
2020
let sof;
2121

2222
const parser = new JpegParser(ab)
23-
.onApp1Exif(evt => { exif = evt.exifValueMap })
24-
.onStartOfFrame(evt => { sof = evt.startOfFrame });
23+
.onApp1Exif(evt => { exif = evt.detail })
24+
.onStartOfFrame(evt => { sof = evt.detail });
2525
await parser.start();
2626

2727
const descVal = exif.get(ExifTagNumber.IMAGE_DESCRIPTION);

0 commit comments

Comments
 (0)