1+ import path from 'node:path'
12import { createFilter } from '@rollup/pluginutils'
23import { createUnplugin , type UnpluginInstance } from 'unplugin'
34import { resolveOption , type Options } from './core/options'
4- import { transformCss } from './core/transform'
5+ import { transformCss , transformCssModule } from './core/transform'
56
67const plugin : UnpluginInstance < Options | undefined , false > = createUnplugin (
78 ( rawOptions = { } ) => {
89 const options = resolveOption ( rawOptions )
910 const filter = createFilter ( options . include , options . exclude )
1011
12+ const transformedFiles = new Map < string , string > ( )
13+
1114 const name = 'unplugin-lightningcss'
1215 return {
1316 name,
@@ -17,9 +20,36 @@ const plugin: UnpluginInstance<Options | undefined, false> = createUnplugin(
1720 return filter ( id )
1821 } ,
1922
23+ resolveId ( id , importer ) {
24+ if ( id . endsWith ( '.module_built.css' ) ) return id
25+ if ( id . endsWith ( '.module.css' ) ) {
26+ return `${ path . resolve ( path . dirname ( importer || '' ) , id ) } ?css_module`
27+ }
28+ } ,
29+
2030 transform ( code , id ) {
2131 return transformCss ( id , code , options . options )
2232 } ,
33+
34+ async load ( id ) {
35+ if ( id . endsWith ( '.module_built.css' ) ) {
36+ const code = transformedFiles . get ( id ) !
37+ return { id, code }
38+ }
39+ if ( id . endsWith ( '?css_module' ) ) {
40+ const {
41+ code,
42+ map,
43+ exports,
44+ id : compiledId ,
45+ } = await transformCssModule ( id , options . options )
46+ transformedFiles . set ( compiledId , code )
47+ return {
48+ code : `import "${ compiledId } ";\n${ exports } ` ,
49+ map,
50+ }
51+ }
52+ } ,
2353 }
2454 } ,
2555)
0 commit comments