{"version":3,"sources":["../src/index.ts","../src/core/lame.ts","../src/internal/binary/resolve-binary.ts","../src/core/lame-options.ts","../src/core/lame-process.ts","../src/core/lame-stream.ts"],"sourcesContent":["export { Lame } from \"./core/lame\";\nexport { LameOptions } from \"./core/lame-options\";\nexport { LameStream } from \"./core/lame-stream\";\nexport type { LameOptionsBag, LameProgressEmitter, LameStatus } from \"./types\";\nexport type { LameStreamOptions } from \"./types\";\nexport {\n    resolveBundledLameBinary,\n    resolveBundledLibraryDirectory,\n    resolveLameBinary,\n} from \"./internal/binary/resolve-binary\";\n","import { randomBytes } from \"node:crypto\";\nimport { EventEmitter } from \"node:events\";\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readFile, unlink, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\n\nimport type { BitWidth, LameOptionsBag, LameProgressEmitter, LameStatus } from \"../types\";\nimport { resolveLameBinary } from \"../internal/binary/resolve-binary\";\nimport { LameOptions } from \"./lame-options\";\nimport {\n    buildLameSpawnArgs,\n    createInitialStatus,\n    spawnLameProcess,\n} from \"./lame-process\";\nimport type { ProgressKind } from \"./lame-process\";\n\nfunction isFloatArray(\n    view: ArrayBufferView,\n): view is Float32Array | Float64Array {\n    return view instanceof Float32Array || view instanceof Float64Array;\n}\n\n/**\n * Thin wrapper around the LAME CLI that manages temp files, progress events,\n * and output handling while delegating the heavy lifting to the binary.\n */\nclass Lame {\n    private status: LameStatus = createInitialStatus();\n\n    private readonly emitter: LameProgressEmitter =\n        new EventEmitter() as LameProgressEmitter;\n\n    private readonly options: LameOptionsBag;\n    private readonly builder: LameOptions;\n\n    private filePath?: string;\n    private fileBuffer?: Buffer;\n    private fileBufferTempFilePath?: string;\n\n    private progressedFilePath?: string;\n    private progressedBuffer?: Buffer;\n    private progressedBufferTempFilePath?: string;\n\n    private lamePath: string;\n    private tempPath: string;\n\n    constructor(options: LameOptionsBag) {\n        if (options.output === \"stream\") {\n            throw new Error(\n                'lame: The streaming output mode requires LameStream with mode set to \"encode\" or \"decode\"',\n            );\n        }\n\n        this.options = options;\n        this.builder = new LameOptions(this.options);\n        this.lamePath = resolveLameBinary();\n        this.tempPath = join(tmpdir(), \"node-lame\");\n    }\n\n    public setFile(path: string): this {\n        if (!existsSync(path)) {\n            throw new Error(\"Audio file (path) does not exist\");\n        }\n\n        this.filePath = path;\n        this.fileBuffer = undefined;\n\n        return this;\n    }\n\n    public setBuffer(\n        file: Buffer | ArrayBuffer | ArrayBufferView,\n    ): this {\n        const normalized = this.normalizeInputBuffer(file);\n\n        this.fileBuffer = normalized;\n        this.filePath = undefined;\n\n        return this;\n    }\n\n    public setLamePath(path: string): this {\n        if (typeof path !== \"string\" || path.trim() === \"\") {\n            throw new Error(\"Lame path must be a non-empty string\");\n        }\n\n        this.lamePath = path;\n\n        return this;\n    }\n\n    public setTempPath(path: string): this {\n        if (typeof path !== \"string\" || path.trim() === \"\") {\n            throw new Error(\"Temp path must be a non-empty string\");\n        }\n\n        this.tempPath = path;\n\n        return this;\n    }\n\n    public getFile(): string {\n        if (!this.progressedFilePath) {\n            throw new Error(\"Audio is not yet decoded/encoded\");\n        }\n\n        return this.progressedFilePath;\n    }\n\n    public getBuffer(): Buffer {\n        if (!this.progressedBuffer) {\n            throw new Error(\"Audio is not yet decoded/encoded\");\n        }\n\n        return this.progressedBuffer;\n    }\n\n    public getEmitter(): LameProgressEmitter {\n        return this.emitter;\n    }\n\n    public getStatus(): LameStatus {\n        return this.status;\n    }\n\n    public async encode(): Promise<this> {\n        return this.executeConversion(\"encode\");\n    }\n\n    public async decode(): Promise<this> {\n        return this.executeConversion(\"decode\");\n    }\n\n    /**\n     * Executes the CLI for the provided conversion type, handling buffers, files,\n     * and cleanup in case of errors.\n     */\n    private async executeConversion(type: ProgressKind): Promise<this> {\n        if (!this.filePath && !this.fileBuffer) {\n            throw new Error(\"Audio file to encode is not set\");\n        }\n\n        let inputPath = this.filePath;\n\n        if (!inputPath && this.fileBuffer) {\n            inputPath = await this.persistInputBufferToTempFile(type);\n        }\n\n        try {\n            return await this.spawnLameAndTrackProgress(inputPath!, type);\n        } catch (error) {\n            await this.removeTempArtifacts();\n            throw error;\n        }\n    }\n\n    /**\n     * Spawns the LAME process and listens to progress updates, resolving once complete.\n     */\n    private async spawnLameAndTrackProgress(\n        inputFilePath: string,\n        type: ProgressKind,\n    ): Promise<this> {\n        this.status = createInitialStatus();\n        const { outputPath, bufferOutput } =\n            await this.prepareOutputTarget(type);\n        const spawnArgs = buildLameSpawnArgs(\n            this.builder,\n            type,\n            inputFilePath,\n            outputPath,\n        );\n\n        return new Promise((resolve, reject) => {\n            const cleanup = async () => {\n                if (this.fileBufferTempFilePath) {\n                    await unlink(this.fileBufferTempFilePath).catch(() => {});\n                    this.fileBufferTempFilePath = undefined;\n                }\n            };\n\n            this.emitter.once(\"finish\", () => {\n                cleanup()\n                    .then(async () => {\n                        if (bufferOutput && this.progressedBufferTempFilePath) {\n                            const buffer = await readFile(\n                                this.progressedBufferTempFilePath,\n                            );\n                            await unlink(\n                                this.progressedBufferTempFilePath,\n                            ).catch(() => {});\n\n                            if (!Buffer.isBuffer(buffer)) {\n                                throw new Error(\n                                    \"Unexpected output format received from temporary file\",\n                                );\n                            }\n\n                            this.progressedBuffer = buffer;\n                            this.progressedBufferTempFilePath = undefined;\n                        }\n\n                        resolve(this);\n                    })\n                    .catch(reject);\n            });\n\n            this.emitter.once(\"error\", (error) => {\n                cleanup()\n                    .then(() => reject(error))\n                    .catch(reject);\n            });\n\n            spawnLameProcess({\n                binaryPath: this.lamePath,\n                spawnArgs,\n                kind: type,\n                status: this.status,\n                emitter: this.emitter,\n                completeOnTag: true,\n                progressSources: [\"stdout\", \"stderr\"],\n                onError: (error) => {\n                    this.emitter.emit(\"error\", error);\n                },\n            });\n        });\n    }\n\n    private normalizeInputBuffer(\n        input: Buffer | ArrayBuffer | ArrayBufferView,\n    ): Buffer {\n        if (Buffer.isBuffer(input)) {\n            return input;\n        }\n\n        if (input instanceof ArrayBuffer) {\n            return Buffer.from(new Uint8Array(input));\n        }\n\n        if (ArrayBuffer.isView(input)) {\n            return this.convertArrayViewToBuffer(input);\n        }\n\n        throw new Error(\"Audio file (buffer) does not exist\");\n    }\n\n    private convertArrayViewToBuffer(view: ArrayBufferView): Buffer {\n        if (isFloatArray(view)) {\n            return this.convertFloatArrayToBuffer(view);\n        }\n\n        const uintView = new Uint8Array(\n            view.buffer,\n            view.byteOffset,\n            view.byteLength,\n        );\n\n        return Buffer.from(uintView);\n    }\n\n    private convertFloatArrayToBuffer(\n        view: Float32Array | Float64Array,\n    ): Buffer {\n        const bitwidth: BitWidth = this.options.bitwidth ?? 16;\n        const useBigEndian = this.shouldUseBigEndian();\n        const isSigned = this.isSignedForBitwidth(bitwidth);\n\n        switch (bitwidth) {\n            case 8: {\n                const buffer = Buffer.alloc(view.length);\n\n                for (let index = 0; index < view.length; index += 1) {\n                    const sample = view[index];\n\n                    if (isSigned) {\n                        const value = this.scaleToSignedInteger(sample, 8);\n                        buffer.writeInt8(value, index);\n                    } else {\n                        const value = this.scaleToUnsignedInteger(sample, 8);\n                        buffer.writeUInt8(value, index);\n                    }\n                }\n\n                return buffer;\n            }\n\n            case 16: {\n                if (!isSigned) {\n                    throw new Error(\n                        \"lame: Float PCM input only supports signed samples for bitwidth 16\",\n                    );\n                }\n\n                const buffer = Buffer.alloc(view.length * 2);\n                for (let index = 0; index < view.length; index += 1) {\n                    const value = this.scaleToSignedInteger(view[index], 16);\n                    const offset = index * 2;\n\n                    if (useBigEndian) {\n                        buffer.writeInt16BE(value, offset);\n                    } else {\n                        buffer.writeInt16LE(value, offset);\n                    }\n                }\n\n                return buffer;\n            }\n\n            case 24: {\n                if (!isSigned) {\n                    throw new Error(\n                        \"lame: Float PCM input only supports signed samples for bitwidth 24\",\n                    );\n                }\n\n                const buffer = Buffer.alloc(view.length * 3);\n                for (let index = 0; index < view.length; index += 1) {\n                    const offset = index * 3;\n                    const scaled = this.scaleToSignedInteger(view[index], 24);\n                    let value = scaled;\n\n                    if (value < 0) {\n                        value += 1 << 24;\n                    }\n\n                    if (useBigEndian) {\n                        buffer[offset] = (value >> 16) & 0xff;\n                        buffer[offset + 1] = (value >> 8) & 0xff;\n                        buffer[offset + 2] = value & 0xff;\n                    } else {\n                        buffer[offset] = value & 0xff;\n                        buffer[offset + 1] = (value >> 8) & 0xff;\n                        buffer[offset + 2] = (value >> 16) & 0xff;\n                    }\n                }\n\n                return buffer;\n            }\n\n            case 32: {\n                if (!isSigned) {\n                    throw new Error(\n                        \"lame: Float PCM input only supports signed samples for bitwidth 32\",\n                    );\n                }\n\n                const buffer = Buffer.alloc(view.length * 4);\n                for (let index = 0; index < view.length; index += 1) {\n                    const value = this.scaleToSignedInteger(view[index], 32);\n                    const offset = index * 4;\n\n                    if (useBigEndian) {\n                        buffer.writeInt32BE(value, offset);\n                    } else {\n                        buffer.writeInt32LE(value, offset);\n                    }\n                }\n\n                return buffer;\n            }\n        }\n    }\n\n    private shouldUseBigEndian(): boolean {\n        if (this.options[\"big-endian\"] === true) {\n            return true;\n        }\n\n        if (this.options[\"little-endian\"] === true) {\n            return false;\n        }\n\n        return false;\n    }\n\n    private isSignedForBitwidth(bitwidth: BitWidth): boolean {\n        if (bitwidth === 8) {\n            if (this.options.unsigned === true) {\n                return false;\n            }\n\n            return this.options.signed === true;\n        }\n\n        if (this.options.unsigned === true) {\n            return false;\n        }\n\n        return true;\n    }\n\n    private clampSample(value: number): number {\n        if (!Number.isFinite(value)) {\n            return 0;\n        }\n\n        if (value <= -1) {\n            return -1;\n        }\n\n        if (value >= 1) {\n            return 1;\n        }\n\n        return value;\n    }\n\n    private scaleToSignedInteger(value: number, bitwidth: BitWidth): number {\n        const clamped = this.clampSample(value);\n\n        const positiveMax = Math.pow(2, bitwidth - 1) - 1;\n        const negativeScale = Math.pow(2, bitwidth - 1);\n\n        if (clamped <= -1) {\n            return -negativeScale;\n        }\n\n        if (clamped >= 1) {\n            return positiveMax;\n        }\n\n        if (clamped < 0) {\n            const scaled = Math.round(clamped * negativeScale);\n            return Math.max(-negativeScale, scaled);\n        }\n\n        const scaled = Math.round(clamped * positiveMax);\n        return Math.min(positiveMax, scaled);\n    }\n\n    private scaleToUnsignedInteger(value: number, bitwidth: BitWidth): number {\n        const clamped = this.clampSample(value);\n        const normalized = (clamped + 1) / 2;\n        const max = Math.pow(2, bitwidth) - 1;\n        const scaled = Math.round(normalized * max);\n\n        return Math.min(Math.max(scaled, 0), max);\n    }\n\n    private async persistInputBufferToTempFile(\n        type: ProgressKind,\n    ): Promise<string> {\n        const tempPath = await this.generateTempFilePath(\"raw\", type);\n        await writeFile(tempPath, this.toUint8Array(this.fileBuffer!));\n        this.fileBufferTempFilePath = tempPath;\n        return tempPath;\n    }\n\n    private toUint8Array(view: Buffer | ArrayBufferView): Uint8Array {\n        if (view instanceof Buffer) {\n            return new Uint8Array(\n                view.buffer,\n                view.byteOffset,\n                view.byteLength,\n            );\n        }\n\n        return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n    }\n\n    private async prepareOutputTarget(type: ProgressKind): Promise<{\n        outputPath: string;\n        bufferOutput: boolean;\n    }> {\n        if (this.options.output === \"buffer\") {\n            const tempOutPath = await this.generateTempFilePath(\n                \"encoded\",\n                type,\n            );\n            this.progressedBufferTempFilePath = tempOutPath;\n\n            return { outputPath: tempOutPath, bufferOutput: true };\n        }\n\n        this.progressedFilePath = this.options.output as string;\n        await this.ensureOutputDirectoryExists(this.progressedFilePath);\n\n        return {\n            outputPath: this.progressedFilePath,\n            bufferOutput: false,\n        };\n    }\n\n    private async ensureOutputDirectoryExists(filePath: string) {\n        const dir = dirname(filePath);\n        if (!dir || dir === \".\") {\n            return;\n        }\n\n        await mkdir(dir, { recursive: true });\n    }\n\n    private async generateTempFilePath(\n        type: \"raw\" | \"encoded\",\n        progressType: ProgressKind,\n    ): Promise<string> {\n        const dir = join(this.tempPath, type);\n        await mkdir(dir, { recursive: true });\n\n        const token = randomBytes(16).toString(\"hex\");\n        const extension =\n            type === \"raw\" && progressType === \"decode\" ? \".mp3\" : \"\";\n\n        return join(dir, `${token}${extension}`);\n    }\n\n    private async removeTempArtifacts() {\n        if (this.fileBufferTempFilePath) {\n            await unlink(this.fileBufferTempFilePath).catch(() => {});\n            this.fileBufferTempFilePath = undefined;\n        }\n\n        if (this.progressedBufferTempFilePath) {\n            await unlink(this.progressedBufferTempFilePath).catch(() => {});\n            this.progressedBufferTempFilePath = undefined;\n        }\n    }\n}\n\nexport { Lame };\nexport {\n    normalizeCliMessage,\n    parseDecodeProgressLine,\n    parseEncodeProgressLine,\n} from \"./lame-process\";\n","import { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\ndeclare const __dirname: string | undefined;\ndeclare const __filename: string | undefined;\n\ntype ImportMetaLike = { url?: string } | undefined;\n\nfunction deriveModuleUrl(\n    meta: ImportMetaLike,\n    filename: string | undefined,\n): string | undefined {\n    if (meta && typeof meta.url === \"string\") {\n        return meta.url;\n    }\n\n    if (typeof filename === \"string\") {\n        return pathToFileURL(filename).href;\n    }\n\n    return undefined;\n}\n\nconst moduleUrl = (() => {\n    let meta: ImportMetaLike = undefined;\n\n    try {\n        meta = import.meta as ImportMetaLike;\n    } catch {\n        // ignore when import.meta is unavailable (CommonJS build)\n    }\n\n    const resolvedFilename =\n        typeof __filename === \"string\" ? __filename : undefined;\n\n    return deriveModuleUrl(meta, resolvedFilename);\n})();\n\nfunction findPackageRootFrom(startDir: string): string | null {\n    let current = startDir;\n\n    while (true) {\n        const packageJsonPath = join(current, \"package.json\");\n        if (existsSync(packageJsonPath)) {\n            return current;\n        }\n\n        const parent = dirname(current);\n        if (parent === current) {\n            return null;\n        }\n\n        current = parent;\n    }\n}\n\nfunction resolvePackageRoot(\n    moduleHref: string | undefined,\n    dirname: string | undefined,\n): string {\n    const normalizedDir =\n        dirname ??\n        (moduleHref != null\n            ? fileURLToPath(new URL(\".\", moduleHref))\n            : undefined);\n\n    if (normalizedDir) {\n        const detectedRoot = findPackageRootFrom(normalizedDir);\n        if (detectedRoot) {\n            return detectedRoot;\n        }\n    }\n\n    if (dirname) {\n        return join(dirname, \"..\", \"..\", \"..\");\n    }\n\n    if (moduleHref != null) {\n        return fileURLToPath(new URL(\"../../..\", moduleHref));\n    }\n\n    return process.cwd();\n}\n\nconst PACKAGE_ROOT = resolvePackageRoot(\n    moduleUrl,\n    typeof __dirname === \"string\" ? __dirname : undefined,\n);\nconst CUSTOM_BINARY_ENV = \"LAME_BINARY\";\nconst LIBRARY_DIRECTORY_NAME = \"lib\";\n\nfunction getPlatformExecutableSuffix(platform: typeof process.platform): string {\n    return platform === \"win32\" ? \".exe\" : \"\";\n}\n\nconst PLATFORM_EXECUTABLE_SUFFIX = getPlatformExecutableSuffix(\n    process.platform,\n);\n\n/**\n * Attempt to resolve the absolute path to a bundled LAME binary.\n * Returns null when no bundled binary could be found.\n */\nfunction resolveBundledLameBinary(): string | null {\n    const explicitBinary = process.env[CUSTOM_BINARY_ENV];\n    if (explicitBinary && existsSync(explicitBinary)) {\n        return explicitBinary;\n    }\n\n    const candidate = join(\n        PACKAGE_ROOT,\n        \"vendor\",\n        \"lame\",\n        `${process.platform}-${process.arch}`,\n        `lame${PLATFORM_EXECUTABLE_SUFFIX}`,\n    );\n\n    if (existsSync(candidate)) {\n        return candidate;\n    }\n\n    return null;\n}\n\nfunction resolveBundledLibraryDirectory(): string | null {\n    const candidate = join(\n        PACKAGE_ROOT,\n        \"vendor\",\n        \"lame\",\n        `${process.platform}-${process.arch}`,\n        LIBRARY_DIRECTORY_NAME,\n    );\n\n    if (existsSync(candidate)) {\n        return candidate;\n    }\n\n    return null;\n}\n\n/**\n * Resolve the binary to use. Preference order:\n * 1. `LAME_BINARY` environment variable.\n * 2. Bundled prebuilt binary located in `vendor/lame/<platform>-<arch>/`.\n * 3. Fallback to the `lame` executable on PATH.\n */\nfunction resolveLameBinary(): string {\n    const resolved = resolveBundledLameBinary();\n    return resolved ?? \"lame\";\n}\n\nexport {\n    deriveModuleUrl,\n    getPlatformExecutableSuffix,\n    resolveBundledLameBinary,\n    resolveBundledLibraryDirectory,\n    resolveLameBinary,\n    resolvePackageRoot,\n};\n","import type { LameOptionsBag, PriorityLevel } from \"../types\";\n\n/**\n * Translates option objects into the argument list expected by the LAME CLI.\n */\nclass LameOptions {\n    private readonly args: string[] = [];\n    private useDefaultDisptime = true;\n    /**\n     * Validate all options and build argument array for binary\n     * @param {Object} options\n     */\n    constructor(options: LameOptionsBag) {\n        // Output is required\n        if (options[\"output\"] == undefined) {\n            throw new Error(\"lame: Invalid option: 'output' is required\");\n        }\n\n        // Save options as arguments\n        const entries = Object.entries(options) as Array<\n            [keyof LameOptionsBag, LameOptionsBag[keyof LameOptionsBag]]\n        >;\n\n        for (const [key, value] of entries) {\n            let arg: Array<string | number> | undefined;\n\n            switch (key) {\n                case \"output\":\n                    continue;\n                case \"raw\":\n                    arg = this.raw(value);\n                    break;\n                case \"swap-bytes\":\n                    arg = this.swapBytes(value);\n                    break;\n                case \"swap-channel\":\n                    arg = this.swapChannel(value);\n                    break;\n                case \"gain\":\n                    arg = this.gain(value);\n                    break;\n                case \"sfreq\":\n                    arg = this.sfreq(value);\n                    break;\n                case \"bitwidth\":\n                    arg = this.bitwidth(value);\n                    break;\n                case \"signed\":\n                    arg = this.signed(value);\n                    break;\n                case \"unsigned\":\n                    arg = this.unsigned(value);\n                    break;\n                case \"little-endian\":\n                    arg = this.littleEndian(value);\n                    break;\n                case \"big-endian\":\n                    arg = this.bigEndian(value);\n                    break;\n                case \"mp1Input\":\n                    arg = this.mp1Input(value);\n                    break;\n                case \"mp2Input\":\n                    arg = this.mp2Input(value);\n                    break;\n                case \"mp3Input\":\n                    arg = this.mp3Input(value);\n                    break;\n                case \"mode\":\n                    arg = this.mode(value);\n                    break;\n                case \"to-mono\":\n                    arg = this.toMono(value);\n                    break;\n                case \"channel-different-block-sizes\":\n                    arg = this.channelDifferentBlockSize(value);\n                    break;\n                case \"freeformat\":\n                    arg = this.freeformat(value);\n                    break;\n                case \"disable-info-tag\":\n                    arg = this.disableInfoTag(value);\n                    break;\n                case \"nogap\":\n                    arg = this.nogap(value);\n                    break;\n                case \"nogapout\":\n                    arg = this.nogapout(value);\n                    break;\n                case \"nogaptags\":\n                    arg = this.nogaptags(value);\n                    break;\n                case \"out-dir\":\n                    arg = this.outDir(value);\n                    break;\n                case \"comp\":\n                    arg = this.comp(value);\n                    break;\n                case \"scale\":\n                    arg = this.scale(value);\n                    break;\n                case \"scale-l\":\n                    arg = this.scaleL(value);\n                    break;\n                case \"scale-r\":\n                    arg = this.scaleR(value);\n                    break;\n                case \"replaygain-fast\":\n                    arg = this.replaygainFast(value);\n                    break;\n                case \"replaygain-accurate\":\n                    arg = this.replaygainAccurate(value);\n                    break;\n                case \"no-replaygain\":\n                    arg = this.noreplaygain(value);\n                    break;\n                case \"clip-detect\":\n                    arg = this.clipDetect(value);\n                    break;\n                case \"preset\":\n                    arg = this.preset(value);\n                    break;\n                case \"noasm\":\n                    arg = this.noasm(value);\n                    break;\n                case \"quality\":\n                    arg = this.quality(value);\n                    break;\n                case \"quality-high\":\n                    arg = this.qualityHigh(value);\n                    break;\n                case \"fast-encoding\":\n                    arg = this.fastEncoding(value);\n                    break;\n                case \"bitrate\":\n                    arg = this.bitrate(value);\n                    break;\n                case \"max-bitrate\":\n                    arg = this.maxBitrate(value);\n                    break;\n                case \"force-bitrate\":\n                    arg = this.forceBitrate(value);\n                    break;\n                case \"cbr\":\n                    arg = this.cbr(value);\n                    break;\n                case \"abr\":\n                    arg = this.abr(value);\n                    break;\n                case \"vbr\":\n                    arg = this.vbr(value);\n                    break;\n                case \"vbr-quality\":\n                    arg = this.vbrQuality(value);\n                    break;\n                case \"vbr-old\":\n                    arg = this.vbrOld(value);\n                    break;\n                case \"vbr-new\":\n                    arg = this.vbrNew(value);\n                    break;\n                case \"ignore-noise-in-sfb21\":\n                    arg = this.ignoreNoiseInSfb21(value);\n                    break;\n                case \"emp\":\n                    arg = this.emp(value);\n                    break;\n                case \"mark-as-copyrighted\":\n                    arg = this.markAsCopyrighted(value);\n                    break;\n                case \"mark-as-copy\":\n                    arg = this.markAsCopy(value);\n                    break;\n                case \"crc-error-protection\":\n                    arg = this.crcErrorProtection(value);\n                    break;\n                case \"nores\":\n                    arg = this.nores(value);\n                    break;\n                case \"strictly-enforce-ISO\":\n                    arg = this.strictlyEnforceIso(value);\n                    break;\n                case \"lowpass\":\n                    arg = this.lowpass(value);\n                    break;\n                case \"lowpass-width\":\n                    arg = this.lowpassWidth(value);\n                    break;\n                case \"highpass\":\n                    arg = this.highpass(value);\n                    break;\n                case \"highpass-width\":\n                    arg = this.highpassWidth(value);\n                    break;\n                case \"resample\":\n                    arg = this.resample(value);\n                    break;\n                case \"decode-mp3delay\":\n                    arg = this.decodeMp3Delay(value);\n                    break;\n                case \"priority\":\n                    arg = this.priority(value);\n                    break;\n                case \"disptime\":\n                    arg = this.disptime(value);\n                    break;\n                case \"silent\":\n                    arg = this.silent(value);\n                    break;\n                case \"quiet\":\n                    arg = this.quiet(value);\n                    break;\n                case \"verbose\":\n                    arg = this.verbose(value);\n                    break;\n                case \"help\":\n                    arg = this.help(value);\n                    break;\n                case \"usage\":\n                    arg = this.usage(value);\n                    break;\n                case \"longhelp\":\n                    arg = this.longHelp(value);\n                    break;\n                case \"version\":\n                    arg = this.version(value);\n                    break;\n                case \"license\":\n                    arg = this.license(value);\n                    break;\n                case \"no-histogram\":\n                    arg = this.noHistogram(value);\n                    break;\n                case \"meta\":\n                    arg = this.meta(value);\n                    break;\n                default:\n                    throw new Error(\"Unknown parameter \" + key);\n            }\n\n            if (Array.isArray(arg)) {\n                this.args.push(...arg.map((item) => String(item)));\n            }\n        }\n    }\n\n    /**\n     * Get all arguments for binary\n     */\n    public getArguments() {\n        return this.args;\n    }\n\n    public shouldUseDefaultDisptime() {\n        return this.useDefaultDisptime;\n    }\n\n    private raw(value: unknown) {\n        if (value == true) {\n            return [`-r`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private swapBytes(value: unknown) {\n        if (value == true) {\n            return [`-x`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private swapChannel(value: unknown) {\n        if (value == true) {\n            return [`--swap-channel`];\n        }\n\n        return undefined;\n    }\n\n    private gain(value: unknown) {\n        if (value === undefined) {\n            return undefined;\n        }\n\n        if (typeof value === \"number\" && value >= -20 && value <= 12) {\n            return [`--gain`, String(value)];\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'gain' must be a number between -20 and 12.\",\n        );\n    }\n\n    private sfreq(value: unknown) {\n        if (\n            value == 8 ||\n            value == 11.025 ||\n            value == 12 ||\n            value == 16 ||\n            value == 22.05 ||\n            value == 24 ||\n            value == 32 ||\n            value == 44.1 ||\n            value == 48\n        ) {\n            return [`-s`, String(value)];\n        } else {\n            throw new Error(\n                \"lame: Invalid option: 'sfreq' is not in range of 8, 11.025, 12, 16, 22.05, 24, 32, 44.1 or 48.\",\n            );\n        }\n    }\n\n    private bitwidth(value: unknown) {\n        if (value == 8 || value == 16 || value == 24 || value == 32) {\n            return [`--bitwidth`, String(value)];\n        } else {\n            throw new Error(\n                \"lame: Invalid option: 'sfreq' is not in range of 8, 16, 24 or 32.\",\n            );\n        }\n    }\n\n    private signed(value: unknown) {\n        if (value == true) {\n            return [`--signed`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private unsigned(value: unknown) {\n        if (value == true) {\n            return [`--unsigned`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private littleEndian(value: unknown) {\n        if (value == true) {\n            return [`--little-endian`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private bigEndian(value: unknown) {\n        if (value == true) {\n            return [`--big-endian`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private mp1Input(value: unknown) {\n        if (value == true) {\n            return [`--mp1input`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private mp2Input(value: unknown) {\n        if (value == true) {\n            return [`--mp2input`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private mp3Input(value: unknown) {\n        if (value == true) {\n            return [`--mp3input`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private mode(value: unknown) {\n        if (\n            value == \"s\" ||\n            value == \"j\" ||\n            value == \"f\" ||\n            value == \"d\" ||\n            value == \"m\" ||\n            value == \"l\" ||\n            value == \"r\" ||\n            value == \"a\"\n        ) {\n            return [`-m`, String(value)];\n        } else {\n            throw new Error(\n                \"lame: Invalid option: 'mode' is not in range of 's', 'j', 'f', 'd', 'm', 'l', 'r' or 'a'.\",\n            );\n        }\n    }\n\n    private toMono(value: unknown) {\n        if (value == true) {\n            return [`-a`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private channelDifferentBlockSize(value: unknown) {\n        if (value == true) {\n            return [`-d`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private freeformat(value: unknown) {\n        if (value == null || value === false) {\n            return undefined;\n        }\n\n        if (typeof value === \"string\") {\n            if (\n                value === \"FreeAmp\" ||\n                value === \"in_mpg123\" ||\n                value === \"l3dec\" ||\n                value === \"LAME\" ||\n                value === \"MAD\"\n            ) {\n                return [`--freeformat`];\n            }\n\n            throw new Error(\n                \"lame: Invalid option: 'freeformat' string value must be one of 'FreeAmp', 'in_mpg123', 'l3dec', 'LAME', 'MAD'.\",\n            );\n        }\n\n        if (value == true) {\n            return [`--freeformat`];\n        }\n\n        throw new Error(\"lame: Invalid option: 'freeformat' must be boolean.\");\n    }\n\n    private disableInfoTag(value: unknown) {\n        if (value == true) {\n            return [`-t`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private nogap(value: unknown) {\n        if (value == null) {\n            return undefined;\n        }\n\n        if (\n            Array.isArray(value) &&\n            value.length > 0 &&\n            value.every((item) => typeof item === \"string\" && item.trim() !== \"\")\n        ) {\n            return [`--nogap`, ...value];\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'nogap' must be a non-empty array of file paths.\",\n        );\n    }\n\n    private nogapout(value: unknown) {\n        if (value == null) {\n            return undefined;\n        }\n\n        if (typeof value === \"string\" && value.trim() !== \"\") {\n            return [`--nogapout`, value];\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'nogapout' must be a non-empty string path.\",\n        );\n    }\n\n    private nogaptags(value: unknown) {\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        if (value == true) {\n            return [`--nogaptags`];\n        }\n\n        throw new Error(\"lame: Invalid option: 'nogaptags' must be boolean.\");\n    }\n\n    private outDir(value: unknown) {\n        if (value == null) {\n            return undefined;\n        }\n\n        if (typeof value === \"string\" && value.trim() !== \"\") {\n            return [`--out-dir`, value];\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'out-dir' must be a non-empty string path.\",\n        );\n    }\n\n    private comp(value: unknown) {\n        return [`--comp`, String(value)];\n    }\n\n    private scale(value: unknown) {\n        return [`--scale`, String(value)];\n    }\n\n    private scaleL(value: unknown) {\n        return [`--scale-l`, String(value)];\n    }\n\n    private scaleR(value: unknown) {\n        return [`--scale-r`, String(value)];\n    }\n\n    private replaygainFast(value: unknown) {\n        if (value == true) {\n            return [`--replaygain-fast`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private replaygainAccurate(value: unknown) {\n        if (value == true) {\n            return [`--replaygain-accurate`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private noreplaygain(value: unknown) {\n        if (value == true) {\n            return [`--noreplaygain`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private clipDetect(value: unknown) {\n        if (value == true) {\n            return [`--clipdetect`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private preset(value: unknown) {\n        if (value == null) {\n            return undefined;\n        }\n\n        if (typeof value === \"number\" && value >= 8 && value <= 640) {\n            return [`--preset`, String(value)];\n        }\n\n        if (typeof value !== \"string\") {\n            return this.invalidPreset();\n        }\n\n        const trimmed = value.trim();\n        if (trimmed === \"\") {\n            throw new Error(\"lame: Invalid option: 'preset' cannot be empty.\");\n        }\n\n        const tokens = trimmed.split(/\\s+/);\n        const [first, second] = tokens;\n\n        const singleValuePresets = [\n            \"medium\",\n            \"standard\",\n            \"extreme\",\n            \"insane\",\n            \"phone\",\n            \"phon+\",\n            \"lw\",\n            \"mw-eu\",\n            \"mw-us\",\n            \"voice\",\n            \"fm\",\n            \"radio\",\n            \"hifi\",\n            \"cd\",\n            \"studio\",\n        ];\n\n        if (tokens.length === 1) {\n            if (singleValuePresets.includes(first) || /^[0-9]+$/.test(first)) {\n                return [`--preset`, first];\n            }\n\n            return this.invalidPreset();\n        }\n\n        if (\n            tokens.length === 2 &&\n            first === \"fast\" &&\n            (second === \"medium\" ||\n                second === \"standard\" ||\n                second === \"extreme\" ||\n                /^[0-9]+$/.test(second))\n        ) {\n            return [`--preset`, \"fast\", second];\n        }\n\n        if (tokens.length === 2 && first === \"cbr\" && /^[0-9]+$/.test(second)) {\n            return [`--preset`, \"cbr\", second];\n        }\n\n        return this.invalidPreset();\n    }\n\n    private invalidPreset(): never {\n        throw new Error(\n            \"lame: Invalid option: 'preset' must be a supported preset keyword, numeric bitrate, or preset tuple like 'fast <value>' or 'cbr <bitrate>'.\",\n        );\n    }\n\n    private noasm(value: unknown) {\n        if (value == \"mmx\" || value == \"3dnow\" || value == \"sse\") {\n            return [`--noasm`, String(value)];\n        } else {\n            throw new Error(\n                \"lame: Invalid option: 'noasm' is not in range of 'mmx', '3dnow' or 'sse'.\",\n            );\n        }\n    }\n\n    private quality(value: unknown) {\n        if (typeof value === \"number\" && value >= 0 && value <= 9) {\n            return [`-q`, String(value)];\n        } else {\n            throw new Error(\n                \"lame: Invalid option: 'quality' is not in range of 0 to 9.\",\n            );\n        }\n    }\n\n    private qualityHigh(value: unknown) {\n        if (value == true) {\n            return [`-h`];\n        }\n\n        if (value === undefined || value === false) {\n            /* c8 ignore next */\n            return undefined;\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'quality-high' must be boolean.\",\n        );\n    }\n\n    private fastEncoding(value: unknown) {\n        if (value == true) {\n            return [`-f`];\n        }\n\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'fast-encoding' must be boolean.\",\n        );\n    }\n\n    private bitrate(value: unknown) {\n        if (\n            value == 8 ||\n            value == 16 ||\n            value == 24 ||\n            value == 32 ||\n            value == 40 ||\n            value == 48 ||\n            value == 56 ||\n            value == 64 ||\n            value == 80 ||\n            value == 96 ||\n            value == 112 ||\n            value == 128 ||\n            value == 144 ||\n            value == 160 ||\n            value == 192 ||\n            value == 224 ||\n            value == 256 ||\n            value == 320\n        ) {\n            return [`-b`, String(value)];\n        } else {\n            throw new Error(\n                \"lame: Invalid option: 'bitrate' is not in range of 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 192, 224, 256 or 320.\",\n            );\n        }\n    }\n\n    private maxBitrate(value: unknown) {\n        if (\n            value == 8 ||\n            value == 16 ||\n            value == 24 ||\n            value == 32 ||\n            value == 40 ||\n            value == 48 ||\n            value == 56 ||\n            value == 64 ||\n            value == 80 ||\n            value == 96 ||\n            value == 112 ||\n            value == 128 ||\n            value == 144 ||\n            value == 160 ||\n            value == 192 ||\n            value == 224 ||\n            value == 256 ||\n            value == 320\n        ) {\n            return [`-B`, String(value)];\n        } else if (value === undefined) {\n            return undefined;\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'max-bitrate' is not in range of 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 192, 224, 256 or 320.\",\n        );\n    }\n\n    private forceBitrate(value: unknown) {\n        if (value == true) {\n            return [`-F`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private cbr(value: unknown) {\n        if (value == true) {\n            return [`--cbr`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private abr(value: unknown) {\n        if (typeof value === \"number\" && value >= 8 && value <= 310) {\n            return [`--abr`, String(value)];\n        } else {\n            throw new Error(\n                \"lame: Invalid option: 'abr' is not in range of 8 to 310.\",\n            );\n        }\n    }\n\n    private vbr(value: unknown) {\n        if (value == true) {\n            return [`-v`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private vbrQuality(value: unknown) {\n        if (typeof value === \"number\" && value >= 0 && value <= 9) {\n            return [`-V`, String(value)];\n        } else {\n            throw new Error(\n                \"lame: Invalid option: 'vbrQuality' is not in range of 0 to 9.\",\n            );\n        }\n    }\n\n    private vbrOld(value: unknown) {\n        if (value == true) {\n            return [`--vbr-old`];\n        }\n\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'vbr-old' must be boolean.\",\n        );\n    }\n\n    private vbrNew(value: unknown) {\n        if (value == true) {\n            return [`--vbr-new`];\n        }\n\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'vbr-new' must be boolean.\",\n        );\n    }\n\n    private ignoreNoiseInSfb21(value: unknown) {\n        if (value == true) {\n            return [`-Y`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private emp(value: unknown) {\n        if (value == \"n\" || value == 5 || value == \"c\") {\n            return [`-e`, String(value)];\n        } else {\n            throw new Error(\n                \"lame: Invalid option: 'emp' is not in range of 'n', 5 or 'c'.\",\n            );\n        }\n    }\n\n    private markAsCopyrighted(value: unknown) {\n        if (value == true) {\n            return [`-c`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private markAsCopy(value: unknown) {\n        if (value == true) {\n            return [`-o`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private crcErrorProtection(value: unknown) {\n        if (value == true) {\n            return [`-p`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private nores(value: unknown) {\n        if (value == true) {\n            return [`--nores`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private strictlyEnforceIso(value: unknown) {\n        if (value == true) {\n            return [`--strictly-enforce-ISO`];\n        } else {\n            return undefined;\n        }\n    }\n\n    private lowpass(value: unknown) {\n        return [`--lowpass`, String(value)];\n    }\n\n    private lowpassWidth(value: unknown) {\n        return [`--lowpass-width`, String(value)];\n    }\n\n    private highpass(value: unknown) {\n        return [`--highpass`, String(value)];\n    }\n\n    private highpassWidth(value: unknown) {\n        return [`--highpass-width`, String(value)];\n    }\n\n    private resample(value: unknown) {\n        if (\n            value == 8 ||\n            value == 11.025 ||\n            value == 12 ||\n            value == 16 ||\n            value == 22.05 ||\n            value == 24 ||\n            value == 32 ||\n            value == 44.1 ||\n            value == 48\n        ) {\n            return [`--resample`, String(value)];\n        } else {\n            throw new Error(\n                \"lame: Invalid option: 'resample' is not in range of 8, 11.025, 12, 16, 22.05, 24, 32, 44.1 or 48.\",\n            );\n        }\n    }\n\n    private decodeMp3Delay(value: unknown) {\n        if (value == null) {\n            return undefined;\n        }\n\n        if (typeof value === \"number\" && Number.isFinite(value)) {\n            return [`--decode-mp3delay`, String(value)];\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'decode-mp3delay' must be a finite number.\",\n        );\n    }\n\n    private priority(value: unknown) {\n        if (value == null) {\n            return undefined;\n        }\n\n        if (\n            typeof value === \"number\" &&\n            Number.isInteger(value) &&\n            value >= 0 &&\n            value <= 4\n        ) {\n            return [`--priority`, String(value as PriorityLevel)];\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'priority' must be an integer between 0 and 4.\",\n        );\n    }\n\n    private disptime(value: unknown) {\n        if (value === false) {\n            this.useDefaultDisptime = false;\n            return undefined;\n        }\n\n        if (value == null) {\n            return undefined;\n        }\n\n        if (typeof value === \"number\" && value > 0) {\n            this.useDefaultDisptime = false;\n            return [`--disptime`, String(value)];\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'disptime' must be a positive number of seconds or false to disable progress output.\",\n        );\n    }\n\n    private silent(value: unknown) {\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        if (value == true) {\n            return [`--silent`];\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'silent' must be boolean.\",\n        );\n    }\n\n    private quiet(value: unknown) {\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        if (value == true) {\n            return [`--quiet`];\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'quiet' must be boolean.\",\n        );\n    }\n\n    private verbose(value: unknown) {\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        if (value == true) {\n            return [`--verbose`];\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'verbose' must be boolean.\",\n        );\n    }\n\n    private help(value: unknown) {\n        return this.helpLike(\"--help\", value);\n    }\n\n    private usage(value: unknown) {\n        return this.helpLike(\"--usage\", value);\n    }\n\n    private longHelp(value: unknown) {\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        if (value == true) {\n            return [`--longhelp`];\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'longhelp' must be boolean.\",\n        );\n    }\n\n    private version(value: unknown) {\n        if (value == true) {\n            return [`--version`];\n        }\n\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'version' must be boolean.\",\n        );\n    }\n\n    private license(value: unknown) {\n        if (value == true) {\n            return [`--license`];\n        }\n\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'license' must be boolean.\",\n        );\n    }\n\n    private noHistogram(value: unknown) {\n        if (value == true) {\n            return [`--nohist`];\n        }\n\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'no-histogram' must be boolean.\",\n        );\n    }\n\n    private helpLike(flag: string, value: unknown) {\n        if (value == true) {\n            return [flag];\n        }\n\n        if (\n            typeof value === \"string\" &&\n            (value === \"id3\" || value === \"dev\")\n        ) {\n            return [flag, value];\n        }\n\n        if (value === undefined || value === false) {\n            return undefined;\n        }\n\n        throw new Error(\n            `lame: Invalid option: '${flag.slice(2)}' must be boolean or one of 'id3', 'dev'.`,\n        );\n    }\n\n    private meta(metaObj: unknown) {\n        if (metaObj == null || typeof metaObj !== \"object\") {\n            throw new Error(\"lame: Invalid option: 'meta' must be an object.\");\n        }\n\n        const metaRecord = metaObj as Record<string, unknown>;\n\n        const fieldMap: Record<string, string> = {\n            title: \"--tt\",\n            artist: \"--ta\",\n            album: \"--tl\",\n            year: \"--ty\",\n            comment: \"--tc\",\n            track: \"--tn\",\n            genre: \"--tg\",\n            artwork: \"--ti\",\n            \"genre-list\": \"--genre-list\",\n            \"pad-id3v2-size\": \"--pad-id3v2-size\",\n        };\n\n        for (const key of Object.keys(metaRecord)) {\n            const value = metaRecord[key];\n\n            if (key in fieldMap) {\n                this.args.push(fieldMap[key]);\n                this.args.push(`${value}`);\n            } else if (\n                key == \"add-id3v2\" ||\n                key == \"id3v1-only\" ||\n                key == \"id3v2-only\" ||\n                key == \"id3v2-latin1\" ||\n                key == \"id3v2-utf16\" ||\n                key == \"space-id3v1\" ||\n                key == \"pad-id3v2\" ||\n                key == \"ignore-tag-errors\"\n            ) {\n                this.args.push(`--${key}`);\n            } else if (key == \"custom\") {\n                this.appendCustomFrames(value);\n            } else {\n                throw new Error(\n                    `lame: Invalid option: 'meta' unknown property '${key}'`,\n                );\n            }\n        }\n\n        return undefined;\n    }\n\n    private appendCustomFrames(value: unknown) {\n        if (value == null) {\n            return;\n        }\n\n        const pushFrame = (id: string, frameValue: unknown) => {\n            if (typeof id !== \"string\" || id.trim() === \"\") {\n                throw new Error(\n                    \"lame: Invalid option: 'meta.custom' frame id must be a non-empty string.\",\n                );\n            }\n\n            this.args.push(\"--tv\");\n            this.args.push(`${id}=${String(frameValue)}`);\n        };\n\n        if (Array.isArray(value)) {\n            for (const entry of value) {\n                if (typeof entry === \"string\") {\n                    const [id, ...rest] = entry.split(\"=\");\n                    if (!id || rest.length === 0) {\n                        throw new Error(\n                            \"lame: Invalid option: 'meta.custom' array entries must be 'id=value'.\",\n                        );\n                    }\n                    pushFrame(id, rest.join(\"=\"));\n                } else if (Array.isArray(entry) && entry.length === 2) {\n                    pushFrame(\n                        String(entry[0]),\n                        entry[1],\n                    );\n                } else if (\n                    typeof entry === \"object\" &&\n                    entry != null &&\n                    \"id\" in entry &&\n                    \"value\" in entry\n                ) {\n                    const typedEntry = entry as { id: string; value: unknown };\n                    pushFrame(typedEntry.id, typedEntry.value);\n                } else {\n                    throw new Error(\n                        \"lame: Invalid option: 'meta.custom' array entries must be strings, tuples, or objects with id/value.\",\n                    );\n                }\n            }\n            return;\n        }\n\n        if (typeof value === \"object\") {\n            const record = value as Record<string, unknown>;\n            for (const [id, frameValue] of Object.entries(record)) {\n                pushFrame(id, frameValue);\n            }\n            return;\n        }\n\n        throw new Error(\n            \"lame: Invalid option: 'meta.custom' must be an array or object.\",\n        );\n    }\n}\n\nexport { LameOptions };\n","import { spawn, type ChildProcessWithoutNullStreams } from \"node:child_process\";\nimport { delimiter } from \"node:path\";\n\nimport type {\n    LameProgressEmitter,\n    LameStatus,\n    LameStreamMode,\n} from \"../types\";\nimport {\n    resolveBundledLibraryDirectory,\n    resolveLameBinary,\n} from \"../internal/binary/resolve-binary\";\nimport { LameOptions } from \"./lame-options\";\n\ntype ProgressKind = LameStreamMode;\ntype ProcessEnv = Record<string, string | undefined>;\n\nconst LAME_TAG_MESSAGE = \"Writing LAME Tag...done\";\n\nfunction createInitialStatus(): LameStatus {\n    return {\n        started: false,\n        finished: false,\n        progress: 0,\n        eta: undefined,\n    };\n}\n\nfunction buildLameSpawnArgs(\n    builder: LameOptions,\n    kind: ProgressKind,\n    input: string,\n    output: string,\n): string[] {\n    const args = builder.getArguments();\n    const normalizedArgs = [...args];\n\n    if (\n        builder.shouldUseDefaultDisptime() &&\n        !normalizedArgs.includes(\"--disptime\")\n    ) {\n        normalizedArgs.push(\"--disptime\", \"1\");\n    }\n\n    if (kind === \"decode\") {\n        normalizedArgs.push(\"--decode\");\n    }\n\n    return [input, output, ...normalizedArgs.map((value) => String(value))];\n}\n\nfunction markProcessFinished(\n    status: LameStatus,\n    emitter: LameProgressEmitter,\n) {\n    if (status.finished) {\n        return;\n    }\n\n    status.finished = true;\n    status.progress = 100;\n    status.eta = \"00:00\";\n\n    emitter.emit(\"finish\");\n    emitter.emit(\"progress\", [status.progress, status.eta]);\n}\n\nfunction parseEncodeProgressLine(content: string): {\n    progress?: number;\n    eta?: string;\n} | null {\n    const progressMatch = content.match(/\\(\\s*((?:[0-9]{1,2})|100)%\\)\\|/);\n    if (!progressMatch) {\n        return null;\n    }\n\n    const etaMatch = content.match(/[0-9]{1,2}:[0-9][0-9] /);\n\n    /* c8 ignore next */\n    const progress = Number(progressMatch[1]);\n    const eta = etaMatch ? etaMatch[0].trim() : undefined;\n\n    return { progress, eta };\n}\n\nfunction parseDecodeProgressLine(content: string): number | null {\n    const progressMatch = content.match(/[0-9]{1,10}\\/[0-9]{1,10}/);\n    if (!progressMatch) {\n        return null;\n    }\n\n    const [current, total] = progressMatch[0].split(\"/\").map(Number);\n    if (!Number.isFinite(current) || !Number.isFinite(total) || total === 0) {\n        return NaN;\n    }\n\n    return Math.floor((current / total) * 100);\n}\n\nfunction normalizeCliMessage(content: string): string | null {\n    if (\n        content.startsWith(\"lame: \") ||\n        content.startsWith(\"Warning: \") ||\n        content.includes(\"Error \")\n    ) {\n        return content.startsWith(\"lame: \") ? content : `lame: ${content}`;\n    }\n\n    return null;\n}\n\ninterface ProgressProcessorOptions {\n    kind: ProgressKind;\n    status: LameStatus;\n    emitter: LameProgressEmitter;\n    completeOnTag?: boolean;\n}\n\ninterface ProgressProcessorResult {\n    error?: Error;\n}\n\nfunction processProgressChunk(\n    payload: Buffer,\n    options: ProgressProcessorOptions,\n): ProgressProcessorResult {\n    const { kind, status, emitter, completeOnTag } = options;\n    const content = payload.toString();\n    const lines = content.split(/\\r?\\n/);\n\n    for (const rawLine of lines) {\n        const line = rawLine.trim();\n        if (line === \"\") {\n            continue;\n        }\n\n        if (completeOnTag && line.includes(LAME_TAG_MESSAGE)) {\n            markProcessFinished(status, emitter);\n            continue;\n        }\n\n        if (kind === \"encode\") {\n            const parsed = parseEncodeProgressLine(line);\n            if (parsed) {\n                if (\n                    parsed.progress !== undefined &&\n                    parsed.progress > status.progress\n                ) {\n                    status.progress = parsed.progress;\n                }\n\n                if (parsed.eta) {\n                    status.eta = parsed.eta;\n                }\n\n                emitter.emit(\"progress\", [status.progress, status.eta]);\n                continue;\n            }\n        } else {\n            const parsed = parseDecodeProgressLine(line);\n            if (parsed !== null) {\n                if (!Number.isNaN(parsed)) {\n                    status.progress = parsed;\n                }\n\n                emitter.emit(\"progress\", [status.progress, status.eta]);\n                continue;\n            }\n        }\n\n        const normalized = normalizeCliMessage(line);\n        if (normalized) {\n            return { error: new Error(normalized) };\n        }\n    }\n\n    return {};\n}\n\nfunction getExitError(\n    code: number | null,\n    executable: string,\n): Error | null {\n    if (code === 0) {\n        return null;\n    }\n\n    if (code === 255) {\n        return new Error(\n            \"Unexpected termination of the process, possibly directly after the start. Please check if the input and/or output does not exist.\",\n        );\n    }\n\n    if (code === 127) {\n        return new Error(\n            `lame: Failed to execute '${executable}'. Exit code 127 usually indicates missing shared libraries or an unreadable binary. Run scripts/diagnose-lame.mjs for details.`,\n        );\n    }\n\n    if (code !== null) {\n        return new Error(`lame: Process exited with code ${code}`);\n    }\n\n    return new Error(\"lame: Process exited unexpectedly\");\n}\n\nfunction applyBundledLibraryPath(\n    env: ProcessEnv,\n    libraryDir: string | null,\n): ProcessEnv {\n    if (!libraryDir) {\n        return env;\n    }\n\n    let variable: \"LD_LIBRARY_PATH\" | \"DYLD_LIBRARY_PATH\" | \"PATH\" | null =\n        null;\n\n    if (process.platform === \"linux\") {\n        variable = \"LD_LIBRARY_PATH\";\n    } else if (process.platform === \"darwin\") {\n        variable = \"DYLD_LIBRARY_PATH\";\n    } else if (process.platform === \"win32\") {\n        variable = \"PATH\";\n    }\n\n    if (!variable) {\n        return env;\n    }\n\n    const currentValue = env[variable];\n    return {\n        ...env,\n        [variable]: currentValue\n            ? `${libraryDir}${delimiter}${currentValue}`\n            : libraryDir,\n    };\n}\n\ninterface SpawnLameProcessOptions {\n    binaryPath?: string;\n    spawnArgs: string[];\n    kind: ProgressKind;\n    status: LameStatus;\n    emitter: LameProgressEmitter;\n    onError: (error: Error) => void;\n    progressSources: Array<\"stdout\" | \"stderr\">;\n    completeOnTag?: boolean;\n    onStdoutData?: (chunk: Buffer) => void;\n    onStdoutEnd?: () => void;\n    onStdoutError?: (error: Error) => void;\n    onStderrData?: (chunk: Buffer) => void;\n    onStderrError?: (error: Error) => void;\n    onStdinError?: (error: Error) => void;\n    onSuccess?: () => void;\n}\n\nfunction spawnLameProcess(\n    options: SpawnLameProcessOptions,\n): ChildProcessWithoutNullStreams {\n    const {\n        binaryPath,\n        spawnArgs,\n        kind,\n        status,\n        emitter,\n        onError,\n        progressSources,\n        completeOnTag,\n        onStdoutData,\n        onStdoutEnd,\n        onStdoutError,\n        onStderrData,\n        onStderrError,\n        onStdinError,\n        onSuccess,\n    } = options;\n\n    status.started = true;\n    status.finished = false;\n    status.progress = 0;\n    status.eta = undefined;\n\n    const executable = binaryPath ?? resolveLameBinary();\n    const libraryDir = resolveBundledLibraryDirectory();\n    const childEnv = applyBundledLibraryPath({ ...process.env }, libraryDir);\n    const child = spawn(executable, spawnArgs, {\n        env: childEnv,\n    });\n\n    const progressTargets = new Set(progressSources);\n    let hasSeenCliError = false;\n    let stderrBuffer = \"\";\n\n    const deliveredErrorMessages = new Set<string>();\n\n    const deliverError = (error: Error) => {\n        const message = error.message ?? String(error);\n        if (deliveredErrorMessages.has(message)) {\n            return;\n        }\n\n        deliveredErrorMessages.add(message);\n        onError(error);\n    };\n\n    const emitCliError = (error: Error) => {\n        hasSeenCliError = true;\n        deliverError(error);\n    };\n\n    const emitExitError = (error: Error) => {\n        if (hasSeenCliError) {\n            return;\n        }\n\n        deliverError(error);\n    };\n\n    const handleStdout = (chunk: Buffer) => {\n        if (progressTargets.has(\"stdout\")) {\n            const { error } = processProgressChunk(chunk, {\n                kind,\n                status,\n                emitter,\n                completeOnTag,\n            });\n\n            if (error) {\n                emitCliError(error);\n                return;\n            }\n        }\n\n        onStdoutData?.(chunk);\n    };\n\n    const handleStderr = (chunk: Buffer) => {\n        stderrBuffer += chunk.toString();\n        if (progressTargets.has(\"stderr\")) {\n            const { error } = processProgressChunk(chunk, {\n                kind,\n                status,\n                emitter,\n                completeOnTag,\n            });\n\n            if (error) {\n                emitCliError(error);\n                return;\n            }\n        }\n\n        onStderrData?.(chunk);\n    };\n\n    child.stdout.on(\"data\", handleStdout);\n    child.stderr.on(\"data\", handleStderr);\n\n    if (onStdoutEnd) {\n        child.stdout.on(\"end\", onStdoutEnd);\n    }\n\n    child.stdout.on(\"error\", (error) => {\n        onStdoutError?.(error);\n        emitCliError(error);\n    });\n\n    child.stderr.on(\"error\", (error) => {\n        onStderrError?.(error);\n        emitCliError(error);\n    });\n\n    child.stdin.on(\"error\", (error) => {\n        onStdinError?.(error);\n        emitCliError(error);\n    });\n\n    child.on(\"error\", emitCliError);\n    child.on(\"close\", (code) => {\n        const exitError = getExitError(code, executable);\n        if (exitError) {\n            const bufferedLines = stderrBuffer\n                .split(/\\r?\\n/)\n                .map((value) => value.trim())\n                .filter((value) => value.length > 0);\n\n            for (const line of bufferedLines) {\n                const normalized = normalizeCliMessage(line);\n                if (normalized) {\n                    emitCliError(new Error(normalized));\n                    return;\n                }\n            }\n\n            emitExitError(exitError);\n            return;\n        }\n\n        markProcessFinished(status, emitter);\n        onSuccess?.();\n    });\n\n    return child;\n}\n\nexport {\n    buildLameSpawnArgs,\n    createInitialStatus,\n    getExitError,\n    markProcessFinished,\n    normalizeCliMessage,\n    parseDecodeProgressLine,\n    parseEncodeProgressLine,\n    processProgressChunk,\n    spawnLameProcess,\n};\nexport type { ProgressKind, SpawnLameProcessOptions };\n","/* global BufferEncoding */\n\nimport type { ChildProcessWithoutNullStreams } from \"node:child_process\";\nimport { EventEmitter } from \"node:events\";\nimport { Duplex } from \"node:stream\";\n\nimport type {\n    LameOptionsBag,\n    LameProgressEmitter,\n    LameStatus,\n    LameStreamMode,\n    LameStreamOptions,\n} from \"../types\";\nimport { LameOptions } from \"./lame-options\";\nimport {\n    buildLameSpawnArgs,\n    createInitialStatus,\n    spawnLameProcess,\n} from \"./lame-process\";\nimport type { ProgressKind } from \"./lame-process\";\n\ntype StreamKind = ProgressKind;\n\ntype LameStreamConfig = Omit<LameStreamOptions, \"output\"> & {\n    binaryPath?: string;\n};\n\nclass LameStream extends Duplex {\n    private readonly emitter: LameProgressEmitter;\n    private readonly status: LameStatus;\n    private readonly builder: LameOptions;\n    private readonly binaryPath?: string;\n    private readonly kind: StreamKind;\n\n    private child?: ChildProcessWithoutNullStreams;\n\n    private isStdoutPaused = false;\n    private hasErrored = false;\n    private finished = false;\n\n    constructor(options: LameStreamConfig) {\n        super({ allowHalfOpen: false });\n\n        const { binaryPath, mode, ...cliOptions } = options;\n        if (!isValidStreamMode(mode)) {\n            throw new Error(\n                'lame: LameStream requires a mode of either \"encode\" or \"decode\"',\n            );\n        }\n\n        const normalizedOptions: LameOptionsBag = {\n            ...(cliOptions as Omit<LameStreamOptions, \"output\" | \"mode\">),\n            output: \"stream\",\n        } as LameOptionsBag;\n\n        this.binaryPath = binaryPath;\n        this.status = createInitialStatus();\n        this.emitter = new EventEmitter() as LameProgressEmitter;\n        this.builder = new LameOptions(normalizedOptions);\n        this.kind = mode;\n\n        this.initialize(this.kind);\n    }\n\n    public getEmitter(): LameProgressEmitter {\n        return this.emitter;\n    }\n\n    public getStatus(): LameStatus {\n        return this.status;\n    }\n\n    public override _read(): void {\n        if (!this.child) {\n            return;\n        }\n\n        if (this.isStdoutPaused && !this.child.stdout.readableEnded) {\n            this.isStdoutPaused = false;\n            this.child.stdout.resume();\n        }\n    }\n\n    public override _write(\n        chunk: Buffer,\n        encoding: BufferEncoding,\n        callback: (error?: Error | null) => void,\n    ): void {\n        const child = this.child;\n        if (!child) {\n            callback(new Error(\"lame: Stream mode is not initialized yet\"));\n            return;\n        }\n\n        if (this.finished || child.stdin.destroyed) {\n            callback(new Error(\"lame: Stream has already finished\"));\n            return;\n        }\n\n        try {\n            const flushed = child.stdin.write(chunk, encoding);\n            if (!flushed) {\n                const cleanup = () => {\n                    child.stdin.off(\"drain\", onDrain);\n                    child.stdin.off(\"error\", onError);\n                    child.stdin.off(\"close\", onClose);\n                };\n\n                const onDrain = () => {\n                    cleanup();\n                    callback();\n                };\n                const onError = (error: Error) => {\n                    cleanup();\n                    callback(error);\n                };\n                const onClose = () => {\n                    cleanup();\n                    callback(new Error(\"lame: Input stream closed before drain\"));\n                };\n\n                child.stdin.once(\"drain\", onDrain);\n                child.stdin.once(\"error\", onError);\n                child.stdin.once(\"close\", onClose);\n                return;\n            }\n        } catch (error) {\n            callback(error as Error);\n            return;\n        }\n\n        callback();\n    }\n\n    public override _final(callback: (error?: Error | null) => void): void {\n        const child = this.child;\n        if (!child) {\n            callback(new Error(\"lame: Stream mode is not initialized yet\"));\n            return;\n        }\n\n        try {\n            child.stdin.end();\n        } catch (error) {\n            callback(error as Error);\n            return;\n        }\n\n        callback();\n    }\n\n    public override _destroy(\n        error: Error | null,\n        callback: (error?: Error | null) => void,\n    ): void {\n        const child = this.child;\n\n        if (!child) {\n            callback(error ?? null);\n            return;\n        }\n\n        try {\n            if (!child.killed) {\n                child.kill();\n            }\n        } catch (killError) {\n            callback(killError as Error);\n            return;\n        }\n\n        this.cleanupChildListeners();\n        callback(error ?? null);\n    }\n\n    private initialize(kind: StreamKind): void {\n        if (this.child) {\n            return;\n        }\n\n        const spawnArgs = buildLameSpawnArgs(this.builder, kind, \"-\", \"-\");\n\n        this.child = spawnLameProcess({\n            binaryPath: this.binaryPath,\n            spawnArgs,\n            kind,\n            status: this.status,\n            emitter: this.emitter,\n            progressSources: [\"stderr\"],\n            completeOnTag: true,\n            onError: (error) => this.emitStreamError(error),\n            onStdoutData: (chunk) => this.forwardStdout(chunk),\n            onStdoutEnd: () => this.push(null),\n            onStdoutError: (error) => this.emitStreamError(error),\n            onStderrError: (error) => this.emitStreamError(error),\n            onStdinError: (error) => this.emitStreamError(error),\n            onSuccess: () => this.handleSuccessfulClose(),\n        });\n    }\n\n    private forwardStdout(chunk: Buffer) {\n        if (this.hasErrored || this.finished) {\n            return;\n        }\n\n        const shouldContinue = this.push(chunk);\n        if (!shouldContinue && this.child) {\n            this.isStdoutPaused = true;\n            this.child.stdout.pause();\n        }\n    }\n\n    private handleSuccessfulClose() {\n        if (this.finished) {\n            return;\n        }\n\n        this.finished = true;\n        this.cleanupChildListeners();\n    }\n\n    private emitStreamError(error: Error) {\n        if (this.hasErrored) {\n            return;\n        }\n\n        this.hasErrored = true;\n        this.finished = true;\n        this.status.finished = true;\n        this.cleanupChildListeners();\n        this.emitter.emit(\"error\", error);\n\n        try {\n            if (this.child && !this.child.killed) {\n                this.child.kill();\n            }\n        } catch {\n            /* ignore termination errors while cleaning up */\n        }\n\n        super.destroy(error);\n    }\n\n    private cleanupChildListeners() {\n        if (!this.child) {\n            return;\n        }\n\n        this.child.stdout.removeAllListeners();\n        this.child.stderr.removeAllListeners();\n        this.child.stdin.removeAllListeners();\n        this.child.removeAllListeners();\n    }\n}\n\nconst isValidStreamMode = (value: unknown): value is LameStreamMode => {\n    return value === \"encode\" || value === \"decode\";\n};\n\nexport { LameStream };\nexport type { LameStreamConfig };\n"],"mappings":"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","names":["import_node_fs","import_node_path","dirname","import_node_path","scaled","import_node_events"]}