@@ -14,6 +14,8 @@ import type { InputOptions } from "@babel/core";
1414let headEl : HTMLHeadElement ;
1515let inlineScriptCount = 0 ;
1616
17+ type Browsers = string | readonly string [ ] ;
18+
1719type CompilationResult = {
1820 async : boolean ;
1921 type : string ;
@@ -26,6 +28,7 @@ type CompilationResult = {
2628 // todo: refine plugins/presets
2729 plugins : InputOptions [ "plugins" ] ;
2830 presets : InputOptions [ "presets" ] ;
31+ targets : Browsers ;
2932 url : string | null ;
3033} ;
3134
@@ -54,7 +57,10 @@ function transformCode(
5457 * Builds the Babel options for transforming the specified script, using some
5558 * sensible default presets and plugins if none were explicitly provided.
5659 */
57- function buildBabelOptions ( script : CompilationResult , filename : string ) {
60+ function buildBabelOptions (
61+ script : CompilationResult ,
62+ filename : string ,
63+ ) : InputOptions {
5864 let presets = script . presets ;
5965 if ( ! presets ) {
6066 if ( script . type === "module" ) {
@@ -63,9 +69,6 @@ function buildBabelOptions(script: CompilationResult, filename: string) {
6369 [
6470 "env" ,
6571 {
66- targets : {
67- esmodules : true ,
68- } ,
6972 modules : false ,
7073 } ,
7174 ] ,
@@ -84,12 +87,21 @@ function buildBabelOptions(script: CompilationResult, filename: string) {
8487 ] ;
8588 }
8689
90+ const targets : InputOptions [ "targets" ] = {
91+ browsers : script . targets ,
92+ } ;
93+
94+ if ( script . type === "module" ) {
95+ targets . esmodules = "intersect" ;
96+ }
97+
8798 return {
8899 filename,
89100 presets,
90101 plugins,
91102 sourceMaps : "inline" as const ,
92103 sourceFileName : filename ,
104+ targets,
93105 } ;
94106}
95107
@@ -141,9 +153,9 @@ function load(
141153/**
142154 * Converts a comma-separated data attribute string into an array of values. If
143155 * the string is empty, returns an empty array. If the string is not defined,
144- * returns null .
156+ * returns undefined .
145157 */
146- function getPluginsOrPresetsFromScript (
158+ function parseFromScriptAttribute (
147159 script : HTMLScriptElement ,
148160 attributeName : string ,
149161) {
@@ -155,7 +167,7 @@ function getPluginsOrPresetsFromScript(
155167 if ( ! rawValue ) {
156168 // Any other falsy value (null, undefined) means we're not overriding this
157169 // setting, and should use the default.
158- return null ;
170+ return undefined ;
159171 }
160172 return rawValue . split ( "," ) . map ( item => item . trim ( ) ) ;
161173}
@@ -194,8 +206,9 @@ function loadScripts(
194206 nonce : script . nonce ,
195207 error : false ,
196208 executed : false ,
197- plugins : getPluginsOrPresetsFromScript ( script , "data-plugins" ) ,
198- presets : getPluginsOrPresetsFromScript ( script , "data-presets" ) ,
209+ plugins : parseFromScriptAttribute ( script , "data-plugins" ) ,
210+ presets : parseFromScriptAttribute ( script , "data-presets" ) ,
211+ targets : parseFromScriptAttribute ( script , "data-targets" ) ,
199212 loaded : false ,
200213 url : null ,
201214 content : null ,
0 commit comments