{"version":3,"file":"index.cjs","sources":["../node_modules/.pnpm/babel-import-util@3.0.1/node_modules/babel-import-util/src/sanitize.js","../node_modules/.pnpm/babel-import-util@3.0.1/node_modules/babel-import-util/src/index.js","../src/index.ts"],"sourcesContent":["\"use strict\";\n// make a name into a valid javascript identifier, as pleasantly as possible.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sanitize = void 0;\nfunction sanitize(identifier) {\n    // first we opportunistically do camelization when an illegal character is not\n    // the first character and is followed by a lowercase letter, in an effort to\n    // aid readability of the output.\n    let cleaned = identifier.replace(new RegExp(`(?<!^)(?:${illegalChar.source})([a-z])`, 'g'), (_m, letter) => letter.toUpperCase());\n    // then we unliterally strip all remaining illegal characters.\n    cleaned = cleaned.replace(new RegExp(illegalChar.source, 'g'), '');\n    return cleaned;\n}\nexports.sanitize = sanitize;\nconst illegalChar = /^[^a-zA-Z_$]|(?<=.)[^a-zA-Z_$0-9]/;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuaXRpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzYW5pdGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNkVBQTZFOzs7QUFFN0UsU0FBZ0IsUUFBUSxDQUFDLFVBQWtCO0lBQ3pDLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UsaUNBQWlDO0lBQ2pDLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQzlCLElBQUksTUFBTSxDQUFDLFlBQVksV0FBVyxDQUFDLE1BQU0sVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUN6RCxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FDckMsQ0FBQztJQUNGLDhEQUE4RDtJQUM5RCxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFYRCw0QkFXQztBQUVELE1BQU0sV0FBVyxHQUFHLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbWFrZSBhIG5hbWUgaW50byBhIHZhbGlkIGphdmFzY3JpcHQgaWRlbnRpZmllciwgYXMgcGxlYXNhbnRseSBhcyBwb3NzaWJsZS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplKGlkZW50aWZpZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIGZpcnN0IHdlIG9wcG9ydHVuaXN0aWNhbGx5IGRvIGNhbWVsaXphdGlvbiB3aGVuIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGlzIG5vdFxuICAvLyB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBpcyBmb2xsb3dlZCBieSBhIGxvd2VyY2FzZSBsZXR0ZXIsIGluIGFuIGVmZm9ydCB0b1xuICAvLyBhaWQgcmVhZGFiaWxpdHkgb2YgdGhlIG91dHB1dC5cbiAgbGV0IGNsZWFuZWQgPSBpZGVudGlmaWVyLnJlcGxhY2UoXG4gICAgbmV3IFJlZ0V4cChgKD88IV4pKD86JHtpbGxlZ2FsQ2hhci5zb3VyY2V9KShbYS16XSlgLCAnZycpLFxuICAgIChfbSwgbGV0dGVyKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKVxuICApO1xuICAvLyB0aGVuIHdlIHVubGl0ZXJhbGx5IHN0cmlwIGFsbCByZW1haW5pbmcgaWxsZWdhbCBjaGFyYWN0ZXJzLlxuICBjbGVhbmVkID0gY2xlYW5lZC5yZXBsYWNlKG5ldyBSZWdFeHAoaWxsZWdhbENoYXIuc291cmNlLCAnZycpLCAnJyk7XG4gIHJldHVybiBjbGVhbmVkO1xufVxuXG5jb25zdCBpbGxlZ2FsQ2hhciA9IC9eW15hLXpBLVpfJF18KD88PS4pW15hLXpBLVpfJDAtOV0vO1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImportUtil = void 0;\nconst sanitize_1 = require(\"./sanitize\");\nclass ImportUtil {\n    constructor(babel, program) {\n        this.babel = babel;\n        this.program = program;\n        this.t = babel.types;\n    }\n    // remove one imported binding. If this is the last thing imported from the\n    // given moduleSpecifier, the whole statement will also be removed.\n    removeImport(moduleSpecifier, exportedName) {\n        for (let topLevelPath of this.program.get('body')) {\n            if (!matchModule(topLevelPath, moduleSpecifier)) {\n                continue;\n            }\n            let importSpecifierPath = topLevelPath\n                .get('specifiers')\n                .find((specifierPath) => matchSpecifier(specifierPath, exportedName));\n            if (importSpecifierPath) {\n                if (topLevelPath.node.specifiers.length === 1) {\n                    topLevelPath.remove();\n                }\n                else {\n                    importSpecifierPath.remove();\n                }\n            }\n        }\n    }\n    // remove all imports from the given moduleSpecifier\n    removeAllImports(moduleSpecifier) {\n        for (let topLevelPath of this.program.get('body')) {\n            if (matchModule(topLevelPath, moduleSpecifier)) {\n                topLevelPath.remove();\n            }\n        }\n    }\n    // Import the given value (if needed) and return an Identifier representing\n    // it.\n    //\n    // This method is trickier to use safely than our higher-level methods\n    // (`insertAfter`, `insertBefore`, `replaceWith`, `mutate`) because after you\n    // insert the identifier into the AST, it's up to you to ensure that babel's\n    // scope system is aware of the new reference. The other methods do that for\n    // you automatically.\n    import(\n    // the spot at which you will insert the Identifier we return to you\n    target, \n    // the path to the module you're importing from\n    moduleSpecifier, \n    // the name you're importing from that module. Use \"default\" for the default\n    // export. Use \"*\" for the namespace.\n    exportedName, \n    // Optional hint for helping us pick a name for the imported binding\n    nameHint) {\n        return this.unreferencedImport(target, moduleSpecifier, exportedName, desiredName(nameHint, exportedName, defaultNameHint(target)));\n    }\n    // Import the given value (if needed) and return an Identifier representing\n    // it.\n    unreferencedImport(\n    // the spot at which you will insert the Identifier we return to you\n    target, \n    // the path to the module you're importing from\n    moduleSpecifier, \n    // the name you're importing from that module. Use \"default\" for the default\n    // export. Use \"*\" for the namespace.\n    exportedName, \n    // the preferred name you want, if we neeed to create a new binding. You\n    // might get something similar instead, to avoid collisions.\n    preferredName) {\n        var _a;\n        let isNamespaceImport = exportedName === '*';\n        let isDefaultImport = exportedName === 'default';\n        let isNamedImport = !isDefaultImport && !isNamespaceImport;\n        let declaration = this.findImportFrom(moduleSpecifier);\n        let hasNamespaceSpecifier = declaration === null || declaration === void 0 ? void 0 : declaration.node.specifiers.find((s) => s.type === 'ImportNamespaceSpecifier');\n        let hasNamedSpecifiers = declaration === null || declaration === void 0 ? void 0 : declaration.node.specifiers.find((s) => s.type === 'ImportSpecifier');\n        /**\n         * the file has a preexisting non-namespace import and a transform tries to add a namespace import, so they don't get combined\n         * the file has a preexisting namespace import and a transform tries to add a non-namespace import, so they don't get combined\n         * the file has a preexisting namespace import and a transform tries to add a namespace import, so they don't get combined\n         */\n        let cannotUseExistingDeclaration = (hasNamedSpecifiers && isNamespaceImport) ||\n            (hasNamespaceSpecifier && isNamedImport) ||\n            (hasNamespaceSpecifier && isNamespaceImport);\n        if (!cannotUseExistingDeclaration && declaration) {\n            let specifier = declaration\n                .get('specifiers')\n                .find((spec) => matchSpecifier(spec, exportedName));\n            if (specifier && ((_a = target.scope.getBinding(specifier.node.local.name)) === null || _a === void 0 ? void 0 : _a.kind) === 'module') {\n                return this.t.identifier(specifier.node.local.name);\n            }\n            else {\n                return this.addSpecifier(target, declaration, exportedName, preferredName);\n            }\n        }\n        else {\n            let declaration = this.insertAfterExistingImports(this.t.importDeclaration([], this.t.stringLiteral(moduleSpecifier)));\n            return this.addSpecifier(target, declaration, exportedName, preferredName);\n        }\n    }\n    importForSideEffect(moduleSpecifier) {\n        let declaration = this.findImportFrom(moduleSpecifier);\n        if (!declaration) {\n            this.insertAfterExistingImports(this.t.importDeclaration([], this.t.stringLiteral(moduleSpecifier)));\n        }\n    }\n    replaceWith(target, fn) {\n        return this.mutate((i) => {\n            target.replaceWith(fn(i));\n            // the return value of replaceWith is not a reliable way to get the\n            // updated path, at least in the case where the user replaced an\n            // expression with a statement. Instead we will rely on the fact that path\n            // replacement also mutates its argument, so `target` now points at the\n            // newly replaced path.\n            return target;\n        }, defaultNameHint(target));\n    }\n    insertAfter(target, fn) {\n        return this.mutate((i) => target.insertAfter(fn(i))[0], defaultNameHint(target));\n    }\n    insertBefore(target, fn) {\n        return this.mutate((i) => target.insertBefore(fn(i))[0], defaultNameHint(target));\n    }\n    // Low-level method for when you don't want to use our higher-level methods\n    // (replaceWith, insertBefore, insertAfter)\n    mutate(fn, defaultNameHint) {\n        let symbols = new Map();\n        const importer = {\n            import: (moduleSpecifier, exportedName, nameHint) => {\n                let identifier = this.t.identifier('__babel_import_util_placeholder__');\n                symbols.set(identifier, { moduleSpecifier, exportedName, nameHint });\n                return identifier;\n            },\n        };\n        const updateReference = (path) => {\n            if (!path.isIdentifier()) {\n                return;\n            }\n            let hit = symbols.get(path.node);\n            if (hit) {\n                let newIdentifier = this.unreferencedImport(path, hit.moduleSpecifier, hit.exportedName, desiredName(hit.nameHint, hit.exportedName, defaultNameHint));\n                path.replaceWith(newIdentifier);\n                let binding = path.scope.getBinding(newIdentifier.name);\n                if (!binding) {\n                    // we create the binding at the point where we add the import, so this\n                    // would indicate broken behavior\n                    throw new Error(`bug: this is supposed to never happen`);\n                }\n                binding.reference(path);\n            }\n        };\n        let result = fn(importer);\n        updateReference(result);\n        this.babel.traverse(result.node, {\n            ReferencedIdentifier: (path) => {\n                updateReference(path);\n            },\n        }, result.scope, {}, result);\n        return result;\n    }\n    addSpecifier(target, declaration, exportedName, preferredName) {\n        let local = this.t.identifier(unusedNameLike(target, preferredName));\n        let specifier = this.buildSpecifier(exportedName, local);\n        let added;\n        if (specifier.type === 'ImportDefaultSpecifier') {\n            declaration.node.specifiers.unshift(specifier);\n            added = declaration.get(`specifiers.0`);\n        }\n        else {\n            declaration.node.specifiers.push(specifier);\n            added = declaration.get(`specifiers.${declaration.node.specifiers.length - 1}`);\n        }\n        declaration.scope.registerBinding('module', added);\n        return local;\n    }\n    buildSpecifier(exportedName, localName) {\n        switch (exportedName) {\n            case 'default':\n                return this.t.importDefaultSpecifier(localName);\n            case '*':\n                return this.t.importNamespaceSpecifier(localName);\n            default:\n                return this.t.importSpecifier(localName, this.t.identifier(exportedName));\n        }\n    }\n    findImportFrom(moduleSpecifier) {\n        for (let path of this.program.get('body')) {\n            if (path.isImportDeclaration() &&\n                path.node.source.value === moduleSpecifier &&\n                path.node.importKind !== 'type') {\n                return path;\n            }\n        }\n        return undefined;\n    }\n    insertAfterExistingImports(statement) {\n        let lastIndex;\n        for (let [index, node] of this.program.node.body.entries()) {\n            if (node.type === 'ImportDeclaration') {\n                lastIndex = index;\n            }\n        }\n        if (lastIndex == null) {\n            // we are intentionally not using babel's container-aware methods, because\n            // while in theory it's nice that they schedule other plugins to run on\n            // our nodes, in practice those nodes might get mutated or removed by some\n            // other plugin in the intervening time causing failures.\n            this.program.node.body.unshift(statement);\n            return this.program.get('body.0');\n        }\n        else {\n            this.program.node.body.splice(lastIndex + 1, 0, statement);\n            return this.program.get(`body.${lastIndex + 1}`);\n        }\n    }\n}\nexports.ImportUtil = ImportUtil;\nfunction unusedNameLike(path, name) {\n    let candidate = name;\n    let counter = 0;\n    while (path.scope.hasBinding(candidate)) {\n        candidate = `${name}${counter++}`;\n    }\n    return candidate;\n}\nfunction name(node) {\n    if (node.type === 'StringLiteral') {\n        return node.value;\n    }\n    else {\n        return node.name;\n    }\n}\nfunction desiredName(nameHint, exportedName, defaultNameHint) {\n    if (nameHint) {\n        return (0, sanitize_1.sanitize)(nameHint);\n    }\n    if (exportedName === 'default' || exportedName === '*') {\n        return defaultNameHint !== null && defaultNameHint !== void 0 ? defaultNameHint : 'a';\n    }\n    else {\n        return exportedName;\n    }\n}\nfunction defaultNameHint(target) {\n    if (target === null || target === void 0 ? void 0 : target.isIdentifier()) {\n        return target.node.name;\n    }\n    else if (target) {\n        return target.scope.generateUidIdentifierBasedOnNode(target.node).name;\n    }\n    else {\n        return undefined;\n    }\n}\nfunction matchSpecifier(spec, exportedName) {\n    switch (exportedName) {\n        case 'default':\n            return spec.isImportDefaultSpecifier();\n        case '*':\n            return spec.isImportNamespaceSpecifier();\n        default:\n            return spec.isImportSpecifier() && name(spec.node.imported) === exportedName;\n    }\n}\nfunction matchModule(path, moduleSpecifier) {\n    return path.isImportDeclaration() && path.get('source').node.value === moduleSpecifier;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSx5Q0FBc0M7QUFFdEMsTUFBYSxVQUFVO0lBR3JCLFlBQW9CLEtBQW1CLEVBQVUsT0FBNEI7UUFBekQsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUFVLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBQzNFLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLG1FQUFtRTtJQUNuRSxZQUFZLENBQUMsZUFBdUIsRUFBRSxZQUFvQjtRQUN4RCxLQUFLLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxFQUFFO2dCQUMvQyxTQUFTO2FBQ1Y7WUFFRCxJQUFJLG1CQUFtQixHQUFHLFlBQVk7aUJBQ25DLEdBQUcsQ0FBQyxZQUFZLENBQUM7aUJBQ2pCLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksbUJBQW1CLEVBQUU7Z0JBQ3ZCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDN0MsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUN2QjtxQkFBTTtvQkFDTCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDOUI7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxnQkFBZ0IsQ0FBQyxlQUF1QjtRQUN0QyxLQUFLLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pELElB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SUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDM0M7WUFDRSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFlBQVksQ0FBQztLQUNoRjtBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsSUFBbUIsRUFDbkIsZUFBdUI7SUFFdkIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDO0FBQ3pGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIEJhYmVsIGZyb20gJ0BiYWJlbC9jb3JlJztcbmltcG9ydCB0eXBlIHsgdHlwZXMgYXMgdCwgTm9kZVBhdGggfSBmcm9tICdAYmFiZWwvY29yZSc7XG5pbXBvcnQgeyBzYW5pdGl6ZSB9IGZyb20gJy4vc2FuaXRpemUnO1xuXG5leHBvcnQgY2xhc3MgSW1wb3J0VXRpbCB7XG4gIHByaXZhdGUgdDogdHlwZW9mIEJhYmVsLnR5cGVzO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYmFiZWw6IHR5cGVvZiBCYWJlbCwgcHJpdmF0ZSBwcm9ncmFtOiBOb2RlUGF0aDx0LlByb2dyYW0+KSB7XG4gICAgdGhpcy50ID0gYmFiZWwudHlwZXM7XG4gIH1cblxuICAvLyByZW1vdmUgb25lIGltcG9ydGVkIGJpbmRpbmcuIElmIHRoaXMgaXMgdGhlIGxhc3QgdGhpbmcgaW1wb3J0ZWQgZnJvbSB0aGVcbiAgLy8gZ2l2ZW4gbW9kdWxlU3BlY2lmaWVyLCB0aGUgd2hvbGUgc3RhdGVtZW50IHdpbGwgYWxzbyBiZSByZW1vdmVkLlxuICByZW1vdmVJbXBvcnQobW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsIGV4cG9ydGVkTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChsZXQgdG9wTGV2ZWxQYXRoIG9mIHRoaXMucHJvZ3JhbS5nZXQoJ2JvZHknKSkge1xuICAgICAgaWYgKCFtYXRjaE1vZHVsZSh0b3BMZXZlbFBhdGgsIG1vZHVsZVNwZWNpZmllcikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBpbXBvcnRTcGVjaWZpZXJQYXRoID0gdG9wTGV2ZWxQYXRoXG4gICAgICAgIC5nZXQoJ3NwZWNpZmllcnMnKVxuICAgICAgICAuZmluZCgoc3BlY2lmaWVyUGF0aCkgPT4gbWF0Y2hTcGVjaWZpZXIoc3BlY2lmaWVyUGF0aCwgZXhwb3J0ZWROYW1lKSk7XG4gICAgICBpZiAoaW1wb3J0U3BlY2lmaWVyUGF0aCkge1xuICAgICAgICBpZiAodG9wTGV2ZWxQYXRoLm5vZGUuc3BlY2lmaWVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b3BMZXZlbFBhdGgucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wb3J0U3BlY2lmaWVyUGF0aC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHJlbW92ZSBhbGwgaW1wb3J0cyBmcm9tIHRoZSBnaXZlbiBtb2R1bGVTcGVjaWZpZXJcbiAgcmVtb3ZlQWxsSW1wb3J0cyhtb2R1bGVTcGVjaWZpZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGZvciAobGV0IHRvcExldmVsUGF0aCBvZiB0aGlzLnByb2dyYW0uZ2V0KCdib2R5JykpIHtcbiAgICAgIGlmIChtYXRjaE1vZHVsZSh0b3BMZXZlbFBhdGgsIG1vZHVsZVNwZWNpZmllcikpIHtcbiAgICAgICAgdG9wTGV2ZWxQYXRoLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEltcG9ydCB0aGUgZ2l2ZW4gdmFsdWUgKGlmIG5lZWRlZCkgYW5kIHJldHVybiBhbiBJZGVudGlmaWVyIHJlcHJlc2VudGluZ1xuICAvLyBpdC5cbiAgLy9cbiAgLy8gVGhpcyBtZXRob2QgaXMgdHJpY2tpZXIgdG8gdXNlIHNhZmVseSB0aGFuIG91ciBoaWdoZXItbGV2ZWwgbWV0aG9kc1xuICAvLyAoYGluc2VydEFmdGVyYCwgYGluc2VydEJlZm9yZWAsIGByZXBsYWNlV2l0aGAsIGBtdXRhdGVgKSBiZWNhdXNlIGFmdGVyIHlvdVxuICAvLyBpbnNlcnQgdGhlIGlkZW50aWZpZXIgaW50byB0aGUgQVNULCBpdCdzIHVwIHRvIHlvdSB0byBlbnN1cmUgdGhhdCBiYWJlbCdzXG4gIC8vIHNjb3BlIHN5c3RlbSBpcyBhd2FyZSBvZiB0aGUgbmV3IHJlZmVyZW5jZS4gVGhlIG90aGVyIG1ldGhvZHMgZG8gdGhhdCBmb3JcbiAgLy8geW91IGF1dG9tYXRpY2FsbHkuXG4gIGltcG9ydChcbiAgICAvLyB0aGUgc3BvdCBhdCB3aGljaCB5b3Ugd2lsbCBpbnNlcnQgdGhlIElkZW50aWZpZXIgd2UgcmV0dXJuIHRvIHlvdVxuICAgIHRhcmdldDogTm9kZVBhdGg8dC5Ob2RlPixcblxuICAgIC8vIHRoZSBwYXRoIHRvIHRoZSBtb2R1bGUgeW91J3JlIGltcG9ydGluZyBmcm9tXG4gICAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsXG5cbiAgICAvLyB0aGUgbmFtZSB5b3UncmUgaW1wb3J0aW5nIGZyb20gdGhhdCBtb2R1bGUuIFVzZSBcImRlZmF1bHRcIiBmb3IgdGhlIGRlZmF1bHRcbiAgICAvLyBleHBvcnQuIFVzZSBcIipcIiBmb3IgdGhlIG5hbWVzcGFjZS5cbiAgICBleHBvcnRlZE5hbWU6IHN0cmluZyxcblxuICAgIC8vIE9wdGlvbmFsIGhpbnQgZm9yIGhlbHBpbmcgdXMgcGljayBhIG5hbWUgZm9yIHRoZSBpbXBvcnRlZCBiaW5kaW5nXG4gICAgbmFtZUhpbnQ/OiBzdHJpbmdcbiAgKTogdC5JZGVudGlmaWVyIHtcbiAgICByZXR1cm4gdGhpcy51bnJlZmVyZW5jZWRJbXBvcnQoXG4gICAgICB0YXJnZXQsXG4gICAgICBtb2R1bGVTcGVjaWZpZXIsXG4gICAgICBleHBvcnRlZE5hbWUsXG4gICAgICBkZXNpcmVkTmFtZShuYW1lSGludCwgZXhwb3J0ZWROYW1lLCBkZWZhdWx0TmFtZUhpbnQodGFyZ2V0KSlcbiAgICApO1xuICB9XG5cbiAgLy8gSW1wb3J0IHRoZSBnaXZlbiB2YWx1ZSAoaWYgbmVlZGVkKSBhbmQgcmV0dXJuIGFuIElkZW50aWZpZXIgcmVwcmVzZW50aW5nXG4gIC8vIGl0LlxuICBwcml2YXRlIHVucmVmZXJlbmNlZEltcG9ydChcbiAgICAvLyB0aGUgc3BvdCBhdCB3aGljaCB5b3Ugd2lsbCBpbnNlcnQgdGhlIElkZW50aWZpZXIgd2UgcmV0dXJuIHRvIHlvdVxuICAgIHRhcmdldDogTm9kZVBhdGg8dC5Ob2RlPixcblxuICAgIC8vIHRoZSBwYXRoIHRvIHRoZSBtb2R1bGUgeW91J3JlIGltcG9ydGluZyBmcm9tXG4gICAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsXG5cbiAgICAvLyB0aGUgbmFtZSB5b3UncmUgaW1wb3J0aW5nIGZyb20gdGhhdCBtb2R1bGUuIFVzZSBcImRlZmF1bHRcIiBmb3IgdGhlIGRlZmF1bHRcbiAgICAvLyBleHBvcnQuIFVzZSBcIipcIiBmb3IgdGhlIG5hbWVzcGFjZS5cbiAgICBleHBvcnRlZE5hbWU6IHN0cmluZyxcblxuICAgIC8vIHRoZSBwcmVmZXJyZWQgbmFtZSB5b3Ugd2FudCwgaWYgd2UgbmVlZWQgdG8gY3JlYXRlIGEgbmV3IGJpbmRpbmcuIFlvdVxuICAgIC8vIG1pZ2h0IGdldCBzb21ldGhpbmcgc2ltaWxhciBpbnN0ZWFkLCB0byBhdm9pZCBjb2xsaXNpb25zLlxuICAgIHByZWZlcnJlZE5hbWU6IHN0cmluZ1xuICApOiB0LklkZW50aWZpZXIge1xuICAgIGxldCBpc05hbWVzcGFjZUltcG9ydCA9IGV4cG9ydGVkTmFtZSA9PT0gJyonO1xuICAgIGxldCBpc0RlZmF1bHRJbXBvcnQgPSBleHBvcnRlZE5hbWUgPT09ICdkZWZhdWx0JztcbiAgICBsZXQgaXNOYW1lZEltcG9ydCA9ICFpc0RlZmF1bHRJbXBvcnQgJiYgIWlzTmFtZXNwYWNlSW1wb3J0O1xuICAgIGxldCBkZWNsYXJhdGlvbiA9IHRoaXMuZmluZEltcG9ydEZyb20obW9kdWxlU3BlY2lmaWVyKTtcbiAgICBsZXQgaGFzTmFtZXNwYWNlU3BlY2lmaWVyID0gZGVjbGFyYXRpb24/Lm5vZGUuc3BlY2lmaWVycy5maW5kKFxuICAgICAgKHMpID0+IHMudHlwZSA9PT0gJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcidcbiAgICApO1xuICAgIGxldCBoYXNOYW1lZFNwZWNpZmllcnMgPSBkZWNsYXJhdGlvbj8ubm9kZS5zcGVjaWZpZXJzLmZpbmQoKHMpID0+IHMudHlwZSA9PT0gJ0ltcG9ydFNwZWNpZmllcicpO1xuXG4gICAgLyoqXG4gICAgICogdGhlIGZpbGUgaGFzIGEgcHJlZXhpc3Rpbmcgbm9uLW5hbWVzcGFjZSBpbXBvcnQgYW5kIGEgdHJhbnNmb3JtIHRyaWVzIHRvIGFkZCBhIG5hbWVzcGFjZSBpbXBvcnQsIHNvIHRoZXkgZG9uJ3QgZ2V0IGNvbWJpbmVkXG4gICAgICogdGhlIGZpbGUgaGFzIGEgcHJlZXhpc3RpbmcgbmFtZXNwYWNlIGltcG9ydCBhbmQgYSB0cmFuc2Zvcm0gdHJpZXMgdG8gYWRkIGEgbm9uLW5hbWVzcGFjZSBpbXBvcnQsIHNvIHRoZXkgZG9uJ3QgZ2V0IGNvbWJpbmVkXG4gICAgICogdGhlIGZpbGUgaGFzIGEgcHJlZXhpc3RpbmcgbmFtZXNwYWNlIGltcG9ydCBhbmQgYSB0cmFuc2Zvcm0gdHJpZXMgdG8gYWRkIGEgbmFtZXNwYWNlIGltcG9ydCwgc28gdGhleSBkb24ndCBnZXQgY29tYmluZWRcbiAgICAgKi9cbiAgICBsZXQgY2Fubm90VXNlRXhpc3RpbmdEZWNsYXJhdGlvbiA9XG4gICAgICAoaGFzTmFtZWRTcGVjaWZpZXJzICYmIGlzTmFtZXNwYWNlSW1wb3J0KSB8fFxuICAgICAgKGhhc05hbWVzcGFjZVNwZWNpZmllciAmJiBpc05hbWVkSW1wb3J0KSB8fFxuICAgICAgKGhhc05hbWVzcGFjZVNwZWNpZmllciAmJiBpc05hbWVzcGFjZUltcG9ydCk7XG5cbiAgICBpZiAoIWNhbm5vdFVzZUV4aXN0aW5nRGVjbGFyYXRpb24gJiYgZGVjbGFyYXRpb24pIHtcbiAgICAgIGxldCBzcGVjaWZpZXIgPSBkZWNsYXJhdGlvblxuICAgICAgICAuZ2V0KCdzcGVjaWZpZXJzJylcbiAgICAgICAgLmZpbmQoKHNwZWMpID0+IG1hdGNoU3BlY2lmaWVyKHNwZWMsIGV4cG9ydGVkTmFtZSkpO1xuICAgICAgaWYgKHNwZWNpZmllciAmJiB0YXJnZXQuc2NvcGUuZ2V0QmluZGluZyhzcGVjaWZpZXIubm9kZS5sb2NhbC5uYW1lKT8ua2luZCA9PT0gJ21vZHVsZScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudC5pZGVudGlmaWVyKHNwZWNpZmllci5ub2RlLmxvY2FsLm5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkU3BlY2lmaWVyKHRhcmdldCwgZGVjbGFyYXRpb24sIGV4cG9ydGVkTmFtZSwgcHJlZmVycmVkTmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBkZWNsYXJhdGlvbiA9IHRoaXMuaW5zZXJ0QWZ0ZXJFeGlzdGluZ0ltcG9ydHMoXG4gICAgICAgIHRoaXMudC5pbXBvcnREZWNsYXJhdGlvbihbXSwgdGhpcy50LnN0cmluZ0xpdGVyYWwobW9kdWxlU3BlY2lmaWVyKSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhpcy5hZGRTcGVjaWZpZXIodGFyZ2V0LCBkZWNsYXJhdGlvbiwgZXhwb3J0ZWROYW1lLCBwcmVmZXJyZWROYW1lKTtcbiAgICB9XG4gIH1cblxuICBpbXBvcnRGb3JTaWRlRWZmZWN0KG1vZHVsZVNwZWNpZmllcjogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGRlY2xhcmF0aW9uID0gdGhpcy5maW5kSW1wb3J0RnJvbShtb2R1bGVTcGVjaWZpZXIpO1xuICAgIGlmICghZGVjbGFyYXRpb24pIHtcbiAgICAgIHRoaXMuaW5zZXJ0QWZ0ZXJFeGlzdGluZ0ltcG9ydHMoXG4gICAgICAgIHRoaXMudC5pbXBvcnREZWNsYXJhdGlvbihbXSwgdGhpcy50LnN0cmluZ0xpdGVyYWwobW9kdWxlU3BlY2lmaWVyKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmVwbGFjZVdpdGg8VCBleHRlbmRzIHQuTm9kZSwgUiBleHRlbmRzIHQuTm9kZT4oXG4gICAgdGFyZ2V0OiBOb2RlUGF0aDxUPixcbiAgICBmbjogKGk6IEltcG9ydGVyKSA9PiBSXG4gICk6IE5vZGVQYXRoPFI+IHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUoKGkpID0+IHtcbiAgICAgIHRhcmdldC5yZXBsYWNlV2l0aChmbihpKSk7XG4gICAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIG9mIHJlcGxhY2VXaXRoIGlzIG5vdCBhIHJlbGlhYmxlIHdheSB0byBnZXQgdGhlXG4gICAgICAvLyB1cGRhdGVkIHBhdGgsIGF0IGxlYXN0IGluIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyIHJlcGxhY2VkIGFuXG4gICAgICAvLyBleHByZXNzaW9uIHdpdGggYSBzdGF0ZW1lbnQuIEluc3RlYWQgd2Ugd2lsbCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgcGF0aFxuICAgICAgLy8gcmVwbGFjZW1lbnQgYWxzbyBtdXRhdGVzIGl0cyBhcmd1bWVudCwgc28gYHRhcmdldGAgbm93IHBvaW50cyBhdCB0aGVcbiAgICAgIC8vIG5ld2x5IHJlcGxhY2VkIHBhdGguXG4gICAgICByZXR1cm4gdGFyZ2V0IGFzIHVua25vd24gYXMgTm9kZVBhdGg8Uj47XG4gICAgfSwgZGVmYXVsdE5hbWVIaW50KHRhcmdldCkpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXI8VCBleHRlbmRzIHQuTm9kZSwgUiBleHRlbmRzIHQuTm9kZT4oXG4gICAgdGFyZ2V0OiBOb2RlUGF0aDxUPixcbiAgICBmbjogKGk6IEltcG9ydGVyKSA9PiBSXG4gICk6IE5vZGVQYXRoPFI+IHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUoKGkpID0+IHRhcmdldC5pbnNlcnRBZnRlcihmbihpKSlbMF0gYXMgTm9kZVBhdGg8Uj4sIGRlZmF1bHROYW1lSGludCh0YXJnZXQpKTtcbiAgfVxuXG4gIGluc2VydEJlZm9yZTxUIGV4dGVuZHMgdC5Ob2RlLCBSIGV4dGVuZHMgdC5Ob2RlPihcbiAgICB0YXJnZXQ6IE5vZGVQYXRoPFQ+LFxuICAgIGZuOiAoaTogSW1wb3J0ZXIpID0+IFJcbiAgKTogTm9kZVBhdGg8Uj4ge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZShcbiAgICAgIChpKSA9PiB0YXJnZXQuaW5zZXJ0QmVmb3JlKGZuKGkpKVswXSBhcyBOb2RlUGF0aDxSPixcbiAgICAgIGRlZmF1bHROYW1lSGludCh0YXJnZXQpXG4gICAgKTtcbiAgfVxuXG4gIC8vIExvdy1sZXZlbCBtZXRob2QgZm9yIHdoZW4geW91IGRvbid0IHdhbnQgdG8gdXNlIG91ciBoaWdoZXItbGV2ZWwgbWV0aG9kc1xuICAvLyAocmVwbGFjZVdpdGgsIGluc2VydEJlZm9yZSwgaW5zZXJ0QWZ0ZXIpXG4gIG11dGF0ZTxSZXBsYWNlbWVudCBleHRlbmRzIHQuTm9kZT4oXG4gICAgZm46IChpbXBvcnRlcjogSW1wb3J0ZXIpID0+IE5vZGVQYXRoPFJlcGxhY2VtZW50PixcbiAgICBkZWZhdWx0TmFtZUhpbnQ/OiBzdHJpbmdcbiAgKTogTm9kZVBhdGg8UmVwbGFjZW1lbnQ+IHtcbiAgICBsZXQgc3ltYm9sczogTWFwPFxuICAgICAgdC5JZGVudGlmaWVyLFxuICAgICAgeyBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZzsgZXhwb3J0ZWROYW1lOiBzdHJpbmc7IG5hbWVIaW50OiBzdHJpbmcgfCB1bmRlZmluZWQgfVxuICAgID4gPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgaW1wb3J0ZXI6IEltcG9ydGVyID0ge1xuICAgICAgaW1wb3J0OiAobW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsIGV4cG9ydGVkTmFtZTogc3RyaW5nLCBuYW1lSGludD86IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgaWRlbnRpZmllciA9IHRoaXMudC5pZGVudGlmaWVyKCdfX2JhYmVsX2ltcG9ydF91dGlsX3BsYWNlaG9sZGVyX18nKTtcbiAgICAgICAgc3ltYm9scy5zZXQoaWRlbnRpZmllciwgeyBtb2R1bGVTcGVjaWZpZXIsIGV4cG9ydGVkTmFtZSwgbmFtZUhpbnQgfSk7XG4gICAgICAgIHJldHVybiBpZGVudGlmaWVyO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlUmVmZXJlbmNlID0gKHBhdGg6IE5vZGVQYXRoKSA9PiB7XG4gICAgICBpZiAoIXBhdGguaXNJZGVudGlmaWVyKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGhpdCA9IHN5bWJvbHMuZ2V0KHBhdGgubm9kZSk7XG4gICAgICBpZiAoaGl0KSB7XG4gICAgICAgIGxldCBuZXdJZGVudGlmaWVyID0gdGhpcy51bnJlZmVyZW5jZWRJbXBvcnQoXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBoaXQubW9kdWxlU3BlY2lmaWVyLFxuICAgICAgICAgIGhpdC5leHBvcnRlZE5hbWUsXG4gICAgICAgICAgZGVzaXJlZE5hbWUoaGl0Lm5hbWVIaW50LCBoaXQuZXhwb3J0ZWROYW1lLCBkZWZhdWx0TmFtZUhpbnQpXG4gICAgICAgICk7XG4gICAgICAgIHBhdGgucmVwbGFjZVdpdGgobmV3SWRlbnRpZmllcik7XG4gICAgICAgIGxldCBiaW5kaW5nID0gcGF0aC5zY29wZS5nZXRCaW5kaW5nKG5ld0lkZW50aWZpZXIubmFtZSk7XG4gICAgICAgIGlmICghYmluZGluZykge1xuICAgICAgICAgIC8vIHdlIGNyZWF0ZSB0aGUgYmluZGluZyBhdCB0aGUgcG9pbnQgd2hlcmUgd2UgYWRkIHRoZSBpbXBvcnQsIHNvIHRoaXNcbiAgICAgICAgICAvLyB3b3VsZCBpbmRpY2F0ZSBicm9rZW4gYmVoYXZpb3JcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJ1ZzogdGhpcyBpcyBzdXBwb3NlZCB0byBuZXZlciBoYXBwZW5gKTtcbiAgICAgICAgfVxuICAgICAgICBiaW5kaW5nLnJlZmVyZW5jZShwYXRoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGV0IHJlc3VsdCA9IGZuKGltcG9ydGVyKTtcbiAgICB1cGRhdGVSZWZlcmVuY2UocmVzdWx0KTtcbiAgICB0aGlzLmJhYmVsLnRyYXZlcnNlKFxuICAgICAgcmVzdWx0Lm5vZGUsXG4gICAgICB7XG4gICAgICAgIFJlZmVyZW5jZWRJZGVudGlmaWVyOiAocGF0aCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZVJlZmVyZW5jZShwYXRoKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICByZXN1bHQuc2NvcGUsXG4gICAgICB7fSxcbiAgICAgIHJlc3VsdFxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU3BlY2lmaWVyKFxuICAgIHRhcmdldDogTm9kZVBhdGg8dC5Ob2RlPixcbiAgICBkZWNsYXJhdGlvbjogTm9kZVBhdGg8dC5JbXBvcnREZWNsYXJhdGlvbj4sXG4gICAgZXhwb3J0ZWROYW1lOiBzdHJpbmcsXG4gICAgcHJlZmVycmVkTmFtZTogc3RyaW5nXG4gICk6IHQuSWRlbnRpZmllciB7XG4gICAgbGV0IGxvY2FsID0gdGhpcy50LmlkZW50aWZpZXIodW51c2VkTmFtZUxpa2UodGFyZ2V0LCBwcmVmZXJyZWROYW1lKSk7XG4gICAgbGV0IHNwZWNpZmllciA9IHRoaXMuYnVpbGRTcGVjaWZpZXIoZXhwb3J0ZWROYW1lLCBsb2NhbCk7XG4gICAgbGV0IGFkZGVkOiBOb2RlUGF0aDtcbiAgICBpZiAoc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJykge1xuICAgICAgZGVjbGFyYXRpb24ubm9kZS5zcGVjaWZpZXJzLnVuc2hpZnQoc3BlY2lmaWVyKTtcbiAgICAgIGFkZGVkID0gZGVjbGFyYXRpb24uZ2V0KGBzcGVjaWZpZXJzLjBgKSBhcyBOb2RlUGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjbGFyYXRpb24ubm9kZS5zcGVjaWZpZXJzLnB1c2goc3BlY2lmaWVyKTtcbiAgICAgIGFkZGVkID0gZGVjbGFyYXRpb24uZ2V0KGBzcGVjaWZpZXJzLiR7ZGVjbGFyYXRpb24ubm9kZS5zcGVjaWZpZXJzLmxlbmd0aCAtIDF9YCkgYXMgTm9kZVBhdGg7XG4gICAgfVxuICAgIGRlY2xhcmF0aW9uLnNjb3BlLnJlZ2lzdGVyQmluZGluZygnbW9kdWxlJywgYWRkZWQpO1xuICAgIHJldHVybiBsb2NhbDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTcGVjaWZpZXIoZXhwb3J0ZWROYW1lOiBzdHJpbmcsIGxvY2FsTmFtZTogdC5JZGVudGlmaWVyKSB7XG4gICAgc3dpdGNoIChleHBvcnRlZE5hbWUpIHtcbiAgICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgICByZXR1cm4gdGhpcy50LmltcG9ydERlZmF1bHRTcGVjaWZpZXIobG9jYWxOYW1lKTtcbiAgICAgIGNhc2UgJyonOlxuICAgICAgICByZXR1cm4gdGhpcy50LmltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihsb2NhbE5hbWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMudC5pbXBvcnRTcGVjaWZpZXIobG9jYWxOYW1lLCB0aGlzLnQuaWRlbnRpZmllcihleHBvcnRlZE5hbWUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRJbXBvcnRGcm9tKG1vZHVsZVNwZWNpZmllcjogc3RyaW5nKTogTm9kZVBhdGg8dC5JbXBvcnREZWNsYXJhdGlvbj4gfCB1bmRlZmluZWQge1xuICAgIGZvciAobGV0IHBhdGggb2YgdGhpcy5wcm9ncmFtLmdldCgnYm9keScpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHBhdGguaXNJbXBvcnREZWNsYXJhdGlvbigpICYmXG4gICAgICAgIHBhdGgubm9kZS5zb3VyY2UudmFsdWUgPT09IG1vZHVsZVNwZWNpZmllciAmJlxuICAgICAgICBwYXRoLm5vZGUuaW1wb3J0S2luZCAhPT0gJ3R5cGUnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGluc2VydEFmdGVyRXhpc3RpbmdJbXBvcnRzPFMgZXh0ZW5kcyB0LlN0YXRlbWVudD4oc3RhdGVtZW50OiBTKTogTm9kZVBhdGg8Uz4ge1xuICAgIGxldCBsYXN0SW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBbaW5kZXgsIG5vZGVdIG9mIHRoaXMucHJvZ3JhbS5ub2RlLmJvZHkuZW50cmllcygpKSB7XG4gICAgICBpZiAobm9kZS50eXBlID09PSAnSW1wb3J0RGVjbGFyYXRpb24nKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobGFzdEluZGV4ID09IG51bGwpIHtcbiAgICAgIC8vIHdlIGFyZSBpbnRlbnRpb25hbGx5IG5vdCB1c2luZyBiYWJlbCdzIGNvbnRhaW5lci1hd2FyZSBtZXRob2RzLCBiZWNhdXNlXG4gICAgICAvLyB3aGlsZSBpbiB0aGVvcnkgaXQncyBuaWNlIHRoYXQgdGhleSBzY2hlZHVsZSBvdGhlciBwbHVnaW5zIHRvIHJ1biBvblxuICAgICAgLy8gb3VyIG5vZGVzLCBpbiBwcmFjdGljZSB0aG9zZSBub2RlcyBtaWdodCBnZXQgbXV0YXRlZCBvciByZW1vdmVkIGJ5IHNvbWVcbiAgICAgIC8vIG90aGVyIHBsdWdpbiBpbiB0aGUgaW50ZXJ2ZW5pbmcgdGltZSBjYXVzaW5nIGZhaWx1cmVzLlxuICAgICAgdGhpcy5wcm9ncmFtLm5vZGUuYm9keS51bnNoaWZ0KHN0YXRlbWVudCk7XG4gICAgICByZXR1cm4gdGhpcy5wcm9ncmFtLmdldCgnYm9keS4wJykgYXMgTm9kZVBhdGg8Uz47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvZ3JhbS5ub2RlLmJvZHkuc3BsaWNlKGxhc3RJbmRleCArIDEsIDAsIHN0YXRlbWVudCk7XG4gICAgICByZXR1cm4gdGhpcy5wcm9ncmFtLmdldChgYm9keS4ke2xhc3RJbmRleCArIDF9YCkgYXMgTm9kZVBhdGg8Uz47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVudXNlZE5hbWVMaWtlKHBhdGg6IE5vZGVQYXRoPHQuTm9kZT4sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBjYW5kaWRhdGUgPSBuYW1lO1xuICBsZXQgY291bnRlciA9IDA7XG4gIHdoaWxlIChwYXRoLnNjb3BlLmhhc0JpbmRpbmcoY2FuZGlkYXRlKSkge1xuICAgIGNhbmRpZGF0ZSA9IGAke25hbWV9JHtjb3VudGVyKyt9YDtcbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlO1xufVxuXG5mdW5jdGlvbiBuYW1lKG5vZGU6IHQuU3RyaW5nTGl0ZXJhbCB8IHQuSWRlbnRpZmllcik6IHN0cmluZyB7XG4gIGlmIChub2RlLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgIHJldHVybiBub2RlLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub2RlLm5hbWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzaXJlZE5hbWUoXG4gIG5hbWVIaW50OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGV4cG9ydGVkTmFtZTogc3RyaW5nLFxuICBkZWZhdWx0TmFtZUhpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuKSB7XG4gIGlmIChuYW1lSGludCkge1xuICAgIHJldHVybiBzYW5pdGl6ZShuYW1lSGludCk7XG4gIH1cbiAgaWYgKGV4cG9ydGVkTmFtZSA9PT0gJ2RlZmF1bHQnIHx8IGV4cG9ydGVkTmFtZSA9PT0gJyonKSB7XG4gICAgcmV0dXJuIGRlZmF1bHROYW1lSGludCA/PyAnYSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGV4cG9ydGVkTmFtZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0TmFtZUhpbnQodGFyZ2V0OiBOb2RlUGF0aCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0YXJnZXQ/LmlzSWRlbnRpZmllcigpKSB7XG4gICAgcmV0dXJuIHRhcmdldC5ub2RlLm5hbWU7XG4gIH0gZWxzZSBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRhcmdldC5zY29wZS5nZW5lcmF0ZVVpZElkZW50aWZpZXJCYXNlZE9uTm9kZSh0YXJnZXQubm9kZSkubmFtZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hdGNoU3BlY2lmaWVyKHNwZWM6IE5vZGVQYXRoPGFueT4sIGV4cG9ydGVkTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHN3aXRjaCAoZXhwb3J0ZWROYW1lKSB7XG4gICAgY2FzZSAnZGVmYXVsdCc6XG4gICAgICByZXR1cm4gc3BlYy5pc0ltcG9ydERlZmF1bHRTcGVjaWZpZXIoKTtcbiAgICBjYXNlICcqJzpcbiAgICAgIHJldHVybiBzcGVjLmlzSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzcGVjLmlzSW1wb3J0U3BlY2lmaWVyKCkgJiYgbmFtZShzcGVjLm5vZGUuaW1wb3J0ZWQpID09PSBleHBvcnRlZE5hbWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hNb2R1bGUoXG4gIHBhdGg6IE5vZGVQYXRoPGFueT4sXG4gIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nXG4pOiBwYXRoIGlzIE5vZGVQYXRoPHQuSW1wb3J0RGVjbGFyYXRpb24+IHtcbiAgcmV0dXJuIHBhdGguaXNJbXBvcnREZWNsYXJhdGlvbigpICYmIHBhdGguZ2V0KCdzb3VyY2UnKS5ub2RlLnZhbHVlID09PSBtb2R1bGVTcGVjaWZpZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0ZXIge1xuICAvLyBJbXBvcnQgdGhlIGdpdmVuIHZhbHVlIChpZiBuZWVkZWQpIGFuZCByZXR1cm4gYW4gSWRlbnRpZmllciByZXByZXNlbnRpbmdcbiAgLy8gaXQuXG4gIGltcG9ydChcbiAgICAvLyB0aGUgcGF0aCB0byB0aGUgbW9kdWxlIHlvdSdyZSBpbXBvcnRpbmcgZnJvbVxuICAgIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nLFxuXG4gICAgLy8gdGhlIG5hbWUgeW91J3JlIGltcG9ydGluZyBmcm9tIHRoYXQgbW9kdWxlLiBVc2UgXCJkZWZhdWx0XCIgZm9yIHRoZSBkZWZhdWx0XG4gICAgLy8gZXhwb3J0LiBVc2UgXCIqXCIgZm9yIHRoZSBuYW1lc3BhY2UuXG4gICAgZXhwb3J0ZWROYW1lOiBzdHJpbmcsXG5cbiAgICAvLyBPcHRpb25hbCBoaW50IGZvciBoZWxwaW5nIHVzIHBpY2sgYSBuYW1lIGZvciB0aGUgaW1wb3J0ZWQgYmluZGluZ1xuICAgIG5hbWVIaW50Pzogc3RyaW5nXG4gICk6IHQuSWRlbnRpZmllcjtcbn1cbiJdfQ==","import type * as Babel from '@babel/core';\nimport type { types as t, NodePath } from '@babel/core';\nimport { ImportUtil, type Importer } from 'babel-import-util';\nimport { globalId } from './global-id.ts';\n\ninterface State extends Babel.PluginPass {\n  currentClassBodies: t.ClassBody[];\n  currentObjectExpressions: {\n    node: t.ObjectExpression;\n    decorated: [\n      'field' | 'method',\n      t.Expression, // for the property name\n      t.Expression[], // for the decorators applied to it\n    ][];\n  }[];\n  opts: Options;\n  runtime: (i: Importer, fnName: string) => t.Expression;\n  util: ImportUtil;\n  optsWithDefaults: Required<Options>;\n}\n\nexport interface Options {\n  runtime?: 'globals' | { import: string };\n  runEarly?: boolean;\n}\n\nfunction makeVisitor(babel: typeof Babel): Babel.Visitor<State> {\n  const t = babel.types;\n  return {\n    Program(path: NodePath<t.Program>, state: State) {\n      state.currentClassBodies = [];\n      state.currentObjectExpressions = [];\n      state.optsWithDefaults = {\n        runtime: 'globals',\n        runEarly: false,\n        ...state.opts,\n      };\n      state.util = new ImportUtil(babel, path);\n      state.runtime = (i: Importer, fnName: string) => {\n        const { runtime } = state.optsWithDefaults;\n        if (runtime === 'globals') {\n          return t.memberExpression(\n            t.identifier(globalId),\n            t.identifier(fnName),\n          );\n        } else {\n          return i.import(runtime.import, fnName);\n        }\n      };\n    },\n    ClassBody: {\n      enter(path, state) {\n        state.currentClassBodies.unshift(path.node);\n      },\n      exit(path, state) {\n        if (state.currentClassBodies[0] === path.node) {\n          state.currentClassBodies.shift();\n        }\n      },\n    },\n    ClassExpression(path, state) {\n      let decorators = path.get('decorators') as\n        | NodePath<t.Decorator>[]\n        | NodePath<null>;\n      if (Array.isArray(decorators) && decorators.length > 0) {\n        state.util.replaceWith(path, (i) => {\n          let call = t.callExpression(state.runtime(i, 'c'), [\n            path.node,\n            t.arrayExpression(\n              decorators\n                .slice()\n                .reverse()\n                .map((d) => d.node.expression),\n            ),\n          ]);\n          for (let decorator of decorators) {\n            decorator.remove();\n          }\n          return call;\n        });\n      }\n    },\n    ClassDeclaration(path, state) {\n      let decorators = path.get('decorators') as\n        | NodePath<t.Decorator>[]\n        | NodePath<null>;\n      if (Array.isArray(decorators) && decorators.length > 0) {\n        const buildCall = (i: Importer) => {\n          return t.callExpression(state.runtime(i, 'c'), [\n            t.classExpression(\n              path.node.id,\n              path.node.superClass,\n              path.node.body,\n              [], // decorators removed here\n            ),\n            t.arrayExpression(\n              decorators\n                .slice()\n                .reverse()\n                .map((d) => d.node.expression),\n            ),\n          ]);\n        };\n\n        if (path.parentPath.isExportDefaultDeclaration()) {\n          let id = path.node.id;\n          if (id) {\n            state.util.insertBefore(path.parentPath, (i) =>\n              t.variableDeclaration('const', [\n                t.variableDeclarator(id, buildCall(i)),\n              ]),\n            );\n            path.parentPath.replaceWith(t.exportDefaultDeclaration(id));\n          } else {\n            state.util.replaceWith(path.parentPath, (i) =>\n              t.exportDefaultDeclaration(buildCall(i)),\n            );\n          }\n        } else if (path.parentPath.isExportNamedDeclaration()) {\n          let id = path.node.id;\n          if (!id) {\n            throw new Error(\n              `bug: expected a class name is required in this context`,\n            );\n          }\n          state.util.insertBefore(path.parentPath, (i) =>\n            t.variableDeclaration('const', [\n              t.variableDeclarator(id, buildCall(i)),\n            ]),\n          );\n          path.parentPath.replaceWith(\n            t.exportNamedDeclaration(null, [t.exportSpecifier(id, id)]),\n          );\n        } else {\n          let id = path.node.id;\n          if (!id) {\n            throw new Error(\n              `bug: expected a class name is required in this context`,\n            );\n          }\n          state.util.replaceWith(path, (i) =>\n            t.variableDeclaration('const', [\n              t.variableDeclarator(id, buildCall(i)),\n            ]),\n          );\n        }\n      }\n    },\n    ClassProperty(path, state) {\n      let decorators = path.get('decorators') as\n        | NodePath<t.Decorator>[]\n        | NodePath<null>;\n      if (Array.isArray(decorators) && decorators.length > 0) {\n        let prototype: t.Expression;\n        if (path.node.static) {\n          prototype = t.thisExpression();\n        } else {\n          prototype = t.memberExpression(\n            t.thisExpression(),\n            t.identifier('prototype'),\n          );\n        }\n        let args: t.Expression[] = [\n          prototype,\n          valueForFieldKey(t, path.node.key),\n          t.arrayExpression(\n            decorators\n              .slice()\n              .reverse()\n              .map((d) => d.node.expression),\n          ),\n        ];\n        if (path.node.value) {\n          args.push(\n            t.functionExpression(\n              null,\n              [],\n              t.blockStatement([t.returnStatement(path.node.value)]),\n            ),\n          );\n        }\n        state.util.insertBefore<t.ClassProperty, t.StaticBlock>(path, (i) =>\n          t.staticBlock([\n            t.expressionStatement(\n              t.callExpression(state.runtime(i, 'g'), args),\n            ),\n          ]),\n        );\n        state.util.insertBefore<t.ClassProperty, t.ClassPrivateProperty>(\n          path,\n          (i) =>\n            t.classPrivateProperty(\n              t.privateName(\n                t.identifier(\n                  unusedPrivateNameLike(state, propName(path.node.key)),\n                ),\n              ),\n              t.sequenceExpression([\n                t.callExpression(state.runtime(i, 'i'), [\n                  t.thisExpression(),\n                  valueForFieldKey(t, path.node.key),\n                ]),\n                t.unaryExpression('void', t.numericLiteral(0), true),\n              ]),\n            ),\n        );\n        path.remove();\n      }\n    },\n    ClassMethod(path, state) {\n      let decorators = path.get('decorators') as\n        | NodePath<t.Decorator>[]\n        | NodePath<null>;\n      if (Array.isArray(decorators) && decorators.length > 0) {\n        let prototype: t.Expression;\n        if (path.node.static) {\n          prototype = t.thisExpression();\n        } else {\n          prototype = t.memberExpression(\n            t.thisExpression(),\n            t.identifier('prototype'),\n          );\n        }\n        state.util.insertAfter(path as NodePath<t.ClassMethod>, (i) =>\n          t.staticBlock([\n            t.expressionStatement(\n              t.callExpression(state.runtime(i, 'n'), [\n                prototype,\n                valueForFieldKey(t, path.node.key),\n                t.arrayExpression(\n                  decorators\n                    .slice()\n                    .reverse()\n                    .map((d) => d.node.expression),\n                ),\n              ]),\n            ),\n          ]),\n        );\n        for (let decorator of decorators) {\n          decorator.remove();\n        }\n      }\n    },\n    ObjectExpression: {\n      enter(path, state) {\n        state.currentObjectExpressions.unshift({\n          node: path.node,\n          decorated: [],\n        });\n      },\n      exit(path, state) {\n        if (state.currentObjectExpressions[0]?.node !== path.node) {\n          return;\n        }\n        let { decorated } = state.currentObjectExpressions.shift()!;\n        if (decorated.length > 0) {\n          state.util.replaceWith(path, (i) =>\n            t.callExpression(state.runtime(i, 'p'), [\n              path.node,\n              t.arrayExpression(\n                decorated.map(([type, prop, decorators]) =>\n                  t.arrayExpression([\n                    t.stringLiteral(type),\n                    prop,\n                    t.arrayExpression(decorators),\n                  ]),\n                ),\n              ),\n            ]),\n          );\n        }\n      },\n    },\n    ObjectProperty(path, state) {\n      let decorators = path.get('decorators') as\n        | NodePath<t.Decorator>[]\n        | NodePath<null>;\n      if (Array.isArray(decorators) && decorators.length > 0) {\n        if (state.currentObjectExpressions.length === 0) {\n          throw new Error(\n            `bug in decorator-transforms: didn't expect to see ObjectProperty outside ObjectExpression`,\n          );\n        }\n        let prop = path.node.key;\n        if (prop.type === 'PrivateName') {\n          throw new Error(`cannot decorate private field`);\n        }\n        state.currentObjectExpressions[0].decorated.push([\n          'field',\n          valueForFieldKey(t, prop),\n          decorators\n            .slice()\n            .reverse()\n            .map((d) => d.node.expression),\n        ]);\n        for (let decorator of decorators) {\n          decorator.remove();\n        }\n      }\n    },\n\n    ObjectMethod(path, state) {\n      let decorators = path.get('decorators') as\n        | NodePath<t.Decorator>[]\n        | NodePath<null>;\n      if (Array.isArray(decorators) && decorators.length > 0) {\n        if (state.currentObjectExpressions.length === 0) {\n          throw new Error(\n            `bug in decorator-transforms: didn't expect to see ObjectMethod outside ObjectExpression`,\n          );\n        }\n        let prop = path.node.key;\n        state.currentObjectExpressions[0].decorated.push([\n          'method',\n          valueForFieldKey(t, prop),\n          decorators\n            .slice()\n            .reverse()\n            .map((d) => d.node.expression),\n        ]);\n        for (let decorator of decorators) {\n          decorator.remove();\n        }\n      }\n    },\n  };\n}\n\nexport default function legacyDecoratorCompat(\n  babel: typeof Babel,\n): Babel.PluginObject<State> {\n  let visitor: Babel.Visitor<State> | undefined = makeVisitor(babel);\n  return {\n    // Enable decorator parser support directly via manipulateOptions instead\n    // of depending on @babel/plugin-syntax-decorators. This keeps the plugin\n    // working across both Babel 7 and 8 without a hard dependency on either.\n    manipulateOptions(_opts, parserOpts) {\n      parserOpts.plugins.push('decorators-legacy');\n    },\n\n    pre(this: State, file) {\n      if (this.opts.runEarly) {\n        babel.traverse(file.ast, makeVisitor(babel), file.scope, this);\n        visitor = undefined;\n      }\n    },\n    get visitor() {\n      return visitor ?? {};\n    },\n  };\n}\n\nfunction unusedPrivateNameLike(state: State, name: string): string {\n  let classBody = state.currentClassBodies[0];\n  if (!classBody) {\n    throw new Error(\n      `bug: no current class body around our class field decorator`,\n    );\n  }\n  let usedNames = new Set();\n  for (let element of classBody.body) {\n    if (\n      (element.type === 'ClassPrivateProperty' ||\n        element.type === 'ClassPrivateMethod' ||\n        element.type === 'ClassAccessorProperty') &&\n      element.key.type === 'PrivateName'\n    ) {\n      usedNames.add(element.key.id.name);\n    }\n  }\n  let candidate = name;\n  while (usedNames.has(candidate)) {\n    candidate = candidate + '_';\n  }\n  return candidate;\n}\n\n// derive a best-effort name we can use when creating a private-field\nfunction propName(expr: t.Expression): string {\n  if (expr.type === 'Identifier') {\n    return expr.name;\n  }\n  if (expr.type === 'BigIntLiteral' || expr.type === 'NumericLiteral') {\n    return `_${expr.value}`;\n  }\n  if (expr.type === 'StringLiteral') {\n    return '_' + expr.value.replace(/[^a-zA-Z]/g, '');\n  }\n  return '_';\n}\n\n// turn the field key into a runtime value. Identifiers are special because they\n// need to become string literals, anything else is already usable as a value.\nfunction valueForFieldKey(\n  t: (typeof Babel)['types'],\n  expr: t.Expression,\n): t.Expression {\n  if (expr.type === 'Identifier') {\n    return t.stringLiteral(expr.name);\n  }\n  return expr;\n}\n"],"names":["sanitize_1","require$$0","declaration","defaultNameHint","name","ImportUtil","globalId"],"mappings":"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","x_google_ignoreList":[0,1]}