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 { fetchBlobURL } from './utils';
|
||||||
|
import FfmpegWorker from './ffmpeg.worker.js?worker'
|
||||||
const ffmpegBase = 'https://unpkg.com/@ffmpeg/core/dist/esm';
|
const ffmpegBase = 'https://unpkg.com/@ffmpeg/core/dist/esm';
|
||||||
const coreJs = `${ffmpegBase}/ffmpeg-core.js`;
|
const coreJs = `${ffmpegBase}/ffmpeg-core.js`;
|
||||||
const coreWasm = `${ffmpegBase}/ffmpeg-core.wasm`;
|
const coreWasm = `${ffmpegBase}/ffmpeg-core.wasm`;
|
||||||
|
|
@ -37,7 +38,7 @@ async function ffmpegWorker(
|
||||||
const assets = loadFfmpeg();
|
const assets = loadFfmpeg();
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
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
|
// Handle abort signal
|
||||||
const abortHandler = () => {
|
const abortHandler = () => {
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,8 @@ import type {
|
||||||
TagLibMetadataResponse,
|
TagLibMetadataResponse,
|
||||||
TagLibMetadata,
|
TagLibMetadata,
|
||||||
TagLibReadMetadata,
|
TagLibReadMetadata,
|
||||||
} from './taglib.worker';
|
} from './taglib.types';
|
||||||
import TagLibWorker from './taglib.worker.ts?url';
|
import TagLibWorker from './taglib.worker?worker';
|
||||||
|
|
||||||
let tagLib: Promise<TagLib> | null = null;
|
let tagLib: Promise<TagLib> | null = null;
|
||||||
|
|
||||||
|
|
@ -32,7 +32,7 @@ export async function addMetadataWithTagLib(
|
||||||
audioData = new Uint8Array(audioData);
|
audioData = new Uint8Array(audioData);
|
||||||
}
|
}
|
||||||
|
|
||||||
const worker = new Worker(new URL(TagLibWorker, import.meta.url), { type: 'module' });
|
const worker = new TagLibWorker();
|
||||||
const wasmUrl = await fetchTagLib();
|
const wasmUrl = await fetchTagLib();
|
||||||
|
|
||||||
return new Promise<Uint8Array>((resolve, reject) => {
|
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 { TagLib, type PictureType } from 'taglib-wasm';
|
||||||
import { doTimed, doTimedAsync } from './doTimed';
|
import { doTimed, doTimedAsync } from './doTimed';
|
||||||
|
import type {
|
||||||
|
AddMetadataMessage,
|
||||||
|
GetMetadataMessage,
|
||||||
|
TagLibFileResponse,
|
||||||
|
TagLibMetadata,
|
||||||
|
TagLibMetadataResponse,
|
||||||
|
TagLibReadMetadata,
|
||||||
|
TagLibWorkerMessage,
|
||||||
|
TagLibWorkerResponse,
|
||||||
|
} from './taglib.types';
|
||||||
|
|
||||||
const PICTURE_TYPE_VALUES = {
|
const PICTURE_TYPE_VALUES = {
|
||||||
FrontCover: 3,
|
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> {
|
async function addMetadataToAudio(message: AddMetadataMessage): Promise<Uint8Array> {
|
||||||
const {
|
const {
|
||||||
wasmUrl,
|
wasmUrl,
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,9 @@ export default defineConfig(({ mode }) => {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
base: './',
|
base: './',
|
||||||
|
worker: {
|
||||||
|
format: 'es',
|
||||||
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'!': '/node_modules',
|
'!': '/node_modules',
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue