{"version":3,"file":"your-function.cjs","sources":["../src/diff.js","../src/your-function.js"],"sourcesContent":["import { diffLines, structuredPatch } from \"diff\";\nimport { blue, bold, red, green, gray } from \"colorette\";\n\n\n/**\n * Adds an angle bracket to each line of a\n * text section.\n * @param {string} angle - '>' or '<'\n * @param {string} txt - The text section.\n * @returns {string} - The given text section with an angle bracket and a space in front of each line. \n */\nconst addAngles = (angle, txt) => {\n    const txtArr = txt.split(\"\\n\");\n    let lastChar = \"\";\n    if (txt.at(-1) === \"\\n\") {\n        lastChar = \"\\n\";\n        txtArr.pop();\n    }\n    let output = txtArr.map(line => `${angle} ${line}`).join(\"\\n\");\n    output += lastChar;\n    return output;\n};\n\n\n/**\n * Prints an output in the mould of GNU diff when\n * called with no parameters other than the files.\n * But more picturesque, thanks to red and green\n * colors...\n * Also possible is a \"file\" mode. This variant\n * shows the whole file with added and removed\n * lines.\n * @param {string} source - The original code.\n * @param {string} code - The modified code.\n * @param {string} [diffOption] - As passed by the user. If the value is 'file' also unchanged code is printed.  \n */\nconst showDiff = (filename, source, code, diffOption, pluginName) => {\n    const fileMode = diffOption == \"file\";\n\n    console.log(bold(blue(\n        `(plugin ${pluginName}) diff for file '${filename}':`\n    )));\n    \n    console.log(gray(\"BEGIN >>>\"));\n\n    if (fileMode) {\n        const diff = diffLines(source, code);\n\n        let message = \"\";\n        \n        diff.forEach((part) => {\n            let msg;\n            if (part.added) {\n                msg = green(addAngles(\">\", part.value));\n            } else if (part.removed) {\n                msg = red(addAngles(\"<\", part.value));\n            } else {\n                msg = part.value;\n            }\n            message += msg;\n        });\n        \n        console.log(message);\n    \n    }\n        \n    else {\n        const diff = structuredPatch(\"\", \"\", source, code, \"\", \"\", {\n            context: 0\n        });\n        \n        for (const part of diff.hunks) {\n\n            // add\n            if (part.oldLines === 0) {\n                let info = `${part.oldStart}a${part.newStart}`;\n                if (part.newLines > 1) {\n                    info += `,${part.newStart+part.newLines-1}`;\n                }\n                console.log(bold(info));\n                part.lines.forEach(line => console.log(green(`> ${line.slice(1)}`)));\n            }\n            \n            // delete\n            else if (part.newLines === 0) {\n                let info = String(part.oldStart);\n                if (part.oldLines > 1) {\n                    info += `,${part.oldStart+part.oldLines-1}`;\n                }\n                info += `d${part.newLines}`;\n                console.log(bold(info));\n                part.lines.forEach(line => console.log(red(`< ${line.slice(1)}`)));\n            }\n            \n            // change\n            else {\n                let info = String(part.oldStart);\n                if (part.oldLines > 1) {\n                    info += `,${part.oldStart+part.oldLines-1}`;\n                }\n                info += `c${part.newStart}`;\n                if (part.newLines > 1) {\n                    info += `,${part.newStart+part.newLines-1}`;\n                }\n                console.log(bold(info));\n                \n                let plus = false;\n                part.lines.forEach((line, i) => {\n                    if (plus) {\n                        console.log(green(`> ${line.slice(1)}`));\n                    } else {\n                        console.log(red(`< ${line.slice(1)}`));\n                        if (part.lines[i+1].at(0) === \"+\") {\n                            console.log(\"---\");\n                            plus = true;\n                        }\n                    }\n                });\n            }\n        }\n    }\n     \n    console.log(gray(\"<<< END\\n\"));\n};\n\nexport default showDiff;\n","/**\n * [rollup-plugin-your-function]{@link https://github.com/UmamiAppearance/rollup-plugin-your-function}\n *\n * @version 0.5.3\n * @author UmamiAppearance [mail@umamiappearance.eu]\n * @license MIT\n */\n\nimport { createFilter } from \"@rollup/pluginutils\";\nimport { diffChars } from \"diff\";\nimport MagicString from \"magic-string\";\nimport showDiff from \"./diff.js\";\n\nconst yourFunction = (settings={}) => {\n\n    if (!settings.fn) {\n        throw Error(\"A function must be provided.\");\n    }\n\n    const filter = createFilter(settings.include, settings.exclude);\n    \n    const plugin = {\n        name: settings.name\n            ? String(settings.name)\n            : \"your-function\"\n    };\n\n    const fnWrap = async (source, options, context) => {\n\n        if (!filter(options.id)) return null;\n  \n        let [ code, map ] = [].concat(await settings.fn(source, options));\n        \n        if (typeof code === \"object\") {\n            map = code.map;\n            code = code.code;\n        }\n\n        if (\"showDiff\" in settings && code !== source) {\n            showDiff(options.id, source, code, settings.showDiff, plugin.name);\n        }\n        \n        if (settings.sourceMap !== false && settings.sourcemap !== false) {\n            if (!map) {\n\n                // If no Source Map was provided generate one, by\n                // comparing character by character with the help\n                // of diff and using the output to apply the changes\n                // to the source with the help of magic string. \n\n                let error = false;\n                const errorCase = (e) => {\n                    error = true;\n                    let msg = \"Automatic source map generation failed, or produced an inaccurate result. If you need a proper source map, you should provide it manually, otherwise you can ignore this message.\";\n                    if (e) {\n                        msg = `${msg}\\n___\\n${e}`;\n                    }\n                    context.warn(msg);\n                };\n\n                const ms = new MagicString(source);\n                let i = 0;\n                \n                for (const diff of diffChars(source, code)) {\n\n                    if (diff.added) {\n                        try {\n                            ms.appendRight(i, diff.value);\n                        } catch(e) {\n                            errorCase(e);\n                            break;\n                        }\n                    }\n                    \n                    else if (diff.removed) {\n                        try {\n                            ms.remove(i, i+=diff.count);\n                        } catch(e) {\n                            errorCase(e);\n                            break;\n                        }\n                    }\n                    \n                    else {\n                        i += diff.count;\n                    }\n                }\n\n                // Test if the code output of the magic string instance\n                // matches the output provided by the user \n                if (!error && ms.toString() !== code) {\n                    errorCase();\n                }\n\n                map = ms.generateMap({ hires: true });\n            }\n        } else {\n            map = undefined;\n        }\n\n        return { code, map };\n    };\n\n\n    if (settings.output) { \n        plugin.renderChunk = async function(source, chunk, outputOptions, meta) {\n            return await fnWrap(\n                source,\n                {\n                    id: chunk.fileName,\n                    chunk,\n                    outputOptions,\n                    meta\n                },\n                this\n            );\n        };\n    }\n\n    else {\n        plugin.transform = async function(source, id) {\n            return await fnWrap(\n                source,\n                { id },\n                this\n            );\n        };\n    }\n\n    return plugin;    \n};\n\n\nexport { yourFunction };\n"],"names":["bold","blue","gray","diff","diffLines","green","red","structuredPatch","createFilter","diffChars"],"mappings":"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"}