{"version":3,"file":"@ffmpeg-CuCVy4el.js","sources":["../../node_modules/@ffmpeg/ffmpeg/dist/esm/const.js","../../node_modules/@ffmpeg/ffmpeg/dist/esm/utils.js","../../node_modules/@ffmpeg/ffmpeg/dist/esm/errors.js","../../node_modules/@ffmpeg/ffmpeg/dist/esm/classes.js","../../node_modules/@ffmpeg/ffmpeg/dist/esm/types.js","../../node_modules/@ffmpeg/util/dist/esm/index.js","../../node_modules/@ffmpeg/core/dist/esm/ffmpeg-core.js?url","../../node_modules/@ffmpeg/core/dist/esm/ffmpeg-core.wasm?url"],"sourcesContent":["export const MIME_TYPE_JAVASCRIPT = \"text/javascript\";\nexport const MIME_TYPE_WASM = \"application/wasm\";\nexport const CORE_VERSION = \"0.12.9\";\nexport const CORE_URL = `https://unpkg.com/@ffmpeg/core@${CORE_VERSION}/dist/umd/ffmpeg-core.js`;\nexport var FFMessageType;\n(function (FFMessageType) {\n FFMessageType[\"LOAD\"] = \"LOAD\";\n FFMessageType[\"EXEC\"] = \"EXEC\";\n FFMessageType[\"FFPROBE\"] = \"FFPROBE\";\n FFMessageType[\"WRITE_FILE\"] = \"WRITE_FILE\";\n FFMessageType[\"READ_FILE\"] = \"READ_FILE\";\n FFMessageType[\"DELETE_FILE\"] = \"DELETE_FILE\";\n FFMessageType[\"RENAME\"] = \"RENAME\";\n FFMessageType[\"CREATE_DIR\"] = \"CREATE_DIR\";\n FFMessageType[\"LIST_DIR\"] = \"LIST_DIR\";\n FFMessageType[\"DELETE_DIR\"] = \"DELETE_DIR\";\n FFMessageType[\"ERROR\"] = \"ERROR\";\n FFMessageType[\"DOWNLOAD\"] = \"DOWNLOAD\";\n FFMessageType[\"PROGRESS\"] = \"PROGRESS\";\n FFMessageType[\"LOG\"] = \"LOG\";\n FFMessageType[\"MOUNT\"] = \"MOUNT\";\n FFMessageType[\"UNMOUNT\"] = \"UNMOUNT\";\n})(FFMessageType || (FFMessageType = {}));\n","/**\n * Generate an unique message ID.\n */\nexport const getMessageID = (() => {\n let messageID = 0;\n return () => messageID++;\n})();\n","export const ERROR_UNKNOWN_MESSAGE_TYPE = new Error(\"unknown message type\");\nexport const ERROR_NOT_LOADED = new Error(\"ffmpeg is not loaded, call `await ffmpeg.load()` first\");\nexport const ERROR_TERMINATED = new Error(\"called FFmpeg.terminate()\");\nexport const ERROR_IMPORT_FAILURE = new Error(\"failed to import ffmpeg-core.js\");\n","import { FFMessageType } from \"./const.js\";\nimport { getMessageID } from \"./utils.js\";\nimport { ERROR_TERMINATED, ERROR_NOT_LOADED } from \"./errors.js\";\n/**\n * Provides APIs to interact with ffmpeg web worker.\n *\n * @example\n * ```ts\n * const ffmpeg = new FFmpeg();\n * ```\n */\nexport class FFmpeg {\n #worker = null;\n /**\n * #resolves and #rejects tracks Promise resolves and rejects to\n * be called when we receive message from web worker.\n */\n #resolves = {};\n #rejects = {};\n #logEventCallbacks = [];\n #progressEventCallbacks = [];\n loaded = false;\n /**\n * register worker message event handlers.\n */\n #registerHandlers = () => {\n if (this.#worker) {\n this.#worker.onmessage = ({ data: { id, type, data }, }) => {\n switch (type) {\n case FFMessageType.LOAD:\n this.loaded = true;\n this.#resolves[id](data);\n break;\n case FFMessageType.MOUNT:\n case FFMessageType.UNMOUNT:\n case FFMessageType.EXEC:\n case FFMessageType.FFPROBE:\n case FFMessageType.WRITE_FILE:\n case FFMessageType.READ_FILE:\n case FFMessageType.DELETE_FILE:\n case FFMessageType.RENAME:\n case FFMessageType.CREATE_DIR:\n case FFMessageType.LIST_DIR:\n case FFMessageType.DELETE_DIR:\n this.#resolves[id](data);\n break;\n case FFMessageType.LOG:\n this.#logEventCallbacks.forEach((f) => f(data));\n break;\n case FFMessageType.PROGRESS:\n this.#progressEventCallbacks.forEach((f) => f(data));\n break;\n case FFMessageType.ERROR:\n this.#rejects[id](data);\n break;\n }\n delete this.#resolves[id];\n delete this.#rejects[id];\n };\n }\n };\n /**\n * Generic function to send messages to web worker.\n */\n #send = ({ type, data }, trans = [], signal) => {\n if (!this.#worker) {\n return Promise.reject(ERROR_NOT_LOADED);\n }\n return new Promise((resolve, reject) => {\n const id = getMessageID();\n this.#worker && this.#worker.postMessage({ id, type, data }, trans);\n this.#resolves[id] = resolve;\n this.#rejects[id] = reject;\n signal?.addEventListener(\"abort\", () => {\n reject(new DOMException(`Message # ${id} was aborted`, \"AbortError\"));\n }, { once: true });\n });\n };\n on(event, callback) {\n if (event === \"log\") {\n this.#logEventCallbacks.push(callback);\n }\n else if (event === \"progress\") {\n this.#progressEventCallbacks.push(callback);\n }\n }\n off(event, callback) {\n if (event === \"log\") {\n this.#logEventCallbacks = this.#logEventCallbacks.filter((f) => f !== callback);\n }\n else if (event === \"progress\") {\n this.#progressEventCallbacks = this.#progressEventCallbacks.filter((f) => f !== callback);\n }\n }\n /**\n * Loads ffmpeg-core inside web worker. It is required to call this method first\n * as it initializes WebAssembly and other essential variables.\n *\n * @category FFmpeg\n * @returns `true` if ffmpeg core is loaded for the first time.\n */\n load = ({ classWorkerURL, ...config } = {}, { signal } = {}) => {\n if (!this.#worker) {\n this.#worker = classWorkerURL ?\n new Worker(new URL(classWorkerURL, import.meta.url), {\n type: \"module\",\n }) :\n // We need to duplicated the code here to enable webpack\n // to bundle worekr.js here.\n new Worker(new URL(\"./worker.js\", import.meta.url), {\n type: \"module\",\n });\n this.#registerHandlers();\n }\n return this.#send({\n type: FFMessageType.LOAD,\n data: config,\n }, undefined, signal);\n };\n /**\n * Execute ffmpeg command.\n *\n * @remarks\n * To avoid common I/O issues, [\"-nostdin\", \"-y\"] are prepended to the args\n * by default.\n *\n * @example\n * ```ts\n * const ffmpeg = new FFmpeg();\n * await ffmpeg.load();\n * await ffmpeg.writeFile(\"video.avi\", ...);\n * // ffmpeg -i video.avi video.mp4\n * await ffmpeg.exec([\"-i\", \"video.avi\", \"video.mp4\"]);\n * const data = ffmpeg.readFile(\"video.mp4\");\n * ```\n *\n * @returns `0` if no error, `!= 0` if timeout (1) or error.\n * @category FFmpeg\n */\n exec = (\n /** ffmpeg command line args */\n args, \n /**\n * milliseconds to wait before stopping the command execution.\n *\n * @defaultValue -1\n */\n timeout = -1, { signal } = {}) => this.#send({\n type: FFMessageType.EXEC,\n data: { args, timeout },\n }, undefined, signal);\n /**\n * Execute ffprobe command.\n *\n * @example\n * ```ts\n * const ffmpeg = new FFmpeg();\n * await ffmpeg.load();\n * await ffmpeg.writeFile(\"video.avi\", ...);\n * // Getting duration of a video in seconds: ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.avi -o output.txt\n * await ffmpeg.ffprobe([\"-v\", \"error\", \"-show_entries\", \"format=duration\", \"-of\", \"default=noprint_wrappers=1:nokey=1\", \"video.avi\", \"-o\", \"output.txt\"]);\n * const data = ffmpeg.readFile(\"output.txt\");\n * ```\n *\n * @returns `0` if no error, `!= 0` if timeout (1) or error.\n * @category FFmpeg\n */\n ffprobe = (\n /** ffprobe command line args */\n args, \n /**\n * milliseconds to wait before stopping the command execution.\n *\n * @defaultValue -1\n */\n timeout = -1, { signal } = {}) => this.#send({\n type: FFMessageType.FFPROBE,\n data: { args, timeout },\n }, undefined, signal);\n /**\n * Terminate all ongoing API calls and terminate web worker.\n * `FFmpeg.load()` must be called again before calling any other APIs.\n *\n * @category FFmpeg\n */\n terminate = () => {\n const ids = Object.keys(this.#rejects);\n // rejects all incomplete Promises.\n for (const id of ids) {\n this.#rejects[id](ERROR_TERMINATED);\n delete this.#rejects[id];\n delete this.#resolves[id];\n }\n if (this.#worker) {\n this.#worker.terminate();\n this.#worker = null;\n this.loaded = false;\n }\n };\n /**\n * Write data to ffmpeg.wasm.\n *\n * @example\n * ```ts\n * const ffmpeg = new FFmpeg();\n * await ffmpeg.load();\n * await ffmpeg.writeFile(\"video.avi\", await fetchFile(\"../video.avi\"));\n * await ffmpeg.writeFile(\"text.txt\", \"hello world\");\n * ```\n *\n * @category File System\n */\n writeFile = (path, data, { signal } = {}) => {\n const trans = [];\n if (data instanceof Uint8Array) {\n trans.push(data.buffer);\n }\n return this.#send({\n type: FFMessageType.WRITE_FILE,\n data: { path, data },\n }, trans, signal);\n };\n mount = (fsType, options, mountPoint) => {\n const trans = [];\n return this.#send({\n type: FFMessageType.MOUNT,\n data: { fsType, options, mountPoint },\n }, trans);\n };\n unmount = (mountPoint) => {\n const trans = [];\n return this.#send({\n type: FFMessageType.UNMOUNT,\n data: { mountPoint },\n }, trans);\n };\n /**\n * Read data from ffmpeg.wasm.\n *\n * @example\n * ```ts\n * const ffmpeg = new FFmpeg();\n * await ffmpeg.load();\n * const data = await ffmpeg.readFile(\"video.mp4\");\n * ```\n *\n * @category File System\n */\n readFile = (path, \n /**\n * File content encoding, supports two encodings:\n * - utf8: read file as text file, return data in string type.\n * - binary: read file as binary file, return data in Uint8Array type.\n *\n * @defaultValue binary\n */\n encoding = \"binary\", { signal } = {}) => this.#send({\n type: FFMessageType.READ_FILE,\n data: { path, encoding },\n }, undefined, signal);\n /**\n * Delete a file.\n *\n * @category File System\n */\n deleteFile = (path, { signal } = {}) => this.#send({\n type: FFMessageType.DELETE_FILE,\n data: { path },\n }, undefined, signal);\n /**\n * Rename a file or directory.\n *\n * @category File System\n */\n rename = (oldPath, newPath, { signal } = {}) => this.#send({\n type: FFMessageType.RENAME,\n data: { oldPath, newPath },\n }, undefined, signal);\n /**\n * Create a directory.\n *\n * @category File System\n */\n createDir = (path, { signal } = {}) => this.#send({\n type: FFMessageType.CREATE_DIR,\n data: { path },\n }, undefined, signal);\n /**\n * List directory contents.\n *\n * @category File System\n */\n listDir = (path, { signal } = {}) => this.#send({\n type: FFMessageType.LIST_DIR,\n data: { path },\n }, undefined, signal);\n /**\n * Delete an empty directory.\n *\n * @category File System\n */\n deleteDir = (path, { signal } = {}) => this.#send({\n type: FFMessageType.DELETE_DIR,\n data: { path },\n }, undefined, signal);\n}\n","export var FFFSType;\n(function (FFFSType) {\n FFFSType[\"MEMFS\"] = \"MEMFS\";\n FFFSType[\"NODEFS\"] = \"NODEFS\";\n FFFSType[\"NODERAWFS\"] = \"NODERAWFS\";\n FFFSType[\"IDBFS\"] = \"IDBFS\";\n FFFSType[\"WORKERFS\"] = \"WORKERFS\";\n FFFSType[\"PROXYFS\"] = \"PROXYFS\";\n})(FFFSType || (FFFSType = {}));\n","import { ERROR_RESPONSE_BODY_READER, ERROR_INCOMPLETED_DOWNLOAD, } from \"./errors.js\";\nimport { HeaderContentLength } from \"./const.js\";\nconst readFromBlobOrFile = (blob) => new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n fileReader.onload = () => {\n const { result } = fileReader;\n if (result instanceof ArrayBuffer) {\n resolve(new Uint8Array(result));\n }\n else {\n resolve(new Uint8Array());\n }\n };\n fileReader.onerror = (event) => {\n reject(Error(`File could not be read! Code=${event?.target?.error?.code || -1}`));\n };\n fileReader.readAsArrayBuffer(blob);\n});\n/**\n * An util function to fetch data from url string, base64, URL, File or Blob format.\n *\n * Examples:\n * ```ts\n * // URL\n * await fetchFile(\"http://localhost:3000/video.mp4\");\n * // base64\n * await fetchFile(\"data:;base64,wL2dvYWwgbW9yZ...\");\n * // URL\n * await fetchFile(new URL(\"video.mp4\", import.meta.url));\n * // File\n * fileInput.addEventListener('change', (e) => {\n * await fetchFile(e.target.files[0]);\n * });\n * // Blob\n * const blob = new Blob(...);\n * await fetchFile(blob);\n * ```\n */\nexport const fetchFile = async (file) => {\n let data;\n if (typeof file === \"string\") {\n /* From base64 format */\n if (/data:_data\\/([a-zA-Z]*);base64,([^\"]*)/.test(file)) {\n data = atob(file.split(\",\")[1])\n .split(\"\")\n .map((c) => c.charCodeAt(0));\n /* From remote server/URL */\n }\n else {\n data = await (await fetch(file)).arrayBuffer();\n }\n }\n else if (file instanceof URL) {\n data = await (await fetch(file)).arrayBuffer();\n }\n else if (file instanceof File || file instanceof Blob) {\n data = await readFromBlobOrFile(file);\n }\n else {\n return new Uint8Array();\n }\n return new Uint8Array(data);\n};\n/**\n * importScript dynamically import a script, useful when you\n * want to use different versions of ffmpeg.wasm based on environment.\n *\n * Example:\n *\n * ```ts\n * await importScript(\"http://localhost:3000/ffmpeg.js\");\n * ```\n */\nexport const importScript = async (url) => new Promise((resolve) => {\n const script = document.createElement(\"script\");\n const eventHandler = () => {\n script.removeEventListener(\"load\", eventHandler);\n resolve();\n };\n script.src = url;\n script.type = \"text/javascript\";\n script.addEventListener(\"load\", eventHandler);\n document.getElementsByTagName(\"head\")[0].appendChild(script);\n});\n/**\n * Download content of a URL with progress.\n *\n * Progress only works when Content-Length is provided by the server.\n *\n */\nexport const downloadWithProgress = async (url, cb) => {\n const resp = await fetch(url);\n let buf;\n try {\n // Set total to -1 to indicate that there is not Content-Type Header.\n const total = parseInt(resp.headers.get(HeaderContentLength) || \"-1\");\n const reader = resp.body?.getReader();\n if (!reader)\n throw ERROR_RESPONSE_BODY_READER;\n const chunks = [];\n let received = 0;\n for (;;) {\n const { done, value } = await reader.read();\n const delta = value ? value.length : 0;\n if (done) {\n if (total != -1 && total !== received)\n throw ERROR_INCOMPLETED_DOWNLOAD;\n cb && cb({ url, total, received, delta, done });\n break;\n }\n chunks.push(value);\n received += delta;\n cb && cb({ url, total, received, delta, done });\n }\n const data = new Uint8Array(received);\n let position = 0;\n for (const chunk of chunks) {\n data.set(chunk, position);\n position += chunk.length;\n }\n buf = data.buffer;\n }\n catch (e) {\n console.log(`failed to send download progress event: `, e);\n // Fetch arrayBuffer directly when it is not possible to get progress.\n buf = await resp.arrayBuffer();\n cb &&\n cb({\n url,\n total: buf.byteLength,\n received: buf.byteLength,\n delta: 0,\n done: true,\n });\n }\n return buf;\n};\n/**\n * toBlobURL fetches data from an URL and return a blob URL.\n *\n * Example:\n *\n * ```ts\n * await toBlobURL(\"http://localhost:3000/ffmpeg.js\", \"text/javascript\");\n * ```\n */\nexport const toBlobURL = async (url, mimeType, progress = false, cb) => {\n const buf = progress\n ? await downloadWithProgress(url, cb)\n : await (await fetch(url)).arrayBuffer();\n const blob = new Blob([buf], { type: mimeType });\n return URL.createObjectURL(blob);\n};\n","export default \"__VITE_ASSET__Dc9cb_Ff__\"","export default \"__VITE_ASSET__C1mnnC5I__\""],"names":["FFMessageType","getMessageID","messageID","ERROR_NOT_LOADED","ERROR_TERMINATED","FFmpeg","__privateAdd","_worker","_resolves","_rejects","_logEventCallbacks","_progressEventCallbacks","__publicField","_registerHandlers","__privateGet","id","type","data","f","_send","trans","signal","resolve","reject","classWorkerURL","config","__privateSet","args","timeout","ids","path","fsType","options","mountPoint","encoding","oldPath","newPath","event","callback","FFFSType","readFromBlobOrFile","blob","fileReader","result","_b","_a","fetchFile","file","c","coreURL","wasmURL"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}