{"version":3,"file":"import-manager.cjs","sources":["../src/errors.js","../src/unit-methods.js","../src/core.js"],"sourcesContent":["/**\n * Custom error to tell the user, that it is\n * not possible to select a specific unit.\n */\nclass MatchError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = \"MatchError\";\n    }\n}\n\n/**\n * Custom error to abort the building process\n * for retrieving information.\n */\nclass DebuggingError extends Error {\n    constructor(message) {\n        if (typeof message !== \"string\") {\n            message = JSON.stringify(message, null, 4);\n        }\n        super(message);\n        this.name = \"DebuggingError\";\n    }\n}\n\nexport { DebuggingError, MatchError };\n","import { DebuggingError, MatchError } from \"./errors.js\";\n\n/**\n * Creates methods for unit manipulation to\n * be attached to a requested unit.\n */\nexport default class ImportManagerUnitMethods {\n\n    /**\n     * Stores the handed over unit and creates\n     * an update method.\n     * @param {Object} unit - The unit a user requests \n     * @param {*} es6NodeToUnit - Method to analyze a \n     */\n    constructor(unit, es6NodeToUnit) {\n        this.unit = unit;\n\n        // After a change in the code of a es6 unit is made\n        // it gets analyzed again, which is very verbose,\n        // but prevents errors. The \"MagicString\" does not\n        // contain multiple changes at a time. The analysis\n        // function is the same as for the initial file\n        // analyses and gets handed over by the main class.\n\n        this.updateUnit = () => {\n\n            const unit = es6NodeToUnit(\n                this.unit.code.toString(),\n                this.unit.start,\n                this.unit.end\n            );\n\n            Object.assign(this.unit, unit);\n\n        };\n    }\n\n\n    /**\n     * Makes sure, that the processed unit is of type 'es6'. \n     */\n    #ES6only() {\n        if (this.unit.type !== \"es6\") {\n            throw new Error(\"This method is only available for ES6 imports.\");\n        }\n    }  \n\n    /**\n     * Changes the module part of a import statement.\n     * @param {string|function} name - The new module part/path or a function that receives the module's full (raw) name/path - including quotes if present - which must return the new module part/path.\n     * @param {string} modType - Module type (string|raw).\n     */\n    renameModule(name, modType) {\n\n        if (typeof name === \"function\") {\n            name = name(this.unit.module.rawName);\n            if (typeof name !== \"string\") {\n                throw new TypeError(\"If a function is provided the output must be a string.\");\n            }\n        }\n\n        else if (modType === \"string\") {\n            if (!this.unit.module.quotes) {\n                this.unit.module.quotes = \"\\\"\";\n            }\n            const q = this.unit.module.quotes;\n            name = q + name + q;\n        }\n        \n        else if (modType !== \"raw\") {\n            throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`);\n        }\n        \n        this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, name);\n\n        if (this.unit.type === \"es6\") {\n            this.updateUnit();\n        }\n    }\n\n\n    /**\n     * Adds default members to the import statement.\n     * @param {string[]} names - A list of default members to add.\n     */\n    addDefaultMembers(names) {\n        this.#ES6only();\n\n        let start; \n        let defStr;\n        let memberPart = null;\n\n        // handle the case if default members already exist\n        if (this.unit.defaultMembers.count > 0) {\n            start = this.unit.defaultMembers.entities.at(-1).absEnd;\n            defStr = this.unit.defaultMembers.separator \n                   + names.join(this.unit.defaultMembers.separator);\n            this.unit.code.appendRight(start, defStr);\n        }\n\n        // handle the case if default members do not exist, \n        // and also no non default members (the addition\n        // needs to be appended left, otherwise is\n        // interferes with the module part)\n        else if (this.unit.members.count === 0) {\n            start = this.unit.module.start;\n            defStr = names.join(this.unit.members.separator);\n            memberPart = defStr;\n            defStr += \" from \";\n            this.unit.code.appendLeft(start, defStr);\n        }\n\n        // handle the case if default members do not exist, \n        // but non default members\n        else {\n            start = this.unit.members.start;\n            defStr = names.join(this.unit.defaultMembers.separator)\n                   + this.unit.members.separator;\n            this.unit.code.appendRight(start, defStr);\n        }\n        \n        this.updateUnit(memberPart);\n    }\n\n\n    /**\n     * Adds non default members to the import statement.\n     * @param {string[]} names - A list of members to add. \n     */\n    addMembers(names) {\n        this.#ES6only();\n\n        let start; \n        let memStr;\n        let memberPart = null;\n        \n        // handle the case if members already exist\n        if (this.unit.members.count > 0) {\n            start = this.unit.members.entities.at(-1).absEnd;\n            memStr = this.unit.members.separator \n                   + names.join(this.unit.members.separator);\n            this.unit.code.appendRight(start, memStr);\n        }\n\n        // handle the case if members do not exist, \n        // and also no default members (the addition\n        // needs to be appended left, otherwise is\n        // interferes with the module part)\n        else if (this.unit.defaultMembers.count === 0) {\n            start = this.unit.module.start;\n            memStr = \"{ \"\n                   + names.join(this.unit.members.separator)\n                   + \" }\";\n            memberPart = memStr;\n            memStr += \" from \";\n            this.unit.code.appendLeft(start, memStr);\n        }\n\n        // handle the case if members do not exist, \n        // but default members\n        else {\n            start = this.unit.defaultMembers.end;\n            memStr = this.unit.defaultMembers.separator\n                   + \"{ \"\n                   + names.join(this.unit.members.separator)\n                   + \" }\";\n            this.unit.code.appendRight(start, memStr);\n        }\n\n        this.updateUnit(memberPart);\n    }\n\n\n    /**\n     * Internal helper method to get the member type.\n     * The user input distinguishes between member/defaultMember\n     * and the plural versions of them. To prevent confusion in the\n     * process of selecting the different styles in the unit, this\n     * methods adds an \"s\" to the given string if missing and selects\n     * the requested type.\n     * @param {*} memberType \n     * @returns \n     */\n    #getType(memberType) {\n        if (memberType.at(-1) !== \"s\") {\n            memberType += \"s\";\n        }\n        return this.unit[memberType];\n    }\n\n\n    /**\n     * Internal helper method to find a specific member\n     * or default member.\n     * @param {string} memberType - member/defaultMember. \n     * @param {string} name - (default) member name. \n     * @returns {Object} - (default) member object.\n     */\n    #findMember(memberType, name) {\n        if (!name) {\n            throw new Error(`${memberType} name must be set.`);\n        }\n        const filtered = this.#getType(memberType).entities.filter(m => m.name === name);\n        if (filtered.length !== 1) {\n            throw new MatchError(`Unable to locate ${memberType} with name '${name}'`);\n        }\n        return filtered[0];\n    }\n\n\n    /**\n     * Removes a (default) member.\n     * @param {string} memberType - member|defaultMember\n     * @param {string} name - Name of the (default) member \n     */\n    removeMember(memberType, name) {\n        this.#ES6only();\n\n        const member = this.#findMember(memberType, name);\n\n        if (this.#getType(memberType).count === 1) {\n            this.removeMembers(memberType);\n        } \n\n        else {\n            let start;\n            let end;\n            \n            if (member.next) {\n                start = member.start;\n                end = member.next;\n            } else if (member.last) {\n                start = member.last;\n                end = member.absEnd;\n            } else {\n                start = member.start;\n                end = member.absEnd;\n            }\n\n            this.unit.code.remove(start, end);  \n            this.updateUnit();\n\n        }\n    }\n\n\n    /**\n     * Removes an entire group of members or default members.\n     * @param {string} membersType - member(s)|defaultMember(s) \n     */\n    removeMembers(membersType) {\n        this.#ES6only();\n\n        const isDefault = membersType.indexOf(\"default\") > -1;\n\n        const members = this.#getType(membersType);\n        const others = this.#getType(isDefault ? \"members\" : \"defaultMembers\");\n\n        let memberPart = null;\n        if (others.count > 0) {\n            \n            const start = !isDefault \n                ? this.unit.defaultMembers.entities.at(-1).end\n                : members.start;\n\n            this.unit.code.remove(start, members.end);\n        }\n\n        else {\n            this.unit.code.remove(members.start, this.unit.module.start);\n            memberPart = \"\";\n        }\n\n        this.updateUnit(memberPart);\n    }\n\n\n    /**\n     * Renames a single (default) member. The alias\n     * can be kept or overwritten. \n     * @param {string} memberType - member|defaultMember \n     * @param {string} name - The (default) member to rename.\n     * @param {string} newName - The new name of the (default) member.\n     * @param {boolean} keepAlias - True if the alias shall be untouched. \n     */\n    renameMember(memberType, name, newName, keepAlias) {\n        this.#ES6only();\n\n        const member = this.#findMember(memberType, name);\n        let end;\n\n        if (keepAlias) {\n            end = member.end;\n        } else {\n            end = member.absEnd;\n        }\n        \n        this.unit.code.overwrite(member.start, end, newName);\n        this.updateUnit();\n    }\n\n\n    /**\n     * Changes the alias. Changing can be renaming\n     * setting it initially or removing. \n     * @param {string} memberType - member|defaultMember\n     * @param {string} name - (default) member name\n     * @param {string} [set] - A new name or nothing for removal\n     */\n    setAlias(memberType, name, set) {\n        this.#ES6only();\n        \n        if (memberType === \"defaultMember\") {\n            if (name !== \"*\") {\n                throw new TypeError(\"The modification of a default member alias is only possible if the module is an asterisk. For other changes use the 'rename' method.\");\n            } else if (!set) {\n                throw new TypeError(\"Removing the alias of an asterisk is invalid. Use the 'rename' method for other changes.\");\n            }\n        }\n        const aliasStr = set ? `${name} as ${set}` : name;\n        this.renameMember(memberType, name, aliasStr, false);\n        this.updateUnit();\n    }\n\n\n    /**\n     * Method to call after a unit was completely removed\n     * or replaced, to prevent matching it again afterwards.\n     */\n    makeUntraceable() {\n        this.unit.id = `(deleted) ${this.unit.id}`;\n        this.unit.hash = `(deleted) ${this.unit.hash}`;\n        this.unit.module.name = `(deleted) ${this.unit.module.name}`;\n    }\n\n\n    /**\n     * Debugging method to stop the building process\n     * and list this unit properties.\n     */\n    log(error=true) {\n        const unit = { ...this.unit };\n        delete unit.methods;\n        unit.code = [ unit.code.toString() ];\n        if (error) {\n            throw new DebuggingError(unit);\n        }\n        return unit;\n    }\n}\n","/**\n * [ImportManager]{@link https://github.com/UmamiAppearance/ImportManager}\n *\n * The core class for the rollup-plugin-import-manager,\n * which can never the less be used standalone.  \n * It handles code analysis, creates units from import\n * statements, attaches methods to the units and more.\n * \n * @version 0.4.4\n * @author UmamiAppearance [mail@umamiappearance.eu]\n * @license MIT\n * @see https://github.com/UmamiAppearance/rollup-plugin-import-manager\n */\n\nimport ImportManagerUnitMethods from \"./unit-methods.js\";\nimport { DebuggingError, MatchError } from \"./errors.js\";\nimport { parse } from \"acorn\";\nimport { full as fullWalk } from \"acorn-walk\"; \nimport MagicString from \"magic-string\";\nimport { bold, yellow } from \"colorette\";\nimport { EOL } from \"os\";\n\n\n\nclass ImportManager {\n\n    /**\n     * The constructor creates a class import\n     * object and kicks of the code analysis.\n     * @param {string} source - The unmodified source code.\n     * @param {string} filename - The path/name of the input file (used for hash generation). \n     * @param {object} [warnSpamProtection] - A Set which contains all previously printed warning hashes.\n     * @param {boolean} [warnings=true] - Pass false to suppress warning messages.\n     * @param {object} [pluginInstance] - Rollup plugin instance if used as a plugin.\n     */\n    constructor(source, filename, warnSpamProtection=new Set(), warnings=true, pluginInstance=null) {\n\n        if (!source) {\n            source=\"\";\n        }\n\n        if (!filename) {\n            filename = String(simpleHash(source));\n        }\n\n        this.scopeMulti = 1000;\n\n        this.imports = {\n            es6: {\n                count: 0,\n                idScope: 1 * this.scopeMulti,\n                searched: false,\n                units: []\n            },\n            dynamic: {\n                count: 0,\n                idScope: 2 * this.scopeMulti,\n                searched: false,\n                units: []\n            },\n            cjs: {\n                count: 0,\n                idScope: 3 * this.scopeMulti,\n                searched: false,\n                units: []\n            }\n\n        };\n\n        // id scope lookup table with the associated type\n        this.idTypes = Object.fromEntries(Object.entries(this.imports).map(([k, v]) => [v.idScope, k]));\n\n        this.code = new MagicString(source);\n\n        this.hashList = {};\n        this.filename = filename.split(process.cwd()).at(1);\n        this.warnSpamProtection = warnSpamProtection;\n        \n        this.parsedCode = parse(source, {\n            ecmaVersion: \"latest\",\n            sourceType: \"module\"\n        });\n\n        if (!warnings) {\n            this.warning = () => {\n                return;\n            };\n        }\n        \n        else {\n            if (pluginInstance) {\n                this.warn = pluginInstance.warn;\n            } else {\n                this.warn = msg => {\n                    console.warn(\n                        bold(yellow(`ImportManager: ${msg}`))\n                    );\n                };\n            }\n        }\n        \n        this.analyze();\n    }\n\n\n    /**\n     * Analyzes the source and stores all import\n     * statements as unit objects in the object\n     * \"this.imports\"\n     */\n    analyze() {\n  \n        let cjsId = this.imports.cjs.idScope;\n        let cjsIndex = 0;\n\n        let dynamicId = this.imports.dynamic.idScope;\n        let dynamicIndex = 0;\n\n        let es6Id = this.imports.es6.idScope;\n        let es6Index = 0;\n\n        this.parsedCode.body.forEach(node => {\n\n            if (node.type === \"ImportDeclaration\") {\n                const unit = this.#es6NodeToUnit(node);\n                if (!unit) {\n                    this.#unitCreationFailedWarning(node);\n                    return;\n                }\n                \n                unit.id = es6Id ++;\n                unit.index = es6Index ++;\n                unit.hash = this.#makeHash(unit);\n                this.imports.es6.units.push(unit);\n                this.imports.es6.count ++;\n            }\n        \n            else if (node.type === \"VariableDeclaration\" ||\n                     node.type === \"ExpressionStatement\")\n            {\n                fullWalk(node, part => {\n\n                    if (part.type === \"ImportExpression\") {\n                        const unit = this.#dynamicNodeToUnit(node, part);\n                        if (!unit) {\n                            this.#unitCreationFailedWarning(node);\n                            return;\n                        }\n                        \n                        unit.id = dynamicId ++;\n                        unit.index = dynamicIndex ++;\n                        unit.hash = this.#makeHash(unit);\n                        this.imports.dynamic.units.push(unit);\n                        this.imports.dynamic.count ++;\n                    }\n                    \n                    else if (part.type === \"Identifier\" && part.name === \"require\") {\n                        const unit = this.#cjsNodeToUnit(node);\n                        if (!unit) {\n                            this.#unitCreationFailedWarning(node);\n                            return;\n                        }\n                        \n                        unit.id = cjsId ++;\n                        unit.index = cjsIndex ++;\n                        unit.hash = this.#makeHash(unit);\n                        this.imports.cjs.units.push(unit);\n                        this.imports.cjs.count ++;\n                    }\n\n                });\n            }\n        });\n    }\n\n    /**\n     * Helper method to generate a very simple hash\n     * from the unit properties.\n     * @param {Object} unit - Unit to generate a hash from. \n     * @returns {string} - a hash as a string \n     */\n    #makeHash(unit) {\n\n        const makeInput = (unit) => {\n            \n            const joinProps = list => {\n                list.forEach(member => {\n                    inputStr += member.name;\n                    if (member.alias) {\n                        inputStr += member.alias.name;\n                    }\n                });\n            }; \n\n            let inputStr = unit.module.name\n                         + unit.type\n                         + this.filename;\n            \n            if (unit.members) {\n                joinProps(unit.members.entities);\n            }\n\n            if (unit.defaultMembers) {\n                joinProps(unit.defaultMembers.entities);\n            }\n\n            return inputStr;\n        };\n\n        const input = makeInput(unit);\n        let hash = String(simpleHash(input));\n\n        // handle duplicates\n        if (hash in this.hashList) {\n            \n            if (unit.module.name !== \"N/A\") {\n                this.warning(`It seems like there are multiple imports of module '${unit.module.name}'. You should examine that.`);\n            }\n            \n            for (let nr=2;; nr++) {\n                const nHash = `${hash}#${nr}`;\n                if (!(nHash in this.hashList)) {\n                    hash = nHash;\n                    break;\n                }\n            }\n        }\n        \n        this.hashList[hash] = unit.id;\n\n        return hash;\n    }\n\n\n    /**\n     * Method to generate a unit object from an acorn\n     * node, originated from an ES6 Import Statement. \n     * @param {Object|string} node - acorn node or es6 import statement string. \n     * @param {number} [oStart] - For updating units the original start index has to be passed. \n     * @param {number} [oEnd] - For updating units the original end index has to be passed.\n     * @returns {object} - Import Manager Unit Object.\n     */\n    #es6NodeToUnit(node, oStart, oEnd) {\n        if (!node) return;\n\n        let code;\n        if (typeof node === \"string\") {\n            code = node;\n            try {\n                node = parse(node, {\n                    ecmaVersion: \"latest\",\n                    sourceType: \"module\"\n                }).body.at(0);\n            } catch(e) {\n                if (e instanceof SyntaxError) {\n                    let msg = `${EOL}${EOL}Generated Code Snippet${EOL}----------------------${EOL}`;\n                    let { line, column } = e.loc;\n                    line --;\n                    code.toString().split(EOL).forEach((l, i) => {\n                        msg += `l${EOL}`;\n                        if (line === i) {\n                            msg += bold(\" \".repeat(column) + `^${EOL}`);\n                        }\n                    });\n\n\n                    throw new SyntaxError(msg);\n                }\n                throw new Error(e);\n            }\n        } else {\n            code = this.code.slice(node.start, node.end);\n        }\n        \n        const mem = {\n            defaultMembers: {\n                count: 0,\n                entities: []\n            },\n            members: {\n                count: 0,\n                entities: []\n            }\n        };\n\n        if (node.specifiers) {\n            for (const spec of node.specifiers) {\n                \n                const memType = spec.type === \"ImportSpecifier\" ? \"members\" : \"defaultMembers\";\n                const index = mem[memType].count;\n                const hasAlias = spec.local.start !== spec.start;\n\n                const start = spec.start - node.start;\n                let end;\n                if (!hasAlias) {\n                    end = spec.end - node.start;\n                } else {\n                    end = (memType === \"members\") ? spec.imported.end-node.start : start+1;\n                }\n                const name = code.slice(start, end);\n                \n\n                const member = {\n                    index,\n                    name,\n                    start,\n                    end,\n                    absEnd: spec.end - node.start\n                };\n\n                if (hasAlias) {\n                    member.alias = {\n                        name: spec.local.name,\n                        start: spec.local.start - node.start,\n                        end: spec.local.end - node.start\n                    };\n                }\n\n                if (index > 0) {\n                    member.last = mem[memType].entities[index-1].absEnd;\n                    mem[memType].entities[index-1].next = member.start;\n                }\n                \n                mem[memType].entities.push(member);\n                mem[memType].count ++;\n\n            }\n        }\n\n        if (mem.members.count > 0) {\n            const nonDefaultMatch = code.match(/{[\\s\\S]*?}/);\n            mem.members.start = nonDefaultMatch.index;\n            mem.members.end = mem.members.start + nonDefaultMatch.at(0).length;    \n        }\n\n        if (mem.defaultMembers.count > 0) {\n            mem.defaultMembers.start = mem.defaultMembers.entities.at(0).start;\n            mem.defaultMembers.end = (mem.members.count > 0)\n                ? mem.members.start\n                : mem.defaultMembers.entities.at(-1).absEnd;  \n        }\n\n        // store the first separator of the non default\n        // and default members for a consistent style\n        // if one wants to add members\n        mem.defaultMembers.separator = (mem.defaultMembers.count > 1) ? code.slice(mem.defaultMembers.entities[0].absEnd, mem.defaultMembers.entities[0].next) : \", \";\n        mem.members.separator = (mem.members.count > 1) ? code.slice(mem.members.entities[0].absEnd, mem.members.entities[0].next) : \", \";\n\n\n        const module = {\n            name: node.source.value.split(\"/\").at(-1),\n            start: node.source.start - node.start,\n            end: node.source.end - node.start,\n            type: \"string\",\n            quotes: node.source.raw.at(0),\n            rawName: node.source.raw\n        };\n        \n        const unit = {\n            code: new MagicString(code),\n            defaultMembers: mem.defaultMembers,\n            members: mem.members,\n            module,\n            start: oStart || node.start,\n            end: oEnd || node.end,\n            type: \"es6\"\n        };\n\n        return unit;\n    }\n\n\n    /**\n     * Method to generate a unit object from an acorn\n     * node, originated from a Dynamic Import Statement.\n     * @param {object} node - Complete acorn node.\n     * @param {object} importObject - Actual import part.\n     * @returns {object} - Import Manager Unit Object.\n     */\n    #dynamicNodeToUnit(node, importObject) {\n        if (!node) return;\n\n        const code = this.code.slice(node.start, node.end);\n\n        const module = {\n            name: importObject.source.value.split(\"/\").at(-1) || \"N/A\",\n            start: importObject.source.start - node.start,\n            end: importObject.source.end - node.start,\n            rawName: importObject.source.raw\n        };\n\n        if (importObject.source.type === \"Literal\") {\n            module.type = \"string\";\n            module.quotes = importObject.source.raw.at(0);\n        } else {\n            module.type = \"raw\";\n        }\n\n        const unit = {\n            code: new MagicString(code),\n            module,\n            start: node.start,\n            end: node.end,\n            type: \"dynamic\",\n        };\n\n        return unit;\n    }\n\n\n    /**\n     * Method to generate a unit object from an acorn\n     * node, originated from a Common JS Import Statement.\n     * @param {object} node - Complete acorn node.\n     * @returns {object} - Import Manager Unit Object.\n     */\n    #cjsNodeToUnit(node) {\n        if (!node || !node.declarations) return;\n\n        const code = this.code.slice(node.start, node.end);\n\n        const modulePart = node.declarations.at(0).init.arguments.at(0); // TODO: test if this is robust\n        const module = {\n            name: modulePart.value.split(\"/\").at(-1) || \"N/A\",\n            start: modulePart.start - node.start,\n            end: modulePart.end - node.start,\n            rawName: modulePart.raw\n        };\n\n        if (modulePart.type === \"Literal\") {\n            module.type = \"string\";\n            module.quotes = modulePart.raw.at(0);\n        } else {\n            module.type = \"raw\";\n        }\n\n        const unit = {\n            code: new MagicString(code),\n            module,\n            start: node.start,\n            end: node.end,\n            type: \"cjs\",\n        };\n\n        return unit;\n    }\n\n    //              ___________________              //\n    //              select unit methods              //\n\n    /**\n     * Helper method to list available units\n     * in case of a MatchError.\n     * @param {Object[]} units - Array of unit objects to list.\n     * @returns {string} - Message for logging.\n     */\n    #listUnits(units) {\n        const msgArray = [\"\"];\n        \n        units.forEach(unit => {\n            msgArray.push(\n                \"___\",\n                `ID:   ${unit.id}`,\n                `HASH: ${unit.hash}`, \n                `NAME: ${unit.module.name}`,\n                `STATEMENT:${EOL}${unit.code.toString()}${EOL}`\n            );\n        });\n        return msgArray.join(EOL) + EOL;\n    }\n\n\n    /**\n     * Helper method to list all available units.\n     * @returns {string} - Message string.\n     */\n    #listAllUnits() {\n        let msg = \"\";\n        for (const type in this.imports) {\n            msg += this.#listUnits(this.imports[type].units);\n        }\n        return msg;\n    }\n\n    \n    /**\n     * Selects a unit by its module name.\n     * @param {string|Object} name - Module name as a string or a RegExp object. \n     * @param {string|string[]} [type] - Pass the strings \"cjs\", \"dynamic\", or \"es6\". Multiple types can be passed as as an array of those strings\n     * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n     * @param {boolean} [rawName=false] - If true the name is searched in the full raw module part (including quotes if present).\n     * @returns {Object} - An explicit unit.\n     */\n    selectModByName(name, type, allowNull, rawName=false) {\n        if (!name) {\n            throw new TypeError(\"Pass a name as a string or a RegExp object for selecting a module by name\");\n        }\n\n        let unitList = [];\n\n        // if the type is not specified use all types (cjs|dynamic|es6)\n        if (!type) {\n            type = Object.keys(this.imports);\n        } else if (!Array.isArray(type)) {\n            type = [type];\n        }\n\n        // if an empty array was passed, also use all types\n        if (!type.length) {\n            type = Object.keys(this.imports);\n        }\n\n        // test types for validity\n        for (const t of type) {\n            if (!(t in this.imports)) {\n                throw new TypeError(`Invalid type: '${t}' - Should be one or more of: 'cjs', 'dynamic', 'es6'.`);\n            }\n\n            // push all available imports in one list\n            if (this.imports[t].count > 0) {\n                unitList.push(...this.imports[t].units);\n            }\n        }\n\n        // filter for unit name\n        const units = unitList.filter(unit => {\n\n            const nameLookup = rawName ? unit.module.rawName : unit.module.name;\n\n            const match = name instanceof RegExp \n                ? name.test(nameLookup)\n                : nameLookup.indexOf(name) > -1;\n\n            // ignore deleted units\n            if (match && (/^\\(deleted\\)/).test(unit.module.name)) {\n                return false;\n            }\n\n            return match;\n        });\n\n        // throw errors if the match is not one\n        // (if no filename was set a null match\n        // is also valid)\n        if (units.length === 0) {\n            if (allowNull) {\n                return null;\n            }\n            let msg = this.#listUnits(unitList);\n            let typeStr;\n\n            if (type.length === 1) {\n                typeStr = type + \"-imports\";\n            } else if (type.length < Object.keys(this.imports).length) { \n                typeStr = type.join(\"-imports or \") + \"-imports\";\n            } else {\n                typeStr = \"any group\";\n            }\n\n            msg += `___${EOL}Unable to locate import statement with name: '${name}' in ${typeStr}`;\n            throw new MatchError(msg);\n        }\n        \n        else if (units.length > 1) {\n            let msg = this.#listUnits(units);\n            msg += `___${EOL}Found multiple matches for '${name}'. Try matching via 'rawName'. If no other solution is available you may select via 'hash'.`;\n            throw new MatchError(msg);\n        }\n\n        // finally add methods for manipulation to the unit\n        const unit = units[0];\n        unit.methods = new ImportManagerUnitMethods(unit, this.#es6NodeToUnit);\n\n        return unit;\n    }\n\n\n    /**\n     * Selects a unit by its id. Should only be used\n     * for testing purposes.\n     * @param {number} id - Unit id. \n     * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n     * @returns {Object} - An explicit unit.\n     */\n    selectModById(id, allowNull) {\n        if (!id) {\n            throw new TypeError(\"The id must be provided\");\n        }\n        \n        // get the type by the id scope\n        const type = this.idTypes[ Math.floor(id / this.scopeMulti) * this.scopeMulti ];\n\n        // if it is not possible to extract a type by the scope,\n        // the id is invalid \n        if (!type) {\n            // generate an ascending list of valid ids\n            const ascIds = Object.keys(this.idTypes).sort();\n            throw new TypeError(`Id '${id}' is invalid. Ids range from ${ascIds.at(0)} to ${ascIds.at(-1)}+`);\n        }\n\n        // filter the units of the given type for the id\n        const units = this.imports[type].units.filter(n => n.id == id);\n\n        // if null matches are allowed return null \n        // if no match was found, otherwise raise\n        // a match error\n        if (units.length === 0) {\n            if (allowNull) {\n                return null;\n            }\n            let msg = this.#listUnits(this.imports[type].units);\n            msg += `___${EOL}Unable to locate import statement with id: '${id}'`;\n            throw new MatchError(msg);\n        }\n\n        // add unit methods\n        const unit = units[0];\n        unit.methods = new ImportManagerUnitMethods(unit, this.#es6NodeToUnit);\n\n        return unit;\n    }\n\n    /**\n     * Selects a unit by its hash. The hash will change\n     * if the unit changes its properties in the source\n     * code (like members, alias, etc.)\n     * All hashes for one file are stored in a list, with\n     * the corresponding id. The id-match method can there-\n     * fore be used, to find the unit.\n     * @param {string} hash - The hash string of the unit.\n     * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n     * @returns {object} - An explicit unit.\n     */\n    selectModByHash(hash, allowNull) {\n        if (!(hash in this.hashList)) {\n            if (allowNull) {\n                return null;\n            }\n            let msg = this.#listAllUnits(); \n            msg += `___${EOL}Unable to locate import statement with hash '${hash}'`;\n            throw new MatchError(msg);\n        }\n\n        return this.selectModById(this.hashList[hash]);\n    }\n\n    //         ___________________________________________        //\n    //         methods for unit creation, replacement, etc.       //\n\n    /**\n     * All manipulation via unit method is made on the\n     * code slice of the unit. This methods writes it\n     * to the code instance. \n     * @param {Object} unit - Unit Object. \n     */\n    commitChanges(unit) {\n        this.code.overwrite(unit.start, unit.end, unit.code.toString());\n    }\n\n\n    /**\n     * Removes a unit from the code instance.\n     * The action must not be committed. \n     * @param {Object} unit - Unit Object.\n     * @returns {string} - Unit code, for further processing.\n     */\n    remove(unit) {\n        let charAfter = this.code.slice(unit.end, unit.end+1);\n        let end = unit.end;\n        \n        if (charAfter === \"\\r\") {\n            end++;\n            charAfter = this.code.slice(end, end+1);\n        }\n        if (charAfter === \"\\n\") {\n            end++;\n        }\n        \n        const code = this.code.slice(unit.start, end);\n\n        this.code.remove(unit.start, end);\n        unit.methods.makeUntraceable();\n        this.imports[unit.type].count --;\n        \n        return code;\n    }\n\n    /**\n     * Helper method to declare a variable.\n     * @param {string} declarator - const|let|var|global \n     * @param {string} varname - Variable Name. \n     * @returns {string} - Declarator + Varname + Equal Sign.\n     */\n    #genDeclaration(declarator, varname) {\n        let declaration;\n        if (declarator === \"global\") {\n            declaration = varname;\n        } else {\n            declaration = `${declarator} ${varname}`;\n        }\n        return declaration;\n    }\n\n    /**\n     * Generates a CJS Import Statement.\n     * @param {string} module - Module (path).\n     * @returns {string} - CJS Import Statement.\n     */\n    makeCJSStatement(module, declarator, varname) {\n        const declaration = this.#genDeclaration(declarator, varname);\n        return `${declaration} = require(\"${module}\");${EOL}`;\n    }\n\n    /**\n     * Generates a Dynamic Import Statement.\n     * @param {string} module - Module (path).\n     * @returns {string} - CJS Import Statement.\n     */\n    makeDynamicStatement(module, declarator, varname) {\n        const declaration = this.#genDeclaration(declarator, varname);\n        return `${declaration} = await import(\"${module}\");${EOL}`;\n    }\n    \n\n    /**\n     * Generates an ES6 Import Statement.\n     * @param {string} module - Module (path).\n     * @param {string[]} defaultMembers - Default Member Part.\n     * @param {string[]} members - Member Part.\n     * @returns {string} - ES6 Import Statement.\n     */\n    makeES6Statement(module, defaultMembers, members) {\n        const memberStrArray = [];\n        \n        if (defaultMembers.length) {\n            memberStrArray.push(\n                defaultMembers.join(\", \")\n            );\n        }\n\n        if (members.length) {\n            memberStrArray.push(\n                \"{ \" + members.join(\", \") + \" }\"\n            );\n        }\n\n        let memberPart = memberStrArray.join(\", \");\n        if (memberPart) {\n            memberPart += \" from \";\n        }\n\n        return `import ${memberPart}'${module}';${EOL}`;\n    }\n\n\n    /**\n     * Inserts an Import Statement to the top\n     * of the file or after the last found import\n     * statement.\n     * @param {string} statement - Import Statement.\n     * @param {number} pos - 'top' or 'bottom'\n     */\n    insertStatement(statement, pos, type) {\n\n        let index = 0;\n\n        if (pos !== \"top\" && this.imports[type].count > 0) {\n            index = this.imports[type].units.at(-1).end;\n\n            // move the index if the following char is a newline\n            // (if the line was removed in an earlier operation\n            // this will throw an error, don't do any change in\n            // this case\n\n            let nextChar;\n            try {\n                nextChar = this.code.slice(index, index+1);\n            } catch {\n                nextChar = null;\n            }\n\n            if (nextChar === \"\\r\") {\n                index ++;\n            }\n            if (nextChar === \"\\n\") {\n                index ++;\n            }\n        }\n        \n        else {\n            // find the first meaningful (not a comment)\n            // code and use the start as insertion point\n            \n            index = this.parsedCode.body.at(0).start;\n        }\n        \n        this.code.appendRight(index, statement);\n    }\n\n\n    /**\n     * Inserts an Import Statement before or after\n     * a given unit. Also an existing statement can be\n     * replaced.\n     * @param {Object} unit - Unit Object \n     * @param {string} mode - 'append'|'prepend'|'replace' \n     * @param {string} statement - Import Statement. \n     */\n    insertAtUnit(unit, mode, statement) {\n\n        let index;\n        if (mode === \"append\") {\n            index = unit.end;\n            if (this.code.slice(index, index+1) === \"\\r\") {\n                index ++;\n            }\n            if (this.code.slice(index, index+1) === \"\\n\") {\n                index ++;\n            }\n            this.code.appendRight(index, statement);\n        }\n        \n        else if (mode === \"prepend\") {\n            index = unit.start;\n            this.code.prependLeft(index, statement);\n        }\n\n        else if (mode === \"replace\") {\n            // remove new line from statement\n            statement = statement.slice(0, -1);\n            \n            this.code.overwrite(unit.start, unit.end, statement);\n            unit.methods.makeUntraceable();\n            this.imports[unit.type].count --;\n        }\n    }\n\n\n    //                ________________________              //\n    //                global debugging methods              //\n\n    \n    /**\n     * Debug statements created by IM.\n     * @param {string} code - Code Snippet String.\n     * @param {Object} [target] - Target Unit Object.\n     * @param {string} [type] - Target type.\n     * @param {string} [mode] - Insert position or attach mode.\n     */\n    logCreations(code, target, type, mode) {\n        let msg = {\n            addCode: code\n        };\n        if (target) {\n            msg.mode = mode;\n            msg.targetType = target.type;\n            msg.targetUnit = target.methods.log(false);\n        } else if (type) {\n            msg.insert = mode;\n            msg.targetType = type;\n        }\n        throw new DebuggingError(msg);\n    }\n\n\n    /**\n     * Debugging method to stop the building process\n     * and list all import units with its id, hash and\n     * import statement.\n     */\n    logUnits() {\n        throw new DebuggingError(this.#listAllUnits());\n    }\n\n\n    /**\n     * Debugging method to stop the building process\n     * and list the complete import object.\n     */\n    logUnitObjects() {\n        const imports = {...this.imports};\n        for (const key in imports) {\n            imports[key].units.forEach(unit => {\n                unit.code = [ unit.code.toString() ];\n            });\n        }\n        throw new DebuggingError(imports);\n    }\n\n\n    /**\n     * Warnings with spam protection. Can use internal\n     * and native rollup method.\n     * @param {string} msg - Warning Message. \n     */\n    warning(msg) {\n        const hash = simpleHash(msg);\n\n        if (this.warnSpamProtection.has(hash)) {\n            return;\n        }\n\n        this.warnSpamProtection.add(hash);\n        this.warn(msg);\n    }\n\n\n    #unitCreationFailedWarning(node) {\n        const codeSnippet = this.code.slice(node.start, node.end);\n        const message = `Could not create a unit from code snippet:${EOL}---${EOL}${codeSnippet}${EOL}---${EOL}If the related code is correct, this might be a bug. You can report this on:${EOL}https://github.com/UmamiAppearance/ImportManager/issues${EOL}`; \n        this.warn(message);\n    }\n}\n\n\n/**\n * A (simple as it gets) hash from string function.\n * @see https://gist.github.com/iperelivskiy/4110988?permalink_comment_id=2697447#gistcomment-2697447\n * @see https://gist.github.com/badboy/6267743#knuths-multiplicative-method\n * @param {string} input \n * @returns {number} - Hash number.\n */\nconst simpleHash = (input) => {\n    let h = 0xdeadbeef;\n    for (let i=0; i<input.length; i++) {\n        h = Math.imul(h ^ input.charCodeAt(i), 2654435761);\n    }\n    return (h ^ h >>> 16) >>> 0;\n};\n\nexport { ImportManager, DebuggingError, MatchError, simpleHash };\n"],"names":["parse","bold","yellow","fullWalk","EOL"],"mappings":"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"}