{"version":3,"file":"intlayerCracoPlugin.cjs","names":["IntlayerPlugin"],"sources":["../../src/intlayerCracoPlugin.ts"],"sourcesContent":["import { join } from 'node:path';\nimport type {\n  CracoConfig,\n  CracoConfigOverride,\n  CracoPlugin,\n  WebpackConfigOverride,\n} from '@craco/types';\nimport { getConfiguration } from '@intlayer/config/node';\nimport { getAlias } from '@intlayer/config/utils';\nimport { IntlayerPlugin } from '@intlayer/webpack';\nimport { defu } from 'defu';\nimport type { Configuration as WebpackConfig } from 'webpack';\n\n// Get Intlayer configuration\nconst intlayerConfig = getConfiguration();\n\nconst alias = getAlias({\n  configuration: intlayerConfig,\n  formatter: (value: string) => join(process.cwd(), value),\n});\n\n/**\n * Override the final CRA Webpack config.\n * We explicitely type the return as WebpackConfig to solve TS2742.\n */\nexport const overrideWebpackConfig = ({\n  webpackConfig,\n}: WebpackConfigOverride): WebpackConfig => {\n  // 1) Remove `module`, `fs`, `path`, `vm` from externals.\n  if (typeof webpackConfig.externals === 'object') {\n    webpackConfig.externals = {\n      ...webpackConfig.externals,\n      esbuild: 'esbuild',\n    };\n  }\n\n  // 2) Properly push node-loader rule\n  webpackConfig.module?.rules?.push({\n    test: /\\.node$/,\n    use: 'node-loader',\n  });\n\n  // We cast here to satisfy the internal function return type if there are minor discrepancies\n  return webpackConfig as 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  defu(\n    {\n      webpack: {\n        plugins: {\n          // defu overwrites arrays by default, so we manually preserve existing plugins\n          add: [\n            ...(cracoConfig.webpack?.plugins?.add ?? []),\n            new IntlayerPlugin(intlayerConfig),\n          ],\n        },\n        // Automatically merges deeply with existing aliases\n        alias,\n      },\n    },\n    cracoConfig\n  ) as CracoConfig;\n\n/**\n * A CRACO plugin that adds the Intlayer configuration to the webpack configuration\n * and sets the environment variables.\n */\nexport const intlayerCracoPlugin: CracoPlugin = {\n  overrideCracoConfig,\n  // We cast to `any` here to bypass the strict version mismatch between\n  // the 'webpack' package installed in your node_modules and the one expected by '@craco/types'\n  overrideWebpackConfig: overrideWebpackConfig as any,\n};\n"],"mappings":";;;;;;;;AAcA,MAAM,6DAAkC;AAExC,MAAM,6CAAiB;CACrB,eAAe;CACf,YAAY,8BAAuB,QAAQ,IAAI,GAAG,KAAK;AACzD,CAAC;;;;;AAMD,MAAa,yBAAyB,EACpC,oBAC0C;CAE1C,IAAI,OAAO,cAAc,cAAc,UACrC,cAAc,YAAY;EACxB,GAAG,cAAc;EACjB,SAAS;CACX;CAIF,cAAc,QAAQ,OAAO,KAAK;EAChC,MAAM;EACN,KAAK;CACP,CAAC;CAGD,OAAO;AACT;;;;AAKA,MAAa,uBAAuB,EAClC,iCAGE,EACE,SAAS;CACP,SAAS,EAEP,KAAK,CACH,GAAI,YAAY,SAAS,SAAS,OAAO,CAAC,GAC1C,IAAIA,iCAAe,cAAc,CACnC,EACF;CAEA;AACF,EACF,GACA,WACF;;;;;AAMF,MAAa,sBAAmC;CAC9C;CAGuB;AACzB"}