{"version":3,"file":"cli.cjs","names":["_nodeFs","require","_helpers","_yargs","_interopRequireDefault","_error","_MediaInfo","_mediaInfoFactory","e","__esModule","default","analyze","coverData","file","format","full","fileHandle","fileSize","mediainfo","TypeError","includes","readChunk","size","offset","undefined","Error","buffer","Uint8Array","read","fsPromises","open","fileStat","stat","mediaInfoFactory","error","unknownToError","console","log","analyzeData","close","parseArgs","yargsInstance","yargs","hideBin","process","argv","wrap","terminalWidth","option","alias","describe","choices","FORMAT_CHOICES","type","command","positional","help","fail","message","exit","parseSync"],"sourceRoot":"../../src","sources":["cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { promises as fsPromises } from 'node:fs'\n\nimport { hideBin } from 'yargs/helpers'\nimport yargs from 'yargs/yargs'\n\nimport { unknownToError } from './error.js'\nimport { FORMAT_CHOICES } from './MediaInfo.js'\nimport mediaInfoFactory from './mediaInfoFactory.js'\nimport type { ReadChunkFunc } from './MediaInfo.js'\nimport type MediaInfo from './MediaInfo.js'\n\nconst analyze = async ({ coverData, file, format, full }: ReturnType<typeof parseArgs>) => {\n  let fileHandle: fsPromises.FileHandle | undefined\n  let fileSize: number\n  let mediainfo: MediaInfo<typeof format> | undefined\n\n  if (!file) {\n    throw new TypeError('No file received!')\n  }\n\n  if (coverData && !['JSON', 'XML'].includes(format)) {\n    throw new TypeError('For cover data you need to choose JSON or XML as output format!')\n  }\n\n  const readChunk: ReadChunkFunc = async (size, offset) => {\n    if (fileHandle === undefined) {\n      throw new Error('File unavailable')\n    }\n    const buffer = new Uint8Array(size)\n    await fileHandle.read(buffer, 0, size, offset)\n    return buffer\n  }\n\n  try {\n    fileHandle = await fsPromises.open(file, 'r')\n    const fileStat = await fileHandle.stat()\n    fileSize = fileStat.size\n    try {\n      mediainfo = await mediaInfoFactory({ format, coverData, full })\n    } catch (error: unknown) {\n      throw unknownToError(error)\n    }\n    console.log(await mediainfo.analyzeData(() => fileSize, readChunk))\n  } finally {\n    if (fileHandle) {\n      await fileHandle.close()\n    }\n    if (mediainfo) {\n      mediainfo.close()\n    }\n  }\n}\n\nfunction parseArgs() {\n  const yargsInstance = yargs(hideBin(process.argv))\n  return yargsInstance\n    .wrap(yargsInstance.terminalWidth())\n    .option('format', {\n      alias: 'f',\n      default: 'text' as const,\n      describe: 'Choose format',\n      choices: FORMAT_CHOICES,\n    })\n    .option('cover-data', {\n      default: false,\n      describe: 'Output cover data as base64',\n      type: 'boolean',\n    })\n    .option('full', {\n      default: false,\n      describe: 'Full information display (all internal tags)',\n      type: 'boolean',\n    })\n    .command('$0 <file>', 'Show information about media file')\n    .positional('file', { describe: 'File to analyze', type: 'string' })\n    .help('h')\n    .alias('h', 'help')\n    .fail((message: string, error: Error, argv) => {\n      if (message) {\n        console.error(argv.help())\n        console.error(message)\n      }\n      console.error(error.message)\n      process.exit(1)\n    })\n    .parseSync()\n}\n\ntry {\n  await analyze(parseArgs())\n} catch (error: unknown) {\n  console.error(unknownToError(error).message)\n}\n"],"mappings":"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","ignoreList":[]}