1010
1111import { ByteStream } from '../../io/bytestream.js' ;
1212import { 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} */
8678export 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} */
133100export 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} */
156114export 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 ( ) ;
0 commit comments