diff --git a/js/ffmpeg.js b/js/ffmpeg.js index f9fbd62..40345f7 100644 --- a/js/ffmpeg.js +++ b/js/ffmpeg.js @@ -1,4 +1,5 @@ import { fetchBlobURL } from './utils'; +import FfmpegWorker from './ffmpeg.worker.js?worker' const ffmpegBase = 'https://unpkg.com/@ffmpeg/core/dist/esm'; const coreJs = `${ffmpegBase}/ffmpeg-core.js`; const coreWasm = `${ffmpegBase}/ffmpeg-core.wasm`; @@ -37,7 +38,7 @@ async function ffmpegWorker( const assets = loadFfmpeg(); return new Promise((resolve, reject) => { - const worker = new Worker(new URL('./ffmpeg.worker.js', import.meta.url), { type: 'module' }); + const worker = new FfmpegWorker(); // Handle abort signal const abortHandler = () => { diff --git a/js/taglib.ts b/js/taglib.ts index c485c99..c70ef53 100644 --- a/js/taglib.ts +++ b/js/taglib.ts @@ -9,8 +9,8 @@ import type { TagLibMetadataResponse, TagLibMetadata, TagLibReadMetadata, -} from './taglib.worker'; -import TagLibWorker from './taglib.worker.ts?url'; +} from './taglib.types'; +import TagLibWorker from './taglib.worker?worker'; let tagLib: Promise | null = null; @@ -32,7 +32,7 @@ export async function addMetadataWithTagLib( audioData = new Uint8Array(audioData); } - const worker = new Worker(new URL(TagLibWorker, import.meta.url), { type: 'module' }); + const worker = new TagLibWorker(); const wasmUrl = await fetchTagLib(); return new Promise((resolve, reject) => { diff --git a/js/taglib.types.ts b/js/taglib.types.ts new file mode 100644 index 0000000..5af538d --- /dev/null +++ b/js/taglib.types.ts @@ -0,0 +1,55 @@ +export type TagLibWorkerMessageType = 'Add' | 'Get'; + +export interface TagLibWorkerMessage { + type: TagLibWorkerMessageType; + wasmUrl: string; + audioData: Uint8Array; +} + +export interface TagLibWorkerResponse { + type: TagLibWorkerMessageType; + data?: T; + error?: string; +} + +export interface TagLibMetadata { + title?: string; + artist?: string; + albumTitle?: string; + albumArtist?: string; + trackNumber?: number; + totalTracks?: number; + discNumber?: number; + totalDiscs?: number; + bpm?: number; + replayGain?: { + albumReplayGain?: string; + albumPeakAmplitude?: number; + trackReplayGain?: string; + trackPeakAmplitude?: number; + }; + cover?: { + data: Uint8Array; + type: string; + }; + releaseDate?: string; + copyright?: string; + isrc?: string; + explicit?: boolean; + lyrics?: string; +} + +export interface TagLibReadMetadata extends TagLibMetadata { + duration: number; +} + +export type TagLibFileResponse = TagLibWorkerResponse; +export type TagLibMetadataResponse = TagLibWorkerResponse; + +export type AddMetadataMessage = TagLibWorkerMessage & { + type: 'Add'; +} & TagLibMetadata; + +export type GetMetadataMessage = TagLibWorkerMessage & { + type: 'Get'; +}; diff --git a/js/taglib.worker.ts b/js/taglib.worker.ts index cd04a09..44ec706 100644 --- a/js/taglib.worker.ts +++ b/js/taglib.worker.ts @@ -3,67 +3,21 @@ declare var self: DedicatedWorkerGlobalScope; import { TagLib, type PictureType } from 'taglib-wasm'; import { doTimed, doTimedAsync } from './doTimed'; +import type { + AddMetadataMessage, + GetMetadataMessage, + TagLibFileResponse, + TagLibMetadata, + TagLibMetadataResponse, + TagLibReadMetadata, + TagLibWorkerMessage, + TagLibWorkerResponse, +} from './taglib.types'; const PICTURE_TYPE_VALUES = { FrontCover: 3, }; -export type TagLibWorkerMessageType = 'Add' | 'Get'; - -export interface TagLibWorkerMessage { - type: TagLibWorkerMessageType; - wasmUrl: string; - audioData: Uint8Array; -} - -interface TagLibWorkerResponse { - type: TagLibWorkerMessageType; - data?: T; - error?: string; -} - -export interface TagLibMetadata { - title?: string; - artist?: string; - albumTitle?: string; - albumArtist?: string; - trackNumber?: number; - totalTracks?: number; - discNumber?: number; - totalDiscs?: number; - bpm?: number; - replayGain?: { - albumReplayGain?: string; - albumPeakAmplitude?: number; - trackReplayGain?: string; - trackPeakAmplitude?: number; - }; - cover?: { - data: Uint8Array; - type: string; - }; - releaseDate?: string; - copyright?: string; - isrc?: string; - explicit?: boolean; - lyrics?: string; -} - -export interface TagLibReadMetadata extends TagLibMetadata { - duration: number; -} - -export type TagLibFileResponse = TagLibWorkerResponse; -export type TagLibMetadataResponse = TagLibWorkerResponse; - -export type AddMetadataMessage = TagLibWorkerMessage & { - type: 'Add'; -} & TagLibMetadata; - -export type GetMetadataMessage = TagLibWorkerMessage & { - type: 'Get'; -}; - async function addMetadataToAudio(message: AddMetadataMessage): Promise { const { wasmUrl, diff --git a/vite.config.js b/vite.config.js index 68fe1ec..9ecd444 100644 --- a/vite.config.js +++ b/vite.config.js @@ -10,6 +10,9 @@ export default defineConfig(({ mode }) => { return { base: './', + worker: { + format: 'es', + }, resolve: { alias: { '!': '/node_modules',