SandpointsGitHook/vendor/github.com/evanw/esbuild/internal/compat/js_table.go

731 lines
22 KiB
Go

// This file was automatically generated by "compat-table.js"
package compat
type Engine uint8
const (
Chrome Engine = iota
Deno
Edge
ES
Firefox
Hermes
IE
IOS
Node
Opera
Rhino
Safari
)
func (e Engine) String() string {
switch e {
case Chrome:
return "chrome"
case Deno:
return "deno"
case Edge:
return "edge"
case ES:
return "es"
case Firefox:
return "firefox"
case Hermes:
return "hermes"
case IE:
return "ie"
case IOS:
return "ios"
case Node:
return "node"
case Opera:
return "opera"
case Rhino:
return "rhino"
case Safari:
return "safari"
}
return ""
}
type JSFeature uint64
const (
ArbitraryModuleNamespaceNames JSFeature = 1 << iota
ArraySpread
Arrow
AsyncAwait
AsyncGenerator
Bigint
Class
ClassField
ClassPrivateAccessor
ClassPrivateBrandCheck
ClassPrivateField
ClassPrivateMethod
ClassPrivateStaticAccessor
ClassPrivateStaticField
ClassPrivateStaticMethod
ClassStaticBlocks
ClassStaticField
ConstAndLet
DefaultArgument
Destructuring
DynamicImport
ExponentOperator
ExportStarAs
ForAwait
ForOf
Generator
Hashbang
ImportAssertions
ImportMeta
InlineScript
LogicalAssignment
NestedRestBinding
NewTarget
NodeColonPrefixImport
NodeColonPrefixRequire
NullishCoalescing
ObjectAccessors
ObjectExtensions
ObjectRestSpread
OptionalCatchBinding
OptionalChain
RegexpDotAllFlag
RegexpLookbehindAssertions
RegexpMatchIndices
RegexpNamedCaptureGroups
RegexpSetNotation
RegexpStickyAndUnicodeFlags
RegexpUnicodePropertyEscapes
RestArgument
TemplateLiteral
TopLevelAwait
TypeofExoticObjectIsObject
UnicodeEscapes
)
var StringToJSFeature = map[string]JSFeature{
"arbitrary-module-namespace-names": ArbitraryModuleNamespaceNames,
"array-spread": ArraySpread,
"arrow": Arrow,
"async-await": AsyncAwait,
"async-generator": AsyncGenerator,
"bigint": Bigint,
"class": Class,
"class-field": ClassField,
"class-private-accessor": ClassPrivateAccessor,
"class-private-brand-check": ClassPrivateBrandCheck,
"class-private-field": ClassPrivateField,
"class-private-method": ClassPrivateMethod,
"class-private-static-accessor": ClassPrivateStaticAccessor,
"class-private-static-field": ClassPrivateStaticField,
"class-private-static-method": ClassPrivateStaticMethod,
"class-static-blocks": ClassStaticBlocks,
"class-static-field": ClassStaticField,
"const-and-let": ConstAndLet,
"default-argument": DefaultArgument,
"destructuring": Destructuring,
"dynamic-import": DynamicImport,
"exponent-operator": ExponentOperator,
"export-star-as": ExportStarAs,
"for-await": ForAwait,
"for-of": ForOf,
"generator": Generator,
"hashbang": Hashbang,
"import-assertions": ImportAssertions,
"import-meta": ImportMeta,
"inline-script": InlineScript,
"logical-assignment": LogicalAssignment,
"nested-rest-binding": NestedRestBinding,
"new-target": NewTarget,
"node-colon-prefix-import": NodeColonPrefixImport,
"node-colon-prefix-require": NodeColonPrefixRequire,
"nullish-coalescing": NullishCoalescing,
"object-accessors": ObjectAccessors,
"object-extensions": ObjectExtensions,
"object-rest-spread": ObjectRestSpread,
"optional-catch-binding": OptionalCatchBinding,
"optional-chain": OptionalChain,
"regexp-dot-all-flag": RegexpDotAllFlag,
"regexp-lookbehind-assertions": RegexpLookbehindAssertions,
"regexp-match-indices": RegexpMatchIndices,
"regexp-named-capture-groups": RegexpNamedCaptureGroups,
"regexp-set-notation": RegexpSetNotation,
"regexp-sticky-and-unicode-flags": RegexpStickyAndUnicodeFlags,
"regexp-unicode-property-escapes": RegexpUnicodePropertyEscapes,
"rest-argument": RestArgument,
"template-literal": TemplateLiteral,
"top-level-await": TopLevelAwait,
"typeof-exotic-object-is-object": TypeofExoticObjectIsObject,
"unicode-escapes": UnicodeEscapes,
}
func (features JSFeature) Has(feature JSFeature) bool {
return (features & feature) != 0
}
func (features JSFeature) ApplyOverrides(overrides JSFeature, mask JSFeature) JSFeature {
return (features & ^mask) | (overrides & mask)
}
var jsTable = map[JSFeature]map[Engine][]versionRange{
ArbitraryModuleNamespaceNames: {
Chrome: {{start: v{90, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{87, 0, 0}}},
Node: {{start: v{16, 0, 0}}},
},
ArraySpread: {
Chrome: {{start: v{46, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{13, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{36, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{10, 0, 0}}},
Node: {{start: v{5, 0, 0}}},
Opera: {{start: v{33, 0, 0}}},
Safari: {{start: v{10, 0, 0}}},
},
Arrow: {
Chrome: {{start: v{49, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{13, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{45, 0, 0}}},
IOS: {{start: v{10, 0, 0}}},
Node: {{start: v{6, 0, 0}}},
Opera: {{start: v{36, 0, 0}}},
Safari: {{start: v{10, 0, 0}}},
},
AsyncAwait: {
Chrome: {{start: v{55, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{15, 0, 0}}},
ES: {{start: v{2017, 0, 0}}},
Firefox: {{start: v{52, 0, 0}}},
IOS: {{start: v{11, 0, 0}}},
Node: {{start: v{7, 6, 0}}},
Opera: {{start: v{42, 0, 0}}},
Safari: {{start: v{11, 0, 0}}},
},
AsyncGenerator: {
Chrome: {{start: v{63, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2018, 0, 0}}},
Firefox: {{start: v{57, 0, 0}}},
IOS: {{start: v{12, 0, 0}}},
Node: {{start: v{10, 0, 0}}},
Opera: {{start: v{50, 0, 0}}},
Safari: {{start: v{12, 0, 0}}},
},
Bigint: {
Chrome: {{start: v{67, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2020, 0, 0}}},
Firefox: {{start: v{68, 0, 0}}},
Hermes: {{start: v{0, 12, 0}}},
IOS: {{start: v{14, 0, 0}}},
Node: {{start: v{10, 4, 0}}},
Opera: {{start: v{54, 0, 0}}},
Rhino: {{start: v{1, 7, 14}}},
Safari: {{start: v{14, 0, 0}}},
},
Class: {
Chrome: {{start: v{49, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{13, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{45, 0, 0}}},
IOS: {{start: v{10, 0, 0}}},
Node: {{start: v{6, 0, 0}}},
Opera: {{start: v{36, 0, 0}}},
Safari: {{start: v{10, 0, 0}}},
},
ClassField: {
Chrome: {{start: v{73, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{69, 0, 0}}},
IOS: {{start: v{14, 0, 0}}},
Node: {{start: v{12, 0, 0}}},
Opera: {{start: v{60, 0, 0}}},
Safari: {{start: v{14, 0, 0}}},
},
ClassPrivateAccessor: {
Chrome: {{start: v{84, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{84, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{90, 0, 0}}},
IOS: {{start: v{15, 0, 0}}},
Node: {{start: v{14, 6, 0}}},
Opera: {{start: v{70, 0, 0}}},
Safari: {{start: v{15, 0, 0}}},
},
ClassPrivateBrandCheck: {
Chrome: {{start: v{91, 0, 0}}},
Deno: {{start: v{1, 9, 0}}},
Edge: {{start: v{91, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{90, 0, 0}}},
IOS: {{start: v{15, 0, 0}}},
Node: {{start: v{16, 9, 0}}},
Opera: {{start: v{77, 0, 0}}},
Safari: {{start: v{15, 0, 0}}},
},
ClassPrivateField: {
Chrome: {{start: v{84, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{84, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{90, 0, 0}}},
IOS: {{start: v{15, 0, 0}}},
Node: {{start: v{14, 6, 0}}},
Opera: {{start: v{70, 0, 0}}},
Safari: {{start: v{14, 1, 0}}},
},
ClassPrivateMethod: {
Chrome: {{start: v{84, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{84, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{90, 0, 0}}},
IOS: {{start: v{15, 0, 0}}},
Node: {{start: v{14, 6, 0}}},
Opera: {{start: v{70, 0, 0}}},
Safari: {{start: v{15, 0, 0}}},
},
ClassPrivateStaticAccessor: {
Chrome: {{start: v{84, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{84, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{90, 0, 0}}},
IOS: {{start: v{15, 0, 0}}},
Node: {{start: v{14, 6, 0}}},
Opera: {{start: v{70, 0, 0}}},
Safari: {{start: v{15, 0, 0}}},
},
ClassPrivateStaticField: {
Chrome: {{start: v{74, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{90, 0, 0}}},
IOS: {{start: v{15, 0, 0}}},
Node: {{start: v{12, 0, 0}}},
Opera: {{start: v{62, 0, 0}}},
Safari: {{start: v{14, 1, 0}}},
},
ClassPrivateStaticMethod: {
Chrome: {{start: v{84, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{84, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{90, 0, 0}}},
IOS: {{start: v{15, 0, 0}}},
Node: {{start: v{14, 6, 0}}},
Opera: {{start: v{70, 0, 0}}},
Safari: {{start: v{15, 0, 0}}},
},
ClassStaticBlocks: {
Chrome: {{start: v{91, 0, 0}}},
Edge: {{start: v{94, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{93, 0, 0}}},
Node: {{start: v{16, 11, 0}}},
Opera: {{start: v{80, 0, 0}}},
},
ClassStaticField: {
Chrome: {{start: v{73, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{75, 0, 0}}},
IOS: {{start: v{15, 0, 0}}},
Node: {{start: v{12, 0, 0}}},
Opera: {{start: v{60, 0, 0}}},
Safari: {{start: v{14, 1, 0}}},
},
ConstAndLet: {
Chrome: {{start: v{49, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{14, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{51, 0, 0}}},
IOS: {{start: v{11, 0, 0}}},
Node: {{start: v{6, 0, 0}}},
Opera: {{start: v{36, 0, 0}}},
Safari: {{start: v{11, 0, 0}}},
},
DefaultArgument: {
Chrome: {{start: v{49, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{14, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{53, 0, 0}}},
IOS: {{start: v{10, 0, 0}}},
Node: {{start: v{6, 0, 0}}},
Opera: {{start: v{36, 0, 0}}},
Safari: {{start: v{10, 0, 0}}},
},
Destructuring: {
Chrome: {{start: v{51, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{18, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{53, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{10, 0, 0}}},
Node: {{start: v{6, 5, 0}}},
Opera: {{start: v{38, 0, 0}}},
Safari: {{start: v{10, 0, 0}}},
},
DynamicImport: {
Chrome: {{start: v{63, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{67, 0, 0}}},
IOS: {{start: v{11, 0, 0}}},
Node: {{start: v{12, 20, 0}, end: v{13, 0, 0}}, {start: v{13, 2, 0}}},
Opera: {{start: v{50, 0, 0}}},
Safari: {{start: v{11, 1, 0}}},
},
ExponentOperator: {
Chrome: {{start: v{52, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{14, 0, 0}}},
ES: {{start: v{2016, 0, 0}}},
Firefox: {{start: v{52, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{10, 3, 0}}},
Node: {{start: v{7, 0, 0}}},
Opera: {{start: v{39, 0, 0}}},
Rhino: {{start: v{1, 7, 14}}},
Safari: {{start: v{10, 1, 0}}},
},
ExportStarAs: {
Chrome: {{start: v{72, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2020, 0, 0}}},
Firefox: {{start: v{80, 0, 0}}},
Node: {{start: v{12, 0, 0}}},
Opera: {{start: v{60, 0, 0}}},
},
ForAwait: {
Chrome: {{start: v{63, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2018, 0, 0}}},
Firefox: {{start: v{57, 0, 0}}},
IOS: {{start: v{12, 0, 0}}},
Node: {{start: v{10, 0, 0}}},
Opera: {{start: v{50, 0, 0}}},
Safari: {{start: v{12, 0, 0}}},
},
ForOf: {
Chrome: {{start: v{51, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{15, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{53, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{10, 0, 0}}},
Node: {{start: v{6, 5, 0}}},
Opera: {{start: v{38, 0, 0}}},
Safari: {{start: v{10, 0, 0}}},
},
Generator: {
Chrome: {{start: v{50, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{13, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{53, 0, 0}}},
IOS: {{start: v{10, 0, 0}}},
Node: {{start: v{6, 0, 0}}},
Opera: {{start: v{37, 0, 0}}},
Safari: {{start: v{10, 0, 0}}},
},
Hashbang: {
Chrome: {{start: v{74, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
Firefox: {{start: v{67, 0, 0}}},
IOS: {{start: v{13, 4, 0}}},
Node: {{start: v{12, 0, 0}}},
Opera: {{start: v{62, 0, 0}}},
Safari: {{start: v{13, 1, 0}}},
},
ImportAssertions: {
Chrome: {{start: v{91, 0, 0}}},
Node: {{start: v{16, 14, 0}}},
},
ImportMeta: {
Chrome: {{start: v{64, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2020, 0, 0}}},
Firefox: {{start: v{62, 0, 0}}},
IOS: {{start: v{12, 0, 0}}},
Node: {{start: v{10, 4, 0}}},
Opera: {{start: v{51, 0, 0}}},
Safari: {{start: v{11, 1, 0}}},
},
InlineScript: {},
LogicalAssignment: {
Chrome: {{start: v{85, 0, 0}}},
Deno: {{start: v{1, 2, 0}}},
Edge: {{start: v{85, 0, 0}}},
ES: {{start: v{2021, 0, 0}}},
Firefox: {{start: v{79, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{14, 0, 0}}},
Node: {{start: v{15, 0, 0}}},
Opera: {{start: v{71, 0, 0}}},
Safari: {{start: v{14, 0, 0}}},
},
NestedRestBinding: {
Chrome: {{start: v{49, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{14, 0, 0}}},
ES: {{start: v{2016, 0, 0}}},
Firefox: {{start: v{47, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{10, 3, 0}}},
Node: {{start: v{6, 0, 0}}},
Opera: {{start: v{36, 0, 0}}},
Safari: {{start: v{10, 1, 0}}},
},
NewTarget: {
Chrome: {{start: v{46, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{14, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{41, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{10, 0, 0}}},
Node: {{start: v{5, 0, 0}}},
Opera: {{start: v{33, 0, 0}}},
Safari: {{start: v{10, 0, 0}}},
},
NodeColonPrefixImport: {
Node: {{start: v{12, 20, 0}, end: v{13, 0, 0}}, {start: v{14, 13, 1}}},
},
NodeColonPrefixRequire: {
Node: {{start: v{14, 18, 0}, end: v{15, 0, 0}}, {start: v{16, 0, 0}}},
},
NullishCoalescing: {
Chrome: {{start: v{80, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{80, 0, 0}}},
ES: {{start: v{2020, 0, 0}}},
Firefox: {{start: v{72, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{13, 4, 0}}},
Node: {{start: v{14, 0, 0}}},
Opera: {{start: v{67, 0, 0}}},
Safari: {{start: v{13, 1, 0}}},
},
ObjectAccessors: {
Chrome: {{start: v{5, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{12, 0, 0}}},
ES: {{start: v{5, 0, 0}}},
Firefox: {{start: v{2, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IE: {{start: v{9, 0, 0}}},
IOS: {{start: v{6, 0, 0}}},
Node: {{start: v{0, 4, 0}}},
Opera: {{start: v{10, 10, 0}}},
Rhino: {{start: v{1, 7, 13}}},
Safari: {{start: v{3, 1, 0}}},
},
ObjectExtensions: {
Chrome: {{start: v{44, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{12, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{34, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{10, 0, 0}}},
Node: {{start: v{4, 0, 0}}},
Opera: {{start: v{31, 0, 0}}},
Safari: {{start: v{10, 0, 0}}},
},
ObjectRestSpread: {
Chrome: {{start: v{60, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2018, 0, 0}}},
Firefox: {{start: v{55, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{11, 3, 0}}},
Node: {{start: v{8, 3, 0}}},
Opera: {{start: v{47, 0, 0}}},
Safari: {{start: v{11, 1, 0}}},
},
OptionalCatchBinding: {
Chrome: {{start: v{66, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2019, 0, 0}}},
Firefox: {{start: v{58, 0, 0}}},
Hermes: {{start: v{0, 12, 0}}},
IOS: {{start: v{11, 3, 0}}},
Node: {{start: v{10, 0, 0}}},
Opera: {{start: v{53, 0, 0}}},
Safari: {{start: v{11, 1, 0}}},
},
OptionalChain: {
Chrome: {{start: v{91, 0, 0}}},
Deno: {{start: v{1, 9, 0}}},
Edge: {{start: v{91, 0, 0}}},
ES: {{start: v{2020, 0, 0}}},
Firefox: {{start: v{74, 0, 0}}},
IOS: {{start: v{13, 4, 0}}},
Node: {{start: v{16, 9, 0}}},
Opera: {{start: v{77, 0, 0}}},
Safari: {{start: v{13, 1, 0}}},
},
RegexpDotAllFlag: {
Chrome: {{start: v{62, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2018, 0, 0}}},
Firefox: {{start: v{78, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{11, 3, 0}}},
Node: {{start: v{8, 10, 0}}},
Opera: {{start: v{49, 0, 0}}},
Safari: {{start: v{11, 1, 0}}},
},
RegexpLookbehindAssertions: {
Chrome: {{start: v{62, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2018, 0, 0}}},
Firefox: {{start: v{78, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
Node: {{start: v{8, 10, 0}}},
Opera: {{start: v{49, 0, 0}}},
},
RegexpMatchIndices: {
Chrome: {{start: v{90, 0, 0}}},
Edge: {{start: v{90, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{88, 0, 0}}},
IOS: {{start: v{15, 0, 0}}},
Opera: {{start: v{76, 0, 0}}},
Safari: {{start: v{15, 0, 0}}},
},
RegexpNamedCaptureGroups: {
Chrome: {{start: v{64, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2018, 0, 0}}},
Firefox: {{start: v{78, 0, 0}}},
IOS: {{start: v{11, 3, 0}}},
Node: {{start: v{10, 0, 0}}},
Opera: {{start: v{51, 0, 0}}},
Safari: {{start: v{11, 1, 0}}},
},
RegexpSetNotation: {},
RegexpStickyAndUnicodeFlags: {
Chrome: {{start: v{50, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{13, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{46, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{12, 0, 0}}},
Node: {{start: v{6, 0, 0}}},
Opera: {{start: v{37, 0, 0}}},
Safari: {{start: v{12, 0, 0}}},
},
RegexpUnicodePropertyEscapes: {
Chrome: {{start: v{64, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{79, 0, 0}}},
ES: {{start: v{2018, 0, 0}}},
Firefox: {{start: v{78, 0, 0}}},
IOS: {{start: v{11, 3, 0}}},
Node: {{start: v{10, 0, 0}}},
Opera: {{start: v{51, 0, 0}}},
Safari: {{start: v{11, 1, 0}}},
},
RestArgument: {
Chrome: {{start: v{47, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{12, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{43, 0, 0}}},
IOS: {{start: v{10, 0, 0}}},
Node: {{start: v{6, 0, 0}}},
Opera: {{start: v{34, 0, 0}}},
Safari: {{start: v{10, 0, 0}}},
},
TemplateLiteral: {
Chrome: {{start: v{41, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{13, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{34, 0, 0}}},
IOS: {{start: v{9, 0, 0}}},
Node: {{start: v{4, 0, 0}}},
Opera: {{start: v{28, 0, 0}}},
Safari: {{start: v{9, 0, 0}}},
},
TopLevelAwait: {
Chrome: {{start: v{89, 0, 0}}},
Edge: {{start: v{89, 0, 0}}},
ES: {{start: v{2022, 0, 0}}},
Firefox: {{start: v{89, 0, 0}}},
IOS: {{start: v{15, 0, 0}}},
Node: {{start: v{14, 8, 0}}},
Opera: {{start: v{75, 0, 0}}},
Safari: {{start: v{15, 0, 0}}},
},
TypeofExoticObjectIsObject: {
Chrome: {{start: v{0, 0, 0}}},
Edge: {{start: v{0, 0, 0}}},
ES: {{start: v{2020, 0, 0}}},
Firefox: {{start: v{0, 0, 0}}},
IOS: {{start: v{0, 0, 0}}},
Node: {{start: v{0, 0, 0}}},
Opera: {{start: v{0, 0, 0}}},
Safari: {{start: v{0, 0, 0}}},
},
UnicodeEscapes: {
Chrome: {{start: v{44, 0, 0}}},
Deno: {{start: v{1, 0, 0}}},
Edge: {{start: v{12, 0, 0}}},
ES: {{start: v{2015, 0, 0}}},
Firefox: {{start: v{53, 0, 0}}},
Hermes: {{start: v{0, 7, 0}}},
IOS: {{start: v{9, 0, 0}}},
Node: {{start: v{4, 0, 0}}},
Opera: {{start: v{31, 0, 0}}},
Safari: {{start: v{9, 0, 0}}},
},
}
// Return all features that are not available in at least one environment
func UnsupportedJSFeatures(constraints map[Engine][]int) (unsupported JSFeature) {
for feature, engines := range jsTable {
if feature == InlineScript {
continue // This is purely user-specified
}
for engine, version := range constraints {
if versionRanges, ok := engines[engine]; !ok || !isVersionSupported(versionRanges, version) {
unsupported |= feature
}
}
}
return
}