github.com/evanw/esbuild@v0.21.4/internal/compat/js_table.go (about)

     1  // This file was automatically generated by "js_table.ts"
     2  
     3  package compat
     4  
     5  type Engine uint8
     6  
     7  const (
     8  	Chrome Engine = iota
     9  	Deno
    10  	Edge
    11  	ES
    12  	Firefox
    13  	Hermes
    14  	IE
    15  	IOS
    16  	Node
    17  	Opera
    18  	Rhino
    19  	Safari
    20  )
    21  
    22  func (e Engine) String() string {
    23  	switch e {
    24  	case Chrome:
    25  		return "chrome"
    26  	case Deno:
    27  		return "deno"
    28  	case Edge:
    29  		return "edge"
    30  	case ES:
    31  		return "es"
    32  	case Firefox:
    33  		return "firefox"
    34  	case Hermes:
    35  		return "hermes"
    36  	case IE:
    37  		return "ie"
    38  	case IOS:
    39  		return "ios"
    40  	case Node:
    41  		return "node"
    42  	case Opera:
    43  		return "opera"
    44  	case Rhino:
    45  		return "rhino"
    46  	case Safari:
    47  		return "safari"
    48  	}
    49  	return ""
    50  }
    51  
    52  func (e Engine) IsBrowser() bool {
    53  	switch e {
    54  	case Chrome, Edge, Firefox, IE, IOS, Opera, Safari:
    55  		return true
    56  	}
    57  	return false
    58  }
    59  
    60  type JSFeature uint64
    61  
    62  const (
    63  	ArbitraryModuleNamespaceNames JSFeature = 1 << iota
    64  	ArraySpread
    65  	Arrow
    66  	AsyncAwait
    67  	AsyncGenerator
    68  	Bigint
    69  	Class
    70  	ClassField
    71  	ClassPrivateAccessor
    72  	ClassPrivateBrandCheck
    73  	ClassPrivateField
    74  	ClassPrivateMethod
    75  	ClassPrivateStaticAccessor
    76  	ClassPrivateStaticField
    77  	ClassPrivateStaticMethod
    78  	ClassStaticBlocks
    79  	ClassStaticField
    80  	ConstAndLet
    81  	Decorators
    82  	DefaultArgument
    83  	Destructuring
    84  	DynamicImport
    85  	ExponentOperator
    86  	ExportStarAs
    87  	ForAwait
    88  	ForOf
    89  	FunctionNameConfigurable
    90  	FunctionOrClassPropertyAccess
    91  	Generator
    92  	Hashbang
    93  	ImportAssertions
    94  	ImportAttributes
    95  	ImportMeta
    96  	InlineScript
    97  	LogicalAssignment
    98  	NestedRestBinding
    99  	NewTarget
   100  	NodeColonPrefixImport
   101  	NodeColonPrefixRequire
   102  	NullishCoalescing
   103  	ObjectAccessors
   104  	ObjectExtensions
   105  	ObjectRestSpread
   106  	OptionalCatchBinding
   107  	OptionalChain
   108  	RegexpDotAllFlag
   109  	RegexpLookbehindAssertions
   110  	RegexpMatchIndices
   111  	RegexpNamedCaptureGroups
   112  	RegexpSetNotation
   113  	RegexpStickyAndUnicodeFlags
   114  	RegexpUnicodePropertyEscapes
   115  	RestArgument
   116  	TemplateLiteral
   117  	TopLevelAwait
   118  	TypeofExoticObjectIsObject
   119  	UnicodeEscapes
   120  	Using
   121  )
   122  
   123  var StringToJSFeature = map[string]JSFeature{
   124  	"arbitrary-module-namespace-names":  ArbitraryModuleNamespaceNames,
   125  	"array-spread":                      ArraySpread,
   126  	"arrow":                             Arrow,
   127  	"async-await":                       AsyncAwait,
   128  	"async-generator":                   AsyncGenerator,
   129  	"bigint":                            Bigint,
   130  	"class":                             Class,
   131  	"class-field":                       ClassField,
   132  	"class-private-accessor":            ClassPrivateAccessor,
   133  	"class-private-brand-check":         ClassPrivateBrandCheck,
   134  	"class-private-field":               ClassPrivateField,
   135  	"class-private-method":              ClassPrivateMethod,
   136  	"class-private-static-accessor":     ClassPrivateStaticAccessor,
   137  	"class-private-static-field":        ClassPrivateStaticField,
   138  	"class-private-static-method":       ClassPrivateStaticMethod,
   139  	"class-static-blocks":               ClassStaticBlocks,
   140  	"class-static-field":                ClassStaticField,
   141  	"const-and-let":                     ConstAndLet,
   142  	"decorators":                        Decorators,
   143  	"default-argument":                  DefaultArgument,
   144  	"destructuring":                     Destructuring,
   145  	"dynamic-import":                    DynamicImport,
   146  	"exponent-operator":                 ExponentOperator,
   147  	"export-star-as":                    ExportStarAs,
   148  	"for-await":                         ForAwait,
   149  	"for-of":                            ForOf,
   150  	"function-name-configurable":        FunctionNameConfigurable,
   151  	"function-or-class-property-access": FunctionOrClassPropertyAccess,
   152  	"generator":                         Generator,
   153  	"hashbang":                          Hashbang,
   154  	"import-assertions":                 ImportAssertions,
   155  	"import-attributes":                 ImportAttributes,
   156  	"import-meta":                       ImportMeta,
   157  	"inline-script":                     InlineScript,
   158  	"logical-assignment":                LogicalAssignment,
   159  	"nested-rest-binding":               NestedRestBinding,
   160  	"new-target":                        NewTarget,
   161  	"node-colon-prefix-import":          NodeColonPrefixImport,
   162  	"node-colon-prefix-require":         NodeColonPrefixRequire,
   163  	"nullish-coalescing":                NullishCoalescing,
   164  	"object-accessors":                  ObjectAccessors,
   165  	"object-extensions":                 ObjectExtensions,
   166  	"object-rest-spread":                ObjectRestSpread,
   167  	"optional-catch-binding":            OptionalCatchBinding,
   168  	"optional-chain":                    OptionalChain,
   169  	"regexp-dot-all-flag":               RegexpDotAllFlag,
   170  	"regexp-lookbehind-assertions":      RegexpLookbehindAssertions,
   171  	"regexp-match-indices":              RegexpMatchIndices,
   172  	"regexp-named-capture-groups":       RegexpNamedCaptureGroups,
   173  	"regexp-set-notation":               RegexpSetNotation,
   174  	"regexp-sticky-and-unicode-flags":   RegexpStickyAndUnicodeFlags,
   175  	"regexp-unicode-property-escapes":   RegexpUnicodePropertyEscapes,
   176  	"rest-argument":                     RestArgument,
   177  	"template-literal":                  TemplateLiteral,
   178  	"top-level-await":                   TopLevelAwait,
   179  	"typeof-exotic-object-is-object":    TypeofExoticObjectIsObject,
   180  	"unicode-escapes":                   UnicodeEscapes,
   181  	"using":                             Using,
   182  }
   183  
   184  func (features JSFeature) Has(feature JSFeature) bool {
   185  	return (features & feature) != 0
   186  }
   187  
   188  func (features JSFeature) ApplyOverrides(overrides JSFeature, mask JSFeature) JSFeature {
   189  	return (features & ^mask) | (overrides & mask)
   190  }
   191  
   192  var jsTable = map[JSFeature]map[Engine][]versionRange{
   193  	ArbitraryModuleNamespaceNames: {
   194  		Chrome:  {{start: v{90, 0, 0}}},
   195  		ES:      {{start: v{2022, 0, 0}}},
   196  		Firefox: {{start: v{87, 0, 0}}},
   197  		IOS:     {{start: v{14, 5, 0}}},
   198  		Node:    {{start: v{16, 0, 0}}},
   199  		Safari:  {{start: v{14, 1, 0}}},
   200  	},
   201  	ArraySpread: {
   202  		// Note: The latest version of "IE" failed 15 tests including: spread syntax for iterable objects: spreading non-iterables is a runtime error
   203  		// Note: The latest version of "Rhino" failed 15 tests including: spread syntax for iterable objects: spreading non-iterables is a runtime error
   204  		Chrome:  {{start: v{46, 0, 0}}},
   205  		Deno:    {{start: v{1, 0, 0}}},
   206  		Edge:    {{start: v{13, 0, 0}}},
   207  		ES:      {{start: v{2015, 0, 0}}},
   208  		Firefox: {{start: v{36, 0, 0}}},
   209  		Hermes:  {{start: v{0, 7, 0}}},
   210  		IOS:     {{start: v{10, 0, 0}}},
   211  		Node:    {{start: v{5, 0, 0}}},
   212  		Opera:   {{start: v{33, 0, 0}}},
   213  		Safari:  {{start: v{10, 0, 0}}},
   214  	},
   215  	Arrow: {
   216  		// Note: The latest version of "Hermes" failed 3 tests including: arrow functions: lexical "super" binding in constructors
   217  		// Note: The latest version of "IE" failed 13 tests including: arrow functions: "this" unchanged by call or apply
   218  		// Note: The latest version of "Rhino" failed 3 tests including: arrow functions: lexical "new.target" binding
   219  		Chrome:  {{start: v{49, 0, 0}}},
   220  		Deno:    {{start: v{1, 0, 0}}},
   221  		Edge:    {{start: v{13, 0, 0}}},
   222  		ES:      {{start: v{2015, 0, 0}}},
   223  		Firefox: {{start: v{45, 0, 0}}},
   224  		IOS:     {{start: v{10, 0, 0}}},
   225  		Node:    {{start: v{6, 0, 0}}},
   226  		Opera:   {{start: v{36, 0, 0}}},
   227  		Safari:  {{start: v{10, 0, 0}}},
   228  	},
   229  	AsyncAwait: {
   230  		// Note: The latest version of "Hermes" failed 4 tests including: async functions: async arrow functions
   231  		// Note: The latest version of "IE" failed 16 tests including: async functions: async arrow functions
   232  		// Note: The latest version of "Rhino" failed 16 tests including: async functions: async arrow functions
   233  		Chrome:  {{start: v{55, 0, 0}}},
   234  		Deno:    {{start: v{1, 0, 0}}},
   235  		Edge:    {{start: v{15, 0, 0}}},
   236  		ES:      {{start: v{2017, 0, 0}}},
   237  		Firefox: {{start: v{52, 0, 0}}},
   238  		IOS:     {{start: v{11, 0, 0}}},
   239  		Node:    {{start: v{7, 6, 0}}},
   240  		Opera:   {{start: v{42, 0, 0}}},
   241  		Safari:  {{start: v{11, 0, 0}}},
   242  	},
   243  	AsyncGenerator: {
   244  		// Note: The latest version of "Hermes" failed this test: Asynchronous Iterators: async generators
   245  		// Note: The latest version of "IE" failed this test: Asynchronous Iterators: async generators
   246  		// Note: The latest version of "Rhino" failed this test: Asynchronous Iterators: async generators
   247  		Chrome:  {{start: v{63, 0, 0}}},
   248  		Deno:    {{start: v{1, 0, 0}}},
   249  		Edge:    {{start: v{79, 0, 0}}},
   250  		ES:      {{start: v{2018, 0, 0}}},
   251  		Firefox: {{start: v{57, 0, 0}}},
   252  		IOS:     {{start: v{12, 0, 0}}},
   253  		Node:    {{start: v{10, 0, 0}}},
   254  		Opera:   {{start: v{50, 0, 0}}},
   255  		Safari:  {{start: v{12, 0, 0}}},
   256  	},
   257  	Bigint: {
   258  		// Note: The latest version of "IE" failed this test: BigInt: basic functionality
   259  		Chrome:  {{start: v{67, 0, 0}}},
   260  		Deno:    {{start: v{1, 0, 0}}},
   261  		Edge:    {{start: v{79, 0, 0}}},
   262  		ES:      {{start: v{2020, 0, 0}}},
   263  		Firefox: {{start: v{68, 0, 0}}},
   264  		Hermes:  {{start: v{0, 12, 0}}},
   265  		IOS:     {{start: v{14, 0, 0}}},
   266  		Node:    {{start: v{10, 4, 0}}},
   267  		Opera:   {{start: v{54, 0, 0}}},
   268  		Rhino:   {{start: v{1, 7, 14}}},
   269  		Safari:  {{start: v{14, 0, 0}}},
   270  	},
   271  	Class: {
   272  		// Note: The latest version of "Hermes" failed 24 tests including: class: accessor properties
   273  		// Note: The latest version of "IE" failed 24 tests including: class: accessor properties
   274  		// Note: The latest version of "Rhino" failed 24 tests including: class: accessor properties
   275  		Chrome:  {{start: v{49, 0, 0}}},
   276  		Deno:    {{start: v{1, 0, 0}}},
   277  		Edge:    {{start: v{13, 0, 0}}},
   278  		ES:      {{start: v{2015, 0, 0}}},
   279  		Firefox: {{start: v{45, 0, 0}}},
   280  		IOS:     {{start: v{10, 0, 0}}},
   281  		Node:    {{start: v{6, 0, 0}}},
   282  		Opera:   {{start: v{36, 0, 0}}},
   283  		Safari:  {{start: v{10, 0, 0}}},
   284  	},
   285  	ClassField: {
   286  		// Note: The latest version of "Hermes" failed 2 tests including: instance class fields: computed instance class fields
   287  		// Note: The latest version of "IE" failed 2 tests including: instance class fields: computed instance class fields
   288  		// Note: The latest version of "Rhino" failed 2 tests including: instance class fields: computed instance class fields
   289  		Chrome:  {{start: v{73, 0, 0}}},
   290  		Deno:    {{start: v{1, 0, 0}}},
   291  		Edge:    {{start: v{79, 0, 0}}},
   292  		ES:      {{start: v{2022, 0, 0}}},
   293  		Firefox: {{start: v{69, 0, 0}}},
   294  		IOS:     {{start: v{14, 0, 0}}},
   295  		Node:    {{start: v{12, 0, 0}}},
   296  		Opera:   {{start: v{60, 0, 0}}},
   297  		Safari:  {{start: v{14, 0, 0}}},
   298  	},
   299  	ClassPrivateAccessor: {
   300  		// Note: The latest version of "Hermes" failed this test: private class methods: private accessor properties
   301  		// Note: The latest version of "IE" failed this test: private class methods: private accessor properties
   302  		// Note: The latest version of "Rhino" failed this test: private class methods: private accessor properties
   303  		Chrome:  {{start: v{84, 0, 0}}},
   304  		Deno:    {{start: v{1, 0, 0}}},
   305  		Edge:    {{start: v{84, 0, 0}}},
   306  		ES:      {{start: v{2022, 0, 0}}},
   307  		Firefox: {{start: v{90, 0, 0}}},
   308  		IOS:     {{start: v{15, 0, 0}}},
   309  		Node:    {{start: v{14, 6, 0}}},
   310  		Opera:   {{start: v{70, 0, 0}}},
   311  		Safari:  {{start: v{15, 0, 0}}},
   312  	},
   313  	ClassPrivateBrandCheck: {
   314  		// Note: The latest version of "Hermes" failed this test: Ergonomic brand checks for private fields
   315  		// Note: The latest version of "IE" failed this test: Ergonomic brand checks for private fields
   316  		// Note: The latest version of "Rhino" failed this test: Ergonomic brand checks for private fields
   317  		Chrome:  {{start: v{91, 0, 0}}},
   318  		Deno:    {{start: v{1, 9, 0}}},
   319  		Edge:    {{start: v{91, 0, 0}}},
   320  		ES:      {{start: v{2022, 0, 0}}},
   321  		Firefox: {{start: v{90, 0, 0}}},
   322  		IOS:     {{start: v{15, 0, 0}}},
   323  		Node:    {{start: v{16, 4, 0}}},
   324  		Opera:   {{start: v{77, 0, 0}}},
   325  		Safari:  {{start: v{15, 0, 0}}},
   326  	},
   327  	ClassPrivateField: {
   328  		// Note: The latest version of "Hermes" failed 4 tests including: instance class fields: optional deep private instance class fields access
   329  		// Note: The latest version of "IE" failed 4 tests including: instance class fields: optional deep private instance class fields access
   330  		// Note: The latest version of "Rhino" failed 4 tests including: instance class fields: optional deep private instance class fields access
   331  		Chrome:  {{start: v{84, 0, 0}}},
   332  		Deno:    {{start: v{1, 0, 0}}},
   333  		Edge:    {{start: v{84, 0, 0}}},
   334  		ES:      {{start: v{2022, 0, 0}}},
   335  		Firefox: {{start: v{90, 0, 0}}},
   336  		IOS:     {{start: v{14, 5, 0}}},
   337  		Node:    {{start: v{14, 6, 0}}},
   338  		Opera:   {{start: v{70, 0, 0}}},
   339  		Safari:  {{start: v{14, 1, 0}}},
   340  	},
   341  	ClassPrivateMethod: {
   342  		// Note: The latest version of "Hermes" failed this test: private class methods: private instance methods
   343  		// Note: The latest version of "IE" failed this test: private class methods: private instance methods
   344  		// Note: The latest version of "Rhino" failed this test: private class methods: private instance methods
   345  		Chrome:  {{start: v{84, 0, 0}}},
   346  		Deno:    {{start: v{1, 0, 0}}},
   347  		Edge:    {{start: v{84, 0, 0}}},
   348  		ES:      {{start: v{2022, 0, 0}}},
   349  		Firefox: {{start: v{90, 0, 0}}},
   350  		IOS:     {{start: v{15, 0, 0}}},
   351  		Node:    {{start: v{14, 6, 0}}},
   352  		Opera:   {{start: v{70, 0, 0}}},
   353  		Safari:  {{start: v{15, 0, 0}}},
   354  	},
   355  	ClassPrivateStaticAccessor: {
   356  		// Note: The latest version of "Hermes" failed this test: private class methods: private static accessor properties
   357  		// Note: The latest version of "IE" failed this test: private class methods: private static accessor properties
   358  		// Note: The latest version of "Rhino" failed this test: private class methods: private static accessor properties
   359  		Chrome:  {{start: v{84, 0, 0}}},
   360  		Deno:    {{start: v{1, 0, 0}}},
   361  		Edge:    {{start: v{84, 0, 0}}},
   362  		ES:      {{start: v{2022, 0, 0}}},
   363  		Firefox: {{start: v{90, 0, 0}}},
   364  		IOS:     {{start: v{15, 0, 0}}},
   365  		Node:    {{start: v{14, 6, 0}}},
   366  		Opera:   {{start: v{70, 0, 0}}},
   367  		Safari:  {{start: v{15, 0, 0}}},
   368  	},
   369  	ClassPrivateStaticField: {
   370  		// Note: The latest version of "Hermes" failed this test: static class fields: private static class fields
   371  		// Note: The latest version of "IE" failed this test: static class fields: private static class fields
   372  		// Note: The latest version of "Rhino" failed this test: static class fields: private static class fields
   373  		Chrome:  {{start: v{74, 0, 0}}},
   374  		Deno:    {{start: v{1, 0, 0}}},
   375  		Edge:    {{start: v{79, 0, 0}}},
   376  		ES:      {{start: v{2022, 0, 0}}},
   377  		Firefox: {{start: v{90, 0, 0}}},
   378  		IOS:     {{start: v{14, 5, 0}}},
   379  		Node:    {{start: v{12, 0, 0}}},
   380  		Opera:   {{start: v{62, 0, 0}}},
   381  		Safari:  {{start: v{14, 1, 0}}},
   382  	},
   383  	ClassPrivateStaticMethod: {
   384  		// Note: The latest version of "Hermes" failed this test: private class methods: private static methods
   385  		// Note: The latest version of "IE" failed this test: private class methods: private static methods
   386  		// Note: The latest version of "Rhino" failed this test: private class methods: private static methods
   387  		Chrome:  {{start: v{84, 0, 0}}},
   388  		Deno:    {{start: v{1, 0, 0}}},
   389  		Edge:    {{start: v{84, 0, 0}}},
   390  		ES:      {{start: v{2022, 0, 0}}},
   391  		Firefox: {{start: v{90, 0, 0}}},
   392  		IOS:     {{start: v{15, 0, 0}}},
   393  		Node:    {{start: v{14, 6, 0}}},
   394  		Opera:   {{start: v{70, 0, 0}}},
   395  		Safari:  {{start: v{15, 0, 0}}},
   396  	},
   397  	ClassStaticBlocks: {
   398  		Chrome:  {{start: v{91, 0, 0}}},
   399  		Deno:    {{start: v{1, 14, 0}}},
   400  		Edge:    {{start: v{94, 0, 0}}},
   401  		ES:      {{start: v{2022, 0, 0}}},
   402  		Firefox: {{start: v{93, 0, 0}}},
   403  		IOS:     {{start: v{16, 4, 0}}},
   404  		Node:    {{start: v{16, 11, 0}}},
   405  		Opera:   {{start: v{80, 0, 0}}},
   406  		Safari:  {{start: v{16, 4, 0}}},
   407  	},
   408  	ClassStaticField: {
   409  		// Note: The latest version of "Hermes" failed 2 tests including: static class fields: computed static class fields
   410  		// Note: The latest version of "IE" failed 2 tests including: static class fields: computed static class fields
   411  		// Note: The latest version of "Rhino" failed 2 tests including: static class fields: computed static class fields
   412  		Chrome:  {{start: v{73, 0, 0}}},
   413  		Deno:    {{start: v{1, 0, 0}}},
   414  		Edge:    {{start: v{79, 0, 0}}},
   415  		ES:      {{start: v{2022, 0, 0}}},
   416  		Firefox: {{start: v{75, 0, 0}}},
   417  		IOS:     {{start: v{14, 5, 0}}},
   418  		Node:    {{start: v{12, 0, 0}}},
   419  		Opera:   {{start: v{60, 0, 0}}},
   420  		Safari:  {{start: v{14, 1, 0}}},
   421  	},
   422  	ConstAndLet: {
   423  		// Note: The latest version of "Hermes" failed 20 tests including: const: for loop statement scope
   424  		// Note: The latest version of "IE" failed 6 tests including: const: for-in loop iteration scope
   425  		// Note: The latest version of "Rhino" failed 22 tests including: const: cannot be in statements
   426  		Chrome:  {{start: v{49, 0, 0}}},
   427  		Deno:    {{start: v{1, 0, 0}}},
   428  		Edge:    {{start: v{14, 0, 0}}},
   429  		ES:      {{start: v{2015, 0, 0}}},
   430  		Firefox: {{start: v{51, 0, 0}}},
   431  		IOS:     {{start: v{11, 0, 0}}},
   432  		Node:    {{start: v{6, 0, 0}}},
   433  		Opera:   {{start: v{36, 0, 0}}},
   434  		Safari:  {{start: v{11, 0, 0}}},
   435  	},
   436  	Decorators: {},
   437  	DefaultArgument: {
   438  		// Note: The latest version of "Hermes" failed 2 tests including: default function parameters: separate scope
   439  		// Note: The latest version of "IE" failed 7 tests including: default function parameters: arguments object interaction
   440  		// Note: The latest version of "Rhino" failed 7 tests including: default function parameters: arguments object interaction
   441  		Chrome:  {{start: v{49, 0, 0}}},
   442  		Deno:    {{start: v{1, 0, 0}}},
   443  		Edge:    {{start: v{14, 0, 0}}},
   444  		ES:      {{start: v{2015, 0, 0}}},
   445  		Firefox: {{start: v{53, 0, 0}}},
   446  		IOS:     {{start: v{10, 0, 0}}},
   447  		Node:    {{start: v{6, 0, 0}}},
   448  		Opera:   {{start: v{36, 0, 0}}},
   449  		Safari:  {{start: v{10, 0, 0}}},
   450  	},
   451  	Destructuring: {
   452  		// Note: The latest version of "Hermes" failed 3 tests including: destructuring, declarations: defaults, let temporal dead zone
   453  		// Note: The latest version of "IE" failed 71 tests including: destructuring, assignment: chained iterable destructuring
   454  		// Note: The latest version of "Rhino" failed 33 tests including: destructuring, assignment: computed properties
   455  		Chrome:  {{start: v{51, 0, 0}}},
   456  		Deno:    {{start: v{1, 0, 0}}},
   457  		Edge:    {{start: v{18, 0, 0}}},
   458  		ES:      {{start: v{2015, 0, 0}}},
   459  		Firefox: {{start: v{53, 0, 0}}},
   460  		IOS:     {{start: v{10, 0, 0}}},
   461  		Node:    {{start: v{6, 5, 0}}},
   462  		Opera:   {{start: v{38, 0, 0}}},
   463  		Safari:  {{start: v{10, 0, 0}}},
   464  	},
   465  	DynamicImport: {
   466  		Chrome:  {{start: v{63, 0, 0}}},
   467  		Edge:    {{start: v{79, 0, 0}}},
   468  		ES:      {{start: v{2015, 0, 0}}},
   469  		Firefox: {{start: v{67, 0, 0}}},
   470  		IOS:     {{start: v{11, 0, 0}}},
   471  		Node:    {{start: v{12, 20, 0}, end: v{13, 0, 0}}, {start: v{13, 2, 0}}},
   472  		Opera:   {{start: v{50, 0, 0}}},
   473  		Safari:  {{start: v{11, 1, 0}}},
   474  	},
   475  	ExponentOperator: {
   476  		// Note: The latest version of "IE" failed 3 tests including: exponentiation (**) operator: assignment
   477  		Chrome:  {{start: v{52, 0, 0}}},
   478  		Deno:    {{start: v{1, 0, 0}}},
   479  		Edge:    {{start: v{14, 0, 0}}},
   480  		ES:      {{start: v{2016, 0, 0}}},
   481  		Firefox: {{start: v{52, 0, 0}}},
   482  		Hermes:  {{start: v{0, 7, 0}}},
   483  		IOS:     {{start: v{10, 3, 0}}},
   484  		Node:    {{start: v{7, 0, 0}}},
   485  		Opera:   {{start: v{39, 0, 0}}},
   486  		Rhino:   {{start: v{1, 7, 14}}},
   487  		Safari:  {{start: v{10, 1, 0}}},
   488  	},
   489  	ExportStarAs: {
   490  		Chrome:  {{start: v{72, 0, 0}}},
   491  		Deno:    {{start: v{1, 0, 0}}},
   492  		Edge:    {{start: v{79, 0, 0}}},
   493  		ES:      {{start: v{2020, 0, 0}}},
   494  		Firefox: {{start: v{80, 0, 0}}},
   495  		IOS:     {{start: v{14, 5, 0}}},
   496  		Node:    {{start: v{13, 2, 0}}},
   497  		Opera:   {{start: v{60, 0, 0}}},
   498  		Safari:  {{start: v{14, 1, 0}}},
   499  	},
   500  	ForAwait: {
   501  		// Note: The latest version of "Hermes" failed this test: Asynchronous Iterators: for-await-of loops
   502  		// Note: The latest version of "IE" failed this test: Asynchronous Iterators: for-await-of loops
   503  		// Note: The latest version of "Rhino" failed this test: Asynchronous Iterators: for-await-of loops
   504  		Chrome:  {{start: v{63, 0, 0}}},
   505  		Deno:    {{start: v{1, 0, 0}}},
   506  		Edge:    {{start: v{79, 0, 0}}},
   507  		ES:      {{start: v{2018, 0, 0}}},
   508  		Firefox: {{start: v{57, 0, 0}}},
   509  		IOS:     {{start: v{12, 0, 0}}},
   510  		Node:    {{start: v{10, 0, 0}}},
   511  		Opera:   {{start: v{50, 0, 0}}},
   512  		Safari:  {{start: v{12, 0, 0}}},
   513  	},
   514  	ForOf: {
   515  		// Note: The latest version of "IE" failed 9 tests including: for..of loops: iterator closing, break
   516  		// Note: The latest version of "Rhino" failed 4 tests including: for..of loops: iterator closing, break
   517  		Chrome:  {{start: v{51, 0, 0}}},
   518  		Deno:    {{start: v{1, 0, 0}}},
   519  		Edge:    {{start: v{15, 0, 0}}},
   520  		ES:      {{start: v{2015, 0, 0}}},
   521  		Firefox: {{start: v{53, 0, 0}}},
   522  		Hermes:  {{start: v{0, 7, 0}}},
   523  		IOS:     {{start: v{10, 0, 0}}},
   524  		Node:    {{start: v{6, 5, 0}}},
   525  		Opera:   {{start: v{38, 0, 0}}},
   526  		Safari:  {{start: v{10, 0, 0}}},
   527  	},
   528  	FunctionNameConfigurable: {
   529  		// Note: The latest version of "IE" failed this test: function "name" property: isn't writable, is configurable
   530  		// Note: The latest version of "Rhino" failed this test: function "name" property: isn't writable, is configurable
   531  		Chrome:  {{start: v{43, 0, 0}}},
   532  		Deno:    {{start: v{1, 0, 0}}},
   533  		Edge:    {{start: v{12, 0, 0}}},
   534  		ES:      {{start: v{2015, 0, 0}}},
   535  		Firefox: {{start: v{38, 0, 0}}},
   536  		Hermes:  {{start: v{0, 7, 0}}},
   537  		IOS:     {{start: v{10, 0, 0}}},
   538  		Node:    {{start: v{4, 0, 0}}},
   539  		Opera:   {{start: v{30, 0, 0}}},
   540  		Safari:  {{start: v{10, 0, 0}}},
   541  	},
   542  	FunctionOrClassPropertyAccess: {
   543  		Chrome:  {{start: v{0, 0, 0}}},
   544  		Deno:    {{start: v{0, 0, 0}}},
   545  		Edge:    {{start: v{0, 0, 0}}},
   546  		ES:      {{start: v{0, 0, 0}}},
   547  		Firefox: {{start: v{0, 0, 0}}},
   548  		Hermes:  {{start: v{0, 0, 0}}},
   549  		IE:      {{start: v{0, 0, 0}}},
   550  		IOS:     {{start: v{0, 0, 0}}},
   551  		Node:    {{start: v{0, 0, 0}}},
   552  		Opera:   {{start: v{0, 0, 0}}},
   553  		Rhino:   {{start: v{0, 0, 0}}},
   554  		Safari:  {{start: v{16, 3, 0}}},
   555  	},
   556  	Generator: {
   557  		// Note: The latest version of "Hermes" failed 3 tests including: generators: computed shorthand generators, classes
   558  		// Note: The latest version of "IE" failed 27 tests including: generators: %GeneratorPrototype%
   559  		// Note: The latest version of "Rhino" failed 15 tests including: generators: %GeneratorPrototype%
   560  		Chrome:  {{start: v{50, 0, 0}}},
   561  		Deno:    {{start: v{1, 0, 0}}},
   562  		Edge:    {{start: v{13, 0, 0}}},
   563  		ES:      {{start: v{2015, 0, 0}}},
   564  		Firefox: {{start: v{53, 0, 0}}},
   565  		IOS:     {{start: v{10, 0, 0}}},
   566  		Node:    {{start: v{6, 0, 0}}},
   567  		Opera:   {{start: v{37, 0, 0}}},
   568  		Safari:  {{start: v{10, 0, 0}}},
   569  	},
   570  	Hashbang: {
   571  		// Note: The latest version of "IE" failed this test: Hashbang Grammar
   572  		// Note: The latest version of "Rhino" failed this test: Hashbang Grammar
   573  		Chrome:  {{start: v{74, 0, 0}}},
   574  		Deno:    {{start: v{1, 0, 0}}},
   575  		Edge:    {{start: v{79, 0, 0}}},
   576  		Firefox: {{start: v{67, 0, 0}}},
   577  		Hermes:  {{start: v{0, 7, 0}}},
   578  		IOS:     {{start: v{13, 4, 0}}},
   579  		Node:    {{start: v{12, 5, 0}}},
   580  		Opera:   {{start: v{62, 0, 0}}},
   581  		Safari:  {{start: v{13, 1, 0}}},
   582  	},
   583  	ImportAssertions: {
   584  		Chrome: {{start: v{91, 0, 0}}},
   585  		Deno:   {{start: v{1, 17, 0}}},
   586  		Edge:   {{start: v{91, 0, 0}}},
   587  		Node:   {{start: v{16, 14, 0}, end: v{22, 0, 0}}},
   588  	},
   589  	ImportAttributes: {
   590  		Chrome: {{start: v{123, 0, 0}}},
   591  		Deno:   {{start: v{1, 37, 0}}},
   592  		Edge:   {{start: v{123, 0, 0}}},
   593  		IOS:    {{start: v{17, 2, 0}}},
   594  		Node:   {{start: v{18, 20, 0}, end: v{19, 0, 0}}, {start: v{20, 10, 0}}},
   595  		Opera:  {{start: v{109, 0, 0}}},
   596  		Safari: {{start: v{17, 2, 0}}},
   597  	},
   598  	ImportMeta: {
   599  		Chrome:  {{start: v{64, 0, 0}}},
   600  		Deno:    {{start: v{1, 0, 0}}},
   601  		Edge:    {{start: v{79, 0, 0}}},
   602  		ES:      {{start: v{2020, 0, 0}}},
   603  		Firefox: {{start: v{62, 0, 0}}},
   604  		IOS:     {{start: v{12, 0, 0}}},
   605  		Node:    {{start: v{10, 4, 0}}},
   606  		Opera:   {{start: v{51, 0, 0}}},
   607  		Safari:  {{start: v{11, 1, 0}}},
   608  	},
   609  	InlineScript: {},
   610  	LogicalAssignment: {
   611  		// Note: The latest version of "IE" failed 9 tests including: Logical Assignment: &&= basic support
   612  		// Note: The latest version of "Rhino" failed 9 tests including: Logical Assignment: &&= basic support
   613  		Chrome:  {{start: v{85, 0, 0}}},
   614  		Deno:    {{start: v{1, 2, 0}}},
   615  		Edge:    {{start: v{85, 0, 0}}},
   616  		ES:      {{start: v{2021, 0, 0}}},
   617  		Firefox: {{start: v{79, 0, 0}}},
   618  		Hermes:  {{start: v{0, 7, 0}}},
   619  		IOS:     {{start: v{14, 0, 0}}},
   620  		Node:    {{start: v{15, 0, 0}}},
   621  		Opera:   {{start: v{71, 0, 0}}},
   622  		Safari:  {{start: v{14, 0, 0}}},
   623  	},
   624  	NestedRestBinding: {
   625  		// Note: The latest version of "IE" failed 2 tests including: nested rest destructuring, declarations
   626  		// Note: The latest version of "Rhino" failed 2 tests including: nested rest destructuring, declarations
   627  		Chrome:  {{start: v{49, 0, 0}}},
   628  		Deno:    {{start: v{1, 0, 0}}},
   629  		Edge:    {{start: v{14, 0, 0}}},
   630  		ES:      {{start: v{2016, 0, 0}}},
   631  		Firefox: {{start: v{47, 0, 0}}},
   632  		Hermes:  {{start: v{0, 7, 0}}},
   633  		IOS:     {{start: v{10, 3, 0}}},
   634  		Node:    {{start: v{6, 0, 0}}},
   635  		Opera:   {{start: v{36, 0, 0}}},
   636  		Safari:  {{start: v{10, 1, 0}}},
   637  	},
   638  	NewTarget: {
   639  		// Note: The latest version of "IE" failed 2 tests including: new.target: assignment is an early error
   640  		// Note: The latest version of "Rhino" failed 2 tests including: new.target: assignment is an early error
   641  		Chrome:  {{start: v{46, 0, 0}}},
   642  		Deno:    {{start: v{1, 0, 0}}},
   643  		Edge:    {{start: v{14, 0, 0}}},
   644  		ES:      {{start: v{2015, 0, 0}}},
   645  		Firefox: {{start: v{41, 0, 0}}},
   646  		Hermes:  {{start: v{0, 7, 0}}},
   647  		IOS:     {{start: v{10, 0, 0}}},
   648  		Node:    {{start: v{5, 0, 0}}},
   649  		Opera:   {{start: v{33, 0, 0}}},
   650  		Safari:  {{start: v{10, 0, 0}}},
   651  	},
   652  	NodeColonPrefixImport: {
   653  		Node: {{start: v{12, 20, 0}, end: v{13, 0, 0}}, {start: v{14, 13, 1}}},
   654  	},
   655  	NodeColonPrefixRequire: {
   656  		Node: {{start: v{14, 18, 0}, end: v{15, 0, 0}}, {start: v{16, 0, 0}}},
   657  	},
   658  	NullishCoalescing: {
   659  		// Note: The latest version of "IE" failed this test: nullish coalescing operator (??)
   660  		// Note: The latest version of "Rhino" failed this test: nullish coalescing operator (??)
   661  		Chrome:  {{start: v{80, 0, 0}}},
   662  		Deno:    {{start: v{1, 0, 0}}},
   663  		Edge:    {{start: v{80, 0, 0}}},
   664  		ES:      {{start: v{2020, 0, 0}}},
   665  		Firefox: {{start: v{72, 0, 0}}},
   666  		Hermes:  {{start: v{0, 7, 0}}},
   667  		IOS:     {{start: v{13, 4, 0}}},
   668  		Node:    {{start: v{14, 0, 0}}},
   669  		Opera:   {{start: v{67, 0, 0}}},
   670  		Safari:  {{start: v{13, 1, 0}}},
   671  	},
   672  	ObjectAccessors: {
   673  		Chrome:  {{start: v{5, 0, 0}}},
   674  		Deno:    {{start: v{1, 0, 0}}},
   675  		Edge:    {{start: v{12, 0, 0}}},
   676  		ES:      {{start: v{5, 0, 0}}},
   677  		Firefox: {{start: v{2, 0, 0}}},
   678  		Hermes:  {{start: v{0, 7, 0}}},
   679  		IE:      {{start: v{9, 0, 0}}},
   680  		IOS:     {{start: v{6, 0, 0}}},
   681  		Node:    {{start: v{0, 4, 0}}},
   682  		Opera:   {{start: v{10, 10, 0}}},
   683  		Rhino:   {{start: v{1, 7, 13}}},
   684  		Safari:  {{start: v{3, 1, 0}}},
   685  	},
   686  	ObjectExtensions: {
   687  		// Note: The latest version of "IE" failed 6 tests including: object literal extensions: computed accessors
   688  		// Note: The latest version of "Rhino" failed 3 tests including: object literal extensions: computed accessors
   689  		Chrome:  {{start: v{44, 0, 0}}},
   690  		Deno:    {{start: v{1, 0, 0}}},
   691  		Edge:    {{start: v{12, 0, 0}}},
   692  		ES:      {{start: v{2015, 0, 0}}},
   693  		Firefox: {{start: v{34, 0, 0}}},
   694  		Hermes:  {{start: v{0, 7, 0}}},
   695  		IOS:     {{start: v{10, 0, 0}}},
   696  		Node:    {{start: v{4, 0, 0}}},
   697  		Opera:   {{start: v{31, 0, 0}}},
   698  		Safari:  {{start: v{10, 0, 0}}},
   699  	},
   700  	ObjectRestSpread: {
   701  		// Note: The latest version of "IE" failed 2 tests including: object rest/spread properties: object rest properties
   702  		// Note: The latest version of "Rhino" failed 2 tests including: object rest/spread properties: object rest properties
   703  		Chrome:  {{start: v{60, 0, 0}}},
   704  		Deno:    {{start: v{1, 0, 0}}},
   705  		Edge:    {{start: v{79, 0, 0}}},
   706  		ES:      {{start: v{2018, 0, 0}}},
   707  		Firefox: {{start: v{55, 0, 0}}},
   708  		Hermes:  {{start: v{0, 7, 0}}},
   709  		IOS:     {{start: v{11, 3, 0}}},
   710  		Node:    {{start: v{8, 3, 0}}},
   711  		Opera:   {{start: v{47, 0, 0}}},
   712  		Safari:  {{start: v{11, 1, 0}}},
   713  	},
   714  	OptionalCatchBinding: {
   715  		// Note: The latest version of "IE" failed 3 tests including: optional catch binding: await
   716  		// Note: The latest version of "Rhino" failed 3 tests including: optional catch binding: await
   717  		Chrome:  {{start: v{66, 0, 0}}},
   718  		Deno:    {{start: v{1, 0, 0}}},
   719  		Edge:    {{start: v{79, 0, 0}}},
   720  		ES:      {{start: v{2019, 0, 0}}},
   721  		Firefox: {{start: v{58, 0, 0}}},
   722  		Hermes:  {{start: v{0, 12, 0}}},
   723  		IOS:     {{start: v{11, 3, 0}}},
   724  		Node:    {{start: v{10, 0, 0}}},
   725  		Opera:   {{start: v{53, 0, 0}}},
   726  		Safari:  {{start: v{11, 1, 0}}},
   727  	},
   728  	OptionalChain: {
   729  		// Note: The latest version of "IE" failed 5 tests including: optional chaining operator (?.): optional bracket access
   730  		// Note: The latest version of "Rhino" failed 5 tests including: optional chaining operator (?.): optional bracket access
   731  		Chrome:  {{start: v{91, 0, 0}}},
   732  		Deno:    {{start: v{1, 9, 0}}},
   733  		Edge:    {{start: v{91, 0, 0}}},
   734  		ES:      {{start: v{2020, 0, 0}}},
   735  		Firefox: {{start: v{74, 0, 0}}},
   736  		Hermes:  {{start: v{0, 12, 0}}},
   737  		IOS:     {{start: v{13, 4, 0}}},
   738  		Node:    {{start: v{16, 1, 0}}},
   739  		Opera:   {{start: v{77, 0, 0}}},
   740  		Safari:  {{start: v{13, 1, 0}}},
   741  	},
   742  	RegexpDotAllFlag: {
   743  		// Note: The latest version of "IE" failed this test: s (dotAll) flag for regular expressions
   744  		// Note: The latest version of "Rhino" failed this test: s (dotAll) flag for regular expressions
   745  		Chrome:  {{start: v{62, 0, 0}}},
   746  		Deno:    {{start: v{1, 0, 0}}},
   747  		Edge:    {{start: v{79, 0, 0}}},
   748  		ES:      {{start: v{2018, 0, 0}}},
   749  		Firefox: {{start: v{78, 0, 0}}},
   750  		Hermes:  {{start: v{0, 7, 0}}},
   751  		IOS:     {{start: v{11, 3, 0}}},
   752  		Node:    {{start: v{8, 10, 0}}},
   753  		Opera:   {{start: v{49, 0, 0}}},
   754  		Safari:  {{start: v{11, 1, 0}}},
   755  	},
   756  	RegexpLookbehindAssertions: {
   757  		// Note: The latest version of "IE" failed this test: RegExp Lookbehind Assertions
   758  		// Note: The latest version of "Rhino" failed this test: RegExp Lookbehind Assertions
   759  		Chrome:  {{start: v{62, 0, 0}}},
   760  		Deno:    {{start: v{1, 0, 0}}},
   761  		Edge:    {{start: v{79, 0, 0}}},
   762  		ES:      {{start: v{2018, 0, 0}}},
   763  		Firefox: {{start: v{78, 0, 0}}},
   764  		Hermes:  {{start: v{0, 7, 0}}},
   765  		IOS:     {{start: v{16, 4, 0}}},
   766  		Node:    {{start: v{8, 10, 0}}},
   767  		Opera:   {{start: v{49, 0, 0}}},
   768  		Safari:  {{start: v{16, 4, 0}}},
   769  	},
   770  	RegexpMatchIndices: {
   771  		Chrome:  {{start: v{90, 0, 0}}},
   772  		Deno:    {{start: v{1, 8, 0}}},
   773  		Edge:    {{start: v{90, 0, 0}}},
   774  		ES:      {{start: v{2022, 0, 0}}},
   775  		Firefox: {{start: v{88, 0, 0}}},
   776  		IOS:     {{start: v{15, 0, 0}}},
   777  		Node:    {{start: v{16, 0, 0}}},
   778  		Opera:   {{start: v{76, 0, 0}}},
   779  		Safari:  {{start: v{15, 0, 0}}},
   780  	},
   781  	RegexpNamedCaptureGroups: {
   782  		// Note: The latest version of "Hermes" failed this test: RegExp named capture groups
   783  		// Note: The latest version of "IE" failed this test: RegExp named capture groups
   784  		// Note: The latest version of "Rhino" failed this test: RegExp named capture groups
   785  		Chrome:  {{start: v{64, 0, 0}}},
   786  		Deno:    {{start: v{1, 0, 0}}},
   787  		Edge:    {{start: v{79, 0, 0}}},
   788  		ES:      {{start: v{2018, 0, 0}}},
   789  		Firefox: {{start: v{78, 0, 0}}},
   790  		IOS:     {{start: v{11, 3, 0}}},
   791  		Node:    {{start: v{10, 0, 0}}},
   792  		Opera:   {{start: v{51, 0, 0}}},
   793  		Safari:  {{start: v{11, 1, 0}}},
   794  	},
   795  	RegexpSetNotation: {},
   796  	RegexpStickyAndUnicodeFlags: {
   797  		// Note: The latest version of "IE" failed 6 tests including: RegExp "y" and "u" flags: "u" flag
   798  		// Note: The latest version of "Rhino" failed 6 tests including: RegExp "y" and "u" flags: "u" flag
   799  		Chrome:  {{start: v{50, 0, 0}}},
   800  		Deno:    {{start: v{1, 0, 0}}},
   801  		Edge:    {{start: v{13, 0, 0}}},
   802  		ES:      {{start: v{2015, 0, 0}}},
   803  		Firefox: {{start: v{46, 0, 0}}},
   804  		Hermes:  {{start: v{0, 7, 0}}},
   805  		IOS:     {{start: v{12, 0, 0}}},
   806  		Node:    {{start: v{6, 0, 0}}},
   807  		Opera:   {{start: v{37, 0, 0}}},
   808  		Safari:  {{start: v{12, 0, 0}}},
   809  	},
   810  	RegexpUnicodePropertyEscapes: {
   811  		// Note: The latest version of "Chrome" failed this test: RegExp Unicode Property Escapes: Unicode 15.1
   812  		// Note: The latest version of "Firefox" failed this test: RegExp Unicode Property Escapes: Unicode 15.1
   813  		// Note: The latest version of "Hermes" failed 8 tests including: RegExp Unicode Property Escapes: Unicode 11
   814  		// Note: The latest version of "IE" failed 8 tests including: RegExp Unicode Property Escapes: Unicode 11
   815  		// Note: The latest version of "IOS" failed this test: RegExp Unicode Property Escapes: Unicode 15.1
   816  		// Note: The latest version of "Rhino" failed 8 tests including: RegExp Unicode Property Escapes: Unicode 11
   817  		// Note: The latest version of "Safari" failed this test: RegExp Unicode Property Escapes: Unicode 15.1
   818  		ES:   {{start: v{2018, 0, 0}}},
   819  		Node: {{start: v{18, 20, 0}, end: v{19, 0, 0}}, {start: v{20, 12, 0}, end: v{21, 0, 0}}, {start: v{21, 3, 0}}},
   820  	},
   821  	RestArgument: {
   822  		// Note: The latest version of "Hermes" failed this test: rest parameters: function 'length' property
   823  		// Note: The latest version of "IE" failed 5 tests including: rest parameters: arguments object interaction
   824  		// Note: The latest version of "Rhino" failed 5 tests including: rest parameters: arguments object interaction
   825  		Chrome:  {{start: v{47, 0, 0}}},
   826  		Deno:    {{start: v{1, 0, 0}}},
   827  		Edge:    {{start: v{12, 0, 0}}},
   828  		ES:      {{start: v{2015, 0, 0}}},
   829  		Firefox: {{start: v{43, 0, 0}}},
   830  		IOS:     {{start: v{10, 0, 0}}},
   831  		Node:    {{start: v{6, 0, 0}}},
   832  		Opera:   {{start: v{34, 0, 0}}},
   833  		Safari:  {{start: v{10, 0, 0}}},
   834  	},
   835  	TemplateLiteral: {
   836  		// Note: The latest version of "Hermes" failed this test: template literals: TemplateStrings call site caching
   837  		// Note: The latest version of "IE" failed 7 tests including: template literals: TemplateStrings call site caching
   838  		// Note: The latest version of "Rhino" failed 2 tests including: template literals: basic functionality
   839  		Chrome:  {{start: v{41, 0, 0}}},
   840  		Deno:    {{start: v{1, 0, 0}}},
   841  		Edge:    {{start: v{13, 0, 0}}},
   842  		ES:      {{start: v{2015, 0, 0}}},
   843  		Firefox: {{start: v{34, 0, 0}}},
   844  		IOS:     {{start: v{13, 0, 0}}},
   845  		Node:    {{start: v{10, 0, 0}}},
   846  		Opera:   {{start: v{28, 0, 0}}},
   847  		Safari:  {{start: v{13, 0, 0}}},
   848  	},
   849  	TopLevelAwait: {
   850  		Chrome:  {{start: v{89, 0, 0}}},
   851  		Deno:    {{start: v{1, 0, 0}}},
   852  		Edge:    {{start: v{89, 0, 0}}},
   853  		ES:      {{start: v{2022, 0, 0}}},
   854  		Firefox: {{start: v{89, 0, 0}}},
   855  		IOS:     {{start: v{15, 0, 0}}},
   856  		Node:    {{start: v{14, 8, 0}}},
   857  		Opera:   {{start: v{75, 0, 0}}},
   858  		Safari:  {{start: v{15, 0, 0}}},
   859  	},
   860  	TypeofExoticObjectIsObject: {
   861  		Chrome:  {{start: v{0, 0, 0}}},
   862  		Deno:    {{start: v{0, 0, 0}}},
   863  		Edge:    {{start: v{0, 0, 0}}},
   864  		ES:      {{start: v{2020, 0, 0}}},
   865  		Firefox: {{start: v{0, 0, 0}}},
   866  		Hermes:  {{start: v{0, 0, 0}}},
   867  		IOS:     {{start: v{0, 0, 0}}},
   868  		Node:    {{start: v{0, 0, 0}}},
   869  		Opera:   {{start: v{0, 0, 0}}},
   870  		Rhino:   {{start: v{0, 0, 0}}},
   871  		Safari:  {{start: v{0, 0, 0}}},
   872  	},
   873  	UnicodeEscapes: {
   874  		// Note: The latest version of "IE" failed 2 tests including: Unicode code point escapes: in identifiers
   875  		// Note: The latest version of "Rhino" failed 4 tests including: Unicode code point escapes: in identifiers
   876  		Chrome:  {{start: v{44, 0, 0}}},
   877  		Deno:    {{start: v{1, 0, 0}}},
   878  		Edge:    {{start: v{12, 0, 0}}},
   879  		ES:      {{start: v{2015, 0, 0}}},
   880  		Firefox: {{start: v{53, 0, 0}}},
   881  		Hermes:  {{start: v{0, 7, 0}}},
   882  		IOS:     {{start: v{9, 0, 0}}},
   883  		Node:    {{start: v{4, 0, 0}}},
   884  		Opera:   {{start: v{31, 0, 0}}},
   885  		Safari:  {{start: v{9, 0, 0}}},
   886  	},
   887  	Using: {},
   888  }
   889  
   890  // Return all features that are not available in at least one environment
   891  func UnsupportedJSFeatures(constraints map[Engine]Semver) (unsupported JSFeature) {
   892  	for feature, engines := range jsTable {
   893  		if feature == InlineScript {
   894  			continue // This is purely user-specified
   895  		}
   896  		for engine, version := range constraints {
   897  			if versionRanges, ok := engines[engine]; !ok || !isVersionSupported(versionRanges, version) {
   898  				unsupported |= feature
   899  			}
   900  		}
   901  	}
   902  	return
   903  }