@@ -15,6 +15,7 @@ import {
15
15
SOURCE_MAP_PROP_MAP ,
16
16
getLanguage ,
17
17
getLanguageDefaults ,
18
+ isAliasOf ,
18
19
} from './modules/language' ;
19
20
import { prepareContent } from './modules/prepareContent' ;
20
21
import { transformMarkup } from './modules/markup' ;
@@ -104,16 +105,8 @@ export function sveltePreprocess(
104
105
addLanguageAlias ( aliases ) ;
105
106
}
106
107
107
- const getTransformerOptions = (
108
- name : string ,
109
- alias ?: string ,
110
- ) : TransformerOptions < unknown > => {
108
+ function resolveLanguageArgs ( name : string , alias ?: string ) {
111
109
const { [ name ] : nameOpts , [ alias ] : aliasOpts } = transformers ;
112
-
113
- if ( typeof aliasOpts === 'function' ) return aliasOpts ;
114
- if ( typeof nameOpts === 'function' ) return nameOpts ;
115
- if ( aliasOpts === false || nameOpts === false ) return false ;
116
-
117
110
const opts : Record < string , any > = { } ;
118
111
119
112
if ( typeof nameOpts === 'object' ) {
@@ -127,11 +120,30 @@ export function sveltePreprocess(
127
120
}
128
121
129
122
if ( sourceMap && name in SOURCE_MAP_PROP_MAP ) {
130
- setProp ( opts , ...SOURCE_MAP_PROP_MAP [ name ] ) ;
123
+ const [ path , value ] = SOURCE_MAP_PROP_MAP [ name ] ;
124
+
125
+ setProp ( opts , path , value ) ;
131
126
}
132
127
133
128
return opts ;
134
- } ;
129
+ }
130
+
131
+ function getTransformerOptions (
132
+ lang : string ,
133
+ alias ?: string ,
134
+ { ignoreAliasOverride } : { ignoreAliasOverride ?: boolean } = { } ,
135
+ ) : TransformerOptions < unknown > {
136
+ const { [ lang ] : langOpts , [ alias ] : aliasOpts } = transformers ;
137
+
138
+ if ( ! ignoreAliasOverride && typeof aliasOpts === 'function' ) {
139
+ return aliasOpts ;
140
+ }
141
+
142
+ if ( typeof langOpts === 'function' ) return langOpts ;
143
+ if ( aliasOpts === false || langOpts === false ) return false ;
144
+
145
+ return resolveLanguageArgs ( lang , alias ) ;
146
+ }
135
147
136
148
const getTransformerTo = (
137
149
type : 'markup' | 'script' | 'style' ,
@@ -163,6 +175,13 @@ export function sveltePreprocess(
163
175
} ) ;
164
176
165
177
if ( lang === targetLanguage ) {
178
+ // has override method for alias
179
+ // example: sugarss override should work apart from postcss
180
+ if ( typeof transformerOptions === 'function' && alias !== lang ) {
181
+ return transformerOptions ( { content, filename, attributes } ) ;
182
+ }
183
+
184
+ // otherwise, we're done here
166
185
return { code : content , dependencies } ;
167
186
}
168
187
@@ -216,12 +235,7 @@ export function sveltePreprocess(
216
235
const transformed = await transform (
217
236
'babel' ,
218
237
getTransformerOptions ( 'babel' ) ,
219
- {
220
- content : code ,
221
- map,
222
- filename,
223
- attributes,
224
- } ,
238
+ { content : code , map, filename, attributes } ,
225
239
) ;
226
240
227
241
code = transformed . code ;
@@ -249,14 +263,21 @@ export function sveltePreprocess(
249
263
// istanbul ignore else
250
264
if ( await hasDepInstalled ( 'postcss' ) ) {
251
265
if ( transformers . postcss ) {
252
- const { alias } = getLanguage ( attributes ) ;
253
-
254
- const transformed = await transform (
266
+ const { alias, lang } = getLanguage ( attributes ) ;
267
+ const postcssOptions = getTransformerOptions (
255
268
'postcss' ,
256
- getTransformerOptions ( 'postcss' , alias ) ,
257
- { content : code , map, filename, attributes } ,
269
+ isAliasOf ( alias , lang ) ? alias : null ,
270
+ // todo: this seems wrong and ugly
271
+ { ignoreAliasOverride : true } ,
258
272
) ;
259
273
274
+ const transformed = await transform ( 'postcss' , postcssOptions , {
275
+ content : code ,
276
+ map,
277
+ filename,
278
+ attributes,
279
+ } ) ;
280
+
260
281
code = transformed . code ;
261
282
map = transformed . map ;
262
283
dependencies = concat ( dependencies , transformed . dependencies ) ;
0 commit comments