Skip to content

Commit d5055cd

Browse files
committed
refactor(compiler-sfc): simplify style preprocessors
1 parent 9cb29ee commit d5055cd

File tree

2 files changed

+93
-104
lines changed

2 files changed

+93
-104
lines changed

packages/compiler-sfc/src/compileStyle.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ function preprocess(
213213
)
214214
}
215215

216-
return preprocessor.render(
216+
return preprocessor(
217217
options.source,
218218
options.map,
219219
{

packages/compiler-sfc/src/stylePreprocessors.ts

+92-103
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@ import path from 'path'
33
import { RawSourceMap } from 'source-map'
44
import { SFCStyleCompileOptions } from './compileStyle'
55

6-
export interface StylePreprocessor {
7-
render(
8-
source: string,
9-
map: RawSourceMap | undefined,
10-
options: {
11-
[key: string]: any
12-
filename: string
13-
},
14-
customRequire: SFCStyleCompileOptions['preprocessCustomRequire']
15-
): StylePreprocessorResults
16-
}
6+
export type StylePreprocessor = (
7+
source: string,
8+
map: RawSourceMap | undefined,
9+
options: {
10+
[key: string]: any
11+
filename: string
12+
},
13+
customRequire: SFCStyleCompileOptions['preprocessCustomRequire']
14+
) => StylePreprocessorResults
1715

1816
export interface StylePreprocessorResults {
1917
code: string
@@ -23,118 +21,109 @@ export interface StylePreprocessorResults {
2321
}
2422

2523
// .scss/.sass processor
26-
const scss: StylePreprocessor = {
27-
render(source, map, options, load = require) {
28-
const nodeSass = load('sass')
29-
const finalOptions = {
30-
...options,
31-
data: source,
32-
file: options.filename,
33-
outFile: options.filename,
34-
sourceMap: !!map
35-
}
36-
37-
try {
38-
const result = nodeSass.renderSync(finalOptions)
39-
// sass output path is position path
40-
const dependencies = result.stats.includedFiles
41-
if (map) {
42-
return {
43-
code: result.css.toString(),
44-
map: merge(map, JSON.parse(result.map.toString())),
45-
errors: [],
46-
dependencies
47-
}
48-
}
49-
50-
return { code: result.css.toString(), errors: [], dependencies }
51-
} catch (e) {
52-
return { code: '', errors: [e], dependencies: [] }
53-
}
54-
}
55-
}
56-
57-
const sass: StylePreprocessor = {
58-
render(source, map, options, load) {
59-
return scss.render(
60-
source,
61-
map,
62-
{
63-
...options,
64-
indentedSyntax: true
65-
},
66-
load
67-
)
24+
const scss: StylePreprocessor = (source, map, options, load = require) => {
25+
const nodeSass = load('sass')
26+
const finalOptions = {
27+
...options,
28+
data: source,
29+
file: options.filename,
30+
outFile: options.filename,
31+
sourceMap: !!map
6832
}
69-
}
7033

71-
// .less
72-
const less: StylePreprocessor = {
73-
render(source, map, options, load = require) {
74-
const nodeLess = load('less')
75-
76-
let result: any
77-
let error: Error | null = null
78-
nodeLess.render(
79-
source,
80-
{ ...options, syncImport: true },
81-
(err: Error | null, output: any) => {
82-
error = err
83-
result = output
84-
}
85-
)
86-
87-
if (error) return { code: '', errors: [error], dependencies: [] }
88-
// less output path is relative path
89-
const dependencies = getAbsolutePaths(
90-
result.imports,
91-
path.dirname(options.filename)
92-
)
34+
try {
35+
const result = nodeSass.renderSync(finalOptions)
36+
// sass output path is position path
37+
const dependencies = result.stats.includedFiles
9338
if (map) {
9439
return {
9540
code: result.css.toString(),
96-
map: merge(map, result.map),
41+
map: merge(map, JSON.parse(result.map.toString())),
9742
errors: [],
98-
dependencies: dependencies
43+
dependencies
9944
}
10045
}
10146

47+
return { code: result.css.toString(), errors: [], dependencies }
48+
} catch (e) {
49+
return { code: '', errors: [e], dependencies: [] }
50+
}
51+
}
52+
53+
const sass: StylePreprocessor = (source, map, options, load) =>
54+
scss(
55+
source,
56+
map,
57+
{
58+
...options,
59+
indentedSyntax: true
60+
},
61+
load
62+
)
63+
64+
// .less
65+
const less: StylePreprocessor = (source, map, options, load = require) => {
66+
const nodeLess = load('less')
67+
68+
let result: any
69+
let error: Error | null = null
70+
nodeLess.render(
71+
source,
72+
{ ...options, syncImport: true },
73+
(err: Error | null, output: any) => {
74+
error = err
75+
result = output
76+
}
77+
)
78+
79+
if (error) return { code: '', errors: [error], dependencies: [] }
80+
// less output path is relative path
81+
const dependencies = getAbsolutePaths(
82+
result.imports,
83+
path.dirname(options.filename)
84+
)
85+
if (map) {
10286
return {
10387
code: result.css.toString(),
88+
map: merge(map, result.map),
10489
errors: [],
10590
dependencies: dependencies
10691
}
10792
}
93+
94+
return {
95+
code: result.css.toString(),
96+
errors: [],
97+
dependencies: dependencies
98+
}
10899
}
109100

110101
// .styl
111-
const styl: StylePreprocessor = {
112-
render(source, map, options, load = require) {
113-
const nodeStylus = load('stylus')
114-
try {
115-
const ref = nodeStylus(source)
116-
Object.keys(options).forEach(key => ref.set(key, options[key]))
117-
if (map) ref.set('sourcemap', { inline: false, comment: false })
118-
119-
const result = ref.render()
120-
// stylus output path is relative path
121-
const dependencies = getAbsolutePaths(
122-
ref.deps(),
123-
path.dirname(options.fileName)
124-
)
125-
if (map) {
126-
return {
127-
code: result,
128-
map: merge(map, ref.sourcemap),
129-
errors: [],
130-
dependencies
131-
}
102+
const styl: StylePreprocessor = (source, map, options, load = require) => {
103+
const nodeStylus = load('stylus')
104+
try {
105+
const ref = nodeStylus(source)
106+
Object.keys(options).forEach(key => ref.set(key, options[key]))
107+
if (map) ref.set('sourcemap', { inline: false, comment: false })
108+
109+
const result = ref.render()
110+
// stylus output path is relative path
111+
const dependencies = getAbsolutePaths(
112+
ref.deps(),
113+
path.dirname(options.fileName)
114+
)
115+
if (map) {
116+
return {
117+
code: result,
118+
map: merge(map, ref.sourcemap),
119+
errors: [],
120+
dependencies
132121
}
133-
134-
return { code: result, errors: [], dependencies }
135-
} catch (e) {
136-
return { code: '', errors: [e], dependencies: [] }
137122
}
123+
124+
return { code: result, errors: [], dependencies }
125+
} catch (e) {
126+
return { code: '', errors: [e], dependencies: [] }
138127
}
139128
}
140129

0 commit comments

Comments
 (0)