fix(workers): utilize vite ?worker imports.

This commit is contained in:
Daniel 2026-03-09 17:58:10 +00:00 committed by GitHub
parent 65e1b4e98d
commit 56038a97ff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 73 additions and 60 deletions

View file

@ -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 = () => {

View file

@ -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<TagLib> | 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<Uint8Array>((resolve, reject) => {

55
js/taglib.types.ts Normal file
View file

@ -0,0 +1,55 @@
export type TagLibWorkerMessageType = 'Add' | 'Get';
export interface TagLibWorkerMessage {
type: TagLibWorkerMessageType;
wasmUrl: string;
audioData: Uint8Array;
}
export interface TagLibWorkerResponse<T> {
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<Uint8Array>;
export type TagLibMetadataResponse = TagLibWorkerResponse<TagLibReadMetadata>;
export type AddMetadataMessage = TagLibWorkerMessage & {
type: 'Add';
} & TagLibMetadata;
export type GetMetadataMessage = TagLibWorkerMessage & {
type: 'Get';
};

View file

@ -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<T> {
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<Uint8Array>;
export type TagLibMetadataResponse = TagLibWorkerResponse<TagLibReadMetadata>;
export type AddMetadataMessage = TagLibWorkerMessage & {
type: 'Add';
} & TagLibMetadata;
export type GetMetadataMessage = TagLibWorkerMessage & {
type: 'Get';
};
async function addMetadataToAudio(message: AddMetadataMessage): Promise<Uint8Array> {
const {
wasmUrl,

View file

@ -10,6 +10,9 @@ export default defineConfig(({ mode }) => {
return {
base: './',
worker: {
format: 'es',
},
resolve: {
alias: {
'!': '/node_modules',