4848 "es2024" : api .ES2024 ,
4949 }
5050
51+ nameEngine = map [string ]api.EngineName {
52+ "chrome" : api .EngineChrome ,
53+ "deno" : api .EngineDeno ,
54+ "edge" : api .EngineEdge ,
55+ "firefox" : api .EngineFirefox ,
56+ "hermes" : api .EngineHermes ,
57+ "ie" : api .EngineIE ,
58+ "ios" : api .EngineIOS ,
59+ "node" : api .EngineNode ,
60+ "opera" : api .EngineOpera ,
61+ "rhino" : api .EngineRhino ,
62+ "safari" : api .EngineSafari ,
63+ }
64+
5165 // source names: https://github.com/evanw/esbuild/blob/9eca46464ed5615cb36a3beb3f7a7b9a8ffbe7cf/internal/config/config.go#L208
5266 nameLoader = map [string ]api.Loader {
5367 "none" : api .LoaderNone ,
@@ -117,6 +131,11 @@ type ExternalOptions struct {
117131 // Default is esnext.
118132 Target string
119133
134+ // Engines to target, e.g. "chrome58" or "node12".
135+ // TODO1 sensible default if not set. For css only.
136+ // See https://esbuild.github.io/api/#target
137+ Engines []string
138+
120139 // The output format.
121140 // One of: iife, cjs, esm
122141 // Default is to esm.
@@ -200,6 +219,7 @@ type InternalOptions struct {
200219
201220 Stdin bool // Set to true to pass in the entry point as a byte slice.
202221 Splitting bool
222+ IsCSS bool // Entry point is CSS.
203223 TsConfig string
204224 EntryPoints []string
205225 ImportOnResolveFunc func (string , api.OnResolveArgs ) string
@@ -224,6 +244,22 @@ func (opts *Options) compile() (err error) {
224244 return
225245 }
226246
247+ var engines []api.Engine
248+
249+ OUTER:
250+ for _ , value := range opts .Engines {
251+ for engine , name := range nameEngine {
252+ if strings .HasPrefix (value , engine ) {
253+ version := value [len (engine ):]
254+ if version == "" {
255+ return fmt .Errorf ("invalid engine version: %q" , value )
256+ }
257+ engines = append (engines , api.Engine {Name : name , Version : version })
258+ continue OUTER
259+ }
260+ }
261+ }
262+
227263 var loaders map [string ]api.Loader
228264 if opts .Loaders != nil {
229265 loaders = make (map [string ]api.Loader )
@@ -252,6 +288,8 @@ func (opts *Options) compile() (err error) {
252288 loader = api .LoaderTSX
253289 case media .Builtin .JSXType .SubType :
254290 loader = api .LoaderJSX
291+ case media .Builtin .CSSType .SubType :
292+ loader = api .LoaderCSS
255293 default :
256294 err = fmt .Errorf ("unsupported Media Type: %q" , opts .MediaType )
257295 return
@@ -343,6 +381,7 @@ func (opts *Options) compile() (err error) {
343381 AbsWorkingDir : opts .AbsWorkingDir ,
344382
345383 Target : target ,
384+ Engines : engines ,
346385 Format : format ,
347386 Platform : platform ,
348387 Sourcemap : sourceMap ,
@@ -394,6 +433,10 @@ func (o Options) loaderFromFilename(filename string) api.Loader {
394433 if found {
395434 return l
396435 }
436+ if o .IsCSS {
437+ // For CSS builds, handling, default to the file loader for unknown extensions.
438+ return api .LoaderFile
439+ }
397440 return api .LoaderJS
398441}
399442
0 commit comments