{"version":3,"file":"babel-plugin-transform-features.cjs","sources":["../cjs-src/transforms/babel-plugin-transform-features.js"],"sourcesContent":["import { ImportUtil } from 'babel-import-util';\nimport fs from 'fs';\n\nconst pkg = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));\nconst version = pkg.version;\n\nconst isCanary = version.includes('alpha');\n\nfunction parentIsUnary(node) {\n  if (node.parent.type === 'UnaryExpression' && node.parent.operator === '!') {\n    return true;\n  }\n  return false;\n}\n\nexport default function (babel) {\n  const { types: t } = babel;\n\n  return {\n    name: 'ast-transform', // not required\n    visitor: {\n      ImportDeclaration(path, state) {\n        const importPath = path.node.source.value;\n\n        if (importPath === state.opts.source) {\n          const specifiers = path.get('specifiers');\n          specifiers.forEach((specifier) => {\n            let name = specifier.node.imported.name;\n            if (!(name in state.opts.flags)) {\n              throw new Error(`Unexpected flag ${name} imported from ${state.opts.source}`);\n            }\n            let localBindingName = specifier.node.local.name;\n            let binding = specifier.scope.getBinding(localBindingName);\n            binding.referencePaths.forEach((p) => {\n              let negateStatement = false;\n              let node = p;\n              if (!isCanary) {\n                p.replaceWith(t.boolean(state.opts.flags[name]));\n                return;\n              }\n              if (parentIsUnary(p)) {\n                negateStatement = true;\n                node = p.parentPath;\n              }\n              let getConfig = t.memberExpression(\n                t.memberExpression(\n                  t.memberExpression(\n                    t.callExpression(state.importer.import(p, '@embroider/macros', 'getGlobalConfig'), []),\n                    t.identifier('WarpDrive')\n                  ),\n                  t.identifier('features')\n                ),\n                t.identifier(name)\n              );\n              node.replaceWith(\n                // if (LOG_FOO)\n                // =>\n                // if (macroCondition(getGlobalConfig('WarpDrive').debug.LOG_FOO))\n                t.callExpression(state.importer.import(p, '@embroider/macros', 'macroCondition'), [\n                  negateStatement ? t.unaryExpression('!', getConfig) : getConfig,\n                ])\n              );\n            });\n            specifier.scope.removeOwnBinding(localBindingName);\n            specifier.remove();\n          });\n          if (path.get('specifiers').length === 0) {\n            path.remove();\n          }\n        }\n      },\n\n      Program(path, state) {\n        state.importer = new ImportUtil(t, path);\n      },\n    },\n  };\n}\n"],"names":["pkg","JSON","parse","fs","readFileSync","version","isCanary","includes","parentIsUnary","node","parent","type","operator","babel","types","t","name","visitor","ImportDeclaration","path","state","importPath","source","value","opts","specifiers","get","forEach","specifier","imported","flags","Error","localBindingName","local","binding","scope","getBinding","referencePaths","p","negateStatement","replaceWith","boolean","parentPath","getConfig","memberExpression","callExpression","importer","import","identifier","unaryExpression","removeOwnBinding","remove","length","Program","ImportUtil"],"mappings":"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"}