@@ -23,28 +23,48 @@ export interface StylePreprocessorResults {
23
23
24
24
// .scss/.sass processor
25
25
const 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
34
33
35
34
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
+
38
59
if ( map ) {
39
60
return {
40
- code : result . css . toString ( ) ,
41
- map : merge ( map , JSON . parse ( result . map . toString ( ) ) ) ,
61
+ code : css ,
42
62
errors : [ ] ,
43
63
dependencies,
64
+ map : merge ( map , sourceMap ! ) ,
44
65
}
45
66
}
46
-
47
- return { code : result . css . toString ( ) , errors : [ ] , dependencies }
67
+ return { code : css , errors : [ ] , dependencies }
48
68
} catch ( e : any ) {
49
69
return { code : '' , errors : [ e ] , dependencies : [ ] }
50
70
}
0 commit comments