@@ -23,28 +23,48 @@ export interface StylePreprocessorResults {
2323
2424// .scss/.sass processor
2525const scss : StylePreprocessor = ( source , map , options , load = require ) => {
26- const nodeSass = load ( 'sass' )
27- const finalOptions = {
28- ...options ,
29- data : getSource ( source , options . filename , options . additionalData ) ,
30- file : options . filename ,
31- outFile : options . filename ,
32- sourceMap : ! ! map ,
33- }
26+ const nodeSass : typeof import ( 'sass' ) = load ( 'sass' )
27+ const { compileString, renderSync } = nodeSass
28+
29+ const data = getSource ( source , options . filename , options . additionalData )
30+ let css : string
31+ let dependencies : string [ ]
32+ let sourceMap : any
3433
3534 try {
36- const result = nodeSass . renderSync ( finalOptions )
37- const dependencies = result . stats . includedFiles
35+ if ( compileString ) {
36+ const { pathToFileURL, fileURLToPath } : typeof import ( 'url' ) = load ( 'url' )
37+
38+ const result = compileString ( data , {
39+ ...options ,
40+ url : pathToFileURL ( options . filename ) ,
41+ sourceMap : ! ! map ,
42+ } )
43+ css = result . css
44+ dependencies = result . loadedUrls . map ( url => fileURLToPath ( url ) )
45+ sourceMap = map ? result . sourceMap ! : undefined
46+ } else {
47+ const result = renderSync ( {
48+ ...options ,
49+ data,
50+ file : options . filename ,
51+ outFile : options . filename ,
52+ sourceMap : ! ! map ,
53+ } )
54+ css = result . css . toString ( )
55+ dependencies = result . stats . includedFiles
56+ sourceMap = map ? JSON . parse ( result . map ! . toString ( ) ) : undefined
57+ }
58+
3859 if ( map ) {
3960 return {
40- code : result . css . toString ( ) ,
41- map : merge ( map , JSON . parse ( result . map . toString ( ) ) ) ,
61+ code : css ,
4262 errors : [ ] ,
4363 dependencies,
64+ map : merge ( map , sourceMap ! ) ,
4465 }
4566 }
46-
47- return { code : result . css . toString ( ) , errors : [ ] , dependencies }
67+ return { code : css , errors : [ ] , dependencies }
4868 } catch ( e : any ) {
4969 return { code : '' , errors : [ e ] , dependencies : [ ] }
5070 }
0 commit comments