fix(workers): utilize vite ?worker imports.
This commit is contained in:
parent
65e1b4e98d
commit
56038a97ff
5 changed files with 73 additions and 60 deletions
|
|
@ -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 = () => {
|
||||
|
|
|
|||
|
|
@ -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
55
js/taglib.types.ts
Normal 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';
|
||||
};
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -10,6 +10,9 @@ export default defineConfig(({ mode }) => {
|
|||
|
||||
return {
|
||||
base: './',
|
||||
worker: {
|
||||
format: 'es',
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'!': '/node_modules',
|
||||
|
|
|
|||
Loading…
Reference in a new issue