From 49cb810e7cc6554586e10563ecfa782362870e1c Mon Sep 17 00:00:00 2001 From: Offroaders123 <65947371+Offroaders123@users.noreply.github.com> Date: Fri, 23 Feb 2024 02:25:03 -0800 Subject: [PATCH] Abstract Base Classes Learning again why currently TS doesn't support a way to use `abstract static` unfortunately. https://github.com/microsoft/TypeScript/issues/34516 Eeps! --- src/ArrayFileReader.ts | 2 +- src/MediaFileReader.ts | 14 ++++---------- src/MediaTagReader.ts | 12 ++++-------- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/ArrayFileReader.ts b/src/ArrayFileReader.ts index 12122f4..21cf9d5 100644 --- a/src/ArrayFileReader.ts +++ b/src/ArrayFileReader.ts @@ -28,7 +28,7 @@ class ArrayFileReader extends MediaFileReader { ); } - override init(callbacks: LoadCallbackType): void { + override _init(callbacks: LoadCallbackType): void { setTimeout(callbacks.onSuccess, 0); } diff --git a/src/MediaFileReader.ts b/src/MediaFileReader.ts index 24a0e7a..9d6eded 100644 --- a/src/MediaFileReader.ts +++ b/src/MediaFileReader.ts @@ -14,7 +14,7 @@ import type { CharsetType } from './FlowTypes'; -class MediaFileReader { +abstract class MediaFileReader { _isInitialized: boolean; _size: number; @@ -50,17 +50,13 @@ class MediaFileReader { } } - _init(callbacks: LoadCallbackType): void { - throw new Error("Must implement init function"); - } + abstract _init(callbacks: LoadCallbackType): void; /** * @param range The start and end indexes of the range to load. * Ex: [0, 7] load bytes 0 to 7 inclusive. */ - loadRange(range: [number, number], callbacks: LoadCallbackType): void { - throw new Error("Must implement loadRange function"); - } + abstract loadRange(range: [number, number], callbacks: LoadCallbackType): void; /** * @return The size of the file in bytes. @@ -73,9 +69,7 @@ class MediaFileReader { return this._size; } - getByteAt(offset: number): number { - throw new Error("Must implement getByteAt function"); - } + abstract getByteAt(offset: number): number; getBytesAt(offset: number, length: number): Array { var bytes = new Array(length); diff --git a/src/MediaTagReader.ts b/src/MediaTagReader.ts index 45b6e95..2340c35 100644 --- a/src/MediaTagReader.ts +++ b/src/MediaTagReader.ts @@ -12,7 +12,7 @@ import type { TagType } from './FlowTypes'; -class MediaTagReader { +abstract class MediaTagReader { _mediaFileReader: MediaFileReader; _tags: Array | null; @@ -80,19 +80,15 @@ class MediaTagReader { /** * Load the necessary bytes from the media file. */ - _loadData( + abstract _loadData( mediaFileReader: MediaFileReader, callbacks: LoadCallbackType - ): void { - throw new Error("Must implement _loadData function"); - } + ): void; /** * Parse the loaded data to read the media tags. */ - _parseData(mediaFileReader: MediaFileReader, tags: Array | null): TagType { - throw new Error("Must implement _parseData function"); - } + abstract _parseData(mediaFileReader: MediaFileReader, tags: Array | null): TagType; _expandShortcutTags(tagsWithShortcuts: Array | null): Array | null { if (!tagsWithShortcuts) {