731 lines
22 KiB
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
|
|
}
|