diff --git a/package-lock.json b/package-lock.json index 485a15a..6e3312d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mediabunny", - "version": "1.29.1", + "version": "1.30.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mediabunny", - "version": "1.29.1", + "version": "1.30.0", "license": "MPL-2.0", "workspaces": [ "packages/*" @@ -7739,9 +7739,9 @@ } }, "node_modules/mediabunny": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/mediabunny/-/mediabunny-1.29.0.tgz", - "integrity": "sha512-18B8w/rhO/ph/AFsIXvzZg8RaSQZ+ZYfJ99MZlTjDmlgCT58jV3azrnWQ/OSquYDi8q0xmn64mnfTEHgww3+zw==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/mediabunny/-/mediabunny-1.29.1.tgz", + "integrity": "sha512-RrlKs69MxRGa/l9cMGeI4hzuTSgchOGFHk9lIAuu9EcbSdJ05gDbRsTY67dojAiyUP3ic4PExij5OqDxqSv82Q==", "license": "MPL-2.0", "peer": true, "workspaces": [ @@ -12065,7 +12065,7 @@ }, "packages/mp3-encoder": { "name": "@mediabunny/mp3-encoder", - "version": "1.29.1", + "version": "1.30.0", "license": "MPL-2.0", "devDependencies": { "@types/emscripten": "^1.40.1" diff --git a/package.json b/package.json index cc3718c..a994713 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mediabunny", "author": "Vanilagy", - "version": "1.29.1", + "version": "1.30.0", "description": "Pure TypeScript media toolkit for reading, writing, and converting media files, directly in the browser.", "type": "module", "workspaces": [ diff --git a/packages/mp3-encoder/package.json b/packages/mp3-encoder/package.json index 8968b74..a4b4720 100644 --- a/packages/mp3-encoder/package.json +++ b/packages/mp3-encoder/package.json @@ -1,7 +1,7 @@ { "name": "@mediabunny/mp3-encoder", "author": "Vanilagy", - "version": "1.29.1", + "version": "1.30.0", "description": "MP3 encoder extension for Mediabunny, based on LAME.", "main": "./dist/bundles/mediabunny-mp3-encoder.mjs", "module": "./dist/bundles/mediabunny-mp3-encoder.mjs", diff --git a/packages/mp3-encoder/src/index.ts b/packages/mp3-encoder/src/index.ts index ba13a65..1519a19 100644 --- a/packages/mp3-encoder/src/index.ts +++ b/packages/mp3-encoder/src/index.ts @@ -12,6 +12,17 @@ import type { WorkerCommand, WorkerResponse, WorkerResponseData } from './shared // @ts-expect-error An esbuild plugin handles this, TypeScript doesn't need to understand import createWorker from './encode.worker'; +const MP3_ENCODER_LOADED_SYMBOL = Symbol.for('@mediabunny/mp3-encoder loaded'); +if ((globalThis as Record)[MP3_ENCODER_LOADED_SYMBOL]) { + console.error( + '[WARNING]\n@mediabunny/mp3-encoder was loaded twice.' + + ' This will likely cause the encoder not to work correctly.' + + ' Check if multiple dependencies are importing different versions of @mediabunny/mp3-encoder,' + + ' or if something is being bundled incorrectly.', + ); +} +(globalThis as Record)[MP3_ENCODER_LOADED_SYMBOL] = true; + class Mp3Encoder extends CustomAudioEncoder { private worker: Worker | null = null; private nextMessageId = 0; diff --git a/src/index.ts b/src/index.ts index 18e0b0c..1ee6ded 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,6 +9,17 @@ /// /// +const MEDIABUNNY_LOADED_SYMBOL = Symbol.for('mediabunny loaded'); +if ((globalThis as Record)[MEDIABUNNY_LOADED_SYMBOL]) { + console.error( + '[WARNING]\nMediabunny was loaded twice.' + + ' This will likely cause Mediabunny not to work correctly.' + + ' Check if multiple dependencies are importing different versions of Mediabunny,' + + ' or if something is being bundled incorrectly.', + ); +} +(globalThis as Record)[MEDIABUNNY_LOADED_SYMBOL] = true; + export { Output, OutputOptions, diff --git a/src/source.ts b/src/source.ts index 7c9a25e..f7aa0df 100644 --- a/src/source.ts +++ b/src/source.ts @@ -324,6 +324,9 @@ export type UrlSourceOptions = { /** * The [`RequestInit`](https://developer.mozilla.org/en-US/docs/Web/API/RequestInit) used by the Fetch API. Can be * used to further control the requests, such as setting custom headers. + * + * All fields will work except for `signal` and `headers.Range`; these will be overridden by Mediabunny. If you want + * to cancel ongoing requests, use {@link Input.dispose}. */ requestInit?: RequestInit; @@ -368,7 +371,12 @@ export class UrlSource extends Source { abortController: AbortController; }>(); - /** Creates a new {@link UrlSource} backed by the resource at the specified URL. */ + /** + * Creates a new {@link UrlSource} backed by the resource at the specified URL. + * + * When passing a `Request` instance, note that the `signal` and `headers.Range` options will be overridden by + * Mediabunny. If you want to cancel ongoing requests, use {@link Input.dispose}. + */ constructor( url: string | URL | Request, options: UrlSourceOptions = {},