{"version":3,"sources":["../../src/intlayerCracoPlugin.ts"],"sourcesContent":["// craco-intlayer-plugin.ts\n\n// @ts-nocheck\n\nimport type {\n  CracoConfig,\n  CracoConfigOverride,\n  CracoPlugin,\n  WebpackConfigOverride,\n} from '@craco/types';\nimport { ESMxCJSRequire, getConfiguration } from '@intlayer/config';\nimport { IntlayerPlugin as IntlayerWebpackPlugin } from '@intlayer/webpack';\nimport { join, relative, resolve } from 'path';\nimport type { Configuration as WebpackConfig } from 'webpack';\n\n// Get Intlayer configuration\nconst intlayerConfig = getConfiguration();\n\n/**\n * Override the final CRA Webpack config.\n */\nexport const overrideWebpackConfig = ({\n  webpackConfig,\n}: WebpackConfigOverride): WebpackConfig => {\n  // 1) Remove `module`, `fs`, `path`, `vm` from externals. In CRA, you usually\n  //    want these to be bundled (or set to fallbacks).\n  webpackConfig.externals = {\n    ...(typeof webpackConfig.externals === 'object'\n      ? webpackConfig.externals\n      : {}),\n    esbuild: 'esbuild', // keep only esbuild external\n  };\n  delete webpackConfig.externals.module;\n  delete webpackConfig.externals.fs;\n  delete webpackConfig.externals.path;\n  delete webpackConfig.externals.vm;\n\n  // 2) Properly push node-loader rule instead of overwriting.\n  webpackConfig.module.rules.push({\n    test: /\\.node$/,\n    use: 'node-loader',\n  });\n\n  return webpackConfig;\n};\n\n/**\n * Override the CRACO config itself to set up aliases, fallbacks, and plugins.\n */\nexport const overrideCracoConfig = ({\n  cracoConfig,\n}: CracoConfigOverride): CracoConfig => {\n  const { mainDir, baseDir, configDir } = intlayerConfig.content;\n\n  const dictionariesPath = join(mainDir, 'dictionaries.mjs');\n  const relativeDictionariesPath = relative(baseDir, dictionariesPath);\n\n  const unmergedDictionariesPath = join(mainDir, 'unmerged_dictionaries.mjs');\n  const relativeUnmergedDictionariesPath = relative(\n    baseDir,\n    unmergedDictionariesPath\n  );\n\n  const configurationPath = join(configDir, 'configuration.json');\n  const relativeConfigurationPath = relative(baseDir, configurationPath);\n\n  return {\n    ...cracoConfig,\n    webpack: {\n      ...cracoConfig.webpack,\n      plugins: {\n        ...cracoConfig.webpack?.plugins,\n        // Ensure we actually add IntlayerWebpackPlugin\n        add: [\n          ...(cracoConfig.webpack?.plugins?.add ?? []),\n          new IntlayerWebpackPlugin(),\n        ],\n      },\n      configure: {\n        ...(cracoConfig.webpack?.configure ?? {}),\n        resolve: {\n          ...(cracoConfig.webpack?.configure?.resolve ?? {}),\n          // 3) Provide browser fallbacks so these modules won’t error out in the browser.\n          fallback: {\n            ...(cracoConfig.webpack?.configure?.resolve?.fallback ?? {}),\n            process: ESMxCJSRequire.resolve('process/browser'),\n            fs: false,\n            module: false,\n            path: false,\n            vm: false,\n          },\n        },\n      },\n      // 4) Alias @intlayer/dictionaries-entry so it no longer tries to use the ESM that depends on `fs`, etc.\n      alias: {\n        ...cracoConfig.webpack?.alias,\n        '@intlayer/dictionaries-entry': resolve(relativeDictionariesPath),\n        '@intlayer/unmerged-dictionaries-entry': resolve(\n          relativeUnmergedDictionariesPath\n        ),\n        '@intlayer/config/built': resolve(relativeConfigurationPath),\n      },\n    },\n  };\n};\n\n/**\n * A CRACO plugin that adds the Intlayer configuration to the webpack configuration and sets the environment variables.\n *\n * Usage:\n *\n * ```ts\n * const cracoConfig: CracoConfig = {\n *  plugins: [\n *   {\n *    plugin: intlayerCracoPlugin,\n *   },\n *  ],\n * };\n *\n * export default cracoConfig;\n * ```\n */\nexport const intlayerCracoPlugin: CracoPlugin = {\n  overrideCracoConfig,\n  overrideWebpackConfig,\n};\n"],"mappings":";AAUA,SAAS,gBAAgB,wBAAwB;AACjD,SAAS,kBAAkB,6BAA6B;AACxD,SAAS,MAAM,UAAU,eAAe;AAIxC,MAAM,iBAAiB,iBAAiB;AAKjC,MAAM,wBAAwB,CAAC;AAAA,EACpC;AACF,MAA4C;AAG1C,gBAAc,YAAY;AAAA,IACxB,GAAI,OAAO,cAAc,cAAc,WACnC,cAAc,YACd,CAAC;AAAA,IACL,SAAS;AAAA;AAAA,EACX;AACA,SAAO,cAAc,UAAU;AAC/B,SAAO,cAAc,UAAU;AAC/B,SAAO,cAAc,UAAU;AAC/B,SAAO,cAAc,UAAU;AAG/B,gBAAc,OAAO,MAAM,KAAK;AAAA,IAC9B,MAAM;AAAA,IACN,KAAK;AAAA,EACP,CAAC;AAED,SAAO;AACT;AAKO,MAAM,sBAAsB,CAAC;AAAA,EAClC;AACF,MAAwC;AACtC,QAAM,EAAE,SAAS,SAAS,UAAU,IAAI,eAAe;AAEvD,QAAM,mBAAmB,KAAK,SAAS,kBAAkB;AACzD,QAAM,2BAA2B,SAAS,SAAS,gBAAgB;AAEnE,QAAM,2BAA2B,KAAK,SAAS,2BAA2B;AAC1E,QAAM,mCAAmC;AAAA,IACvC;AAAA,IACA;AAAA,EACF;AAEA,QAAM,oBAAoB,KAAK,WAAW,oBAAoB;AAC9D,QAAM,4BAA4B,SAAS,SAAS,iBAAiB;AAErE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,MACP,GAAG,YAAY;AAAA,MACf,SAAS;AAAA,QACP,GAAG,YAAY,SAAS;AAAA;AAAA,QAExB,KAAK;AAAA,UACH,GAAI,YAAY,SAAS,SAAS,OAAO,CAAC;AAAA,UAC1C,IAAI,sBAAsB;AAAA,QAC5B;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,GAAI,YAAY,SAAS,aAAa,CAAC;AAAA,QACvC,SAAS;AAAA,UACP,GAAI,YAAY,SAAS,WAAW,WAAW,CAAC;AAAA;AAAA,UAEhD,UAAU;AAAA,YACR,GAAI,YAAY,SAAS,WAAW,SAAS,YAAY,CAAC;AAAA,YAC1D,SAAS,eAAe,QAAQ,iBAAiB;AAAA,YACjD,IAAI;AAAA,YACJ,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,IAAI;AAAA,UACN;AAAA,QACF;AAAA,MACF;AAAA;AAAA,MAEA,OAAO;AAAA,QACL,GAAG,YAAY,SAAS;AAAA,QACxB,gCAAgC,QAAQ,wBAAwB;AAAA,QAChE,yCAAyC;AAAA,UACvC;AAAA,QACF;AAAA,QACA,0BAA0B,QAAQ,yBAAyB;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AACF;AAmBO,MAAM,sBAAmC;AAAA,EAC9C;AAAA,EACA;AACF;","names":[]}