Skip to content

Commit 4e631f5

Browse files
committed
fix #2357: add rhino and hermes engine targets
1 parent 841846f commit 4e631f5

File tree

5 files changed

+55
-0
lines changed

5 files changed

+55
-0
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333

3434
Deno doesn't support FreeBSD, but it's possible to build Deno for FreeBSD with some additional patches on top. This release of esbuild changes esbuild's Deno installer to download esbuild's FreeBSD binary in this situation. This configuration is unsupported although in theory everything should work.
3535

36+
* Add some more target JavaScript engines ([#2357](https://github.com/evanw/esbuild/issues/2357))
37+
38+
This release adds the [Rhino](https://github.com/mozilla/rhino) and [Hermes](https://hermesengine.dev/) JavaScript engines to the set of engine identifiers that can be passed to the `--target` flag. You can use this to restrict esbuild to only using JavaScript features that are supported on those engines in the output files that esbuild generates.
39+
3640
## 0.14.47
3741

3842
* Make global names more compact when `||=` is available ([#2331](https://github.com/evanw/esbuild/issues/2331))

internal/compat/js_table.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ const (
99
Edge
1010
ES
1111
Firefox
12+
Hermes
1213
IE
1314
IOS
1415
Node
1516
Opera
17+
Rhino
1618
Safari
1719
)
1820

@@ -26,6 +28,8 @@ func (e Engine) String() string {
2628
return "es"
2729
case Firefox:
2830
return "firefox"
31+
case Hermes:
32+
return "hermes"
2933
case IE:
3034
return "ie"
3135
case IOS:
@@ -34,6 +38,8 @@ func (e Engine) String() string {
3438
return "node"
3539
case Opera:
3640
return "opera"
41+
case Rhino:
42+
return "rhino"
3743
case Safari:
3844
return "safari"
3945
}
@@ -224,6 +230,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
224230
Edge: {{start: v{13, 0, 0}}},
225231
ES: {{start: v{2015, 0, 0}}},
226232
Firefox: {{start: v{36, 0, 0}}},
233+
Hermes: {{start: v{0, 7, 0}}},
227234
IOS: {{start: v{10, 0, 0}}},
228235
Node: {{start: v{5, 0, 0}}},
229236
Opera: {{start: v{33, 0, 0}}},
@@ -234,9 +241,11 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
234241
Edge: {{start: v{13, 0, 0}}},
235242
ES: {{start: v{2015, 0, 0}}},
236243
Firefox: {{start: v{45, 0, 0}}},
244+
Hermes: {{start: v{0, 7, 0}}},
237245
IOS: {{start: v{10, 0, 0}}},
238246
Node: {{start: v{6, 0, 0}}},
239247
Opera: {{start: v{36, 0, 0}}},
248+
Rhino: {{start: v{1, 7, 13}}},
240249
Safari: {{start: v{10, 0, 0}}},
241250
},
242251
AsyncAwait: {
@@ -267,6 +276,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
267276
IOS: {{start: v{14, 0, 0}}},
268277
Node: {{start: v{10, 4, 0}}},
269278
Opera: {{start: v{54, 0, 0}}},
279+
Rhino: {{start: v{1, 7, 14}}},
270280
Safari: {{start: v{14, 0, 0}}},
271281
},
272282
Class: {
@@ -382,17 +392,20 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
382392
Edge: {{start: v{14, 0, 0}}},
383393
ES: {{start: v{2015, 0, 0}}},
384394
Firefox: {{start: v{51, 0, 0}}},
395+
Hermes: {{start: v{0, 7, 0}}},
385396
IE: {{start: v{11, 0, 0}}},
386397
IOS: {{start: v{11, 0, 0}}},
387398
Node: {{start: v{6, 0, 0}}},
388399
Opera: {{start: v{36, 0, 0}}},
400+
Rhino: {{start: v{1, 7, 13}}},
389401
Safari: {{start: v{11, 0, 0}}},
390402
},
391403
DefaultArgument: {
392404
Chrome: {{start: v{49, 0, 0}}},
393405
Edge: {{start: v{14, 0, 0}}},
394406
ES: {{start: v{2015, 0, 0}}},
395407
Firefox: {{start: v{53, 0, 0}}},
408+
Hermes: {{start: v{0, 7, 0}}},
396409
IOS: {{start: v{10, 0, 0}}},
397410
Node: {{start: v{6, 0, 0}}},
398411
Opera: {{start: v{36, 0, 0}}},
@@ -403,9 +416,11 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
403416
Edge: {{start: v{18, 0, 0}}},
404417
ES: {{start: v{2015, 0, 0}}},
405418
Firefox: {{start: v{53, 0, 0}}},
419+
Hermes: {{start: v{0, 7, 0}}},
406420
IOS: {{start: v{10, 0, 0}}},
407421
Node: {{start: v{6, 5, 0}}},
408422
Opera: {{start: v{38, 0, 0}}},
423+
Rhino: {{start: v{1, 7, 14}}},
409424
Safari: {{start: v{10, 0, 0}}},
410425
},
411426
DynamicImport: {
@@ -423,9 +438,11 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
423438
Edge: {{start: v{14, 0, 0}}},
424439
ES: {{start: v{2016, 0, 0}}},
425440
Firefox: {{start: v{52, 0, 0}}},
441+
Hermes: {{start: v{0, 7, 0}}},
426442
IOS: {{start: v{10, 3, 0}}},
427443
Node: {{start: v{7, 0, 0}}},
428444
Opera: {{start: v{39, 0, 0}}},
445+
Rhino: {{start: v{1, 7, 14}}},
429446
Safari: {{start: v{10, 1, 0}}},
430447
},
431448
ExportStarAs: {
@@ -451,19 +468,23 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
451468
Edge: {{start: v{15, 0, 0}}},
452469
ES: {{start: v{2015, 0, 0}}},
453470
Firefox: {{start: v{53, 0, 0}}},
471+
Hermes: {{start: v{0, 7, 0}}},
454472
IOS: {{start: v{10, 0, 0}}},
455473
Node: {{start: v{6, 5, 0}}},
456474
Opera: {{start: v{38, 0, 0}}},
475+
Rhino: {{start: v{1, 7, 13}}},
457476
Safari: {{start: v{10, 0, 0}}},
458477
},
459478
Generator: {
460479
Chrome: {{start: v{50, 0, 0}}},
461480
Edge: {{start: v{13, 0, 0}}},
462481
ES: {{start: v{2015, 0, 0}}},
463482
Firefox: {{start: v{53, 0, 0}}},
483+
Hermes: {{start: v{0, 7, 0}}},
464484
IOS: {{start: v{10, 0, 0}}},
465485
Node: {{start: v{6, 0, 0}}},
466486
Opera: {{start: v{37, 0, 0}}},
487+
Rhino: {{start: v{1, 7, 13}}},
467488
Safari: {{start: v{10, 0, 0}}},
468489
},
469490
Hashbang: {
@@ -494,6 +515,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
494515
Edge: {{start: v{85, 0, 0}}},
495516
ES: {{start: v{2021, 0, 0}}},
496517
Firefox: {{start: v{79, 0, 0}}},
518+
Hermes: {{start: v{0, 7, 0}}},
497519
IOS: {{start: v{14, 0, 0}}},
498520
Node: {{start: v{15, 0, 0}}},
499521
Opera: {{start: v{71, 0, 0}}},
@@ -504,6 +526,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
504526
Edge: {{start: v{14, 0, 0}}},
505527
ES: {{start: v{2016, 0, 0}}},
506528
Firefox: {{start: v{47, 0, 0}}},
529+
Hermes: {{start: v{0, 7, 0}}},
507530
IOS: {{start: v{10, 3, 0}}},
508531
Node: {{start: v{6, 0, 0}}},
509532
Opera: {{start: v{36, 0, 0}}},
@@ -514,6 +537,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
514537
Edge: {{start: v{14, 0, 0}}},
515538
ES: {{start: v{2015, 0, 0}}},
516539
Firefox: {{start: v{41, 0, 0}}},
540+
Hermes: {{start: v{0, 7, 0}}},
517541
IOS: {{start: v{10, 0, 0}}},
518542
Node: {{start: v{5, 0, 0}}},
519543
Opera: {{start: v{33, 0, 0}}},
@@ -530,6 +554,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
530554
Edge: {{start: v{80, 0, 0}}},
531555
ES: {{start: v{2020, 0, 0}}},
532556
Firefox: {{start: v{72, 0, 0}}},
557+
Hermes: {{start: v{0, 7, 0}}},
533558
IOS: {{start: v{13, 4, 0}}},
534559
Node: {{start: v{14, 0, 0}}},
535560
Opera: {{start: v{67, 0, 0}}},
@@ -540,27 +565,32 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
540565
Edge: {{start: v{12, 0, 0}}},
541566
ES: {{start: v{5, 0, 0}}},
542567
Firefox: {{start: v{2, 0, 0}}},
568+
Hermes: {{start: v{0, 7, 0}}},
543569
IE: {{start: v{9, 0, 0}}},
544570
IOS: {{start: v{6, 0, 0}}},
545571
Node: {{start: v{0, 4, 0}}},
546572
Opera: {{start: v{10, 10, 0}}},
573+
Rhino: {{start: v{1, 7, 13}}},
547574
Safari: {{start: v{3, 1, 0}}},
548575
},
549576
ObjectExtensions: {
550577
Chrome: {{start: v{44, 0, 0}}},
551578
Edge: {{start: v{12, 0, 0}}},
552579
ES: {{start: v{2015, 0, 0}}},
553580
Firefox: {{start: v{34, 0, 0}}},
581+
Hermes: {{start: v{0, 7, 0}}},
554582
IOS: {{start: v{10, 0, 0}}},
555583
Node: {{start: v{4, 0, 0}}},
556584
Opera: {{start: v{31, 0, 0}}},
585+
Rhino: {{start: v{1, 7, 14}}},
557586
Safari: {{start: v{10, 0, 0}}},
558587
},
559588
ObjectRestSpread: {
560589
Chrome: {{start: v{60, 0, 0}}},
561590
Edge: {{start: v{79, 0, 0}}},
562591
ES: {{start: v{2018, 0, 0}}},
563592
Firefox: {{start: v{55, 0, 0}}},
593+
Hermes: {{start: v{0, 7, 0}}},
564594
IOS: {{start: v{11, 3, 0}}},
565595
Node: {{start: v{8, 3, 0}}},
566596
Opera: {{start: v{47, 0, 0}}},
@@ -571,6 +601,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
571601
Edge: {{start: v{79, 0, 0}}},
572602
ES: {{start: v{2019, 0, 0}}},
573603
Firefox: {{start: v{58, 0, 0}}},
604+
Hermes: {{start: v{0, 7, 0}}},
574605
IOS: {{start: v{11, 3, 0}}},
575606
Node: {{start: v{10, 0, 0}}},
576607
Opera: {{start: v{53, 0, 0}}},
@@ -581,6 +612,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
581612
Edge: {{start: v{91, 0, 0}}},
582613
ES: {{start: v{2020, 0, 0}}},
583614
Firefox: {{start: v{74, 0, 0}}},
615+
Hermes: {{start: v{0, 7, 0}}},
584616
IOS: {{start: v{13, 4, 0}}},
585617
Node: {{start: v{16, 9, 0}}},
586618
Opera: {{start: v{77, 0, 0}}},
@@ -591,6 +623,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
591623
Edge: {{start: v{79, 0, 0}}},
592624
ES: {{start: v{2018, 0, 0}}},
593625
Firefox: {{start: v{78, 0, 0}}},
626+
Hermes: {{start: v{0, 7, 0}}},
594627
IOS: {{start: v{11, 3, 0}}},
595628
Node: {{start: v{8, 10, 0}}},
596629
Opera: {{start: v{49, 0, 0}}},
@@ -601,6 +634,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
601634
Edge: {{start: v{79, 0, 0}}},
602635
ES: {{start: v{2018, 0, 0}}},
603636
Firefox: {{start: v{78, 0, 0}}},
637+
Hermes: {{start: v{0, 7, 0}}},
604638
Node: {{start: v{8, 10, 0}}},
605639
Opera: {{start: v{49, 0, 0}}},
606640
},
@@ -628,6 +662,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
628662
Edge: {{start: v{13, 0, 0}}},
629663
ES: {{start: v{2015, 0, 0}}},
630664
Firefox: {{start: v{46, 0, 0}}},
665+
Hermes: {{start: v{0, 7, 0}}},
631666
IOS: {{start: v{12, 0, 0}}},
632667
Node: {{start: v{6, 0, 0}}},
633668
Opera: {{start: v{37, 0, 0}}},
@@ -648,6 +683,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
648683
Edge: {{start: v{12, 0, 0}}},
649684
ES: {{start: v{2015, 0, 0}}},
650685
Firefox: {{start: v{43, 0, 0}}},
686+
Hermes: {{start: v{0, 7, 0}}},
651687
IOS: {{start: v{10, 0, 0}}},
652688
Node: {{start: v{6, 0, 0}}},
653689
Opera: {{start: v{34, 0, 0}}},
@@ -658,9 +694,11 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
658694
Edge: {{start: v{13, 0, 0}}},
659695
ES: {{start: v{2015, 0, 0}}},
660696
Firefox: {{start: v{34, 0, 0}}},
697+
Hermes: {{start: v{0, 7, 0}}},
661698
IOS: {{start: v{9, 0, 0}}},
662699
Node: {{start: v{4, 0, 0}}},
663700
Opera: {{start: v{28, 0, 0}}},
701+
Rhino: {{start: v{1, 7, 14}}},
664702
Safari: {{start: v{9, 0, 0}}},
665703
},
666704
TopLevelAwait: {
@@ -687,6 +725,7 @@ var jsTable = map[JSFeature]map[Engine][]versionRange{
687725
Edge: {{start: v{12, 0, 0}}},
688726
ES: {{start: v{2015, 0, 0}}},
689727
Firefox: {{start: v{53, 0, 0}}},
728+
Hermes: {{start: v{0, 7, 0}}},
690729
IOS: {{start: v{9, 0, 0}}},
691730
Node: {{start: v{4, 0, 0}}},
692731
Opera: {{start: v{31, 0, 0}}},

pkg/api/api_js_table.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ const (
1515
EngineNode
1616
EngineOpera
1717
EngineSafari
18+
EngineHermes
19+
EngineRhino
1820
)
1921

2022
func convertEngineName(engine EngineName) compat.Engine {
@@ -35,6 +37,10 @@ func convertEngineName(engine EngineName) compat.Engine {
3537
return compat.Opera
3638
case EngineSafari:
3739
return compat.Safari
40+
case EngineHermes:
41+
return compat.Hermes
42+
case EngineRhino:
43+
return compat.Rhino
3844
default:
3945
panic("Invalid engine name")
4046
}

pkg/cli/cli_js_table.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ var validEngines = map[string]api.EngineName{
88
"chrome": api.EngineChrome,
99
"edge": api.EngineEdge,
1010
"firefox": api.EngineFirefox,
11+
"hermes": api.EngineHermes,
1112
"ie": api.EngineIE,
1213
"ios": api.EngineIOS,
1314
"node": api.EngineNode,
1415
"opera": api.EngineOpera,
16+
"rhino": api.EngineRhino,
1517
"safari": api.EngineSafari,
1618
}

scripts/compat-table.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ const engines = [
9595
'node',
9696
'opera',
9797
'safari',
98+
99+
// Uncommon JavaScript runtimes
100+
'hermes',
101+
'rhino',
98102
]
99103

100104
function mergeVersions(target, res) {

0 commit comments

Comments
 (0)