{"version":3,"sources":["jsdelivr-header.js","/npm/catage@1.1.3/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,GAAK,QAAS,YACd,KAAO,QAAS,QAChB,MAAQ,QAAS,SACjB,EAAI,QAAS,UACb,OAAS,QAAS,WAGlB,iBAAE,kBAAqB,QAAS,eAChC,UAAE,UAAS,eAAE,eAAc,WAAE,WAAU,gBAAE,gBAAe,sBAAE,uBAA0B,QAAS,oBAC7F,cAAE,cAAa,UAAE,UAAS,OAAE,QAAW,QAAS,mBAGhD,IAAM,QAAQ,MAOd,oBAAsB,CAAE,EAAM,SAC5B,IAAc,EACP,GAAG,UAAW,EAAM,GAEpB,EAWT,gBAAkB,OAAU,OAAM,MAAK,SAAQ,YAOjD,OAHA,GADA,EAAS,EAAE,QAAS,MACE,cAAc,IAAQ,cAAc,KAAO,GAM7D,KAAK,cAAc,IACf,OAAO,oBAAqB,EAAM,OAAO,KAAM,OAAQ,EAAK,CAAE,KAAK,IAAU,UAIjF,KAAK,cAAc,KACnB,KAAK,cAAc,IAAK,CACpB,MAAM,QAAe,WAAY,CAAE,MAAK,SAAQ,UAChD,OAAO,oBAAqB,EAAM,EACtC,CAGA,QACI,QAAQ,IAAK,MAAM,IAAK,GAAI,MAAM,KAAM,iDAAyD,EAAE,KAAM,EAAE,OAAQ,eAAiB,WACpI,QAAQ,KAAM,GAEtB,EAME,QAAU,OACZ,YACA,aACA,WAAW,UAAU,KACrB,QAAQ,OAAO,UACf,SAAS,cAAc,IACvB,qBAAoB,EACpB,QAAQ,EACR,YAAW,EACX,aAAa,eACb,UAAU,KACV,iBAAiB,SAIjB,MAAM,EAAgB,KAAK,QAAS,IAAK,GACnC,EAAiB,EAAE,QAAS,QAAe,EAAY,KAAK,QAAS,IAAK,GAG1E,EAAO,GAAG,aAAc,EAAe,CAAE,SAAU,UAKnD,EAAY,CAGd,OAAQ,CACJ,SAAK,EACL,gBAAY,GAIhB,KAAM,CACF,SAAK,EACL,gBAAY,GAIhB,OAAQ,CACJ,SAAK,EACL,gBAAY,IAKpB,EAAU,KAAK,IAAM,UAAW,CAAE,OAAM,WAAU,QAAO,QAAS,QAAS,QAAO,sBAClF,EAAU,KAAK,WAAa,iBAAkB,EAAU,KAAK,KAGzD,IACA,EAAU,OAAO,IAAM,gBAAiB,EAAU,KAAK,WAAW,MAAO,GACzE,EAAU,OAAO,WAAa,iBAAkB,EAAU,OAAO,MAIjE,IACA,EAAU,OAAO,UAAY,sBAAuB,CAAE,gBAAe,UAAS,iBAAgB,QAAO,QAAO,MAAO,EAAU,KAAK,WAAW,QAC7I,EAAU,OAAO,WAAa,iBAAkB,EAAU,OAAO,MAIrE,MAAM,EAAW,eAAgB,CAC7B,OAAQ,EAAU,OAAO,IACzB,KAAM,EAAU,KAAK,IACrB,OAAQ,EAAU,OAAO,IACzB,aAAc,IAIlB,aAAa,gBAAiB,CAAE,KAAM,EAAgB,IAAK,EAAU,SAAQ,SAAS,EAK1F,OAAO,QAAU,CACb,gBACA,4BACA,oBACA","file":"/npm/catage@1.1.3/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/catage@1.1.3/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const fs = require( 'fs-extra' );\nconst path = require( 'path' );\nconst chalk = require( 'chalk' );\nconst _ = require( 'lodash' );\nconst pretty = require( 'pretty' );\n\n// library functions\nconst { getSvgDimensions } = require( './lib/util' );\nconst { codeToSvg, createFinalSVG, svgToImage, getOsxWindowSvg, getExecutionResultSVG } = require( './lib/functions' );\nconst { IMAGE_FORMATS, LANGUAGES, THEMES } = require( './lib/constants' );\n\n// current working directory\nconst CWD = process.cwd();\n\n/**\n * @desc Return image buffer or write it to a file.\n * @param {*} path - output file path\n * @param {*} buffer - image buffer\n */\nconst returnBufferOrWrite = ( path, buffer ) => {\n    if( undefined !== path ) {\n        return fs.writeFile( path, buffer );\n    } else {\n        return buffer;\n    }\n}\n\n/**\n * @desc Process final SVG image\n * @param { string } path - output file path\n * @param { string } svg - final SVG image string\n * @param { string } format - output image format\n * @param { number } scale - DPI scale factor\n */\nconst processFinalSvg = async ( { path, svg, format, scale } ) => {\n\n    // override JPG alias\n    format = _.toLower( format );\n    format = ( format === IMAGE_FORMATS.JPG ) ? IMAGE_FORMATS.JPEG : format;\n\n    // return SVG image or convert to portable image formats\n    switch( format ) {\n\n        // return SVG image\n        case IMAGE_FORMATS.SVG: {\n            return returnBufferOrWrite( path, Buffer.from( pretty( svg, { ocd: true } ), 'utf-8' ) );\n        }\n        \n        // convert SVG to portable image formats\n        case IMAGE_FORMATS.JPEG:\n        case IMAGE_FORMATS.PNG: {\n            const buffer = await svgToImage( { svg, format, scale } );\n            return returnBufferOrWrite( path, buffer );\n        }\n\n        // show error if image format is invalid\n        default: {\n            console.log( chalk.red( `${ chalk.bold( format ) } is invalid image format. Valid formats are ${ _.join( _.values( IMAGE_FORMATS ), ', ' ) }.` ) );\n            process.exit( 0 );\n        }\n    }\n};\n\n/**\n * @desc Converts a string (code) to an image with syntax highlighting\n */\nconst convert = async ( {\n    inputFile,\n    outputFile,\n    language = LANGUAGES.DART,\n    theme = THEMES.FIREWATCH,\n    format = IMAGE_FORMATS.PNG,\n    ignoreLineNumbers = false,\n    scale = 2,\n    hasFrame = true,\n    frameTitle = 'Code Snippet',\n    execute = null,\n    displayCommand = null,\n} ) => {\n\n    // absolute paths\n    const inputFilePath = path.resolve( CWD, inputFile );\n    const outputFilePath = _.isEmpty( outputFile ) ? undefined : path.resolve( CWD, outputFile );\n\n    // read input file in text format\n    const code = fs.readFileSync( inputFilePath, { encoding: 'utf-8' } );\n\n    /*********************/\n\n    // header, body and footer SVG images to construct final image\n    const svgImages = {\n\n        // OSX window frame\n        header: {\n            svg: undefined,\n            dimensions: undefined\n        },\n\n        // actual code\n        body: {\n            svg: undefined,\n            dimensions: undefined\n        },\n\n        // terminal result\n        footer: {\n            svg: undefined,\n            dimensions: undefined\n        },\n    };\n\n    // create SVG image from code with syntax highlighting\n    svgImages.body.svg = codeToSvg( { code, language, theme, padding: '20,20', scale, ignoreLineNumbers } );\n    svgImages.body.dimensions = getSvgDimensions( svgImages.body.svg );\n\n    // create SVG image for OSX window frame\n    if( hasFrame ) {\n        svgImages.header.svg = getOsxWindowSvg( svgImages.body.dimensions.width, frameTitle );\n        svgImages.header.dimensions = getSvgDimensions( svgImages.header.svg );\n    }\n\n    // execute code file\n    if( execute ) {\n        svgImages.footer.svg = await getExecutionResultSVG( { inputFilePath, execute, displayCommand, theme, scale, width: svgImages.body.dimensions.width } );\n        svgImages.footer.dimensions = getSvgDimensions( svgImages.footer.svg );\n    }\n\n    // create final SVG by merging header, body and footer\n    const finalSVG = createFinalSVG( {\n        header: svgImages.header.svg,\n        body: svgImages.body.svg,\n        footer: svgImages.footer.svg,\n        cornerRadius: 5\n    } );\n\n    // process SVG image\n    return await processFinalSvg( { path: outputFilePath, svg: finalSVG, format, scale } );\n};\n\n/******************************/\n\nmodule.exports = {\n    convert,\n    IMAGE_FORMATS,\n    LANGUAGES,\n    THEMES\n};"]}