{"version":3,"sources":["../../../../src/build/babel/loader/get-config.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport { inspect } from 'node:util'\nimport JSON5 from 'next/dist/compiled/json5'\n\nimport { createConfigItem, loadOptions } from 'next/dist/compiled/babel/core'\nimport loadFullConfig from 'next/dist/compiled/babel/core-lib-config'\n\nimport type {\n NextBabelLoaderOptionDefaultPresets,\n NextBabelLoaderOptions,\n NextJsLoaderContext,\n} from './types'\nimport {\n consumeIterator,\n type SourceMap,\n type BabelLoaderTransformOptions,\n} from './util'\nimport * as Log from '../../output/log'\nimport { isReactCompilerRequired } from '../../swc'\n\n/**\n * An internal (non-exported) type used by babel.\n */\nexport type ResolvedBabelConfig = {\n options: BabelLoaderTransformOptions\n passes: BabelPluginPasses\n externalDependencies: ReadonlyArray\n}\n\nexport type BabelPlugin = unknown\nexport type BabelPluginPassList = ReadonlyArray\nexport type BabelPluginPasses = ReadonlyArray\n\nconst nextDistPath =\n /(next[\\\\/]dist[\\\\/]shared[\\\\/]lib)|(next[\\\\/]dist[\\\\/]client)|(next[\\\\/]dist[\\\\/]pages)/\n\n/**\n * The properties defined here are the conditions with which subsets of inputs\n * can be identified that are able to share a common Babel config. For example,\n * in dev mode, different transforms must be applied to a source file depending\n * on whether you're compiling for the client or for the server - thus `isServer`\n * is germane.\n *\n * However, these characteristics need not protect against circumstances that\n * will not be encountered in Next.js. For example, a source file may be\n * transformed differently depending on whether we're doing a production compile\n * or for HMR in dev mode. However, those two circumstances will never be\n * encountered within the context of a single V8 context (and, thus, shared\n * cache). Therefore, hasReactRefresh is _not_ germane to caching.\n *\n * NOTE: This approach does not support multiple `.babelrc` files in a\n * single project. A per-cache-key config will be generated once and,\n * if `.babelrc` is present, that config will be used for any subsequent\n * transformations.\n */\ninterface CharacteristicsGermaneToCaching {\n isStandalone: boolean\n isServer: boolean | undefined\n isPageFile: boolean | undefined\n isNextDist: boolean\n hasModuleExports: boolean\n hasReactCompiler: boolean\n fileExt: string\n configFilePath: string | undefined\n}\n\nfunction shouldSkipBabel(\n transformMode: 'standalone' | 'default',\n configFilePath: string | undefined,\n hasReactCompiler: boolean\n) {\n return (\n transformMode === 'standalone' &&\n configFilePath == null &&\n !hasReactCompiler\n )\n}\n\nconst fileExtensionRegex = /\\.([a-z]+)$/\nasync function getCacheCharacteristics(\n loaderOptions: NextBabelLoaderOptions,\n source: string,\n filename: string\n): Promise {\n let isStandalone, isServer, pagesDir\n switch (loaderOptions.transformMode) {\n case 'default':\n isStandalone = false\n isServer = loaderOptions.isServer\n pagesDir = loaderOptions.pagesDir\n break\n case 'standalone':\n isStandalone = true\n break\n default:\n throw new Error(\n `unsupported transformMode in loader options: ${inspect(loaderOptions)}`\n )\n }\n\n const isPageFile = pagesDir != null && filename.startsWith(pagesDir)\n const isNextDist = nextDistPath.test(filename)\n const hasModuleExports = source.indexOf('module.exports') !== -1\n const fileExt = fileExtensionRegex.exec(filename)?.[1] || 'unknown'\n\n let {\n reactCompilerPlugins,\n reactCompilerExclude,\n configFile: configFilePath,\n transformMode,\n } = loaderOptions\n\n // Compute `hasReactCompiler` as part of the cache characteristics / key,\n // rather than inside of `getFreshConfig`:\n // - `isReactCompilerRequired` depends on the file contents\n // - `node_modules` and `reactCompilerExclude` depend on the file path, which\n // isn't part of the cache characteristics\n let hasReactCompiler =\n reactCompilerPlugins != null &&\n reactCompilerPlugins.length !== 0 &&\n !loaderOptions.isServer &&\n !/[/\\\\]node_modules[/\\\\]/.test(filename) &&\n // Assumption: `reactCompilerExclude` is cheap because it should only\n // operate on the file path and *not* the file contents (it's sync)\n !reactCompilerExclude?.(filename)\n\n // `isReactCompilerRequired` is expensive to run (parses/visits with SWC), so\n // only run it if there's a good chance we might be able to skip calling Babel\n // entirely (speculatively call `shouldSkipBabel`).\n //\n // Otherwise, we can let react compiler handle this logic for us. It should\n // behave equivalently.\n if (\n hasReactCompiler &&\n shouldSkipBabel(transformMode, configFilePath, /*hasReactCompiler*/ false)\n ) {\n hasReactCompiler &&= await isReactCompilerRequired(filename)\n }\n\n return {\n isStandalone,\n isServer,\n isPageFile,\n isNextDist,\n hasModuleExports,\n hasReactCompiler,\n fileExt,\n configFilePath,\n }\n}\n\n/**\n * Return an array of Babel plugins, conditioned upon loader options and\n * source file characteristics.\n */\nfunction getPlugins(\n loaderOptions: NextBabelLoaderOptionDefaultPresets,\n cacheCharacteristics: CharacteristicsGermaneToCaching\n) {\n const { isServer, isPageFile, isNextDist, hasModuleExports } =\n cacheCharacteristics\n\n const { development, hasReactRefresh } = loaderOptions\n\n const applyCommonJsItem = hasModuleExports\n ? createConfigItem(\n require('../plugins/commonjs') as typeof import('../plugins/commonjs'),\n { type: 'plugin' }\n )\n : null\n const reactRefreshItem = hasReactRefresh\n ? createConfigItem(\n [\n require('next/dist/compiled/react-refresh/babel') as typeof import('next/dist/compiled/react-refresh/babel'),\n { skipEnvCheck: true },\n ],\n { type: 'plugin' }\n )\n : null\n const pageConfigItem =\n !isServer && isPageFile\n ? createConfigItem(\n [\n require('../plugins/next-page-config') as typeof import('../plugins/next-page-config'),\n ],\n {\n type: 'plugin',\n }\n )\n : null\n const disallowExportAllItem =\n !isServer && isPageFile\n ? createConfigItem(\n [\n require('../plugins/next-page-disallow-re-export-all-exports') as typeof import('../plugins/next-page-disallow-re-export-all-exports'),\n ],\n { type: 'plugin' }\n )\n : null\n const transformDefineItem = createConfigItem(\n [\n require.resolve('next/dist/compiled/babel/plugin-transform-define'),\n {\n 'process.env.NODE_ENV': development ? 'development' : 'production',\n 'typeof window': isServer ? 'undefined' : 'object',\n 'process.browser': isServer ? false : true,\n },\n 'next-js-transform-define-instance',\n ],\n { type: 'plugin' }\n )\n const nextSsgItem =\n !isServer && isPageFile\n ? createConfigItem([require.resolve('../plugins/next-ssg-transform')], {\n type: 'plugin',\n })\n : null\n const commonJsItem = isNextDist\n ? createConfigItem(\n require('next/dist/compiled/babel/plugin-transform-modules-commonjs') as typeof import('next/dist/compiled/babel/plugin-transform-modules-commonjs'),\n { type: 'plugin' }\n )\n : null\n const nextFontUnsupported = createConfigItem(\n [\n require('../plugins/next-font-unsupported') as typeof import('../plugins/next-font-unsupported'),\n ],\n { type: 'plugin' }\n )\n\n return [\n reactRefreshItem,\n pageConfigItem,\n disallowExportAllItem,\n applyCommonJsItem,\n transformDefineItem,\n nextSsgItem,\n commonJsItem,\n nextFontUnsupported,\n ].filter(Boolean)\n}\n\nconst isJsonFile = /\\.(json|babelrc)$/\nconst isJsFile = /\\.js$/\n\n/**\n * While this function does block execution while reading from disk, it\n * should not introduce any issues. The function is only invoked when\n * generating a fresh config, and only a small handful of configs should\n * be generated during compilation.\n */\nfunction getCustomBabelConfig(configFilePath: string) {\n if (isJsonFile.exec(configFilePath)) {\n const babelConfigRaw = readFileSync(configFilePath, 'utf8')\n return JSON5.parse(babelConfigRaw)\n } else if (isJsFile.exec(configFilePath)) {\n return require(configFilePath)\n }\n throw new Error(\n 'The Next.js Babel loader does not support .mjs or .cjs config files.'\n )\n}\n\nlet babelConfigWarned = false\n/**\n * Check if custom babel configuration from user only contains options that\n * can be migrated into latest Next.js features supported by SWC.\n *\n * This raises soft warning messages only, not making any errors yet.\n */\nfunction checkCustomBabelConfigDeprecation(\n config: Record | undefined\n) {\n if (!config || Object.keys(config).length === 0) {\n return\n }\n\n const { plugins, presets, ...otherOptions } = config\n if (Object.keys(otherOptions ?? {}).length > 0) {\n return\n }\n\n if (babelConfigWarned) {\n return\n }\n\n babelConfigWarned = true\n\n const isPresetReadyToDeprecate =\n !presets ||\n presets.length === 0 ||\n (presets.length === 1 && presets[0] === 'next/babel')\n const pluginReasons = []\n const unsupportedPlugins = []\n\n if (Array.isArray(plugins)) {\n for (const plugin of plugins) {\n const pluginName = Array.isArray(plugin) ? plugin[0] : plugin\n\n // [NOTE]: We cannot detect if the user uses babel-plugin-macro based transform plugins,\n // such as `styled-components/macro` in here.\n switch (pluginName) {\n case 'styled-components':\n case 'babel-plugin-styled-components':\n pluginReasons.push(\n `\\t- 'styled-components' can be enabled via 'compiler.styledComponents' in 'next.config.js'`\n )\n break\n case '@emotion/babel-plugin':\n pluginReasons.push(\n `\\t- '@emotion/babel-plugin' can be enabled via 'compiler.emotion' in 'next.config.js'`\n )\n break\n case 'babel-plugin-relay':\n pluginReasons.push(\n `\\t- 'babel-plugin-relay' can be enabled via 'compiler.relay' in 'next.config.js'`\n )\n break\n case 'react-remove-properties':\n pluginReasons.push(\n `\\t- 'react-remove-properties' can be enabled via 'compiler.reactRemoveProperties' in 'next.config.js'`\n )\n break\n case 'transform-remove-console':\n pluginReasons.push(\n `\\t- 'transform-remove-console' can be enabled via 'compiler.removeConsole' in 'next.config.js'`\n )\n break\n default:\n unsupportedPlugins.push(pluginName)\n break\n }\n }\n }\n\n if (isPresetReadyToDeprecate && unsupportedPlugins.length === 0) {\n Log.warn(\n `It looks like there is a custom Babel configuration that can be removed${\n pluginReasons.length > 0 ? ':' : '.'\n }`\n )\n\n if (pluginReasons.length > 0) {\n Log.warn(`Next.js supports the following features natively: `)\n Log.warn(pluginReasons.join(''))\n Log.warn(\n `For more details configuration options, please refer https://nextjs.org/docs/architecture/nextjs-compiler#supported-features`\n )\n }\n }\n}\n\n/**\n * Generate a new, flat Babel config, ready to be handed to Babel-traverse.\n * This config should have no unresolved overrides, presets, etc.\n *\n * The config returned by this function is cached, so the function should not\n * depend on file-specific configuration or configuration that could change\n * across invocations without a process restart.\n */\nasync function getFreshConfig(\n ctx: NextJsLoaderContext,\n cacheCharacteristics: CharacteristicsGermaneToCaching,\n loaderOptions: NextBabelLoaderOptions,\n target: string\n): Promise {\n const { transformMode } = loaderOptions\n const { hasReactCompiler, configFilePath, fileExt } = cacheCharacteristics\n\n let customConfig = configFilePath && getCustomBabelConfig(configFilePath)\n if (shouldSkipBabel(transformMode, configFilePath, hasReactCompiler)) {\n // Optimization: There's nothing useful to do, bail out and skip babel on\n // this file\n return null\n }\n\n checkCustomBabelConfigDeprecation(customConfig)\n\n // We can assume that `reactCompilerPlugins` does not change without a process\n // restart (it's safe to cache), as it's specified in the `next.config.js`,\n // which always causes a full restart of `next dev` if changed.\n const reactCompilerPluginsIfEnabled = hasReactCompiler\n ? (loaderOptions.reactCompilerPlugins ?? [])\n : []\n\n let isServer, pagesDir, srcDir, development\n if (transformMode === 'default') {\n isServer = loaderOptions.isServer\n pagesDir = loaderOptions.pagesDir\n srcDir = loaderOptions.srcDir\n development = loaderOptions.development\n }\n\n let options: BabelLoaderTransformOptions = {\n babelrc: false,\n cloneInputAst: false,\n\n // Use placeholder file info. `updateBabelConfigWithFileDetails` will\n // replace this after caching.\n filename: `basename.${fileExt}`,\n inputSourceMap: undefined,\n sourceFileName: `basename.${fileExt}`,\n\n // Set the default sourcemap behavior based on Webpack's mapping flag,\n // but allow users to override if they want.\n sourceMaps:\n loaderOptions.sourceMaps === undefined\n ? ctx.sourceMap\n : loaderOptions.sourceMaps,\n }\n\n const baseCaller = {\n name: 'next-babel-turbo-loader',\n supportsStaticESM: true,\n supportsDynamicImport: true,\n\n // Provide plugins with insight into webpack target.\n // https://github.com/babel/babel-loader/issues/787\n target,\n\n // Webpack 5 supports TLA behind a flag. We enable it by default\n // for Babel, and then webpack will throw an error if the experimental\n // flag isn't enabled.\n supportsTopLevelAwait: true,\n\n isServer,\n srcDir,\n pagesDir,\n isDev: development,\n\n transformMode,\n\n ...loaderOptions.caller,\n }\n\n options.plugins = [\n ...(transformMode === 'default'\n ? getPlugins(loaderOptions, cacheCharacteristics)\n : []),\n ...reactCompilerPluginsIfEnabled,\n ...(customConfig?.plugins || []),\n ]\n\n // target can be provided in babelrc\n options.target = isServer ? undefined : customConfig?.target\n\n // env can be provided in babelrc\n options.env = customConfig?.env\n\n options.presets = (() => {\n // If presets is defined the user will have next/babel in their babelrc\n if (customConfig?.presets) {\n return customConfig.presets\n }\n\n // If presets is not defined the user will likely have \"env\" in their babelrc\n if (customConfig) {\n return undefined\n }\n\n // If no custom config is provided the default is to use next/babel\n return ['next/babel']\n })()\n\n options.overrides = loaderOptions.overrides\n\n options.caller = {\n ...baseCaller,\n hasJsxRuntime:\n transformMode === 'default' ? loaderOptions.hasJsxRuntime : undefined,\n }\n\n // Babel does strict checks on the config so undefined is not allowed\n if (typeof options.target === 'undefined') {\n delete options.target\n }\n\n Object.defineProperty(options.caller, 'onWarning', {\n enumerable: false,\n writable: false,\n value: (reason: any) => {\n if (!(reason instanceof Error)) {\n reason = new Error(reason)\n }\n ctx.emitWarning(reason)\n },\n })\n\n const loadedOptions = loadOptions(options)\n const config = consumeIterator(loadFullConfig(loadedOptions))\n\n return config\n}\n\n/**\n * Each key returned here corresponds with a Babel config that can be shared.\n * The conditions of permissible sharing between files is dependent on specific\n * file attributes and Next.js compiler states: `CharacteristicsGermaneToCaching`.\n */\nfunction getCacheKey(cacheCharacteristics: CharacteristicsGermaneToCaching) {\n const {\n isStandalone,\n isServer,\n isPageFile,\n isNextDist,\n hasModuleExports,\n hasReactCompiler,\n fileExt,\n configFilePath,\n } = cacheCharacteristics\n\n const flags =\n 0 |\n (isStandalone ? 0b000001 : 0) |\n (isServer ? 0b000010 : 0) |\n (isPageFile ? 0b000100 : 0) |\n (isNextDist ? 0b001000 : 0) |\n (hasModuleExports ? 0b010000 : 0) |\n (hasReactCompiler ? 0b100000 : 0)\n\n // separate strings with null bytes, assuming null bytes are not valid in file\n // paths\n return `${configFilePath || ''}\\x00${fileExt}\\x00${flags}`\n}\n\nconst configCache: Map = new Map()\nconst configFiles: Set = new Set()\n\n/**\n * Applies file-specific values to a potentially-cached configuration object.\n */\nfunction updateBabelConfigWithFileDetails(\n cachedConfig: ResolvedBabelConfig | null | undefined,\n loaderOptions: NextBabelLoaderOptions,\n filename: string,\n inputSourceMap: SourceMap | undefined\n): ResolvedBabelConfig | null {\n if (cachedConfig == null) {\n return null\n }\n return {\n ...cachedConfig,\n options: {\n ...cachedConfig.options,\n cwd: loaderOptions.cwd,\n root: loaderOptions.cwd,\n filename,\n inputSourceMap,\n // Ensure that Webpack will get a full absolute path in the sourcemap\n // so that it can properly map the module back to its internal cached\n // modules.\n sourceFileName: filename,\n },\n }\n}\n\nexport default async function getConfig(\n ctx: NextJsLoaderContext,\n {\n source,\n target,\n loaderOptions,\n filename,\n inputSourceMap,\n }: {\n source: string\n loaderOptions: NextBabelLoaderOptions\n target: string\n filename: string\n inputSourceMap?: SourceMap | undefined\n }\n): Promise {\n const cacheCharacteristics = await getCacheCharacteristics(\n loaderOptions,\n source,\n filename\n )\n\n if (loaderOptions.configFile) {\n // Ensures webpack invalidates the cache for this loader when the config file changes\n ctx.addDependency(loaderOptions.configFile)\n }\n\n const cacheKey = getCacheKey(cacheCharacteristics)\n const cachedConfig = configCache.get(cacheKey)\n if (cachedConfig !== undefined) {\n return updateBabelConfigWithFileDetails(\n cachedConfig,\n loaderOptions,\n filename,\n inputSourceMap\n )\n }\n\n if (loaderOptions.configFile && !configFiles.has(loaderOptions.configFile)) {\n configFiles.add(loaderOptions.configFile)\n Log.info(\n `Using external babel configuration from ${loaderOptions.configFile}`\n )\n }\n\n const freshConfig = await getFreshConfig(\n ctx,\n cacheCharacteristics,\n loaderOptions,\n target\n )\n\n configCache.set(cacheKey, freshConfig)\n\n return updateBabelConfigWithFileDetails(\n freshConfig,\n loaderOptions,\n filename,\n inputSourceMap\n )\n}\n"],"names":["readFileSync","inspect","JSON5","createConfigItem","loadOptions","loadFullConfig","consumeIterator","Log","isReactCompilerRequired","nextDistPath","shouldSkipBabel","transformMode","configFilePath","hasReactCompiler","fileExtensionRegex","getCacheCharacteristics","loaderOptions","source","filename","isStandalone","isServer","pagesDir","Error","isPageFile","startsWith","isNextDist","test","hasModuleExports","indexOf","fileExt","exec","reactCompilerPlugins","reactCompilerExclude","configFile","length","getPlugins","cacheCharacteristics","development","hasReactRefresh","applyCommonJsItem","require","type","reactRefreshItem","skipEnvCheck","pageConfigItem","disallowExportAllItem","transformDefineItem","resolve","nextSsgItem","commonJsItem","nextFontUnsupported","filter","Boolean","isJsonFile","isJsFile","getCustomBabelConfig","babelConfigRaw","parse","babelConfigWarned","checkCustomBabelConfigDeprecation","config","Object","keys","plugins","presets","otherOptions","isPresetReadyToDeprecate","pluginReasons","unsupportedPlugins","Array","isArray","plugin","pluginName","push","warn","join","getFreshConfig","ctx","target","customConfig","reactCompilerPluginsIfEnabled","srcDir","options","babelrc","cloneInputAst","inputSourceMap","undefined","sourceFileName","sourceMaps","sourceMap","baseCaller","name","supportsStaticESM","supportsDynamicImport","supportsTopLevelAwait","isDev","caller","env","overrides","hasJsxRuntime","defineProperty","enumerable","writable","value","reason","emitWarning","loadedOptions","getCacheKey","flags","configCache","Map","configFiles","Set","updateBabelConfigWithFileDetails","cachedConfig","cwd","root","getConfig","addDependency","cacheKey","get","has","add","info","freshConfig","set"],"mappings":"AAAA,SAASA,YAAY,QAAQ,UAAS;AACtC,SAASC,OAAO,QAAQ,YAAW;AACnC,OAAOC,WAAW,2BAA0B;AAE5C,SAASC,gBAAgB,EAAEC,WAAW,QAAQ,gCAA+B;AAC7E,OAAOC,oBAAoB,2CAA0C;AAOrE,SACEC,eAAe,QAGV,SAAQ;AACf,YAAYC,SAAS,mBAAkB;AACvC,SAASC,uBAAuB,QAAQ,YAAW;AAenD,MAAMC,eACJ;AAgCF,SAASC,gBACPC,aAAuC,EACvCC,cAAkC,EAClCC,gBAAyB;IAEzB,OACEF,kBAAkB,gBAClBC,kBAAkB,QAClB,CAACC;AAEL;AAEA,MAAMC,qBAAqB;AAC3B,eAAeC,wBACbC,aAAqC,EACrCC,MAAc,EACdC,QAAgB;QAqBAJ;IAnBhB,IAAIK,cAAcC,UAAUC;IAC5B,OAAQL,cAAcL,aAAa;QACjC,KAAK;YACHQ,eAAe;YACfC,WAAWJ,cAAcI,QAAQ;YACjCC,WAAWL,cAAcK,QAAQ;YACjC;QACF,KAAK;YACHF,eAAe;YACf;QACF;YACE,MAAM,qBAEL,CAFK,IAAIG,MACR,CAAC,6CAA6C,EAAErB,QAAQe,gBAAgB,GADpE,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;IACJ;IAEA,MAAMO,aAAaF,YAAY,QAAQH,SAASM,UAAU,CAACH;IAC3D,MAAMI,aAAahB,aAAaiB,IAAI,CAACR;IACrC,MAAMS,mBAAmBV,OAAOW,OAAO,CAAC,sBAAsB,CAAC;IAC/D,MAAMC,UAAUf,EAAAA,2BAAAA,mBAAmBgB,IAAI,CAACZ,8BAAxBJ,wBAAmC,CAAC,EAAE,KAAI;IAE1D,IAAI,EACFiB,oBAAoB,EACpBC,oBAAoB,EACpBC,YAAYrB,cAAc,EAC1BD,aAAa,EACd,GAAGK;IAEJ,yEAAyE;IACzE,0CAA0C;IAC1C,2DAA2D;IAC3D,6EAA6E;IAC7E,4CAA4C;IAC5C,IAAIH,mBACFkB,wBAAwB,QACxBA,qBAAqBG,MAAM,KAAK,KAChC,CAAClB,cAAcI,QAAQ,IACvB,CAAC,yBAAyBM,IAAI,CAACR,aAC/B,qEAAqE;IACrE,mEAAmE;IACnE,EAACc,wCAAAA,qBAAuBd;IAE1B,6EAA6E;IAC7E,8EAA8E;IAC9E,mDAAmD;IACnD,EAAE;IACF,2EAA2E;IAC3E,uBAAuB;IACvB,IACEL,oBACAH,gBAAgBC,eAAeC,gBAAgB,kBAAkB,GAAG,QACpE;QACAC,qBAAqB,MAAML,wBAAwBU;IACrD;IAEA,OAAO;QACLC;QACAC;QACAG;QACAE;QACAE;QACAd;QACAgB;QACAjB;IACF;AACF;AAEA;;;CAGC,GACD,SAASuB,WACPnB,aAAkD,EAClDoB,oBAAqD;IAErD,MAAM,EAAEhB,QAAQ,EAAEG,UAAU,EAAEE,UAAU,EAAEE,gBAAgB,EAAE,GAC1DS;IAEF,MAAM,EAAEC,WAAW,EAAEC,eAAe,EAAE,GAAGtB;IAEzC,MAAMuB,oBAAoBZ,mBACtBxB,iBACEqC,QAAQ,wBACR;QAAEC,MAAM;IAAS,KAEnB;IACJ,MAAMC,mBAAmBJ,kBACrBnC,iBACE;QACEqC,QAAQ;QACR;YAAEG,cAAc;QAAK;KACtB,EACD;QAAEF,MAAM;IAAS,KAEnB;IACJ,MAAMG,iBACJ,CAACxB,YAAYG,aACTpB,iBACE;QACEqC,QAAQ;KACT,EACD;QACEC,MAAM;IACR,KAEF;IACN,MAAMI,wBACJ,CAACzB,YAAYG,aACTpB,iBACE;QACEqC,QAAQ;KACT,EACD;QAAEC,MAAM;IAAS,KAEnB;IACN,MAAMK,sBAAsB3C,iBAC1B;QACEqC,QAAQO,OAAO,CAAC;QAChB;YACE,wBAAwBV,cAAc,gBAAgB;YACtD,iBAAiBjB,WAAW,cAAc;YAC1C,mBAAmBA,WAAW,QAAQ;QACxC;QACA;KACD,EACD;QAAEqB,MAAM;IAAS;IAEnB,MAAMO,cACJ,CAAC5B,YAAYG,aACTpB,iBAAiB;QAACqC,QAAQO,OAAO,CAAC;KAAiC,EAAE;QACnEN,MAAM;IACR,KACA;IACN,MAAMQ,eAAexB,aACjBtB,iBACEqC,QAAQ,+DACR;QAAEC,MAAM;IAAS,KAEnB;IACJ,MAAMS,sBAAsB/C,iBAC1B;QACEqC,QAAQ;KACT,EACD;QAAEC,MAAM;IAAS;IAGnB,OAAO;QACLC;QACAE;QACAC;QACAN;QACAO;QACAE;QACAC;QACAC;KACD,CAACC,MAAM,CAACC;AACX;AAEA,MAAMC,aAAa;AACnB,MAAMC,WAAW;AAEjB;;;;;CAKC,GACD,SAASC,qBAAqB3C,cAAsB;IAClD,IAAIyC,WAAWvB,IAAI,CAAClB,iBAAiB;QACnC,MAAM4C,iBAAiBxD,aAAaY,gBAAgB;QACpD,OAAOV,MAAMuD,KAAK,CAACD;IACrB,OAAO,IAAIF,SAASxB,IAAI,CAAClB,iBAAiB;QACxC,OAAO4B,QAAQ5B;IACjB;IACA,MAAM,qBAEL,CAFK,IAAIU,MACR,yEADI,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF;AAEA,IAAIoC,oBAAoB;AACxB;;;;;CAKC,GACD,SAASC,kCACPC,MAAuC;IAEvC,IAAI,CAACA,UAAUC,OAAOC,IAAI,CAACF,QAAQ1B,MAAM,KAAK,GAAG;QAC/C;IACF;IAEA,MAAM,EAAE6B,OAAO,EAAEC,OAAO,EAAE,GAAGC,cAAc,GAAGL;IAC9C,IAAIC,OAAOC,IAAI,CAACG,gBAAgB,CAAC,GAAG/B,MAAM,GAAG,GAAG;QAC9C;IACF;IAEA,IAAIwB,mBAAmB;QACrB;IACF;IAEAA,oBAAoB;IAEpB,MAAMQ,2BACJ,CAACF,WACDA,QAAQ9B,MAAM,KAAK,KAClB8B,QAAQ9B,MAAM,KAAK,KAAK8B,OAAO,CAAC,EAAE,KAAK;IAC1C,MAAMG,gBAAgB,EAAE;IACxB,MAAMC,qBAAqB,EAAE;IAE7B,IAAIC,MAAMC,OAAO,CAACP,UAAU;QAC1B,KAAK,MAAMQ,UAAUR,QAAS;YAC5B,MAAMS,aAAaH,MAAMC,OAAO,CAACC,UAAUA,MAAM,CAAC,EAAE,GAAGA;YAEvD,wFAAwF;YACxF,6CAA6C;YAC7C,OAAQC;gBACN,KAAK;gBACL,KAAK;oBACHL,cAAcM,IAAI,CAChB,CAAC,0FAA0F,CAAC;oBAE9F;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,qFAAqF,CAAC;oBAEzF;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,gFAAgF,CAAC;oBAEpF;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,qGAAqG,CAAC;oBAEzG;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,8FAA8F,CAAC;oBAElG;gBACF;oBACEL,mBAAmBK,IAAI,CAACD;oBACxB;YACJ;QACF;IACF;IAEA,IAAIN,4BAA4BE,mBAAmBlC,MAAM,KAAK,GAAG;QAC/D3B,IAAImE,IAAI,CACN,CAAC,uEAAuE,EACtEP,cAAcjC,MAAM,GAAG,IAAI,MAAM,KACjC;QAGJ,IAAIiC,cAAcjC,MAAM,GAAG,GAAG;YAC5B3B,IAAImE,IAAI,CAAC,CAAC,kDAAkD,CAAC;YAC7DnE,IAAImE,IAAI,CAACP,cAAcQ,IAAI,CAAC;YAC5BpE,IAAImE,IAAI,CACN,CAAC,4HAA4H,CAAC;QAElI;IACF;AACF;AAEA;;;;;;;CAOC,GACD,eAAeE,eACbC,GAAwB,EACxBzC,oBAAqD,EACrDpB,aAAqC,EACrC8D,MAAc;IAEd,MAAM,EAAEnE,aAAa,EAAE,GAAGK;IAC1B,MAAM,EAAEH,gBAAgB,EAAED,cAAc,EAAEiB,OAAO,EAAE,GAAGO;IAEtD,IAAI2C,eAAenE,kBAAkB2C,qBAAqB3C;IAC1D,IAAIF,gBAAgBC,eAAeC,gBAAgBC,mBAAmB;QACpE,yEAAyE;QACzE,YAAY;QACZ,OAAO;IACT;IAEA8C,kCAAkCoB;IAElC,8EAA8E;IAC9E,2EAA2E;IAC3E,+DAA+D;IAC/D,MAAMC,gCAAgCnE,mBACjCG,cAAce,oBAAoB,IAAI,EAAE,GACzC,EAAE;IAEN,IAAIX,UAAUC,UAAU4D,QAAQ5C;IAChC,IAAI1B,kBAAkB,WAAW;QAC/BS,WAAWJ,cAAcI,QAAQ;QACjCC,WAAWL,cAAcK,QAAQ;QACjC4D,SAASjE,cAAciE,MAAM;QAC7B5C,cAAcrB,cAAcqB,WAAW;IACzC;IAEA,IAAI6C,UAAuC;QACzCC,SAAS;QACTC,eAAe;QAEf,qEAAqE;QACrE,8BAA8B;QAC9BlE,UAAU,CAAC,SAAS,EAAEW,SAAS;QAC/BwD,gBAAgBC;QAChBC,gBAAgB,CAAC,SAAS,EAAE1D,SAAS;QAErC,sEAAsE;QACtE,4CAA4C;QAC5C2D,YACExE,cAAcwE,UAAU,KAAKF,YACzBT,IAAIY,SAAS,GACbzE,cAAcwE,UAAU;IAChC;IAEA,MAAME,aAAa;QACjBC,MAAM;QACNC,mBAAmB;QACnBC,uBAAuB;QAEvB,oDAAoD;QACpD,mDAAmD;QACnDf;QAEA,gEAAgE;QAChE,sEAAsE;QACtE,sBAAsB;QACtBgB,uBAAuB;QAEvB1E;QACA6D;QACA5D;QACA0E,OAAO1D;QAEP1B;QAEA,GAAGK,cAAcgF,MAAM;IACzB;IAEAd,QAAQnB,OAAO,GAAG;WACZpD,kBAAkB,YAClBwB,WAAWnB,eAAeoB,wBAC1B,EAAE;WACH4C;WACCD,CAAAA,gCAAAA,aAAchB,OAAO,KAAI,EAAE;KAChC;IAED,oCAAoC;IACpCmB,QAAQJ,MAAM,GAAG1D,WAAWkE,YAAYP,gCAAAA,aAAcD,MAAM;IAE5D,iCAAiC;IACjCI,QAAQe,GAAG,GAAGlB,gCAAAA,aAAckB,GAAG;IAE/Bf,QAAQlB,OAAO,GAAG,AAAC,CAAA;QACjB,uEAAuE;QACvE,IAAIe,gCAAAA,aAAcf,OAAO,EAAE;YACzB,OAAOe,aAAaf,OAAO;QAC7B;QAEA,6EAA6E;QAC7E,IAAIe,cAAc;YAChB,OAAOO;QACT;QAEA,mEAAmE;QACnE,OAAO;YAAC;SAAa;IACvB,CAAA;IAEAJ,QAAQgB,SAAS,GAAGlF,cAAckF,SAAS;IAE3ChB,QAAQc,MAAM,GAAG;QACf,GAAGN,UAAU;QACbS,eACExF,kBAAkB,YAAYK,cAAcmF,aAAa,GAAGb;IAChE;IAEA,qEAAqE;IACrE,IAAI,OAAOJ,QAAQJ,MAAM,KAAK,aAAa;QACzC,OAAOI,QAAQJ,MAAM;IACvB;IAEAjB,OAAOuC,cAAc,CAAClB,QAAQc,MAAM,EAAE,aAAa;QACjDK,YAAY;QACZC,UAAU;QACVC,OAAO,CAACC;YACN,IAAI,CAAEA,CAAAA,kBAAkBlF,KAAI,GAAI;gBAC9BkF,SAAS,qBAAiB,CAAjB,IAAIlF,MAAMkF,SAAV,qBAAA;2BAAA;gCAAA;kCAAA;gBAAgB;YAC3B;YACA3B,IAAI4B,WAAW,CAACD;QAClB;IACF;IAEA,MAAME,gBAAgBtG,YAAY8E;IAClC,MAAMtB,SAAStD,gBAAgBD,eAAeqG;IAE9C,OAAO9C;AACT;AAEA;;;;CAIC,GACD,SAAS+C,YAAYvE,oBAAqD;IACxE,MAAM,EACJjB,YAAY,EACZC,QAAQ,EACRG,UAAU,EACVE,UAAU,EACVE,gBAAgB,EAChBd,gBAAgB,EAChBgB,OAAO,EACPjB,cAAc,EACf,GAAGwB;IAEJ,MAAMwE,QACJ,IACCzF,CAAAA,eAAe,IAAW,CAAA,IAC1BC,CAAAA,WAAW,IAAW,CAAA,IACtBG,CAAAA,aAAa,IAAW,CAAA,IACxBE,CAAAA,aAAa,IAAW,CAAA,IACxBE,CAAAA,mBAAmB,KAAW,CAAA,IAC9Bd,CAAAA,mBAAmB,KAAW,CAAA;IAEjC,8EAA8E;IAC9E,QAAQ;IACR,OAAO,GAAGD,kBAAkB,GAAG,IAAI,EAAEiB,QAAQ,IAAI,EAAE+E,OAAO;AAC5D;AAEA,MAAMC,cAAoD,IAAIC;AAC9D,MAAMC,cAA2B,IAAIC;AAErC;;CAEC,GACD,SAASC,iCACPC,YAAoD,EACpDlG,aAAqC,EACrCE,QAAgB,EAChBmE,cAAqC;IAErC,IAAI6B,gBAAgB,MAAM;QACxB,OAAO;IACT;IACA,OAAO;QACL,GAAGA,YAAY;QACfhC,SAAS;YACP,GAAGgC,aAAahC,OAAO;YACvBiC,KAAKnG,cAAcmG,GAAG;YACtBC,MAAMpG,cAAcmG,GAAG;YACvBjG;YACAmE;YACA,qEAAqE;YACrE,qEAAqE;YACrE,WAAW;YACXE,gBAAgBrE;QAClB;IACF;AACF;AAEA,eAAe,eAAemG,UAC5BxC,GAAwB,EACxB,EACE5D,MAAM,EACN6D,MAAM,EACN9D,aAAa,EACbE,QAAQ,EACRmE,cAAc,EAOf;IAED,MAAMjD,uBAAuB,MAAMrB,wBACjCC,eACAC,QACAC;IAGF,IAAIF,cAAciB,UAAU,EAAE;QAC5B,qFAAqF;QACrF4C,IAAIyC,aAAa,CAACtG,cAAciB,UAAU;IAC5C;IAEA,MAAMsF,WAAWZ,YAAYvE;IAC7B,MAAM8E,eAAeL,YAAYW,GAAG,CAACD;IACrC,IAAIL,iBAAiB5B,WAAW;QAC9B,OAAO2B,iCACLC,cACAlG,eACAE,UACAmE;IAEJ;IAEA,IAAIrE,cAAciB,UAAU,IAAI,CAAC8E,YAAYU,GAAG,CAACzG,cAAciB,UAAU,GAAG;QAC1E8E,YAAYW,GAAG,CAAC1G,cAAciB,UAAU;QACxC1B,IAAIoH,IAAI,CACN,CAAC,wCAAwC,EAAE3G,cAAciB,UAAU,EAAE;IAEzE;IAEA,MAAM2F,cAAc,MAAMhD,eACxBC,KACAzC,sBACApB,eACA8D;IAGF+B,YAAYgB,GAAG,CAACN,UAAUK;IAE1B,OAAOX,iCACLW,aACA5G,eACAE,UACAmE;AAEJ","ignoreList":[0]}