{"version":3,"sources":["../../../src/server/withIntlayer.ts"],"sourcesContent":["import { resolve, relative, join } from 'path';\nimport {\n  getConfiguration,\n  formatEnvVariable,\n  ESMxCJSRequire,\n} from '@intlayer/config';\nimport { IntlayerPlugin } from '@intlayer/webpack';\nimport type { NextConfig } from 'next';\nimport type { NextJsWebpackConfig } from 'next/dist/server/config-shared';\nimport { readFileSync } from 'fs';\n\nconst getNextVersion = () => {\n  try {\n    const nextConfigPath = ESMxCJSRequire.resolve('next/package.json');\n\n    const nextPkg = JSON.parse(readFileSync(nextConfigPath, 'utf-8'));\n\n    return parseInt(nextPkg.version.split('.')[0], 10);\n  } catch (e) {\n    return undefined;\n  }\n};\n\nconst nextMajorVersion = getNextVersion();\n\n// Extract from the start script if --turbo or --turbopack flag is used\nconst isTurbopackEnabled =\n  process.env.npm_lifecycle_script?.includes('--turbo');\n\ntype WebpackParams = Parameters<NextJsWebpackConfig>;\n\n/**\n * A Next.js plugin that adds the intlayer configuration to the webpack configuration\n * and sets the environment variables\n *\n * Usage:\n *\n * ```ts\n * // next.config.js\n * export default withIntlayer(nextConfig)\n * ```\n */\nexport const withIntlayer = <T extends Partial<NextConfig>>(\n  nextConfig: T = {} as T\n): NextConfig & T => {\n  if (typeof nextConfig !== 'object') {\n    nextConfig = {} as T;\n  }\n\n  const intlayerConfig = getConfiguration();\n\n  // Format all configuration values as environment variables\n  const { mainDir, configDir, baseDir } = intlayerConfig.content;\n\n  const dictionariesPath = join(mainDir, 'dictionaries.mjs');\n  const relativeDictionariesPath = relative(baseDir, dictionariesPath);\n\n  const configurationPath = join(configDir, 'configuration.json');\n  const relativeConfigurationPath = relative(baseDir, configurationPath);\n\n  // Only provide turbo-specific config if user explicitly sets it\n  const turboConfig = isTurbopackEnabled\n    ? {\n        turbo: {\n          ...(nextConfig.experimental?.turbo ?? {}),\n          resolveAlias: {\n            ...(nextConfig.experimental?.turbo?.resolveAlias ?? {}),\n            '@intlayer/dictionaries-entry': relativeDictionariesPath,\n            '@intlayer/config/built': relativeConfigurationPath,\n          },\n          rules: {\n            '*.node': {\n              as: '*.node',\n              loaders: ['node-loader'],\n            },\n          },\n        },\n      }\n    : {};\n\n  const newConfig: Partial<NextConfig> = {\n    // Only add `serverExternalPackages` if Next.js is v15+\n    ...(!nextMajorVersion || nextMajorVersion >= 15\n      ? {\n          serverExternalPackages: [\n            ...(nextConfig.serverExternalPackages ?? []),\n            'esbuild',\n            'module',\n            'fs',\n            'chokidar',\n            'fsevents',\n          ],\n        }\n      : {}),\n\n    experimental: {\n      ...(nextConfig.experimental ?? {}),\n      ...turboConfig,\n    },\n\n    webpack: (config: WebpackParams['0'], options: WebpackParams[1]) => {\n      // If the user has defined their own webpack config, call it\n      if (typeof nextConfig.webpack === 'function') {\n        config = nextConfig.webpack(config, options);\n      }\n\n      // Alias the dictionary entry for all builds\n      config.resolve.alias = {\n        ...(config.resolve.alias ?? {}),\n        '@intlayer/dictionaries-entry': resolve(relativeDictionariesPath),\n        '@intlayer/config/built': resolve(relativeConfigurationPath),\n      };\n\n      // Mark these modules as externals\n      config.externals.push({\n        esbuild: 'esbuild',\n        module: 'module',\n        fs: 'fs',\n        chokidar: 'chokidar',\n        fsevents: 'fsevents',\n      });\n\n      // Use `node-loader` for any `.node` files\n      config.module.rules.push({\n        test: /\\.node$/,\n        loader: 'node-loader',\n      });\n\n      // Only add Intlayer plugin on server side (node runtime)\n      const { isServer, nextRuntime } = options;\n\n      if (isServer && nextRuntime === 'nodejs') {\n        config.plugins.push(new IntlayerPlugin());\n      }\n\n      return config;\n    },\n  };\n\n  // Merge the new config with the user's config\n  return { ...nextConfig, ...newConfig };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAwC;AACxC,oBAIO;AACP,qBAA+B;AAG/B,gBAA6B;AAE7B,MAAM,iBAAiB,MAAM;AAC3B,MAAI;AACF,UAAM,iBAAiB,6BAAe,QAAQ,mBAAmB;AAEjE,UAAM,UAAU,KAAK,UAAM,wBAAa,gBAAgB,OAAO,CAAC;AAEhE,WAAO,SAAS,QAAQ,QAAQ,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;AAAA,EACnD,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;AAEA,MAAM,mBAAmB,eAAe;AAGxC,MAAM,qBACJ,QAAQ,IAAI,sBAAsB,SAAS,SAAS;AAe/C,MAAM,eAAe,CAC1B,aAAgB,CAAC,MACE;AACnB,MAAI,OAAO,eAAe,UAAU;AAClC,iBAAa,CAAC;AAAA,EAChB;AAEA,QAAM,qBAAiB,gCAAiB;AAGxC,QAAM,EAAE,SAAS,WAAW,QAAQ,IAAI,eAAe;AAEvD,QAAM,uBAAmB,kBAAK,SAAS,kBAAkB;AACzD,QAAM,+BAA2B,sBAAS,SAAS,gBAAgB;AAEnE,QAAM,wBAAoB,kBAAK,WAAW,oBAAoB;AAC9D,QAAM,gCAA4B,sBAAS,SAAS,iBAAiB;AAGrE,QAAM,cAAc,qBAChB;AAAA,IACE,OAAO;AAAA,MACL,GAAI,WAAW,cAAc,SAAS,CAAC;AAAA,MACvC,cAAc;AAAA,QACZ,GAAI,WAAW,cAAc,OAAO,gBAAgB,CAAC;AAAA,QACrD,gCAAgC;AAAA,QAChC,0BAA0B;AAAA,MAC5B;AAAA,MACA,OAAO;AAAA,QACL,UAAU;AAAA,UACR,IAAI;AAAA,UACJ,SAAS,CAAC,aAAa;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,EACF,IACA,CAAC;AAEL,QAAM,YAAiC;AAAA;AAAA,IAErC,GAAI,CAAC,oBAAoB,oBAAoB,KACzC;AAAA,MACE,wBAAwB;AAAA,QACtB,GAAI,WAAW,0BAA0B,CAAC;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,IACA,CAAC;AAAA,IAEL,cAAc;AAAA,MACZ,GAAI,WAAW,gBAAgB,CAAC;AAAA,MAChC,GAAG;AAAA,IACL;AAAA,IAEA,SAAS,CAAC,QAA4B,YAA8B;AAElE,UAAI,OAAO,WAAW,YAAY,YAAY;AAC5C,iBAAS,WAAW,QAAQ,QAAQ,OAAO;AAAA,MAC7C;AAGA,aAAO,QAAQ,QAAQ;AAAA,QACrB,GAAI,OAAO,QAAQ,SAAS,CAAC;AAAA,QAC7B,oCAAgC,qBAAQ,wBAAwB;AAAA,QAChE,8BAA0B,qBAAQ,yBAAyB;AAAA,MAC7D;AAGA,aAAO,UAAU,KAAK;AAAA,QACpB,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,UAAU;AAAA,MACZ,CAAC;AAGD,aAAO,OAAO,MAAM,KAAK;AAAA,QACvB,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,CAAC;AAGD,YAAM,EAAE,UAAU,YAAY,IAAI;AAElC,UAAI,YAAY,gBAAgB,UAAU;AACxC,eAAO,QAAQ,KAAK,IAAI,8BAAe,CAAC;AAAA,MAC1C;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AAGA,SAAO,EAAE,GAAG,YAAY,GAAG,UAAU;AACvC;","names":[]}