{"version":3,"file":"nextCompilerBabel.cjs","names":["exists","colorize","ANSIColors","v","x","readFileFromRoot","colorizePath"],"sources":["../../../../src/init/utils/nextCompilerBabel.ts"],"sourcesContent":["import * as ANSIColors from '@intlayer/config/colors';\nimport { colorize, colorizePath, logger, v, x } from '@intlayer/config/logger';\nimport { exists, readFileFromRoot } from './fileSystem';\nimport { installPackages, type PackageManager } from './packageManager';\n\n/**\n * `babel.config.js` wiring the full Intlayer compiler + build-optimization\n * pipeline for Next.js.\n *\n * The four passes run in a fixed order — extract first (so dictionaries exist),\n * optimize last (because it erases the dictionary key the previous passes rely\n * on). `presets: [\"next/babel\"]` is required so Babel keeps compiling JSX/TS\n * the way Next.js does; without it the build breaks.\n */\nexport const NEXT_INTLAYER_BABEL_CONFIG_CONTENT = `const {\n  intlayerExtractBabelPlugin,\n  intlayerPurgeBabelPlugin,\n  intlayerMinifyBabelPlugin,\n  intlayerOptimizeBabelPlugin,\n  getExtractPluginOptions,\n  getPurgePluginOptions,\n  getMinifyPluginOptions,\n  getOptimizePluginOptions,\n} = require(\"@intlayer/babel\");\n\nmodule.exports = {\n  presets: [\"next/babel\"],\n  plugins: [\n    // Extract: compile .content.ts files → .intlayer/**/*.json\n    [intlayerExtractBabelPlugin, getExtractPluginOptions()],\n\n    // Purge: remove unused fields from .intlayer/**/*.json\n    //    (reads intlayer.config.ts build.purge flag)\n    [intlayerPurgeBabelPlugin, getPurgePluginOptions()],\n\n    // Minify: rename field keys in JSON + source code\n    //    (reads intlayer.config.ts build.minify flag)\n    [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],\n\n    // Optimize: rewrite useIntlayer('key') → useDictionary(hash)\n    //    Must come last because it erases the dictionary key.\n    [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],\n  ],\n};\n`;\n\n/** Babel config filenames Next.js picks up, ordered by preference. */\nconst BABEL_CONFIG_CANDIDATES = [\n  'babel.config.js',\n  'babel.config.cjs',\n  'babel.config.mjs',\n  'babel.config.ts',\n  'babel.config.json',\n  '.babelrc',\n  '.babelrc.js',\n  '.babelrc.cjs',\n  '.babelrc.json',\n];\n\n/** Dev dependency required to run the Intlayer Babel compiler passes. */\nconst INTLAYER_BABEL_PACKAGE = '@intlayer/babel';\n\n/**\n * Returns the first existing config file from `candidates`, or `undefined` when\n * none are present.\n */\nconst findExistingConfig = async (\n  rootDir: string,\n  candidates: string[]\n): Promise<string | undefined> => {\n  for (const candidate of candidates) {\n    if (await exists(rootDir, candidate)) return candidate;\n  }\n  return undefined;\n};\n\n/**\n * Wires the Intlayer compiler + build-optimization Babel plugins into a Next.js\n * project that already uses Babel.\n *\n * Only acts when a Babel config is detected. A default Next.js project compiles\n * with SWC, where the Intlayer optimize pass is injected automatically by\n * `withIntlayer` once `@intlayer/swc` is installed — no Babel config is needed,\n * so there is nothing to set up here. Writing a `babel.config.js` would in fact\n * be harmful: Next.js falls back from SWC to Babel as soon as one exists, which\n * disables both the project's SWC compiler and the `@intlayer/swc` plugin.\n *\n * When a Babel config is present it:\n *\n * 1. Installs `@intlayer/babel` as a dev dependency (unless already present or\n *    `skipInstall` is set).\n * 2. Leaves the existing config untouched and prints the plugins to add, since\n *    arbitrary user configs cannot be safely merged.\n *\n * Idempotent: re-running detects the already-wired `@intlayer/babel` import and\n * skips.\n *\n * @param rootDir - Project root directory.\n * @param packageManager - Detected package manager used to install the package.\n * @param allDeps - Combined prod + dev dependencies, used to skip a redundant install.\n * @param skipInstall - When `true`, dependency installation is skipped.\n */\nexport const setupNextCompilerBabelConfig = async ({\n  rootDir,\n  packageManager,\n  allDeps,\n  skipInstall,\n}: {\n  rootDir: string;\n  packageManager: PackageManager;\n  allDeps: Record<string, string>;\n  skipInstall: boolean;\n}): Promise<void> => {\n  const existingBabelConfig = await findExistingConfig(\n    rootDir,\n    BABEL_CONFIG_CANDIDATES\n  );\n\n  // Nothing to wire into: the project compiles with SWC, where `withIntlayer`\n  // injects the optimize pass automatically once `@intlayer/swc` is installed.\n  if (!existingBabelConfig) return;\n\n  // INSTALL @intlayer/babel\n  if (!skipInstall && !allDeps[INTLAYER_BABEL_PACKAGE]) {\n    logger(\n      colorize(\n        'Installing the Intlayer Babel compiler dependency...',\n        ANSIColors.CYAN\n      )\n    );\n    try {\n      installPackages(rootDir, [INTLAYER_BABEL_PACKAGE], packageManager, true);\n      logger(\n        `${v} Installed: ${colorize(INTLAYER_BABEL_PACKAGE, ANSIColors.MAGENTA)}`\n      );\n    } catch {\n      logger(\n        `${x} Failed to install ${INTLAYER_BABEL_PACKAGE}. Please install manually: ${INTLAYER_BABEL_PACKAGE} (dev dependency)`,\n        { level: 'warn' }\n      );\n    }\n  }\n\n  // EXISTING BABEL CONFIG — never overwrite, print the plugins to add instead.\n  const content = await readFileFromRoot(rootDir, existingBabelConfig);\n\n  if (content.includes(INTLAYER_BABEL_PACKAGE)) {\n    logger(\n      `${v} ${colorizePath(existingBabelConfig)} already includes the Intlayer compiler plugins`\n    );\n    return;\n  }\n\n  logger(\n    `${x} ${colorizePath(existingBabelConfig)} already exists. Add the Intlayer compiler plugins manually:\\n${NEXT_INTLAYER_BABEL_CONFIG_CONTENT}`,\n    { level: 'warn' }\n  );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAcA,MAAa,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiClD,MAAM,0BAA0B;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,MAAM,yBAAyB;;;;;AAM/B,MAAM,qBAAqB,OACzB,SACA,eACgC;CAChC,KAAK,MAAM,aAAa,YACtB,IAAI,MAAMA,qCAAO,SAAS,SAAS,GAAG,OAAO;AAGjD;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAa,+BAA+B,OAAO,EACjD,SACA,gBACA,SACA,kBAMmB;CACnB,MAAM,sBAAsB,MAAM,mBAChC,SACA,uBACF;CAIA,IAAI,CAAC,qBAAqB;CAG1B,IAAI,CAAC,eAAe,CAAC,QAAQ,yBAAyB;EACpD,wCACEC,kCACE,wDACAC,wBAAW,IACb,CACF;EACA,IAAI;GACF,kDAAgB,SAAS,CAAC,sBAAsB,GAAG,gBAAgB,IAAI;GACvE,oCACE,GAAGC,0BAAE,kBAAcF,kCAAS,wBAAwBC,wBAAW,OAAO,GACxE;EACF,QAAQ;GACN,oCACE,GAAGE,0BAAE,qBAAqB,uBAAuB,6BAA6B,uBAAuB,oBACrG,EAAE,OAAO,OAAO,CAClB;EACF;CACF;CAKA,KAAI,MAFkBC,+CAAiB,SAAS,mBAAmB,EAExD,CAAC,SAAS,sBAAsB,GAAG;EAC5C,oCACE,GAAGF,0BAAE,OAAGG,sCAAa,mBAAmB,EAAE,gDAC5C;EACA;CACF;CAEA,oCACE,GAAGF,0BAAE,OAAGE,sCAAa,mBAAmB,EAAE,gEAAgE,sCAC1G,EAAE,OAAO,OAAO,CAClB;AACF"}