@yak/react 10.0.0-rc.0 → 10.0.0-rc.2

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.
Files changed (74) hide show
  1. package/README.md +15 -3
  2. package/dist/context/baseContext.d.ts +1 -2
  3. package/dist/context/index.d.ts +5 -6
  4. package/dist/context/index.js.map +1 -1
  5. package/dist/context/index.server.d.ts +2 -3
  6. package/dist/cross-file-resolver/index.d.ts +12 -12
  7. package/dist/cross-file-resolver/index.js +58 -5
  8. package/dist/cross-file-resolver/index.js.map +1 -1
  9. package/dist/index.d.ts +10 -10
  10. package/dist/index.js +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/internal.d.ts +139 -139
  13. package/dist/isolated-source-eval/index.d.ts +2 -2
  14. package/dist/isolated-source-eval/index.js +2 -2
  15. package/dist/isolated-source-eval/index.js.map +1 -1
  16. package/dist/isolated-source-eval/worker.js +4 -1
  17. package/dist/isolated-source-eval/worker.js.map +1 -1
  18. package/dist/jsx-dev-runtime.js.map +1 -1
  19. package/dist/jsx-runtime.d.ts +2 -2
  20. package/dist/jsx-runtime.js.map +1 -1
  21. package/dist/loaders/{turbo-loader.d.cts → turbo-loader.d.ts} +11 -3
  22. package/dist/loaders/{turbo-loader.cjs → turbo-loader.js} +81 -49
  23. package/dist/loaders/turbo-loader.js.map +1 -0
  24. package/dist/loaders/vite-plugin.d.ts +15 -25
  25. package/dist/loaders/vite-plugin.js +95 -67
  26. package/dist/loaders/vite-plugin.js.map +1 -1
  27. package/dist/loaders/{webpack-loader.d.cts → webpack-loader.d.ts} +3 -3
  28. package/dist/loaders/{webpack-loader.cjs → webpack-loader.js} +69 -37
  29. package/dist/loaders/webpack-loader.js.map +1 -0
  30. package/dist/rsbuild/index.d.ts +2 -2
  31. package/dist/rsbuild/index.js +3 -3
  32. package/dist/rsbuild/index.js.map +1 -1
  33. package/dist/static/index.js +1 -1
  34. package/dist/static/index.js.map +1 -1
  35. package/dist/withYak/index.d.ts +15 -24
  36. package/dist/withYak/index.js +8 -14
  37. package/dist/withYak/index.js.map +1 -1
  38. package/loaders/lib/resolveCrossFileSelectors.ts +0 -1
  39. package/loaders/turbo-loader.ts +32 -11
  40. package/loaders/webpack-loader.ts +3 -6
  41. package/package.json +47 -106
  42. package/rsbuild/index.ts +3 -4
  43. package/runtime/context/index.tsx +3 -3
  44. package/withYak/allow-global-css.ts +1 -1
  45. package/withYak/index.ts +7 -21
  46. package/dist/context/baseContext.cjs +0 -9
  47. package/dist/context/baseContext.cjs.map +0 -1
  48. package/dist/context/baseContext.d.cts +0 -6
  49. package/dist/context/index.cjs +0 -45
  50. package/dist/context/index.cjs.map +0 -1
  51. package/dist/context/index.d.cts +0 -21
  52. package/dist/context/index.server.cjs +0 -47
  53. package/dist/context/index.server.cjs.map +0 -1
  54. package/dist/context/index.server.d.cts +0 -10
  55. package/dist/index.cjs +0 -2
  56. package/dist/index.cjs.map +0 -1
  57. package/dist/index.d.cts +0 -320
  58. package/dist/internal.cjs +0 -544
  59. package/dist/internal.cjs.map +0 -1
  60. package/dist/internal.d.cts +0 -452
  61. package/dist/jsx-dev-runtime.cjs +0 -2
  62. package/dist/jsx-dev-runtime.cjs.map +0 -1
  63. package/dist/jsx-dev-runtime.d.cts +0 -7
  64. package/dist/jsx-runtime.cjs +0 -2
  65. package/dist/jsx-runtime.cjs.map +0 -1
  66. package/dist/jsx-runtime.d.cts +0 -38
  67. package/dist/loaders/turbo-loader.cjs.map +0 -1
  68. package/dist/loaders/webpack-loader.cjs.map +0 -1
  69. package/dist/static/index.cjs +0 -2
  70. package/dist/static/index.cjs.map +0 -1
  71. package/dist/static/index.d.cts +0 -28
  72. package/dist/withYak/index.cjs +0 -208
  73. package/dist/withYak/index.cjs.map +0 -1
  74. package/dist/withYak/index.d.cts +0 -121
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../withYak/allow-global-css.ts","../../../yak-internals/config.ts","../../withYak/index.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\n\ninterface WebpackConfig {\n module?: { rules?: unknown[] };\n}\n\ninterface Rule {\n test?: unknown;\n issuer?: unknown;\n use?: unknown;\n oneOf?: unknown;\n rules?: unknown;\n}\n\nexport function hasAppDir(projectDir: string): boolean {\n return (\n // mirrors next.js's `findDir(dir, \"app\")`\n // https://github.com/vercel/next.js/blob/v16.3.4/packages/next/src/lib/find-pages-dir.ts#L4-L13\n existsSync(path.join(projectDir, \"app\")) || existsSync(path.join(projectDir, \"src\", \"app\"))\n );\n}\n\n/**\n * Next.js (pages router) only allows global CSS imports from `_app`.\n * Everywhere else it expects CSS Modules. Yak's co-located `*.yak.css`\n * files are plain global CSS, because yak already hashes the class names\n * itself, so there's no risk of leaking styles\n *\n * Next.js has no option to allow this, so we copy its `_app` global CSS\n * rule without the `_app` issuer check and limit the copy to `.yak.css`.\n * The copy goes to the start of the same `oneOf`, so it matches before\n * Next's error rules.\n */\nexport function allowYakGlobalCss(webpackConfig: WebpackConfig) {\n const rules = webpackConfig.module?.rules;\n if (!Array.isArray(rules)) {\n return;\n }\n\n // Next.js's internal `regexCssGlobal` source\n // https://github.com/vercel/next.js/blob/v16.3.4/packages/next/src/build/webpack/config/blocks/css/index.ts#L23\n const nextGlobalCssRegExpSource = \"(?<!\\\\.module)\\\\.css$\";\n\n const isRule = (value: unknown): value is Rule =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n // Next.js sets `issuer: { and: [ctx.customAppFile] }`, where\n // `customAppFile` is a RegExp for the path of `pages/_app`\n // https://github.com/vercel/next.js/blob/v16.3.4/packages/next/src/build/webpack-config.ts#L2550-L2552\n const hasAppIssuer = (rule: Rule): boolean => {\n if (!isRule(rule.issuer)) return false;\n const and = (rule.issuer as { and?: unknown }).and;\n return Array.isArray(and) && and[0] instanceof RegExp && and[0].source.endsWith(\"_app\");\n };\n\n const isAppGlobalCssRule = (rule: Rule): boolean =>\n rule.test instanceof RegExp &&\n rule.test.source === nextGlobalCssRegExpSource &&\n hasAppIssuer(rule) &&\n Array.isArray(rule.use);\n\n const findAppRule = (ruleList: unknown): { oneOf: unknown[]; appRule: Rule } | undefined => {\n if (!Array.isArray(ruleList)) return undefined;\n for (const rule of ruleList) {\n if (!isRule(rule)) continue;\n if (Array.isArray(rule.oneOf)) {\n const appRule = rule.oneOf.find(\n (item): item is Rule => isRule(item) && isAppGlobalCssRule(item),\n );\n if (appRule) return { oneOf: rule.oneOf, appRule };\n }\n const found = findAppRule(rule.oneOf) ?? findAppRule(rule.rules);\n if (found) return found;\n }\n return undefined;\n };\n\n const found = findAppRule(rules);\n if (!found) {\n console.warn(\n \"@yak/react: could not find the next.js global-CSS rules. \" +\n \"Please report this issue with your Next.js version at \" +\n \"https://github.com/DigitecGalaxus/next-yak/issues/new\",\n );\n return;\n }\n\n found.oneOf.unshift({\n test: /\\.yak\\.css$/,\n sideEffects: true,\n use: [...(found.appRule.use as unknown[])],\n });\n}\n","/// <reference types=\"node\" />\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\n\nexport type YakConfigOptions = {\n /**\n * Generate compact CSS class and variable names.\n * @defaultValue\n * enabled if NODE_ENV is set to `production`, otherwise disabled\n */\n minify?: boolean;\n contextPath?: string;\n /**\n * Optional prefix for generated CSS identifiers.\n * This can be used to ensure unique class names across different applications\n * or to add organization-specific prefixes.\n */\n prefix?: string;\n /**\n * Adds `displayName` to each component for better React DevTools debugging\n * - Enabled by default in development mode\n * - Disabled by default in production\n * - Increases bundle size slightly when enabled\n */\n displayNames?: boolean;\n /**\n * Fold statically known styles at build time: JSX usages of fully static\n * styled components become plain DOM elements, and a static `css` prop\n * becomes a plain `className`. Both skip the runtime wrapper and merge calls.\n * @defaultValue true\n */\n foldStatic?: boolean;\n /**\n * Fail the build when a `css` prop has a value @yak/react can't handle\n * (e.g. an array, an object or a plain string). @yak/react claims the `css`\n * prop, so a malformed value is almost always a mistake worth surfacing.\n *\n * Set to `false` to leave such props untouched instead, e.g. when another\n * library on the same element uses its own `css` prop.\n * @defaultValue true\n */\n strictCssProp?: boolean;\n experiments?: {\n /**\n * Debug logging for transformed files.\n * - `true` - log all files\n * - `object` - filter by pattern and/or output types (at least one required)\n */\n debug?:\n | true\n | { pattern: string; types?: Array<\"ts\" | \"css\" | \"css-resolved\"> }\n | { pattern?: string; types: Array<\"ts\" | \"css\" | \"css-resolved\"> };\n transpilationMode?: \"CssModule\" | \"Css\";\n /**\n * Suppress deprecation warnings for :global() selectors during migration period\n * @defaultValue false\n */\n suppressDeprecationWarnings?: boolean;\n };\n};\n\n/**\n * Build the base yak-swc plugin options shared by every bundler integration\n * (webpack, turbopack, vite, rsbuild). The caller adds the bundler-specific\n * `importMode` on top.\n *\n * @param yakOptions - Yak configuration options\n * @param basePath - Base path used by yak-swc to derive stable identifiers\n */\nexport function buildYakPluginOptions(yakOptions: YakConfigOptions, basePath: string) {\n const minify = yakOptions.minify ?? process.env.NODE_ENV === \"production\";\n return {\n minify,\n basePath,\n prefix: yakOptions.prefix,\n displayNames: yakOptions.displayNames ?? !minify,\n foldStatic: yakOptions.foldStatic ?? true,\n strictCssProp: yakOptions.strictCssProp ?? true,\n suppressDeprecationWarnings: yakOptions.experiments?.suppressDeprecationWarnings ?? false,\n reactRefreshReg: true,\n };\n}\n\n/**\n * Try to resolve yak\n */\nexport function resolveYakContext(contextPath: string | undefined, cwd: string) {\n const yakContext = contextPath\n ? path.resolve(cwd, contextPath)\n : path.resolve(cwd, \"yak.context\");\n const extensions = [\"\", \".ts\", \".tsx\", \".js\", \".jsx\"];\n for (const extension in extensions) {\n const fileName = yakContext + extensions[extension];\n if (existsSync(fileName)) {\n return fileName;\n }\n }\n if (contextPath) {\n throw new Error(`Could not find yak context file at ${yakContext}`);\n }\n}\n","/// <reference types=\"node\" />\nimport type { NextConfig } from \"next\";\nimport path, { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { allowYakGlobalCss, hasAppDir } from \"./allow-global-css.ts\";\nimport {\n buildYakPluginOptions,\n resolveYakContext,\n type YakConfigOptions,\n} from \"yak-internals/config\";\n\nexport { buildYakPluginOptions, resolveYakContext } from \"yak-internals/config\";\nexport type { YakConfigOptions } from \"yak-internals/config\";\n\nconst currentDir =\n typeof __dirname !== \"undefined\" ? __dirname : dirname(fileURLToPath(import.meta.url));\n\nconst addYak = (yakOptions: YakConfigOptions, nextConfig: NextConfig) => {\n const yakPluginOptions = buildYakPluginOptions(yakOptions, currentDir);\n\n const transpilation = yakOptions.experiments?.transpilationMode ?? \"CssModule\";\n const cssExtension = transpilation === \"CssModule\" ? \".yak.module.css\" : \".yak.css\";\n\n if (process.env.TURBOPACK === \"1\" || process.env.TURBOPACK === \"auto\") {\n addYakTurbopack(nextConfig, yakOptions, {\n ...yakPluginOptions,\n importMode: {\n value: \"data:text/css;base64,\",\n transpilation: \"Css\",\n encoding: \"Base64\",\n },\n });\n } else {\n addYakWebpack(nextConfig, yakOptions, {\n ...yakPluginOptions,\n importMode: {\n value: `./{{__BASE_NAME__}}${cssExtension}!=!./{{__BASE_NAME__}}?./{{__BASE_NAME__}}${cssExtension}`,\n transpilation,\n encoding: \"None\",\n },\n });\n }\n return nextConfig;\n};\n\n/**\n * Configure Turbopack with yak loader for CSS-in-JS transformation\n * @param nextConfig - Next.js configuration object\n * @param yakOptions - Yak configuration options\n * @param yakPluginOptions - Processed plugin options for yak-swc\n */\nfunction addYakTurbopack(\n nextConfig: NextConfig,\n yakOptions: YakConfigOptions,\n yakPluginOptions: {\n minify: boolean;\n basePath: string;\n prefix?: string;\n displayNames: boolean;\n foldStatic: boolean;\n strictCssProp: boolean;\n importMode: {\n value: string;\n transpilation: string;\n encoding: string;\n };\n },\n) {\n // turbopack can't handle options with undefined values, so we remove them\n const yakLoader = removeUndefinedRecursive({\n loader: path.join(currentDir, \"../loaders/turbo-loader.cjs\"),\n options: {\n yakOptions: yakOptions,\n yakPluginOptions: yakPluginOptions,\n },\n }) as { loader: string; options: {} };\n\n nextConfig.turbopack ||= {};\n nextConfig.turbopack.rules ||= {};\n\n const ruleKey = \"*.{js,jsx,cjs,mjs,ts,tsx,cts,mts}\";\n const rule = {\n loaders: [] as { loader: string; options: {} }[],\n ...nextConfig.turbopack.rules[ruleKey],\n };\n rule.loaders.push(yakLoader);\n nextConfig.turbopack.rules[ruleKey] = rule;\n\n // Configure resolveAlias for custom yak context (similar to webpack)\n // This allows users to provide a custom context file that will be used\n // instead of the default baseContext\n const yakContext = resolveYakContext(yakOptions.contextPath, process.cwd());\n if (yakContext) {\n nextConfig.turbopack.resolveAlias ||= {};\n nextConfig.turbopack.resolveAlias[\"@yak/react/context/baseContext\"] =\n // This is a hack around the fact that turbopack currently only supports relative paths\n // turbopack: \"server relative imports are not implemented yet\"\n // Relative is quite dangerous here as it relies on the cwd being the starting point\n `./${path.relative(process.cwd(), yakContext)}`;\n }\n}\n\n/**\n * Configure Webpack with yak SWC plugin and webpack loader for CSS-in-JS transformation\n * @param nextConfig - Next.js configuration object\n * @param yakOptions - Yak configuration options\n * @param yakPluginOptions - Processed plugin options for yak-swc\n */\nfunction addYakWebpack(\n nextConfig: NextConfig,\n yakOptions: YakConfigOptions,\n yakPluginOptions: {\n minify: boolean;\n basePath: string;\n prefix?: string;\n displayNames: boolean;\n foldStatic: boolean;\n strictCssProp: boolean;\n importMode: {\n value: string;\n transpilation: string;\n encoding: string;\n };\n },\n) {\n // Add SWC plugin for Webpack\n nextConfig.experimental ||= {};\n nextConfig.experimental.swcPlugins ||= [];\n nextConfig.experimental.swcPlugins.push([\"@yak/swc\", yakPluginOptions]);\n\n // Configure webpack loader\n const previousConfig = nextConfig.webpack;\n nextConfig.webpack = (webpackConfig, options) => {\n if (previousConfig) {\n webpackConfig = previousConfig(webpackConfig, options);\n }\n\n if (\n yakOptions.experiments?.transpilationMode === \"Css\" &&\n !options.isServer &&\n !hasAppDir(options.dir)\n ) {\n // Next.js restricts global CSS imports only in the client build of a pages-only project, so only patch its rules there\n allowYakGlobalCss(webpackConfig);\n }\n\n webpackConfig.module.rules.push({\n test:\n yakOptions.experiments?.transpilationMode === \"Css\" ? /\\.yak\\.css$/ : /\\.yak\\.module\\.css$/,\n loader: path.join(currentDir, \"../loaders/webpack-loader.cjs\"),\n options: yakOptions,\n });\n\n // With the following alias the internal @yak/react code\n // is able to import a context which works for server components\n const yakContext = resolveYakContext(\n yakOptions.contextPath,\n webpackConfig.context || process.cwd(),\n );\n if (yakContext) {\n webpackConfig.resolve.alias[\"@yak/react/context/baseContext\"] = yakContext;\n }\n\n return webpackConfig;\n };\n}\n\n/**\n * Recursively removes undefined values from an object or array.\n *\n * This function deeply traverses the input object/array and creates a new structure\n * with all undefined values filtered out. For objects, properties with undefined values\n * are omitted. For arrays, undefined elements are removed from the result.\n *\n * @param obj - The object or array to process\n * @returns A new object/array with undefined values removed, or the original value if no changes were needed\n */\nfunction removeUndefinedRecursive<T>(obj: T): {} {\n if (typeof obj !== \"object\" || obj === null) {\n return obj as {};\n }\n\n if (Array.isArray(obj)) {\n const filtered: unknown[] = [];\n for (let i = 0; i < obj.length; i++) {\n const processed = removeUndefinedRecursive(obj[i]);\n if (processed !== undefined) {\n filtered.push(processed);\n }\n }\n return filtered as {};\n }\n\n const newObj: Record<string, unknown> = {};\n let hasChanges = false;\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = removeUndefinedRecursive((obj as any)[key]);\n if (value !== undefined) {\n newObj[key] = value;\n hasChanges = true;\n }\n }\n }\n\n return hasChanges ? (newObj as {}) : obj;\n}\n\n// Wrapper to allow sync, async, and function configuration of Next.js\n/**\n * Add Yak to your Next.js app\n *\n * @usage\n *\n * ```ts\n * // next.config.js\n * const { withYak } = require(\"@yak/react/withYak\");\n * const nextConfig = {\n * // your next config here\n * };\n * module.exports = withYak(nextConfig);\n * ```\n *\n * With a custom yakConfig\n *\n * ```ts\n * // next.config.js\n * const { withYak } = require(\"@yak/react/withYak\");\n * const nextConfig = {\n * // your next config here\n * };\n * const yakConfig = {\n * // Optional prefix for generated CSS identifiers\n * prefix: \"my-app\",\n * // Other yak config options...\n * };\n * module.exports = withYak(yakConfig, nextConfig);\n * ```\n */\nexport const withYak: {\n <\n T extends\n | Record<string, any>\n | ((...args: any[]) => Record<string, any>)\n | ((...args: any[]) => Promise<Record<string, any>>),\n >(\n yakOptions: YakConfigOptions,\n nextConfig: T,\n ): T;\n // no yakConfig\n <\n T extends\n | Record<string, any>\n | ((...args: any[]) => Record<string, any>)\n | ((...args: any[]) => Promise<Record<string, any>>),\n >(\n nextConfig: T,\n _?: undefined,\n ): T;\n} = (maybeYakOptions, nextConfig) => {\n if (nextConfig === undefined) {\n return withYak({}, maybeYakOptions);\n }\n // If the second parameter is present the first parameter must be a YakConfigOptions\n const yakOptions = maybeYakOptions as YakConfigOptions;\n if (typeof nextConfig === \"function\") {\n /**\n * A NextConfig can be a sync or async function\n * https://nextjs.org/docs/pages/api-reference/next-config-js\n * @param {any[]} args\n */\n return (...args) => {\n /** Dynamic Next Configs can be async or sync */\n const config = nextConfig(...args) as NextConfig | Promise<NextConfig>;\n return config instanceof Promise\n ? config.then((config) => addYak(yakOptions, config))\n : addYak(yakOptions, config);\n };\n }\n return addYak(yakOptions, nextConfig);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../withYak/allow-global-css.ts","../../../yak-internals/config.ts","../../withYak/index.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\n\ninterface WebpackConfig {\n module?: { rules?: unknown[] };\n}\n\ninterface Rule {\n test?: unknown;\n issuer?: unknown;\n use?: unknown;\n oneOf?: unknown;\n rules?: unknown;\n}\n\nexport function hasAppDir(projectDir: string): boolean {\n return (\n // mirrors next.js's `findDir(dir, \"app\")`\n // https://github.com/vercel/next.js/blob/v16.3.4/packages/next/src/lib/find-pages-dir.ts#L4-L13\n existsSync(path.join(projectDir, \"app\")) || existsSync(path.join(projectDir, \"src\", \"app\"))\n );\n}\n\n/**\n * Next.js (pages router) only allows global CSS imports from `_app`.\n * Everywhere else it expects CSS Modules. Yak's co-located `*.yak.css`\n * files are plain global CSS, because yak already hashes the class names\n * itself, so there's no risk of leaking styles\n *\n * Next.js has no option to allow this, so we copy its `_app` global CSS\n * rule without the `_app` issuer check and limit the copy to `.yak.css`.\n * The copy goes to the start of the same `oneOf`, so it matches before\n * Next's error rules.\n */\nexport function allowYakGlobalCss(webpackConfig: WebpackConfig) {\n const rules = webpackConfig.module?.rules;\n if (!Array.isArray(rules)) {\n return;\n }\n\n // Next.js's internal `regexCssGlobal` source\n // https://github.com/vercel/next.js/blob/v16.3.4/packages/next/src/build/webpack/config/blocks/css/index.ts#L23\n const nextGlobalCssRegExpSource = \"(?<!\\\\.module)\\\\.css$\";\n\n const isRule = (value: unknown): value is Rule =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n // Next.js sets `issuer: { and: [ctx.customAppFile] }`, where\n // `customAppFile` is a RegExp for the path of `pages/_app`\n // https://github.com/vercel/next.js/blob/v16.3.4/packages/next/src/build/webpack-config.ts#L2550-L2552\n const hasAppIssuer = (rule: Rule): boolean => {\n if (!isRule(rule.issuer)) return false;\n const and = (rule.issuer as { and?: unknown }).and;\n return Array.isArray(and) && and[0] instanceof RegExp && and[0].source.endsWith(\"_app\");\n };\n\n const isAppGlobalCssRule = (rule: Rule): boolean =>\n rule.test instanceof RegExp &&\n rule.test.source === nextGlobalCssRegExpSource &&\n hasAppIssuer(rule) &&\n Array.isArray(rule.use);\n\n const findAppRule = (ruleList: unknown): { oneOf: unknown[]; appRule: Rule } | undefined => {\n if (!Array.isArray(ruleList)) return undefined;\n for (const rule of ruleList) {\n if (!isRule(rule)) continue;\n if (Array.isArray(rule.oneOf)) {\n const appRule = rule.oneOf.find(\n (item): item is Rule => isRule(item) && isAppGlobalCssRule(item),\n );\n if (appRule) return { oneOf: rule.oneOf, appRule };\n }\n const found = findAppRule(rule.oneOf) ?? findAppRule(rule.rules);\n if (found) return found;\n }\n return undefined;\n };\n\n const found = findAppRule(rules);\n if (!found) {\n console.warn(\n \"@yak/react: could not find the next.js global-CSS rules. \" +\n \"Please report this issue with your Next.js version at \" +\n \"https://github.com/galaxuslabs/yak/issues/new\",\n );\n return;\n }\n\n found.oneOf.unshift({\n test: /\\.yak\\.css$/,\n sideEffects: true,\n use: [...(found.appRule.use as unknown[])],\n });\n}\n","/// <reference types=\"node\" />\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\n\nexport type YakConfigOptions = {\n /**\n * Generate compact CSS class and variable names.\n * @defaultValue\n * enabled if NODE_ENV is set to `production`, otherwise disabled\n */\n minify?: boolean;\n contextPath?: string;\n /**\n * Optional prefix for generated CSS identifiers.\n * This can be used to ensure unique class names across different applications\n * or to add organization-specific prefixes.\n */\n prefix?: string;\n /**\n * Adds `displayName` to each component for better React DevTools debugging\n * - Enabled by default in development mode\n * - Disabled by default in production\n * - Increases bundle size slightly when enabled\n */\n displayNames?: boolean;\n /**\n * Fold statically known styles at build time: JSX usages of fully static\n * styled components become plain DOM elements, and a static `css` prop\n * becomes a plain `className`. Both skip the runtime wrapper and merge calls.\n * @defaultValue true\n */\n foldStatic?: boolean;\n /**\n * Fail the build when a `css` prop has a value @yak/react can't handle\n * (e.g. an array, an object or a plain string). @yak/react claims the `css`\n * prop, so a malformed value is almost always a mistake worth surfacing.\n *\n * Set to `false` to leave such props untouched instead, e.g. when another\n * library on the same element uses its own `css` prop.\n * @defaultValue true\n */\n strictCssProp?: boolean;\n /**\n * Debug logging for transformed files.\n * - `true` - log all files\n * - `object` - filter by pattern and/or output types (at least one required)\n */\n debug?:\n | true\n | { pattern: string; types?: Array<\"ts\" | \"css\" | \"css-resolved\"> }\n | { pattern?: string; types: Array<\"ts\" | \"css\" | \"css-resolved\"> };\n};\n\n/**\n * Build the base yak-swc plugin options shared by every bundler integration\n * (webpack, turbopack, vite, rsbuild). The caller adds the bundler-specific\n * `importMode` on top.\n *\n * @param yakOptions - Yak configuration options\n * @param basePath - Base path used by yak-swc to derive stable identifiers\n */\nexport function buildYakPluginOptions(yakOptions: YakConfigOptions, basePath: string) {\n const minify = yakOptions.minify ?? process.env.NODE_ENV === \"production\";\n return {\n minify,\n basePath,\n prefix: yakOptions.prefix,\n displayNames: yakOptions.displayNames ?? !minify,\n foldStatic: yakOptions.foldStatic ?? true,\n strictCssProp: yakOptions.strictCssProp ?? true,\n reactRefreshReg: true,\n };\n}\n\n/**\n * Try to resolve yak\n */\nexport function resolveYakContext(contextPath: string | undefined, cwd: string) {\n const yakContext = contextPath\n ? path.resolve(cwd, contextPath)\n : path.resolve(cwd, \"yak.context\");\n const extensions = [\"\", \".ts\", \".tsx\", \".js\", \".jsx\"];\n for (const extension in extensions) {\n const fileName = yakContext + extensions[extension];\n if (existsSync(fileName)) {\n return fileName;\n }\n }\n if (contextPath) {\n throw new Error(`Could not find yak context file at ${yakContext}`);\n }\n}\n","/// <reference types=\"node\" />\nimport type { NextConfig } from \"next\";\nimport path from \"node:path\";\nimport { allowYakGlobalCss, hasAppDir } from \"./allow-global-css.ts\";\nimport {\n buildYakPluginOptions,\n resolveYakContext,\n type YakConfigOptions,\n} from \"yak-internals/config\";\n\nexport { buildYakPluginOptions, resolveYakContext } from \"yak-internals/config\";\nexport type { YakConfigOptions } from \"yak-internals/config\";\n\nconst currentDir = import.meta.dirname;\n\nconst addYak = (yakOptions: YakConfigOptions, nextConfig: NextConfig) => {\n const yakPluginOptions = buildYakPluginOptions(yakOptions, currentDir);\n\n if (process.env.TURBOPACK === \"1\" || process.env.TURBOPACK === \"auto\") {\n addYakTurbopack(nextConfig, yakOptions, {\n ...yakPluginOptions,\n importMode: {\n value: \"data:text/css;base64,\",\n encoding: \"Base64\",\n },\n });\n } else {\n addYakWebpack(nextConfig, yakOptions, {\n ...yakPluginOptions,\n importMode: {\n value: \"./{{__BASE_NAME__}}.yak.css!=!./{{__BASE_NAME__}}?./{{__BASE_NAME__}}.yak.css\",\n encoding: \"None\",\n },\n });\n }\n return nextConfig;\n};\n\n/**\n * Configure Turbopack with yak loader for CSS-in-JS transformation\n * @param nextConfig - Next.js configuration object\n * @param yakOptions - Yak configuration options\n * @param yakPluginOptions - Processed plugin options for yak-swc\n */\nfunction addYakTurbopack(\n nextConfig: NextConfig,\n yakOptions: YakConfigOptions,\n yakPluginOptions: {\n minify: boolean;\n basePath: string;\n prefix?: string;\n displayNames: boolean;\n foldStatic: boolean;\n strictCssProp: boolean;\n importMode: {\n value: string;\n encoding: string;\n };\n },\n) {\n // turbopack can't handle options with undefined values, so we remove them\n const yakLoader = removeUndefinedRecursive({\n loader: path.join(currentDir, \"../loaders/turbo-loader.js\"),\n options: {\n yakOptions: yakOptions,\n yakPluginOptions: yakPluginOptions,\n },\n }) as { loader: string; options: {} };\n\n nextConfig.turbopack ||= {};\n nextConfig.turbopack.rules ||= {};\n\n const ruleKey = \"*.{js,jsx,cjs,mjs,ts,tsx,cts,mts}\";\n const rule = {\n loaders: [] as { loader: string; options: {} }[],\n ...nextConfig.turbopack.rules[ruleKey],\n };\n rule.loaders.push(yakLoader);\n nextConfig.turbopack.rules[ruleKey] = rule;\n\n // Configure resolveAlias for custom yak context (similar to webpack)\n // This allows users to provide a custom context file that will be used\n // instead of the default baseContext\n const yakContext = resolveYakContext(yakOptions.contextPath, process.cwd());\n if (yakContext) {\n nextConfig.turbopack.resolveAlias ||= {};\n nextConfig.turbopack.resolveAlias[\"@yak/react/context/baseContext\"] =\n // This is a hack around the fact that turbopack currently only supports relative paths\n // turbopack: \"server relative imports are not implemented yet\"\n // Relative is quite dangerous here as it relies on the cwd being the starting point\n `./${path.relative(process.cwd(), yakContext)}`;\n }\n}\n\n/**\n * Configure Webpack with yak SWC plugin and webpack loader for CSS-in-JS transformation\n * @param nextConfig - Next.js configuration object\n * @param yakOptions - Yak configuration options\n * @param yakPluginOptions - Processed plugin options for yak-swc\n */\nfunction addYakWebpack(\n nextConfig: NextConfig,\n yakOptions: YakConfigOptions,\n yakPluginOptions: {\n minify: boolean;\n basePath: string;\n prefix?: string;\n displayNames: boolean;\n foldStatic: boolean;\n strictCssProp: boolean;\n importMode: {\n value: string;\n encoding: string;\n };\n },\n) {\n // Add SWC plugin for Webpack\n nextConfig.experimental ||= {};\n nextConfig.experimental.swcPlugins ||= [];\n nextConfig.experimental.swcPlugins.push([\"@yak/swc\", yakPluginOptions]);\n\n // Configure webpack loader\n const previousConfig = nextConfig.webpack;\n nextConfig.webpack = (webpackConfig, options) => {\n if (previousConfig) {\n webpackConfig = previousConfig(webpackConfig, options);\n }\n\n if (!options.isServer && !hasAppDir(options.dir)) {\n // Next.js restricts global CSS imports only in the client build of a pages-only project, so only patch its rules there\n allowYakGlobalCss(webpackConfig);\n }\n\n webpackConfig.module.rules.push({\n test: /\\.yak\\.css$/,\n loader: path.join(currentDir, \"../loaders/webpack-loader.js\"),\n options: yakOptions,\n });\n\n // With the following alias the internal @yak/react code\n // is able to import a context which works for server components\n const yakContext = resolveYakContext(\n yakOptions.contextPath,\n webpackConfig.context || process.cwd(),\n );\n if (yakContext) {\n webpackConfig.resolve.alias[\"@yak/react/context/baseContext\"] = yakContext;\n }\n\n return webpackConfig;\n };\n}\n\n/**\n * Recursively removes undefined values from an object or array.\n *\n * This function deeply traverses the input object/array and creates a new structure\n * with all undefined values filtered out. For objects, properties with undefined values\n * are omitted. For arrays, undefined elements are removed from the result.\n *\n * @param obj - The object or array to process\n * @returns A new object/array with undefined values removed, or the original value if no changes were needed\n */\nfunction removeUndefinedRecursive<T>(obj: T): {} {\n if (typeof obj !== \"object\" || obj === null) {\n return obj as {};\n }\n\n if (Array.isArray(obj)) {\n const filtered: unknown[] = [];\n for (let i = 0; i < obj.length; i++) {\n const processed = removeUndefinedRecursive(obj[i]);\n if (processed !== undefined) {\n filtered.push(processed);\n }\n }\n return filtered as {};\n }\n\n const newObj: Record<string, unknown> = {};\n let hasChanges = false;\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = removeUndefinedRecursive((obj as any)[key]);\n if (value !== undefined) {\n newObj[key] = value;\n hasChanges = true;\n }\n }\n }\n\n return hasChanges ? (newObj as {}) : obj;\n}\n\n// Wrapper to allow sync, async, and function configuration of Next.js\n/**\n * Add Yak to your Next.js app\n *\n * @usage\n *\n * ```ts\n * // next.config.js\n * const { withYak } = require(\"@yak/react/withYak\");\n * const nextConfig = {\n * // your next config here\n * };\n * module.exports = withYak(nextConfig);\n * ```\n *\n * With a custom yakConfig\n *\n * ```ts\n * // next.config.js\n * const { withYak } = require(\"@yak/react/withYak\");\n * const nextConfig = {\n * // your next config here\n * };\n * const yakConfig = {\n * // Optional prefix for generated CSS identifiers\n * prefix: \"my-app\",\n * // Other yak config options...\n * };\n * module.exports = withYak(yakConfig, nextConfig);\n * ```\n */\nexport const withYak: {\n <\n T extends\n | Record<string, any>\n | ((...args: any[]) => Record<string, any>)\n | ((...args: any[]) => Promise<Record<string, any>>),\n >(\n yakOptions: YakConfigOptions,\n nextConfig: T,\n ): T;\n // no yakConfig\n <\n T extends\n | Record<string, any>\n | ((...args: any[]) => Record<string, any>)\n | ((...args: any[]) => Promise<Record<string, any>>),\n >(\n nextConfig: T,\n _?: undefined,\n ): T;\n} = (maybeYakOptions, nextConfig) => {\n if (nextConfig === undefined) {\n return withYak({}, maybeYakOptions);\n }\n // If the second parameter is present the first parameter must be a YakConfigOptions\n const yakOptions = maybeYakOptions as YakConfigOptions;\n if (typeof nextConfig === \"function\") {\n /**\n * A NextConfig can be a sync or async function\n * https://nextjs.org/docs/pages/api-reference/next-config-js\n * @param {any[]} args\n */\n return (...args) => {\n /** Dynamic Next Configs can be async or sync */\n const config = nextConfig(...args) as NextConfig | Promise<NextConfig>;\n return config instanceof Promise\n ? config.then((config) => addYak(yakOptions, config))\n : addYak(yakOptions, config);\n };\n }\n return addYak(yakOptions, nextConfig);\n};\n"],"mappings":"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"}
@@ -107,7 +107,6 @@ function getParseContext(loader: LoaderContext<YakConfigOptions>): ParseContext
107
107
  async evaluateYakModule(modulePath) {
108
108
  return loader.importModule(modulePath);
109
109
  },
110
- transpilationMode: loader.getOptions().experiments?.transpilationMode,
111
110
  };
112
111
  }
113
112
 
@@ -1,17 +1,18 @@
1
1
  import { transform as swcTransform } from "@swc/core";
2
2
  import { createRequire } from "node:module";
3
- import { dirname } from "node:path";
3
+ import { dirname, join } from "node:path";
4
4
  import type { LoaderContext } from "webpack";
5
5
  import { parseModule } from "yak-internals/cross-file-resolver/parse-module";
6
6
  import { resolveCrossFileConstant } from "yak-internals/cross-file-resolver/resolve";
7
+ import { rewriteRelativeCssUrls } from "yak-internals/cross-file-resolver/rewrite-relative-css-urls";
7
8
  import type { YakConfigOptions } from "../withYak/index.js";
8
9
  import { createDebugLogger } from "yak-internals/debug-logger";
9
10
  import { extractCss } from "yak-internals/extract-css";
10
11
  import { parseExports } from "yak-internals/parse-exports";
11
12
  import { getSwcParserOptions } from "yak-internals/swc-parser-options";
12
13
 
13
- const universalRequire = typeof require === "undefined" ? createRequire(import.meta.url) : require;
14
- const yakSwcPluginPath = universalRequire.resolve("@yak/swc");
14
+ const require = createRequire(import.meta.url);
15
+ const yakSwcPluginPath = require.resolve("@yak/swc");
15
16
  const dataUrlImportPrefix = 'import "data:text/css;base64,';
16
17
 
17
18
  /**
@@ -21,7 +22,18 @@ const dataUrlImportPrefix = 'import "data:text/css;base64,';
21
22
  * e.g.: `import "data:text/css;base64,"`
22
23
  */
23
24
  export default async function cssExtractLoader(
24
- this: LoaderContext<{ yakOptions: YakConfigOptions; yakPluginOptions: any }>,
25
+ this: LoaderContext<{
26
+ yakOptions: YakConfigOptions;
27
+ yakPluginOptions: any;
28
+ /**
29
+ * Rspack resolves the url() paths of a data: url css import from the
30
+ * compiler root, not from the importing file. With this option the loader
31
+ * rewrites relative paths to point from the root:
32
+ * url("./img/a.png") in src/Box.tsx -> url("./src/img/a.png").
33
+ * Turbopack resolves them from the importing file and needs no rewrite.
34
+ */
35
+ cssUrlsFromRoot?: boolean;
36
+ }>,
25
37
  code: string,
26
38
  sourceMap: string | undefined,
27
39
  ): Promise<string | void> {
@@ -34,9 +46,10 @@ export default async function cssExtractLoader(
34
46
 
35
47
  const {
36
48
  yakPluginOptions,
37
- yakOptions: { experiments },
49
+ yakOptions: { debug },
50
+ cssUrlsFromRoot,
38
51
  } = this.getOptions();
39
- const debugLog = createDebugLogger(experiments?.debug, this.rootContext);
52
+ const debugLog = createDebugLogger(debug, this.rootContext);
40
53
  const resolveTurbopack = this.getResolve({});
41
54
  const transform = createTransform(yakPluginOptions, yakSwcPluginPath);
42
55
 
@@ -69,7 +82,7 @@ export default async function cssExtractLoader(
69
82
  const result = await transform(code, this.resourcePath, this.rootContext, sourceMap);
70
83
  debugLog("ts", result.code, this.resourcePath);
71
84
 
72
- let css = extractCss(result.code, "Css");
85
+ let css = extractCss(result.code);
73
86
  debugLog("css", css, this.resourcePath);
74
87
 
75
88
  const { resolved } = await resolveCrossFileConstant(
@@ -77,7 +90,6 @@ export default async function cssExtractLoader(
77
90
  parse: (modulePath) => {
78
91
  return parseModule(
79
92
  {
80
- transpilationMode: "Css",
81
93
  extractExports: async (modulePath) => {
82
94
  const sourceContents = await fsReadFile(modulePath);
83
95
  return parseExports(sourceContents);
@@ -113,10 +125,19 @@ export default async function cssExtractLoader(
113
125
  this.addDependency(dep);
114
126
  }
115
127
 
116
- const codeWithCrossFileResolved = replaceDataUrlImport(result.code, resolved);
128
+ // A file name in the root directory: the rewrite only uses its directory
129
+ const dataUrlCss = cssUrlsFromRoot
130
+ ? rewriteRelativeCssUrls(resolved, this.resourcePath, join(this.rootContext, "root.css"))
131
+ : resolved;
132
+ const codeWithCrossFileResolved = replaceDataUrlImport(result.code, dataUrlCss);
117
133
 
118
- debugLog("css-resolved", resolved, this.resourcePath);
119
- return callback(null, codeWithCrossFileResolved, result.map);
134
+ debugLog("css-resolved", dataUrlCss, this.resourcePath);
135
+ // swc returns a JSON string, which babel-loader rejects as inputSourceMap
136
+ return callback(
137
+ null,
138
+ codeWithCrossFileResolved,
139
+ result.map ? JSON.parse(result.map) : undefined,
140
+ );
120
141
  } catch (error) {
121
142
  // Register cross-file dependencies even on error so turbopack re-runs
122
143
  // this loader when a broken dependency is fixed.
@@ -26,14 +26,11 @@ export default async function cssExtractLoader(
26
26
  if (!source) {
27
27
  return callback(new Error(`Source code for ${this.resourcePath} is empty`));
28
28
  }
29
- const { experiments } = this.getOptions();
30
- const debugLog = createDebugLogger(
31
- experiments?.debug,
32
- this._compiler?.context ?? process.cwd(),
33
- );
29
+ const { debug } = this.getOptions();
30
+ const debugLog = createDebugLogger(debug, this._compiler?.context ?? process.cwd());
34
31
 
35
32
  debugLog("ts", source, this.resourcePath);
36
- const css = extractCss(source, experiments?.transpilationMode);
33
+ const css = extractCss(source);
37
34
  debugLog("css", css, this.resourcePath);
38
35
 
39
36
  return resolveCrossFileConstant(this, this.context, css).then((result) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yak/react",
3
- "version": "10.0.0-rc.0",
3
+ "version": "10.0.0-rc.2",
4
4
  "description": "@yak/react is a CSS-in-JS library for React: styled-components syntax with CSS extracted at build time. Works with Next.js, Vite and Rsbuild.",
5
5
  "keywords": [
6
6
  "css-in-js",
@@ -11,7 +11,7 @@
11
11
  ],
12
12
  "homepage": "https://yak.js.org/",
13
13
  "bugs": {
14
- "url": "https://github.com/DigitecGalaxus/next-yak/issues"
14
+ "url": "https://github.com/galaxuslabs/yak/issues"
15
15
  },
16
16
  "license": "MIT",
17
17
  "author": {
@@ -24,7 +24,7 @@
24
24
  ],
25
25
  "repository": {
26
26
  "type": "git",
27
- "url": "https://github.com/DigitecGalaxus/next-yak.git"
27
+ "url": "https://github.com/galaxuslabs/yak.git"
28
28
  },
29
29
  "files": [
30
30
  "dist",
@@ -39,152 +39,90 @@
39
39
  "types": "./dist/",
40
40
  "exports": {
41
41
  ".": {
42
- "import": {
43
- "types": "./dist/index.d.ts",
44
- "default": "./dist/index.js"
45
- },
46
- "require": {
47
- "types": "./dist/index.d.cts",
48
- "default": "./dist/index.cjs"
49
- }
42
+ "types": "./dist/index.d.ts",
43
+ "default": "./dist/index.js"
50
44
  },
51
45
  "./static": {
52
- "import": {
53
- "types": "./dist/static/index.d.ts",
54
- "default": "./dist/static/index.js"
55
- },
56
- "require": {
57
- "types": "./dist/static/index.d.cts",
58
- "default": "./dist/static/index.cjs"
59
- }
46
+ "types": "./dist/static/index.d.ts",
47
+ "default": "./dist/static/index.js"
60
48
  },
61
49
  "./internal": {
62
- "import": {
63
- "types": "./dist/internal.d.ts",
64
- "default": "./dist/internal.js"
65
- },
66
- "require": {
67
- "types": "./dist/internal.d.cts",
68
- "default": "./dist/internal.cjs"
69
- }
50
+ "types": "./dist/internal.d.ts",
51
+ "default": "./dist/internal.js"
70
52
  },
71
53
  "./withYak": {
72
- "import": {
73
- "types": "./dist/withYak/index.d.ts",
74
- "default": "./dist/withYak/index.js"
75
- },
76
- "require": {
77
- "types": "./dist/withYak/index.d.cts",
78
- "default": "./dist/withYak/index.cjs"
79
- }
54
+ "types": "./dist/withYak/index.d.ts",
55
+ "default": "./dist/withYak/index.js"
80
56
  },
81
57
  "./context/baseContext": {
82
- "import": {
83
- "types": "./dist/context/baseContext.d.ts",
84
- "default": "./dist/context/baseContext.js"
85
- },
86
- "require": {
87
- "types": "./dist/context/baseContext.d.cts",
88
- "default": "./dist/context/baseContext.cjs"
89
- }
58
+ "types": "./dist/context/baseContext.d.ts",
59
+ "default": "./dist/context/baseContext.js"
90
60
  },
91
61
  "./context": {
92
62
  "react-server": {
93
- "import": {
94
- "types": "./dist/context/index.server.d.ts",
95
- "default": "./dist/context/index.server.js"
96
- },
97
- "require": {
98
- "types": "./dist/context/index.server.d.cts",
99
- "default": "./dist/context/index.server.cjs"
100
- }
63
+ "types": "./dist/context/index.server.d.ts",
64
+ "default": "./dist/context/index.server.js"
101
65
  },
102
66
  "default": {
103
- "import": {
104
- "types": "./dist/context/index.d.ts",
105
- "default": "./dist/context/index.js"
106
- },
107
- "require": {
108
- "types": "./dist/context/index.d.cts",
109
- "default": "./dist/context/index.cjs"
110
- }
67
+ "types": "./dist/context/index.d.ts",
68
+ "default": "./dist/context/index.js"
111
69
  }
112
70
  },
113
71
  "./jsx-runtime": {
114
- "import": {
115
- "types": "./dist/jsx-runtime.d.ts",
116
- "default": "./dist/jsx-runtime.js"
117
- },
118
- "require": {
119
- "types": "./dist/jsx-runtime.d.cts",
120
- "default": "./dist/jsx-runtime.cjs"
121
- }
72
+ "types": "./dist/jsx-runtime.d.ts",
73
+ "default": "./dist/jsx-runtime.js"
122
74
  },
123
75
  "./jsx-dev-runtime": {
124
- "import": {
125
- "types": "./dist/jsx-dev-runtime.d.ts",
126
- "default": "./dist/jsx-dev-runtime.js"
127
- },
128
- "require": {
129
- "types": "./dist/jsx-dev-runtime.d.cts",
130
- "default": "./dist/jsx-dev-runtime.cjs"
131
- }
76
+ "types": "./dist/jsx-dev-runtime.d.ts",
77
+ "default": "./dist/jsx-dev-runtime.js"
132
78
  },
133
- "./loaders/webpack-loader": "./dist/loaders/webpack-loader.cjs",
79
+ "./loaders/webpack-loader": "./dist/loaders/webpack-loader.js",
134
80
  "./vite": {
135
- "import": {
136
- "types": "./dist/loaders/vite-plugin.d.ts",
137
- "default": "./dist/loaders/vite-plugin.js"
138
- }
81
+ "types": "./dist/loaders/vite-plugin.d.ts",
82
+ "default": "./dist/loaders/vite-plugin.js"
139
83
  },
140
84
  "./cross-file-resolver": {
141
- "import": {
142
- "types": "./dist/cross-file-resolver/index.d.ts",
143
- "default": "./dist/cross-file-resolver/index.js"
144
- }
85
+ "types": "./dist/cross-file-resolver/index.d.ts",
86
+ "default": "./dist/cross-file-resolver/index.js"
145
87
  },
146
88
  "./isolated-source-eval": {
147
- "import": {
148
- "types": "./dist/isolated-source-eval/index.d.ts",
149
- "default": "./dist/isolated-source-eval/index.js"
150
- }
89
+ "types": "./dist/isolated-source-eval/index.d.ts",
90
+ "default": "./dist/isolated-source-eval/index.js"
151
91
  },
152
92
  "./rsbuild": {
153
- "import": {
154
- "types": "./dist/rsbuild/index.d.ts",
155
- "default": "./dist/rsbuild/index.js"
156
- }
93
+ "types": "./dist/rsbuild/index.d.ts",
94
+ "default": "./dist/rsbuild/index.js"
157
95
  }
158
96
  },
159
97
  "publishConfig": {
160
98
  "access": "public"
161
99
  },
162
100
  "dependencies": {
163
- "@babel/parser": "^8.0.4",
164
- "@swc/core": "~1.15.47",
165
- "@yak/swc": "10.0.0-rc.0"
101
+ "@babel/parser": "^8.0.7",
102
+ "@swc/core": "~1.16.18",
103
+ "@yak/swc": "10.0.0-rc.2"
166
104
  },
167
105
  "devDependencies": {
168
- "@rsbuild/core": "2.2.2",
106
+ "@rsbuild/core": "2.2.13",
169
107
  "@testing-library/react": "16.3.3",
170
108
  "@types/jest": "30.0.0",
171
- "@types/node": "26.4.1",
172
- "@types/react": "19.2.18",
173
- "@types/react-dom": "19.2.5",
109
+ "@types/node": "26.6.5",
110
+ "@types/react": "19.3.0",
111
+ "@types/react-dom": "19.3.0",
174
112
  "@types/webpack": "5.28.5",
175
- "jsdom": "30.0.1",
176
- "next": "16.3.4",
177
- "react": "19.2.8",
178
- "tsdown": "0.22.14",
113
+ "jsdom": "30.1.3",
114
+ "next": "16.4.2",
115
+ "react": "19.3.1",
116
+ "tsdown": "0.23.1",
179
117
  "typescript": "6.0.3",
180
- "vite": "8.2.2",
181
- "vitest": "4.1.11",
118
+ "vite": "8.3.4",
119
+ "vitest": "5.0.5",
182
120
  "yak-internals": "0.0.0"
183
121
  },
184
122
  "peerDependencies": {
185
123
  "@rsbuild/core": ">=2.0.0",
186
124
  "@types/react": ">=19",
187
- "next": ">=16.1.0",
125
+ "next": ">=16.4.0",
188
126
  "react": ">=19.0.0",
189
127
  "vite": ">=7.0.0"
190
128
  },
@@ -205,6 +143,9 @@
205
143
  "optional": true
206
144
  }
207
145
  },
146
+ "engines": {
147
+ "node": ">=22.18.0"
148
+ },
208
149
  "scripts": {
209
150
  "build": "tsdown",
210
151
  "watch": "tsdown --watch",
package/rsbuild/index.ts CHANGED
@@ -11,8 +11,8 @@ import {
11
11
  // provide `this.fs.readFile`, `this.getResolve` and `this.addDependency` — which
12
12
  // is exactly what the turbopack loader uses — so the turbopack loader runs as-is
13
13
  // on Rspack. The compiled loader lives next to this file under dist/
14
- // (dist/rsbuild/index.js and dist/loaders/turbo-loader.cjs are siblings).
15
- const rspackLoaderPath = fileURLToPath(new URL("../loaders/turbo-loader.cjs", import.meta.url));
14
+ // (dist/rsbuild/index.js and dist/loaders/turbo-loader.js are siblings).
15
+ const rspackLoaderPath = fileURLToPath(new URL("../loaders/turbo-loader.js", import.meta.url));
16
16
 
17
17
  /**
18
18
  * Rsbuild plugin for @yak/react.
@@ -46,7 +46,6 @@ export function pluginYak(yakOptions: YakConfigOptions = {}): RsbuildPlugin {
46
46
  ...buildYakPluginOptions(yakOptions, rootContext),
47
47
  importMode: {
48
48
  value: "data:text/css;base64,",
49
- transpilation: "Css",
50
49
  encoding: "Base64",
51
50
  },
52
51
  };
@@ -61,7 +60,7 @@ export function pluginYak(yakOptions: YakConfigOptions = {}): RsbuildPlugin {
61
60
  use: [
62
61
  {
63
62
  loader: rspackLoaderPath,
64
- options: { yakOptions, yakPluginOptions },
63
+ options: { yakOptions, yakPluginOptions, cssUrlsFromRoot: true },
65
64
  },
66
65
  ],
67
66
  },
@@ -8,14 +8,14 @@ export interface YakTheme {}
8
8
 
9
9
  /**
10
10
  * The yak theme context
11
- * @see https://github.com/DigitecGalaxus/next-yak/blob/main/packages/yak-react/runtime/context/README.md
11
+ * @see https://github.com/galaxuslabs/yak/blob/main/packages/yak-react/runtime/context/README.md
12
12
  */
13
13
  const YakContext = createContext<YakTheme>({});
14
14
 
15
15
  /**
16
16
  * Returns the current yak theme context
17
17
  *
18
- * @see https://github.com/DigitecGalaxus/next-yak/blob/main/packages/yak-react/runtime/context/README.md
18
+ * @see https://github.com/galaxuslabs/yak/blob/main/packages/yak-react/runtime/context/README.md
19
19
  */
20
20
  export const useTheme = (): YakTheme => {
21
21
  const context = use(YakContext);
@@ -25,7 +25,7 @@ export const useTheme = (): YakTheme => {
25
25
  /**
26
26
  * Yak theme context provider
27
27
  *
28
- * @see https://github.com/DigitecGalaxus/next-yak/blob/main/packages/yak-react/runtime/context/README.md
28
+ * @see https://github.com/galaxuslabs/yak/blob/main/packages/yak-react/runtime/context/README.md
29
29
  */
30
30
  export const YakThemeProvider = ({
31
31
  children,
@@ -81,7 +81,7 @@ export function allowYakGlobalCss(webpackConfig: WebpackConfig) {
81
81
  console.warn(
82
82
  "@yak/react: could not find the next.js global-CSS rules. " +
83
83
  "Please report this issue with your Next.js version at " +
84
- "https://github.com/DigitecGalaxus/next-yak/issues/new",
84
+ "https://github.com/galaxuslabs/yak/issues/new",
85
85
  );
86
86
  return;
87
87
  }
package/withYak/index.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import type { NextConfig } from "next";
3
- import path, { dirname } from "node:path";
4
- import { fileURLToPath } from "node:url";
3
+ import path from "node:path";
5
4
  import { allowYakGlobalCss, hasAppDir } from "./allow-global-css.ts";
6
5
  import {
7
6
  buildYakPluginOptions,
@@ -12,21 +11,16 @@ import {
12
11
  export { buildYakPluginOptions, resolveYakContext } from "yak-internals/config";
13
12
  export type { YakConfigOptions } from "yak-internals/config";
14
13
 
15
- const currentDir =
16
- typeof __dirname !== "undefined" ? __dirname : dirname(fileURLToPath(import.meta.url));
14
+ const currentDir = import.meta.dirname;
17
15
 
18
16
  const addYak = (yakOptions: YakConfigOptions, nextConfig: NextConfig) => {
19
17
  const yakPluginOptions = buildYakPluginOptions(yakOptions, currentDir);
20
18
 
21
- const transpilation = yakOptions.experiments?.transpilationMode ?? "CssModule";
22
- const cssExtension = transpilation === "CssModule" ? ".yak.module.css" : ".yak.css";
23
-
24
19
  if (process.env.TURBOPACK === "1" || process.env.TURBOPACK === "auto") {
25
20
  addYakTurbopack(nextConfig, yakOptions, {
26
21
  ...yakPluginOptions,
27
22
  importMode: {
28
23
  value: "data:text/css;base64,",
29
- transpilation: "Css",
30
24
  encoding: "Base64",
31
25
  },
32
26
  });
@@ -34,8 +28,7 @@ const addYak = (yakOptions: YakConfigOptions, nextConfig: NextConfig) => {
34
28
  addYakWebpack(nextConfig, yakOptions, {
35
29
  ...yakPluginOptions,
36
30
  importMode: {
37
- value: `./{{__BASE_NAME__}}${cssExtension}!=!./{{__BASE_NAME__}}?./{{__BASE_NAME__}}${cssExtension}`,
38
- transpilation,
31
+ value: "./{{__BASE_NAME__}}.yak.css!=!./{{__BASE_NAME__}}?./{{__BASE_NAME__}}.yak.css",
39
32
  encoding: "None",
40
33
  },
41
34
  });
@@ -61,14 +54,13 @@ function addYakTurbopack(
61
54
  strictCssProp: boolean;
62
55
  importMode: {
63
56
  value: string;
64
- transpilation: string;
65
57
  encoding: string;
66
58
  };
67
59
  },
68
60
  ) {
69
61
  // turbopack can't handle options with undefined values, so we remove them
70
62
  const yakLoader = removeUndefinedRecursive({
71
- loader: path.join(currentDir, "../loaders/turbo-loader.cjs"),
63
+ loader: path.join(currentDir, "../loaders/turbo-loader.js"),
72
64
  options: {
73
65
  yakOptions: yakOptions,
74
66
  yakPluginOptions: yakPluginOptions,
@@ -118,7 +110,6 @@ function addYakWebpack(
118
110
  strictCssProp: boolean;
119
111
  importMode: {
120
112
  value: string;
121
- transpilation: string;
122
113
  encoding: string;
123
114
  };
124
115
  },
@@ -135,19 +126,14 @@ function addYakWebpack(
135
126
  webpackConfig = previousConfig(webpackConfig, options);
136
127
  }
137
128
 
138
- if (
139
- yakOptions.experiments?.transpilationMode === "Css" &&
140
- !options.isServer &&
141
- !hasAppDir(options.dir)
142
- ) {
129
+ if (!options.isServer && !hasAppDir(options.dir)) {
143
130
  // Next.js restricts global CSS imports only in the client build of a pages-only project, so only patch its rules there
144
131
  allowYakGlobalCss(webpackConfig);
145
132
  }
146
133
 
147
134
  webpackConfig.module.rules.push({
148
- test:
149
- yakOptions.experiments?.transpilationMode === "Css" ? /\.yak\.css$/ : /\.yak\.module\.css$/,
150
- loader: path.join(currentDir, "../loaders/webpack-loader.cjs"),
135
+ test: /\.yak\.css$/,
136
+ loader: path.join(currentDir, "../loaders/webpack-loader.js"),
151
137
  options: yakOptions,
152
138
  });
153
139
 
@@ -1,9 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- //#region runtime/context/baseContext.tsx
3
- function getYakThemeContext() {
4
- return {};
5
- }
6
-
7
- //#endregion
8
- exports.getYakThemeContext = getYakThemeContext;
9
- //# sourceMappingURL=baseContext.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"baseContext.cjs","names":[],"sources":["../../runtime/context/baseContext.tsx"],"sourcesContent":["import type { YakTheme } from \"@yak/react\";\n\nexport function getYakThemeContext() {\n return {} as YakTheme | undefined;\n}\n"],"mappings":";;AAEA,SAAgB,qBAAqB;CACnC,OAAO,CAAC;AACV"}
@@ -1,6 +0,0 @@
1
- import { YakTheme } from "@yak/react";
2
- //#region runtime/context/baseContext.d.ts
3
- declare function getYakThemeContext(): YakTheme | undefined;
4
- //#endregion
5
- export { getYakThemeContext };
6
- //# sourceMappingURL=baseContext.d.cts.map