|
|
@@ -1,7 +1,12 @@
|
|
|
import merge from 'merge-source-map'
|
|
|
|
|
|
export interface StylePreprocessor {
|
|
|
- render(source: string, map?: object, options?: any): StylePreprocessorResults
|
|
|
+ render(
|
|
|
+ source: string,
|
|
|
+ map?: object,
|
|
|
+ options?: any,
|
|
|
+ customRequire?: (id: string) => any
|
|
|
+ ): StylePreprocessorResults
|
|
|
}
|
|
|
|
|
|
export interface StylePreprocessorResults {
|
|
|
@@ -12,8 +17,8 @@ export interface StylePreprocessorResults {
|
|
|
|
|
|
// .scss/.sass processor
|
|
|
const scss: StylePreprocessor = {
|
|
|
- render(source, map, options) {
|
|
|
- const nodeSass = require('sass')
|
|
|
+ render(source, map, options, load = require) {
|
|
|
+ const nodeSass = load('sass')
|
|
|
const finalOptions = {
|
|
|
...options,
|
|
|
data: source,
|
|
|
@@ -41,18 +46,23 @@ const scss: StylePreprocessor = {
|
|
|
}
|
|
|
|
|
|
const sass: StylePreprocessor = {
|
|
|
- render(source, map, options) {
|
|
|
- return scss.render(source, map, {
|
|
|
- ...options,
|
|
|
- indentedSyntax: true
|
|
|
- })
|
|
|
+ render(source, map, options, load) {
|
|
|
+ return scss.render(
|
|
|
+ source,
|
|
|
+ map,
|
|
|
+ {
|
|
|
+ ...options,
|
|
|
+ indentedSyntax: true
|
|
|
+ },
|
|
|
+ load
|
|
|
+ )
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// .less
|
|
|
const less: StylePreprocessor = {
|
|
|
- render(source, map, options) {
|
|
|
- const nodeLess = require('less')
|
|
|
+ render(source, map, options, load = require) {
|
|
|
+ const nodeLess = load('less')
|
|
|
|
|
|
let result: any
|
|
|
let error: Error | null = null
|
|
|
@@ -81,8 +91,8 @@ const less: StylePreprocessor = {
|
|
|
|
|
|
// .styl
|
|
|
const styl: StylePreprocessor = {
|
|
|
- render(source, map, options) {
|
|
|
- const nodeStylus = require('stylus')
|
|
|
+ render(source, map, options, load = require) {
|
|
|
+ const nodeStylus = load('stylus')
|
|
|
try {
|
|
|
const ref = nodeStylus(source)
|
|
|
Object.keys(options).forEach(key => ref.set(key, options[key]))
|