1
1
import merge from 'merge-source-map'
2
+ import { fileURLToPath , pathToFileURL } from 'url'
2
3
import type { RawSourceMap } from '@vue/compiler-core'
3
4
import type { SFCStyleCompileOptions } from '../compileStyle'
4
5
import { isFunction } from '@vue/shared'
@@ -23,23 +24,21 @@ export interface StylePreprocessorResults {
23
24
24
25
// .scss/.sass processor
25
26
const scss : StylePreprocessor = ( source , map , options , load = require ) => {
26
- const nodeSass = load ( 'sass' )
27
- const finalOptions = {
27
+ const nodeSass = load ( 'sass' ) as typeof import ( 'sass' )
28
+ const data = getSource ( source , options . filename , options . additionalData )
29
+ const finalOptions : import ( 'sass' ) . StringOptions < 'sync' > = {
28
30
...options ,
29
- data : getSource ( source , options . filename , options . additionalData ) ,
30
- file : options . filename ,
31
- outFile : options . filename ,
31
+ url : pathToFileURL ( options . filename ) ,
32
32
sourceMap : ! ! map ,
33
- silenceDeprecations : [ 'legacy-js-api' ] ,
34
33
}
35
34
36
35
try {
37
- const result = nodeSass . renderSync ( finalOptions )
38
- const dependencies = result . stats . includedFiles
36
+ const result = nodeSass . compileString ( data , finalOptions )
37
+ const dependencies = result . loadedUrls . map ( url => fileURLToPath ( url ) )
39
38
if ( map ) {
40
39
return {
41
40
code : result . css . toString ( ) ,
42
- map : merge ( map , JSON . parse ( result . map . toString ( ) ) ) ,
41
+ map : merge ( map , JSON . parse ( result . sourceMap ? .toString ( ) ?? '' ) ) ,
43
42
errors : [ ] ,
44
43
dependencies,
45
44
}
0 commit comments