@@ -17,6 +17,7 @@ import sass from 'sass'
1717import less from 'less'
1818import stylus from 'stylus'
1919import { parseImports } from '../parser/parser-import'
20+ import { transformQuotes } from '../transform/transform-quotes'
2021import type { ImportStatement } from '../parser/parser-import'
2122import type { ICSSFileMap , SearchGlobOptions } from '../types'
2223
@@ -200,26 +201,31 @@ export function generateCSSCode(path: string, suffix: string) {
200201 const code = fs . readFileSync ( path , { encoding : 'utf-8' } )
201202 let res = ''
202203 switch ( suffix ) {
203- case `.${ SUPPORT_FILE . SCSS } ` : // scss / sass
204+ case `.${ SUPPORT_FILE . SCSS } ` : // scss
204205 // @import 有 css 和 scss的同名文件,会编译 scss
205206 // @import 编译 scss,会一直编译,一直到遇到 import 了一个 css 或没有 import 为止
206207 // 这里先分析出 imports,在根据其内容将 sass 中 import 删除
207208 // 编译 sass 为 css,再复原
208209 // eslint-disable-next-line no-case-declarations
209- const parseSassImporter = parseImports ( code )
210+ const parseScssImporter = parseImports ( code , [ transformQuotes ] )
210211 // eslint-disable-next-line no-case-declarations
211- const codeNoImporter = getCurFileContent ( code , parseSassImporter . imports )
212+ const codeScssNoImporter = getCurFileContent ( code , parseScssImporter . imports )
212213 // eslint-disable-next-line no-case-declarations
213- const sassParseRes = sass . compileString ( codeNoImporter )
214- res = setImportToCompileRes ( sassParseRes . css , parseSassImporter . imports )
214+ const scssParseRes = sass . compileString ( codeScssNoImporter )
215+ res = setImportToCompileRes ( scssParseRes . css , parseScssImporter . imports )
215216 break
216217 case `.${ SUPPORT_FILE . SASS } ` : // sass
217- // ⭐TODO: 支持 sass
218- res = ''
218+ // eslint-disable-next-line no-case-declarations
219+ const parseSassImporter = parseImports ( code , [ transformQuotes ] )
220+ // eslint-disable-next-line no-case-declarations
221+ const codeNoImporter = getCurFileContent ( code , parseSassImporter . imports )
222+ // eslint-disable-next-line no-case-declarations
223+ const sassParseRes = sass . compileString ( codeNoImporter , { syntax : 'indented' } )
224+ res = setImportToCompileRes ( sassParseRes . css , parseSassImporter . imports )
219225 break
220226 case `.${ SUPPORT_FILE . LESS } ` : // less
221227 // eslint-disable-next-line no-case-declarations
222- const parseLessImporter = parseImports ( code )
228+ const parseLessImporter = parseImports ( code , [ transformQuotes ] )
223229 // eslint-disable-next-line no-case-declarations
224230 const codeLessNoImporter = getCurFileContent ( code , parseLessImporter . imports )
225231 less . render ( codeLessNoImporter , { } , ( error , output ) => {
@@ -230,9 +236,8 @@ export function generateCSSCode(path: string, suffix: string) {
230236 } )
231237 break
232238 case `.${ SUPPORT_FILE . STYL } ` : // stylus
233- // TODO unit test
234239 // eslint-disable-next-line no-case-declarations
235- const parseStylusImporter = parseImports ( code )
240+ const parseStylusImporter = parseImports ( code , [ transformQuotes ] )
236241 // eslint-disable-next-line no-case-declarations
237242 const codeStylusNoImporter = getCurFileContent ( code , parseStylusImporter . imports )
238243 stylus . render ( codeStylusNoImporter , { } , ( error : Error , css : string ) => {
@@ -262,7 +267,7 @@ export function getCurFileContent(content: string, parseRes: ImportStatement[])
262267 mgcStr . replaceAll ( '@require' , '' )
263268 }
264269 } )
265- return mgcStr . toString ( )
270+ return mgcStr . toString ( ) . trimStart ( )
266271}
267272
268273export function setImportToCompileRes ( content : string , parseRes : ImportStatement [ ] ) {
0 commit comments