@@ -195,27 +195,26 @@ async function process_markup(filename: string, process: MarkupPreprocessor, sou
195
195
}
196
196
}
197
197
198
- export default async function preprocess (
199
- source : string ,
200
- preprocessor : PreprocessorGroup | PreprocessorGroup [ ] ,
201
- options ?: { filename ?: string }
202
- ) : Promise < Processed > {
203
- // @ts -ignore todo: doublecheck
204
- const filename = ( options && options . filename ) || preprocessor . filename ; // legacy
205
-
206
- const preprocessors = preprocessor ? ( Array . isArray ( preprocessor ) ? preprocessor : [ preprocessor ] ) : [ ] ;
198
+ function ensureArray < T > ( x : T ) : T extends readonly any [ ] ? T : T [ ] {
199
+ // @ts -ignore
200
+ return Array . isArray ( x ) ? x : [ x ] ;
201
+ }
207
202
208
- const markup = preprocessors . map ( p => p . markup ) . filter ( Boolean ) ;
209
- const script = preprocessors . map ( p => p . script ) . filter ( Boolean ) ;
210
- const style = preprocessors . map ( p => p . style ) . filter ( Boolean ) ;
211
-
212
- const result = new PreprocessResult ( source , filename ) ;
203
+ async function preprocessGrouped < T extends PreprocessResult > (
204
+ result : T ,
205
+ preprocessorGroup : PreprocessorGroup [ ] | PreprocessorGroup
206
+ ) : Promise < void > {
207
+ const preprocessors = ensureArray ( preprocessorGroup ) ;
208
+
209
+ const markup = preprocessors . map ( ( p ) => p . markup ) . filter ( Boolean ) ;
210
+ const script = preprocessors . map ( ( p ) => p . script ) . filter ( Boolean ) ;
211
+ const style = preprocessors . map ( ( p ) => p . style ) . filter ( Boolean ) ;
213
212
214
213
// TODO keep track: what preprocessor generated what sourcemap?
215
214
// to make debugging easier = detect low-resolution sourcemaps in fn combine_mappings
216
215
217
216
for ( const process of markup ) {
218
- result . update_source ( await process_markup ( filename , process , result ) ) ;
217
+ result . update_source ( await process_markup ( result . filename , process , result ) ) ;
219
218
}
220
219
221
220
for ( const process of script ) {
@@ -226,5 +225,23 @@ export default async function preprocess(
226
225
result . update_source ( await process_tag ( 'style' , preprocess , result ) ) ;
227
226
}
228
227
228
+ return ;
229
+ }
230
+
231
+ export default async function preprocess (
232
+ source : string ,
233
+ preprocessor : PreprocessorGroup | Array < PreprocessorGroup | PreprocessorGroup [ ] > = [ ] ,
234
+ options ?: { filename ?: string }
235
+ ) : Promise < Processed > {
236
+ // @ts -ignore todo: doublecheck
237
+ const filename = ( options && options . filename ) || preprocessor . filename ; // legacy
238
+ const result = new PreprocessResult ( source , filename ) ;
239
+
240
+ const preprocessors = ensureArray ( preprocessor ) ;
241
+
242
+ for ( const preprocessorGrouping of preprocessors ) {
243
+ await preprocessGrouped ( result , preprocessorGrouping ) ;
244
+ }
245
+
229
246
return result . to_processed ( ) ;
230
247
}
0 commit comments