@wyw-in-js/nextjs 1.1.0 → 2.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/esm/index.mjs +265 -349
- package/esm/index.mjs.map +1 -1
- package/package.json +12 -13
- package/types/index.d.ts +2 -1
- package/types/index.js +25 -86
- package/lib/index.js +0 -394
- package/lib/index.js.map +0 -1
package/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["fs","path","DEFAULT_EXTENSION","DEFAULT_TURBO_RULE_KEYS","DEFAULT_REACT_IMPORT_OVERRIDES","react","mock","PLACEHOLDER_EXTENSIONS","Set","PLACEHOLDER_IGNORED_DIRS","isObject","value","isUseLoaderObject","item","loader","normalizeUseItems","use","list","Array","isArray","filter","Boolean","length","getLoaderName","isWywLoaderPath","includes","test","convertLoaderRuleToUseRule","rule","wywLoaderItem","alreadyInjected","isNextJsTranspileRule","some","needle","options","nextRule","Object","assign","undefined","traverseRules","rules","visitor","oneOf","escapeRegExp","replace","isPlainObject","proto","getPrototypeOf","prototype","assertNoFunctions","name","queue","seen","current","shift","Error","has","add","forEach","idx","push","entries","key","createWywCssModuleRule","baseRule","extensionSuffix","patchedUse","map","itemOptions","modules","nextModules","mode","getLocalIdent","_context","_localIdentName","localName","sideEffects","RegExp","ensureWywCssModuleRules","config","module","expectedTestSource","alreadyPresent","candidate","source","candidateRule","isModuleCssRule","hasCssLoader","splice","injectWywLoader","nextOptions","wywNext","require","resolve","nextBabelPreset","paths","process","cwd","extension","loaderOptions","babelOptions","presets","userImportOverrides","importOverrides","cssImport","sourceMap","dev","loaders","l","ensureTurbopackCssPlaceholders","projectRoot","dir","pop","readdirSync","withFileTypes","entry","entryPath","join","isDirectory","isFile","shouldIgnore","startsWith","endsWith","ext","extname","baseName","basename","cssFilePath","dirname","writeFileSync","flag","err","code","shouldUseTurbopackConfig","nextConfig","explicit","turbopack","pkgPath","pkg","version","major","Number","parseInt","split","isFinite","injectWywTurbopackRules","userOptions","turbopackLoaderOptions","env","NODE_ENV","useTurbopackConfig","isNextBuild","argv","isWebpackBuild","ruleValue","condition","all","not","wywRules","fromEntries","turbopackConfig","userTurbopack","userRules","userExperimental","experimental","userTurbo","turbo","withWyw","userWebpack","webpack","resolvedConfig"],"sources":["../src/index.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport type { LoaderOptions as WywWebpackLoaderOptions } from '@wyw-in-js/webpack-loader';\nimport type { NextConfig } from 'next';\nimport type { Configuration, RuleSetRule, RuleSetUseItem } from 'webpack';\n\nconst DEFAULT_EXTENSION = '.wyw-in-js.module.css';\n\nconst DEFAULT_TURBO_RULE_KEYS = ['*.js', '*.jsx', '*.ts', '*.tsx'];\n\nconst DEFAULT_REACT_IMPORT_OVERRIDES = {\n react: { mock: 'react' },\n 'react/jsx-runtime': { mock: 'react/jsx-runtime' },\n 'react/jsx-dev-runtime': { mock: 'react/jsx-dev-runtime' },\n} satisfies WywWebpackLoaderOptions['importOverrides'];\n\nconst PLACEHOLDER_EXTENSIONS = new Set(['.js', '.jsx', '.ts', '.tsx']);\nconst PLACEHOLDER_IGNORED_DIRS = new Set([\n '.git',\n '.next',\n '.turbo',\n 'node_modules',\n]);\n\nexport type WywNextPluginOptions = {\n loaderOptions?: Omit<WywWebpackLoaderOptions, 'extension' | 'sourceMap'> &\n Partial<Pick<WywWebpackLoaderOptions, 'extension' | 'sourceMap'>>;\n turbopackLoaderOptions?: Record<string, unknown>;\n};\n\ntype NextWebpackConfigFn = NonNullable<NextConfig['webpack']>;\ntype NextWebpackOptions = Parameters<NextWebpackConfigFn>[1];\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isUseLoaderObject(\n item: RuleSetUseItem\n): item is Exclude<RuleSetUseItem, string> & { loader: string } {\n return (\n isObject(item) &&\n typeof (item as Record<string, unknown>).loader === 'string'\n );\n}\n\nfunction normalizeUseItems(use: RuleSetRule['use']): RuleSetUseItem[] | null {\n if (!use) return null;\n if (typeof use === 'function') return null;\n\n const list = (Array.isArray(use) ? use : [use]).filter(Boolean);\n return list.length ? (list as RuleSetUseItem[]) : null;\n}\n\nfunction getLoaderName(item: RuleSetUseItem): string {\n if (typeof item === 'string') return item;\n if (isUseLoaderObject(item)) return item.loader;\n return '';\n}\n\nfunction isWywLoaderPath(loader: string) {\n return (\n loader.includes('@wyw-in-js/webpack-loader') ||\n /[\\\\/]webpack-loader[\\\\/]/.test(loader)\n );\n}\n\nfunction convertLoaderRuleToUseRule(\n rule: RuleSetRule,\n wywLoaderItem: RuleSetUseItem\n) {\n const { loader } = rule as { loader?: unknown };\n if (typeof loader !== 'string') return;\n\n const alreadyInjected = isWywLoaderPath(loader);\n if (alreadyInjected) return;\n\n const isNextJsTranspileRule = [\n 'next-swc-loader',\n 'next-babel-loader',\n 'babel-loader',\n ].some((needle) => loader.includes(needle));\n if (!isNextJsTranspileRule) return;\n\n const { options } = rule as { options?: unknown };\n\n const nextRule = rule as RuleSetRule & {\n loader?: unknown;\n options?: unknown;\n };\n\n delete nextRule.loader;\n delete nextRule.options;\n\n // Loader order is right-to-left. We want WyW to run first, so it should be last.\n Object.assign(nextRule, {\n use: [\n { loader, ...(options !== undefined ? { options } : {}) },\n wywLoaderItem,\n ],\n });\n}\n\nfunction traverseRules(rules: unknown[], visitor: (rule: RuleSetRule) => void) {\n for (const rule of rules) {\n if (rule && typeof rule === 'object') {\n visitor(rule as RuleSetRule);\n\n if (Array.isArray((rule as RuleSetRule).oneOf)) {\n traverseRules((rule as RuleSetRule).oneOf!, visitor);\n }\n if (Array.isArray((rule as RuleSetRule).rules)) {\n traverseRules((rule as RuleSetRule).rules!, visitor);\n }\n }\n }\n}\n\nfunction escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (!isObject(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction assertNoFunctions(value: unknown, name: string) {\n const queue: Array<{ path: string; value: unknown }> = [\n { path: name, value },\n ];\n const seen = new Set<unknown>();\n\n while (queue.length) {\n const current = queue.shift()!;\n\n if (typeof current.value === 'function') {\n throw new Error(\n `${current.path} must be JSON-serializable (functions are not supported in Turbopack loader options). Use \"configFile\" to pass non-JSON config.`\n );\n }\n\n if (current.value === null) {\n // skip\n } else if (Array.isArray(current.value)) {\n if (!seen.has(current.value)) {\n seen.add(current.value);\n current.value.forEach((item, idx) =>\n queue.push({ path: `${current.path}[${idx}]`, value: item })\n );\n }\n } else if (isPlainObject(current.value)) {\n if (!seen.has(current.value)) {\n seen.add(current.value);\n Object.entries(current.value).forEach(([key, item]) =>\n queue.push({ path: `${current.path}.${key}`, value: item })\n );\n }\n }\n }\n}\n\nfunction createWywCssModuleRule(\n baseRule: RuleSetRule,\n extensionSuffix: string\n): RuleSetRule {\n const use = normalizeUseItems(baseRule.use) ?? [];\n\n const patchedUse = use.map((item) => {\n if (!isUseLoaderObject(item) || !item.loader.includes('css-loader')) {\n return item;\n }\n\n const itemOptions = (item as { options?: unknown }).options;\n if (!isObject(itemOptions)) {\n return item;\n }\n\n const { modules } = itemOptions as { modules?: unknown };\n if (!isObject(modules)) {\n return item;\n }\n\n const nextModules = {\n ...(modules as Record<string, unknown>),\n mode: 'global',\n getLocalIdent: (\n _context: unknown,\n _localIdentName: string,\n localName: string\n ) => localName,\n };\n\n return {\n ...item,\n options: {\n ...(itemOptions as Record<string, unknown>),\n modules: nextModules,\n },\n };\n });\n\n const nextRule: RuleSetRule = {\n ...baseRule,\n sideEffects: true,\n test: new RegExp(`${escapeRegExp(extensionSuffix)}$`),\n use: patchedUse,\n };\n\n return nextRule;\n}\n\nfunction ensureWywCssModuleRules(\n config: Configuration,\n extensionSuffix: string\n) {\n traverseRules(config.module?.rules ?? [], (rule) => {\n if (!Array.isArray(rule.oneOf) || rule.oneOf.length === 0) {\n return;\n }\n\n const expectedTestSource = `${escapeRegExp(extensionSuffix)}$`;\n\n const alreadyPresent = rule.oneOf.some((candidate) => {\n if (!candidate || typeof candidate !== 'object') return false;\n\n const { test } = candidate as RuleSetRule;\n return test instanceof RegExp && test.source === expectedTestSource;\n });\n\n if (alreadyPresent) {\n return;\n }\n\n const oneOf = rule.oneOf as unknown[];\n for (let idx = 0; idx < oneOf.length; idx += 1) {\n const candidate = oneOf[idx];\n if (candidate && typeof candidate === 'object') {\n const candidateRule = candidate as RuleSetRule;\n const { test } = candidateRule;\n\n const isModuleCssRule =\n test instanceof RegExp && test.source.includes('\\\\.module\\\\.css');\n\n if (isModuleCssRule) {\n const use = normalizeUseItems(candidateRule.use);\n if (use) {\n const hasCssLoader = use.some(\n (item) =>\n isUseLoaderObject(item) && item.loader.includes('css-loader')\n );\n if (hasCssLoader) {\n oneOf.splice(\n idx,\n 0,\n createWywCssModuleRule(candidateRule, extensionSuffix)\n );\n break;\n }\n }\n }\n }\n }\n });\n}\n\nfunction injectWywLoader(\n config: Configuration,\n nextOptions: NextWebpackOptions,\n wywNext: WywNextPluginOptions\n) {\n const loader = require.resolve('@wyw-in-js/webpack-loader');\n const nextBabelPreset = require.resolve('next/babel', {\n paths: [process.cwd()],\n });\n\n const extension = wywNext.loaderOptions?.extension ?? DEFAULT_EXTENSION;\n const babelOptions = wywNext.loaderOptions?.babelOptions ?? {\n presets: [nextBabelPreset],\n };\n\n const userImportOverrides = wywNext.loaderOptions?.importOverrides;\n const importOverrides = userImportOverrides\n ? { ...DEFAULT_REACT_IMPORT_OVERRIDES, ...userImportOverrides }\n : DEFAULT_REACT_IMPORT_OVERRIDES;\n\n const loaderOptions = {\n cssImport: 'import',\n ...wywNext.loaderOptions,\n babelOptions,\n extension,\n importOverrides,\n sourceMap: wywNext.loaderOptions?.sourceMap ?? nextOptions.dev,\n } satisfies WywWebpackLoaderOptions;\n\n const wywLoaderItem: RuleSetUseItem = {\n loader,\n options: loaderOptions,\n };\n\n traverseRules(config.module?.rules ?? [], (rule) => {\n convertLoaderRuleToUseRule(rule, wywLoaderItem);\n\n const use = normalizeUseItems(rule.use);\n if (!use) return;\n\n const loaders = use.map(getLoaderName);\n\n const alreadyInjected = loaders.some(\n (l) => l === loader || isWywLoaderPath(l)\n );\n if (alreadyInjected) return;\n\n const isNextJsTranspileRule = loaders.some((l) =>\n ['next-swc-loader', 'next-babel-loader', 'babel-loader'].some((needle) =>\n l.includes(needle)\n )\n );\n if (!isNextJsTranspileRule) return;\n\n // Loader order is right-to-left. We want WyW to run first, so it should be last.\n Object.assign(rule, { use: [...use, wywLoaderItem] });\n });\n\n ensureWywCssModuleRules(config, extension);\n}\n\nfunction ensureTurbopackCssPlaceholders(projectRoot: string) {\n const queue: string[] = [projectRoot];\n\n while (queue.length) {\n const dir = queue.pop()!;\n let entries: fs.Dirent[];\n\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n entries = [];\n }\n\n for (const entry of entries) {\n if (entry.name !== '.' && entry.name !== '..') {\n const entryPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n if (!PLACEHOLDER_IGNORED_DIRS.has(entry.name)) {\n queue.push(entryPath);\n }\n } else if (entry.isFile()) {\n const shouldIgnore =\n entry.name.startsWith('middleware.') ||\n entry.name.endsWith('.d.ts');\n\n if (!shouldIgnore) {\n const ext = path.extname(entry.name);\n if (PLACEHOLDER_EXTENSIONS.has(ext)) {\n const baseName = path.basename(entry.name, ext);\n const cssFilePath = path.join(\n path.dirname(entryPath),\n `${baseName}${DEFAULT_EXTENSION}`\n );\n\n try {\n fs.writeFileSync(cssFilePath, '', { flag: 'wx' });\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'EEXIST') {\n throw err;\n }\n }\n }\n }\n }\n }\n }\n }\n}\n\nfunction shouldUseTurbopackConfig(nextConfig: NextConfig) {\n const explicit = (nextConfig as unknown as Record<string, unknown>).turbopack;\n if (typeof explicit !== 'undefined') {\n return true;\n }\n\n try {\n const pkgPath = require.resolve('next/package.json', {\n paths: [process.cwd()],\n });\n const pkg = require(pkgPath) as { version?: unknown };\n const version = typeof pkg.version === 'string' ? pkg.version : '';\n const major = Number.parseInt(version.split('.')[0] ?? '', 10);\n return Number.isFinite(major) && major >= 16;\n } catch {\n return false;\n }\n}\n\nfunction injectWywTurbopackRules(\n nextConfig: NextConfig,\n wywNext: WywNextPluginOptions\n): NextConfig {\n const loader = require.resolve('@wyw-in-js/turbopack-loader');\n const nextBabelPreset = require.resolve('next/babel', {\n paths: [process.cwd()],\n });\n\n const userOptions = wywNext.turbopackLoaderOptions ?? {};\n\n assertNoFunctions(userOptions, 'turbopackLoaderOptions');\n\n const userImportOverrides = isPlainObject(userOptions.importOverrides)\n ? (userOptions.importOverrides as Record<string, unknown>)\n : undefined;\n\n const loaderOptions = {\n babelOptions: { presets: [nextBabelPreset] },\n sourceMap: process.env.NODE_ENV !== 'production',\n ...userOptions,\n importOverrides: userImportOverrides\n ? { ...DEFAULT_REACT_IMPORT_OVERRIDES, ...userImportOverrides }\n : DEFAULT_REACT_IMPORT_OVERRIDES,\n };\n\n const useTurbopackConfig = shouldUseTurbopackConfig(nextConfig);\n\n const isNextBuild = process.argv.includes('build');\n const isWebpackBuild = process.argv.includes('--webpack');\n\n if (\n useTurbopackConfig &&\n process.env.NODE_ENV === 'production' &&\n isNextBuild &&\n !isWebpackBuild\n ) {\n ensureTurbopackCssPlaceholders(process.cwd());\n }\n\n const ruleValue = useTurbopackConfig\n ? {\n loaders: [{ loader, options: loaderOptions }],\n condition: {\n all: [\n { not: 'foreign' },\n { not: { path: /(?:^|[\\\\/])middleware\\.[jt]sx?$/ } },\n ],\n },\n }\n : [{ loader, options: loaderOptions }];\n\n const wywRules = Object.fromEntries(\n DEFAULT_TURBO_RULE_KEYS.map((key) => [key, ruleValue])\n );\n\n if (useTurbopackConfig) {\n const turbopackConfig = (nextConfig as unknown as Record<string, unknown>)\n .turbopack;\n const userTurbopack = isPlainObject(turbopackConfig) ? turbopackConfig : {};\n\n const userRules = isPlainObject(userTurbopack.rules)\n ? (userTurbopack.rules as Record<string, unknown>)\n : {};\n\n return {\n ...nextConfig,\n turbopack: {\n ...userTurbopack,\n rules: {\n ...wywRules,\n ...userRules,\n },\n },\n } as NextConfig;\n }\n\n const userExperimental = isPlainObject(nextConfig.experimental)\n ? (nextConfig.experimental as Record<string, unknown>)\n : {};\n\n const userTurbo = isPlainObject(userExperimental.turbo)\n ? (userExperimental.turbo as Record<string, unknown>)\n : {};\n\n const userRules = isPlainObject(userTurbo.rules)\n ? (userTurbo.rules as Record<string, unknown>)\n : {};\n\n return {\n ...nextConfig,\n experimental: {\n ...userExperimental,\n turbo: {\n ...userTurbo,\n rules: {\n ...wywRules,\n ...userRules,\n },\n },\n },\n } as NextConfig;\n}\n\nexport function withWyw(\n nextConfig: NextConfig = {},\n wywNext: WywNextPluginOptions = {}\n): NextConfig {\n const userWebpack = nextConfig.webpack;\n\n return {\n ...injectWywTurbopackRules(nextConfig, wywNext),\n webpack(config: Configuration, options: NextWebpackOptions) {\n const resolvedConfig =\n typeof userWebpack === 'function'\n ? userWebpack(config, options)\n : config;\n\n injectWywLoader(resolvedConfig, options, wywNext);\n\n return resolvedConfig;\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"mappings":"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","names":[],"sources":["../src/index.ts"],"version":3,"sourcesContent":["import { createRequire } from 'module';\n\nimport type { LoaderOptions as WywTurbopackLoaderOptions } from '@wyw-in-js/turbopack-loader';\nimport type { LoaderOptions as WywWebpackLoaderOptions } from '@wyw-in-js/webpack-loader';\nimport type { NextConfig } from 'next';\nimport type { Configuration, RuleSetRule, RuleSetUseItem } from 'webpack';\n\nconst DEFAULT_EXTENSION = '.wyw-in-js.module.css';\n\nconst DEFAULT_TURBO_RULE_KEYS = ['*.js', '*.jsx', '*.ts', '*.tsx'];\n\nconst DEFAULT_REACT_IMPORT_OVERRIDES = {\n react: { mock: 'react' },\n 'react/jsx-runtime': { mock: 'react/jsx-runtime' },\n 'react/jsx-dev-runtime': { mock: 'react/jsx-dev-runtime' },\n} satisfies WywWebpackLoaderOptions['importOverrides'];\n\nconst nodeRequire = createRequire(import.meta.url);\n\nexport type WywNextPluginOptions = {\n loaderOptions?: Omit<WywWebpackLoaderOptions, 'extension' | 'sourceMap'> &\n Partial<Pick<WywWebpackLoaderOptions, 'extension' | 'sourceMap'>>;\n turbopackLoaderOptions?: Partial<WywTurbopackLoaderOptions>;\n};\n\ntype NextWebpackConfigFn = NonNullable<NextConfig['webpack']>;\ntype NextWebpackOptions = Parameters<NextWebpackConfigFn>[1];\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isUseLoaderObject(\n item: RuleSetUseItem\n): item is Exclude<RuleSetUseItem, string> & { loader: string } {\n return (\n isObject(item) &&\n typeof (item as Record<string, unknown>).loader === 'string'\n );\n}\n\nfunction normalizeUseItems(use: RuleSetRule['use']): RuleSetUseItem[] | null {\n if (!use) return null;\n if (typeof use === 'function') return null;\n\n const list = (Array.isArray(use) ? use : [use]).filter(Boolean);\n return list.length ? (list as RuleSetUseItem[]) : null;\n}\n\nfunction getLoaderName(item: RuleSetUseItem): string {\n if (typeof item === 'string') return item;\n if (isUseLoaderObject(item)) return item.loader;\n return '';\n}\n\nfunction isWywLoaderPath(loader: string) {\n return (\n loader.includes('@wyw-in-js/webpack-loader') ||\n /[\\\\/]webpack-loader[\\\\/]/.test(loader)\n );\n}\n\nfunction convertLoaderRuleToUseRule(\n rule: RuleSetRule,\n wywLoaderItem: RuleSetUseItem\n) {\n const { loader } = rule as { loader?: unknown };\n if (typeof loader !== 'string') return;\n\n const alreadyInjected = isWywLoaderPath(loader);\n if (alreadyInjected) return;\n\n const isNextJsTranspileRule = [\n 'next-swc-loader',\n 'next-babel-loader',\n 'babel-loader',\n ].some((needle) => loader.includes(needle));\n if (!isNextJsTranspileRule) return;\n\n const { options } = rule as { options?: unknown };\n\n const nextRule = rule as RuleSetRule & {\n loader?: unknown;\n options?: unknown;\n };\n\n delete nextRule.loader;\n delete nextRule.options;\n\n // Loader order is right-to-left. We want WyW to run first, so it should be last.\n Object.assign(nextRule, {\n use: [\n { loader, ...(options !== undefined ? { options } : {}) },\n wywLoaderItem,\n ],\n });\n}\n\nfunction traverseRules(rules: unknown[], visitor: (rule: RuleSetRule) => void) {\n for (const rule of rules) {\n if (rule && typeof rule === 'object') {\n visitor(rule as RuleSetRule);\n\n if (Array.isArray((rule as RuleSetRule).oneOf)) {\n traverseRules((rule as RuleSetRule).oneOf!, visitor);\n }\n if (Array.isArray((rule as RuleSetRule).rules)) {\n traverseRules((rule as RuleSetRule).rules!, visitor);\n }\n }\n }\n}\n\nfunction escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (!isObject(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction assertJsonSerializable(value: unknown, name: string) {\n const queue: Array<{ path: string; value: unknown }> = [\n { path: name, value },\n ];\n const seen = new Set<unknown>();\n\n while (queue.length) {\n const current = queue.shift()!;\n\n if (current.value === null) {\n // skip\n } else if (typeof current.value === 'undefined') {\n // skip\n } else if (\n typeof current.value === 'string' ||\n typeof current.value === 'number' ||\n typeof current.value === 'boolean'\n ) {\n // primitives are ok\n } else if (\n typeof current.value === 'function' ||\n typeof current.value === 'symbol' ||\n typeof current.value === 'bigint'\n ) {\n throw new Error(\n `${current.path} must be JSON-serializable (functions, symbols and bigint are not supported in Turbopack loader options). Use \"configFile\" to pass non-JSON config.`\n );\n } else if (Array.isArray(current.value)) {\n if (!seen.has(current.value)) {\n seen.add(current.value);\n current.value.forEach((item, idx) =>\n queue.push({ path: `${current.path}[${idx}]`, value: item })\n );\n }\n } else if (isPlainObject(current.value)) {\n if (!seen.has(current.value)) {\n seen.add(current.value);\n Object.entries(current.value).forEach(([key, item]) =>\n queue.push({ path: `${current.path}.${key}`, value: item })\n );\n }\n } else {\n throw new Error(\n `${current.path} must be JSON-serializable (only plain objects, arrays, and primitives are supported in Turbopack loader options). Use \"configFile\" to pass non-JSON config.`\n );\n }\n }\n}\n\nfunction createWywCssModuleRule(\n baseRule: RuleSetRule,\n extensionSuffix: string\n): RuleSetRule {\n const use = normalizeUseItems(baseRule.use) ?? [];\n\n const patchedUse = use.map((item) => {\n if (!isUseLoaderObject(item) || !item.loader.includes('css-loader')) {\n return item;\n }\n\n const itemOptions = (item as { options?: unknown }).options;\n if (!isObject(itemOptions)) {\n return item;\n }\n\n const { modules } = itemOptions as { modules?: unknown };\n if (!isObject(modules)) {\n return item;\n }\n\n const nextModules = {\n ...(modules as Record<string, unknown>),\n mode: 'global',\n getLocalIdent: (\n _context: unknown,\n _localIdentName: string,\n localName: string\n ) => localName,\n };\n\n return {\n ...item,\n options: {\n ...(itemOptions as Record<string, unknown>),\n modules: nextModules,\n },\n };\n });\n\n const nextRule: RuleSetRule = {\n ...baseRule,\n sideEffects: true,\n test: new RegExp(`${escapeRegExp(extensionSuffix)}$`),\n use: patchedUse,\n };\n\n return nextRule;\n}\n\nfunction ensureWywCssModuleRules(\n config: Configuration,\n extensionSuffix: string\n) {\n traverseRules(config.module?.rules ?? [], (rule) => {\n if (!Array.isArray(rule.oneOf) || rule.oneOf.length === 0) {\n return;\n }\n\n const expectedTestSource = `${escapeRegExp(extensionSuffix)}$`;\n\n const alreadyPresent = rule.oneOf.some((candidate) => {\n if (!candidate || typeof candidate !== 'object') return false;\n\n const { test } = candidate as RuleSetRule;\n return test instanceof RegExp && test.source === expectedTestSource;\n });\n\n if (alreadyPresent) {\n return;\n }\n\n const oneOf = rule.oneOf as unknown[];\n for (let idx = 0; idx < oneOf.length; idx += 1) {\n const candidate = oneOf[idx];\n if (candidate && typeof candidate === 'object') {\n const candidateRule = candidate as RuleSetRule;\n const { test } = candidateRule;\n\n const isModuleCssRule =\n test instanceof RegExp && test.source.includes('\\\\.module\\\\.css');\n\n if (isModuleCssRule) {\n const use = normalizeUseItems(candidateRule.use);\n if (use) {\n const hasCssLoader = use.some(\n (item) =>\n isUseLoaderObject(item) && item.loader.includes('css-loader')\n );\n if (hasCssLoader) {\n oneOf.splice(\n idx,\n 0,\n createWywCssModuleRule(candidateRule, extensionSuffix)\n );\n break;\n }\n }\n }\n }\n }\n });\n}\n\nfunction injectWywLoader(\n config: Configuration,\n nextOptions: NextWebpackOptions,\n wywNext: WywNextPluginOptions\n) {\n const loader = nodeRequire.resolve('@wyw-in-js/webpack-loader');\n\n const extension = wywNext.loaderOptions?.extension ?? DEFAULT_EXTENSION;\n\n const userImportOverrides = wywNext.loaderOptions?.importOverrides;\n const importOverrides = userImportOverrides\n ? { ...DEFAULT_REACT_IMPORT_OVERRIDES, ...userImportOverrides }\n : DEFAULT_REACT_IMPORT_OVERRIDES;\n\n const loaderOptions = {\n cssImport: 'import',\n ...wywNext.loaderOptions,\n extension,\n importOverrides,\n sourceMap: wywNext.loaderOptions?.sourceMap ?? nextOptions.dev,\n } satisfies WywWebpackLoaderOptions;\n\n const wywLoaderItem: RuleSetUseItem = {\n loader,\n options: loaderOptions,\n };\n\n traverseRules(config.module?.rules ?? [], (rule) => {\n convertLoaderRuleToUseRule(rule, wywLoaderItem);\n\n const use = normalizeUseItems(rule.use);\n if (!use) return;\n\n const loaders = use.map(getLoaderName);\n\n const alreadyInjected = loaders.some(\n (l) => l === loader || isWywLoaderPath(l)\n );\n if (alreadyInjected) return;\n\n const isNextJsTranspileRule = loaders.some((l) =>\n ['next-swc-loader', 'next-babel-loader', 'babel-loader'].some((needle) =>\n l.includes(needle)\n )\n );\n if (!isNextJsTranspileRule) return;\n\n // Loader order is right-to-left. We want WyW to run first, so it should be last.\n Object.assign(rule, { use: [...use, wywLoaderItem] });\n });\n\n ensureWywCssModuleRules(config, extension);\n}\n\nfunction shouldUseTurbopackConfig(nextConfig: NextConfig) {\n const explicit = (nextConfig as unknown as Record<string, unknown>).turbopack;\n if (typeof explicit !== 'undefined') {\n return true;\n }\n\n try {\n const pkgPath = nodeRequire.resolve('next/package.json', {\n paths: [process.cwd()],\n });\n const pkg = nodeRequire(pkgPath) as { version?: unknown };\n const version = typeof pkg.version === 'string' ? pkg.version : '';\n const major = Number.parseInt(version.split('.')[0] ?? '', 10);\n return Number.isFinite(major) && major >= 16;\n } catch {\n return false;\n }\n}\n\nfunction injectWywTurbopackRules(\n nextConfig: NextConfig,\n wywNext: WywNextPluginOptions\n): NextConfig {\n const loader = nodeRequire.resolve('@wyw-in-js/turbopack-loader');\n\n const userOptions = wywNext.turbopackLoaderOptions ?? {};\n\n assertJsonSerializable(userOptions, 'turbopackLoaderOptions');\n\n const userImportOverrides = isPlainObject(userOptions.importOverrides)\n ? (userOptions.importOverrides as Record<string, unknown>)\n : undefined;\n\n const loaderOptions = {\n sourceMap: process.env.NODE_ENV !== 'production',\n ...userOptions,\n importOverrides: userImportOverrides\n ? { ...DEFAULT_REACT_IMPORT_OVERRIDES, ...userImportOverrides }\n : DEFAULT_REACT_IMPORT_OVERRIDES,\n };\n\n const useTurbopackConfig = shouldUseTurbopackConfig(nextConfig);\n\n const ruleValue = useTurbopackConfig\n ? {\n loaders: [{ loader, options: loaderOptions }],\n condition: {\n all: [\n { not: 'foreign' },\n { not: { path: /(?:^|[\\\\/])middleware\\.[jt]sx?$/ } },\n ],\n },\n }\n : [{ loader, options: loaderOptions }];\n\n const wywRules = Object.fromEntries(\n DEFAULT_TURBO_RULE_KEYS.map((key) => [key, ruleValue])\n );\n\n if (useTurbopackConfig) {\n const turbopackConfig = (nextConfig as unknown as Record<string, unknown>)\n .turbopack;\n const userTurbopack = isPlainObject(turbopackConfig) ? turbopackConfig : {};\n\n const userRules = isPlainObject(userTurbopack.rules)\n ? (userTurbopack.rules as Record<string, unknown>)\n : {};\n\n return {\n ...nextConfig,\n turbopack: {\n ...userTurbopack,\n rules: {\n ...wywRules,\n ...userRules,\n },\n },\n } as NextConfig;\n }\n\n const userExperimental = isPlainObject(nextConfig.experimental)\n ? (nextConfig.experimental as Record<string, unknown>)\n : {};\n\n const userTurbo = isPlainObject(userExperimental.turbo)\n ? (userExperimental.turbo as Record<string, unknown>)\n : {};\n\n const userRules = isPlainObject(userTurbo.rules)\n ? (userTurbo.rules as Record<string, unknown>)\n : {};\n\n return {\n ...nextConfig,\n experimental: {\n ...userExperimental,\n turbo: {\n ...userTurbo,\n rules: {\n ...wywRules,\n ...userRules,\n },\n },\n },\n } as NextConfig;\n}\n\nexport function withWyw(\n nextConfig: NextConfig = {},\n wywNext: WywNextPluginOptions = {}\n): NextConfig {\n const userWebpack = nextConfig.webpack;\n\n return {\n ...injectWywTurbopackRules(nextConfig, wywNext),\n webpack(config: Configuration, options: NextWebpackOptions) {\n const resolvedConfig =\n typeof userWebpack === 'function'\n ? userWebpack(config, options)\n : config;\n\n injectWywLoader(resolvedConfig, options, wywNext);\n\n return resolvedConfig;\n },\n };\n}\n"],"file":"index.mjs"}
|
package/package.json
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wyw-in-js/nextjs",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-alpha.0",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"dependencies": {
|
|
5
|
-
"@wyw-in-js/turbopack-loader": "
|
|
6
|
-
"@wyw-in-js/webpack-loader": "
|
|
6
|
+
"@wyw-in-js/turbopack-loader": "2.0.0-alpha.0",
|
|
7
|
+
"@wyw-in-js/webpack-loader": "2.0.0-alpha.0"
|
|
7
8
|
},
|
|
8
9
|
"devDependencies": {
|
|
9
|
-
"@types/node": "^
|
|
10
|
-
"@wyw-in-js/babel-config": "workspace:*",
|
|
10
|
+
"@types/node": "^22.0.0",
|
|
11
11
|
"@wyw-in-js/eslint-config": "workspace:*",
|
|
12
12
|
"@wyw-in-js/ts-config": "workspace:*",
|
|
13
13
|
"next": ">=13.0.0",
|
|
14
14
|
"webpack": "^5.76.0"
|
|
15
15
|
},
|
|
16
16
|
"engines": {
|
|
17
|
-
"node": ">=
|
|
17
|
+
"node": ">=22.0.0"
|
|
18
18
|
},
|
|
19
19
|
"exports": {
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./types/index.d.ts",
|
|
22
|
+
"default": "./esm/index.mjs"
|
|
23
|
+
}
|
|
23
24
|
},
|
|
24
25
|
"files": [
|
|
25
26
|
"esm/",
|
|
26
|
-
"lib/",
|
|
27
27
|
"types/"
|
|
28
28
|
],
|
|
29
29
|
"license": "MIT",
|
|
30
|
-
"main": "
|
|
30
|
+
"main": "esm/index.mjs",
|
|
31
31
|
"module": "esm/index.mjs",
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"next": ">=13.0.0",
|
|
@@ -37,8 +37,7 @@
|
|
|
37
37
|
"access": "public"
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
40
|
-
"build:esm": "
|
|
41
|
-
"build:lib": "cross-env NODE_ENV=legacy babel src --out-dir lib --extensions '.js,.jsx,.ts,.tsx' --source-maps --delete-dir-on-start",
|
|
40
|
+
"build:esm": "node ../../scripts/build-esm-oxc.mjs --out-file-extension .mjs",
|
|
42
41
|
"build:types": "tsc --project ./tsconfig.lib.json --baseUrl . --rootDir ./src",
|
|
43
42
|
"lint": "eslint --ext .js,.ts .",
|
|
44
43
|
"test": "bun test src"
|
package/types/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type { LoaderOptions as WywTurbopackLoaderOptions } from '@wyw-in-js/turbopack-loader';
|
|
1
2
|
import type { LoaderOptions as WywWebpackLoaderOptions } from '@wyw-in-js/webpack-loader';
|
|
2
3
|
import type { NextConfig } from 'next';
|
|
3
4
|
export type WywNextPluginOptions = {
|
|
4
5
|
loaderOptions?: Omit<WywWebpackLoaderOptions, 'extension' | 'sourceMap'> & Partial<Pick<WywWebpackLoaderOptions, 'extension' | 'sourceMap'>>;
|
|
5
|
-
turbopackLoaderOptions?:
|
|
6
|
+
turbopackLoaderOptions?: Partial<WywTurbopackLoaderOptions>;
|
|
6
7
|
};
|
|
7
8
|
export declare function withWyw(nextConfig?: NextConfig, wywNext?: WywNextPluginOptions): NextConfig;
|
package/types/index.js
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.withWyw = withWyw;
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
1
|
+
import { createRequire } from 'module';
|
|
9
2
|
const DEFAULT_EXTENSION = '.wyw-in-js.module.css';
|
|
10
3
|
const DEFAULT_TURBO_RULE_KEYS = ['*.js', '*.jsx', '*.ts', '*.tsx'];
|
|
11
4
|
const DEFAULT_REACT_IMPORT_OVERRIDES = {
|
|
@@ -13,13 +6,7 @@ const DEFAULT_REACT_IMPORT_OVERRIDES = {
|
|
|
13
6
|
'react/jsx-runtime': { mock: 'react/jsx-runtime' },
|
|
14
7
|
'react/jsx-dev-runtime': { mock: 'react/jsx-dev-runtime' },
|
|
15
8
|
};
|
|
16
|
-
const
|
|
17
|
-
const PLACEHOLDER_IGNORED_DIRS = new Set([
|
|
18
|
-
'.git',
|
|
19
|
-
'.next',
|
|
20
|
-
'.turbo',
|
|
21
|
-
'node_modules',
|
|
22
|
-
]);
|
|
9
|
+
const nodeRequire = createRequire(import.meta.url);
|
|
23
10
|
function isObject(value) {
|
|
24
11
|
return typeof value === 'object' && value !== null;
|
|
25
12
|
}
|
|
@@ -94,19 +81,29 @@ function isPlainObject(value) {
|
|
|
94
81
|
const proto = Object.getPrototypeOf(value);
|
|
95
82
|
return proto === Object.prototype || proto === null;
|
|
96
83
|
}
|
|
97
|
-
function
|
|
84
|
+
function assertJsonSerializable(value, name) {
|
|
98
85
|
const queue = [
|
|
99
86
|
{ path: name, value },
|
|
100
87
|
];
|
|
101
88
|
const seen = new Set();
|
|
102
89
|
while (queue.length) {
|
|
103
90
|
const current = queue.shift();
|
|
104
|
-
if (typeof current.value === 'function') {
|
|
105
|
-
throw new Error(`${current.path} must be JSON-serializable (functions are not supported in Turbopack loader options). Use "configFile" to pass non-JSON config.`);
|
|
106
|
-
}
|
|
107
91
|
if (current.value === null) {
|
|
108
92
|
// skip
|
|
109
93
|
}
|
|
94
|
+
else if (typeof current.value === 'undefined') {
|
|
95
|
+
// skip
|
|
96
|
+
}
|
|
97
|
+
else if (typeof current.value === 'string' ||
|
|
98
|
+
typeof current.value === 'number' ||
|
|
99
|
+
typeof current.value === 'boolean') {
|
|
100
|
+
// primitives are ok
|
|
101
|
+
}
|
|
102
|
+
else if (typeof current.value === 'function' ||
|
|
103
|
+
typeof current.value === 'symbol' ||
|
|
104
|
+
typeof current.value === 'bigint') {
|
|
105
|
+
throw new Error(`${current.path} must be JSON-serializable (functions, symbols and bigint are not supported in Turbopack loader options). Use "configFile" to pass non-JSON config.`);
|
|
106
|
+
}
|
|
110
107
|
else if (Array.isArray(current.value)) {
|
|
111
108
|
if (!seen.has(current.value)) {
|
|
112
109
|
seen.add(current.value);
|
|
@@ -119,6 +116,9 @@ function assertNoFunctions(value, name) {
|
|
|
119
116
|
Object.entries(current.value).forEach(([key, item]) => queue.push({ path: `${current.path}.${key}`, value: item }));
|
|
120
117
|
}
|
|
121
118
|
}
|
|
119
|
+
else {
|
|
120
|
+
throw new Error(`${current.path} must be JSON-serializable (only plain objects, arrays, and primitives are supported in Turbopack loader options). Use "configFile" to pass non-JSON config.`);
|
|
121
|
+
}
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
function createWywCssModuleRule(baseRule, extensionSuffix) {
|
|
@@ -193,14 +193,8 @@ function ensureWywCssModuleRules(config, extensionSuffix) {
|
|
|
193
193
|
});
|
|
194
194
|
}
|
|
195
195
|
function injectWywLoader(config, nextOptions, wywNext) {
|
|
196
|
-
const loader =
|
|
197
|
-
const nextBabelPreset = require.resolve('next/babel', {
|
|
198
|
-
paths: [process.cwd()],
|
|
199
|
-
});
|
|
196
|
+
const loader = nodeRequire.resolve('@wyw-in-js/webpack-loader');
|
|
200
197
|
const extension = wywNext.loaderOptions?.extension ?? DEFAULT_EXTENSION;
|
|
201
|
-
const babelOptions = wywNext.loaderOptions?.babelOptions ?? {
|
|
202
|
-
presets: [nextBabelPreset],
|
|
203
|
-
};
|
|
204
198
|
const userImportOverrides = wywNext.loaderOptions?.importOverrides;
|
|
205
199
|
const importOverrides = userImportOverrides
|
|
206
200
|
? { ...DEFAULT_REACT_IMPORT_OVERRIDES, ...userImportOverrides }
|
|
@@ -208,7 +202,6 @@ function injectWywLoader(config, nextOptions, wywNext) {
|
|
|
208
202
|
const loaderOptions = {
|
|
209
203
|
cssImport: 'import',
|
|
210
204
|
...wywNext.loaderOptions,
|
|
211
|
-
babelOptions,
|
|
212
205
|
extension,
|
|
213
206
|
importOverrides,
|
|
214
207
|
sourceMap: wywNext.loaderOptions?.sourceMap ?? nextOptions.dev,
|
|
@@ -234,58 +227,16 @@ function injectWywLoader(config, nextOptions, wywNext) {
|
|
|
234
227
|
});
|
|
235
228
|
ensureWywCssModuleRules(config, extension);
|
|
236
229
|
}
|
|
237
|
-
function ensureTurbopackCssPlaceholders(projectRoot) {
|
|
238
|
-
const queue = [projectRoot];
|
|
239
|
-
while (queue.length) {
|
|
240
|
-
const dir = queue.pop();
|
|
241
|
-
let entries;
|
|
242
|
-
try {
|
|
243
|
-
entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
244
|
-
}
|
|
245
|
-
catch {
|
|
246
|
-
entries = [];
|
|
247
|
-
}
|
|
248
|
-
for (const entry of entries) {
|
|
249
|
-
if (entry.name !== '.' && entry.name !== '..') {
|
|
250
|
-
const entryPath = path_1.default.join(dir, entry.name);
|
|
251
|
-
if (entry.isDirectory()) {
|
|
252
|
-
if (!PLACEHOLDER_IGNORED_DIRS.has(entry.name)) {
|
|
253
|
-
queue.push(entryPath);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
else if (entry.isFile()) {
|
|
257
|
-
const shouldIgnore = entry.name.startsWith('middleware.') ||
|
|
258
|
-
entry.name.endsWith('.d.ts');
|
|
259
|
-
if (!shouldIgnore) {
|
|
260
|
-
const ext = path_1.default.extname(entry.name);
|
|
261
|
-
if (PLACEHOLDER_EXTENSIONS.has(ext)) {
|
|
262
|
-
const baseName = path_1.default.basename(entry.name, ext);
|
|
263
|
-
const cssFilePath = path_1.default.join(path_1.default.dirname(entryPath), `${baseName}${DEFAULT_EXTENSION}`);
|
|
264
|
-
try {
|
|
265
|
-
fs_1.default.writeFileSync(cssFilePath, '', { flag: 'wx' });
|
|
266
|
-
}
|
|
267
|
-
catch (err) {
|
|
268
|
-
if (err.code !== 'EEXIST') {
|
|
269
|
-
throw err;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
230
|
function shouldUseTurbopackConfig(nextConfig) {
|
|
280
231
|
const explicit = nextConfig.turbopack;
|
|
281
232
|
if (typeof explicit !== 'undefined') {
|
|
282
233
|
return true;
|
|
283
234
|
}
|
|
284
235
|
try {
|
|
285
|
-
const pkgPath =
|
|
236
|
+
const pkgPath = nodeRequire.resolve('next/package.json', {
|
|
286
237
|
paths: [process.cwd()],
|
|
287
238
|
});
|
|
288
|
-
const pkg =
|
|
239
|
+
const pkg = nodeRequire(pkgPath);
|
|
289
240
|
const version = typeof pkg.version === 'string' ? pkg.version : '';
|
|
290
241
|
const major = Number.parseInt(version.split('.')[0] ?? '', 10);
|
|
291
242
|
return Number.isFinite(major) && major >= 16;
|
|
@@ -295,17 +246,13 @@ function shouldUseTurbopackConfig(nextConfig) {
|
|
|
295
246
|
}
|
|
296
247
|
}
|
|
297
248
|
function injectWywTurbopackRules(nextConfig, wywNext) {
|
|
298
|
-
const loader =
|
|
299
|
-
const nextBabelPreset = require.resolve('next/babel', {
|
|
300
|
-
paths: [process.cwd()],
|
|
301
|
-
});
|
|
249
|
+
const loader = nodeRequire.resolve('@wyw-in-js/turbopack-loader');
|
|
302
250
|
const userOptions = wywNext.turbopackLoaderOptions ?? {};
|
|
303
|
-
|
|
251
|
+
assertJsonSerializable(userOptions, 'turbopackLoaderOptions');
|
|
304
252
|
const userImportOverrides = isPlainObject(userOptions.importOverrides)
|
|
305
253
|
? userOptions.importOverrides
|
|
306
254
|
: undefined;
|
|
307
255
|
const loaderOptions = {
|
|
308
|
-
babelOptions: { presets: [nextBabelPreset] },
|
|
309
256
|
sourceMap: process.env.NODE_ENV !== 'production',
|
|
310
257
|
...userOptions,
|
|
311
258
|
importOverrides: userImportOverrides
|
|
@@ -313,14 +260,6 @@ function injectWywTurbopackRules(nextConfig, wywNext) {
|
|
|
313
260
|
: DEFAULT_REACT_IMPORT_OVERRIDES,
|
|
314
261
|
};
|
|
315
262
|
const useTurbopackConfig = shouldUseTurbopackConfig(nextConfig);
|
|
316
|
-
const isNextBuild = process.argv.includes('build');
|
|
317
|
-
const isWebpackBuild = process.argv.includes('--webpack');
|
|
318
|
-
if (useTurbopackConfig &&
|
|
319
|
-
process.env.NODE_ENV === 'production' &&
|
|
320
|
-
isNextBuild &&
|
|
321
|
-
!isWebpackBuild) {
|
|
322
|
-
ensureTurbopackCssPlaceholders(process.cwd());
|
|
323
|
-
}
|
|
324
263
|
const ruleValue = useTurbopackConfig
|
|
325
264
|
? {
|
|
326
265
|
loaders: [{ loader, options: loaderOptions }],
|
|
@@ -374,7 +313,7 @@ function injectWywTurbopackRules(nextConfig, wywNext) {
|
|
|
374
313
|
},
|
|
375
314
|
};
|
|
376
315
|
}
|
|
377
|
-
function withWyw(nextConfig = {}, wywNext = {}) {
|
|
316
|
+
export function withWyw(nextConfig = {}, wywNext = {}) {
|
|
378
317
|
const userWebpack = nextConfig.webpack;
|
|
379
318
|
return {
|
|
380
319
|
...injectWywTurbopackRules(nextConfig, wywNext),
|