Add class proposals to shipped proposals (#11451)
This commit is contained in:
parent
8fce3717a3
commit
93a50056ca
@ -10,6 +10,17 @@
|
||||
"samsung": "11",
|
||||
"electron": "6"
|
||||
},
|
||||
"proposal-class-properties": {
|
||||
"chrome": "74",
|
||||
"opera": "61",
|
||||
"edge": "79",
|
||||
"node": "12",
|
||||
"electron": "6.1"
|
||||
},
|
||||
"proposal-private-methods": {
|
||||
"chrome": "84",
|
||||
"opera": "71"
|
||||
},
|
||||
"proposal-nullish-coalescing-operator": {
|
||||
"chrome": "80",
|
||||
"opera": "67",
|
||||
|
||||
@ -123,6 +123,10 @@ const es2020 = {
|
||||
|
||||
const shippedProposal = {
|
||||
"proposal-numeric-separator": "numeric separator",
|
||||
"proposal-class-properties": {
|
||||
features: ["static class fields", "instance class fields"],
|
||||
},
|
||||
"proposal-private-methods": "private class methods",
|
||||
};
|
||||
|
||||
// Run plugins for modern features first
|
||||
|
||||
@ -3,18 +3,23 @@
|
||||
// shipped by browsers, and are enabled by the `shippedProposals` option.
|
||||
|
||||
const proposalPlugins = new Set([
|
||||
"proposal-class-properties",
|
||||
"proposal-numeric-separator",
|
||||
"proposal-private-methods"
|
||||
]);
|
||||
|
||||
// use intermediary object to enforce alphabetical key order
|
||||
const pluginSyntaxObject = {
|
||||
"proposal-async-generator-functions": "syntax-async-generators",
|
||||
"proposal-class-properties": "syntax-class-properties",
|
||||
"proposal-json-strings": "syntax-json-strings",
|
||||
"proposal-nullish-coalescing-operator": "syntax-nullish-coalescing-operator",
|
||||
"proposal-numeric-separator": "syntax-numeric-separator",
|
||||
"proposal-object-rest-spread": "syntax-object-rest-spread",
|
||||
"proposal-optional-catch-binding": "syntax-optional-catch-binding",
|
||||
"proposal-optional-chaining": "syntax-optional-chaining",
|
||||
// note: we don't have syntax-private-methods
|
||||
"proposal-private-methods": "syntax-class-properties",
|
||||
"proposal-unicode-property-regex": null,
|
||||
};
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
"@babel/helper-module-imports": "^7.8.3",
|
||||
"@babel/helper-plugin-utils": "^7.8.3",
|
||||
"@babel/plugin-proposal-async-generator-functions": "^7.8.3",
|
||||
"@babel/plugin-proposal-class-properties": "^7.8.3",
|
||||
"@babel/plugin-proposal-dynamic-import": "^7.8.3",
|
||||
"@babel/plugin-proposal-json-strings": "^7.8.3",
|
||||
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3",
|
||||
@ -23,6 +24,7 @@
|
||||
"@babel/plugin-proposal-object-rest-spread": "^7.9.6",
|
||||
"@babel/plugin-proposal-optional-catch-binding": "^7.8.3",
|
||||
"@babel/plugin-proposal-optional-chaining": "^7.9.0",
|
||||
"@babel/plugin-proposal-private-methods": "^7.8.3",
|
||||
"@babel/plugin-proposal-unicode-property-regex": "^7.8.3",
|
||||
"@babel/plugin-syntax-async-generators": "^7.8.0",
|
||||
"@babel/plugin-syntax-dynamic-import": "^7.8.0",
|
||||
@ -32,6 +34,7 @@
|
||||
"@babel/plugin-syntax-object-rest-spread": "^7.8.0",
|
||||
"@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
|
||||
"@babel/plugin-syntax-optional-chaining": "^7.8.0",
|
||||
"@babel/plugin-syntax-class-properties": "^7.8.3",
|
||||
"@babel/plugin-syntax-top-level-await": "^7.8.3",
|
||||
"@babel/plugin-transform-arrow-functions": "^7.8.3",
|
||||
"@babel/plugin-transform-async-to-generator": "^7.8.3",
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
/* eslint sort-keys: "error" */
|
||||
|
||||
import syntaxAsyncGenerators from "@babel/plugin-syntax-async-generators";
|
||||
import syntaxClassProperties from "@babel/plugin-syntax-class-properties";
|
||||
import syntaxDynamicImport from "@babel/plugin-syntax-dynamic-import";
|
||||
import syntaxJsonStrings from "@babel/plugin-syntax-json-strings";
|
||||
import syntaxNullishCoalescingOperator from "@babel/plugin-syntax-nullish-coalescing-operator";
|
||||
@ -11,6 +12,7 @@ import syntaxOptionalCatchBinding from "@babel/plugin-syntax-optional-catch-bind
|
||||
import syntaxOptionalChaining from "@babel/plugin-syntax-optional-chaining";
|
||||
import syntaxTopLevelAwait from "@babel/plugin-syntax-top-level-await";
|
||||
import proposalAsyncGeneratorFunctions from "@babel/plugin-proposal-async-generator-functions";
|
||||
import proposalClassProperties from "@babel/plugin-proposal-class-properties";
|
||||
import proposalDynamicImport from "@babel/plugin-proposal-dynamic-import";
|
||||
import proposalJsonStrings from "@babel/plugin-proposal-json-strings";
|
||||
import proposalNullishCoalescingOperator from "@babel/plugin-proposal-nullish-coalescing-operator";
|
||||
@ -18,6 +20,7 @@ import proposalNumericSeparator from "@babel/plugin-proposal-numeric-separator";
|
||||
import proposalObjectRestSpread from "@babel/plugin-proposal-object-rest-spread";
|
||||
import proposalOptionalCatchBinding from "@babel/plugin-proposal-optional-catch-binding";
|
||||
import proposalOptionalChaining from "@babel/plugin-proposal-optional-chaining";
|
||||
import proposalPrivateMethods from "@babel/plugin-proposal-private-methods";
|
||||
import proposalUnicodePropertyRegex from "@babel/plugin-proposal-unicode-property-regex";
|
||||
import transformAsyncToGenerator from "@babel/plugin-transform-async-to-generator";
|
||||
import transformArrowFunctions from "@babel/plugin-transform-arrow-functions";
|
||||
@ -66,6 +69,7 @@ export default {
|
||||
"bugfix/transform-safari-for-shadowing": bugfixSafariForShadowing,
|
||||
"bugfix/transform-tagged-template-caching": bugfixTaggedTemplateCaching,
|
||||
"proposal-async-generator-functions": proposalAsyncGeneratorFunctions,
|
||||
"proposal-class-properties": proposalClassProperties,
|
||||
"proposal-dynamic-import": proposalDynamicImport,
|
||||
"proposal-json-strings": proposalJsonStrings,
|
||||
"proposal-nullish-coalescing-operator": proposalNullishCoalescingOperator,
|
||||
@ -73,8 +77,10 @@ export default {
|
||||
"proposal-object-rest-spread": proposalObjectRestSpread,
|
||||
"proposal-optional-catch-binding": proposalOptionalCatchBinding,
|
||||
"proposal-optional-chaining": proposalOptionalChaining,
|
||||
"proposal-private-methods": proposalPrivateMethods,
|
||||
"proposal-unicode-property-regex": proposalUnicodePropertyRegex,
|
||||
"syntax-async-generators": syntaxAsyncGenerators,
|
||||
"syntax-class-properties": syntaxClassProperties,
|
||||
"syntax-dynamic-import": syntaxDynamicImport,
|
||||
"syntax-json-strings": syntaxJsonStrings,
|
||||
"syntax-nullish-coalescing-operator": syntaxNullishCoalescingOperator,
|
||||
|
||||
@ -9,6 +9,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"71" }
|
||||
proposal-class-properties { "chrome":"71" }
|
||||
proposal-private-methods { "chrome":"71" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"71" }
|
||||
proposal-optional-chaining { "chrome":"71" }
|
||||
syntax-json-strings { "chrome":"71" }
|
||||
|
||||
@ -7,6 +7,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator {}
|
||||
proposal-class-properties {}
|
||||
proposal-private-methods {}
|
||||
proposal-nullish-coalescing-operator {}
|
||||
proposal-optional-chaining {}
|
||||
proposal-json-strings {}
|
||||
|
||||
@ -9,6 +9,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"71" }
|
||||
proposal-class-properties { "chrome":"71" }
|
||||
proposal-private-methods { "chrome":"71" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"71" }
|
||||
proposal-optional-chaining { "chrome":"71" }
|
||||
syntax-json-strings { "chrome":"71" }
|
||||
|
||||
@ -7,6 +7,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator {}
|
||||
proposal-class-properties {}
|
||||
proposal-private-methods {}
|
||||
proposal-nullish-coalescing-operator {}
|
||||
proposal-optional-chaining {}
|
||||
proposal-json-strings {}
|
||||
|
||||
@ -7,6 +7,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator {}
|
||||
proposal-class-properties {}
|
||||
proposal-private-methods {}
|
||||
proposal-nullish-coalescing-operator {}
|
||||
proposal-optional-chaining {}
|
||||
proposal-json-strings {}
|
||||
|
||||
@ -9,6 +9,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"71" }
|
||||
proposal-class-properties { "chrome":"71" }
|
||||
proposal-private-methods { "chrome":"71" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"71" }
|
||||
proposal-optional-chaining { "chrome":"71" }
|
||||
syntax-json-strings { "chrome":"71" }
|
||||
|
||||
@ -9,6 +9,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"71" }
|
||||
proposal-class-properties { "chrome":"71" }
|
||||
proposal-private-methods { "chrome":"71" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"71" }
|
||||
proposal-optional-chaining { "chrome":"71" }
|
||||
syntax-json-strings { "chrome":"71" }
|
||||
|
||||
@ -7,6 +7,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator {}
|
||||
proposal-class-properties {}
|
||||
proposal-private-methods {}
|
||||
proposal-nullish-coalescing-operator {}
|
||||
proposal-optional-chaining {}
|
||||
proposal-json-strings {}
|
||||
|
||||
@ -7,6 +7,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator {}
|
||||
proposal-class-properties {}
|
||||
proposal-private-methods {}
|
||||
proposal-nullish-coalescing-operator {}
|
||||
proposal-optional-chaining {}
|
||||
proposal-json-strings {}
|
||||
|
||||
@ -9,6 +9,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"71" }
|
||||
proposal-class-properties { "chrome":"71" }
|
||||
proposal-private-methods { "chrome":"71" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"71" }
|
||||
proposal-optional-chaining { "chrome":"71" }
|
||||
syntax-json-strings { "chrome":"71" }
|
||||
|
||||
@ -9,6 +9,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"71" }
|
||||
proposal-class-properties { "chrome":"71" }
|
||||
proposal-private-methods { "chrome":"71" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"71" }
|
||||
proposal-optional-chaining { "chrome":"71" }
|
||||
syntax-json-strings { "chrome":"71" }
|
||||
|
||||
@ -9,6 +9,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"71" }
|
||||
proposal-class-properties { "chrome":"71" }
|
||||
proposal-private-methods { "chrome":"71" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"71" }
|
||||
proposal-optional-chaining { "chrome":"71" }
|
||||
syntax-json-strings { "chrome":"71" }
|
||||
|
||||
@ -7,6 +7,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator {}
|
||||
proposal-class-properties {}
|
||||
proposal-private-methods {}
|
||||
proposal-nullish-coalescing-operator {}
|
||||
proposal-optional-chaining {}
|
||||
proposal-json-strings {}
|
||||
|
||||
@ -9,6 +9,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"71" }
|
||||
proposal-class-properties { "chrome":"71" }
|
||||
proposal-private-methods { "chrome":"71" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"71" }
|
||||
proposal-optional-chaining { "chrome":"71" }
|
||||
syntax-json-strings { "chrome":"71" }
|
||||
|
||||
@ -9,6 +9,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "samsung":"8.2" }
|
||||
proposal-class-properties { "samsung":"8.2" }
|
||||
proposal-private-methods { "samsung":"8.2" }
|
||||
proposal-nullish-coalescing-operator { "samsung":"8.2" }
|
||||
proposal-optional-chaining { "samsung":"8.2" }
|
||||
proposal-json-strings { "samsung":"8.2" }
|
||||
|
||||
@ -7,6 +7,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator {}
|
||||
proposal-class-properties {}
|
||||
proposal-private-methods {}
|
||||
proposal-nullish-coalescing-operator {}
|
||||
proposal-optional-chaining {}
|
||||
proposal-json-strings {}
|
||||
|
||||
@ -9,6 +9,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"71" }
|
||||
proposal-class-properties { "chrome":"71" }
|
||||
proposal-private-methods { "chrome":"71" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"71" }
|
||||
proposal-optional-chaining { "chrome":"71" }
|
||||
syntax-json-strings { "chrome":"71" }
|
||||
|
||||
@ -7,6 +7,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator {}
|
||||
proposal-class-properties {}
|
||||
proposal-private-methods {}
|
||||
proposal-nullish-coalescing-operator {}
|
||||
proposal-optional-chaining {}
|
||||
proposal-json-strings {}
|
||||
|
||||
@ -9,6 +9,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"71" }
|
||||
proposal-class-properties { "chrome":"71" }
|
||||
proposal-private-methods { "chrome":"71" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"71" }
|
||||
proposal-optional-chaining { "chrome":"71" }
|
||||
syntax-json-strings { "chrome":"71" }
|
||||
|
||||
@ -7,6 +7,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator {}
|
||||
proposal-class-properties {}
|
||||
proposal-private-methods {}
|
||||
proposal-nullish-coalescing-operator {}
|
||||
proposal-optional-chaining {}
|
||||
proposal-json-strings {}
|
||||
|
||||
@ -7,6 +7,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator {}
|
||||
proposal-class-properties {}
|
||||
proposal-private-methods {}
|
||||
proposal-nullish-coalescing-operator {}
|
||||
proposal-optional-chaining {}
|
||||
proposal-json-strings {}
|
||||
|
||||
1
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-80/input.mjs
vendored
Normal file
1
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-80/input.mjs
vendored
Normal file
@ -0,0 +1 @@
|
||||
import '@babel/polyfill';
|
||||
16
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-80/options.json
vendored
Normal file
16
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-80/options.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"validateLogs": true,
|
||||
"ignoreOutput": true,
|
||||
"presets": [
|
||||
[
|
||||
"env",
|
||||
{
|
||||
"debug": true,
|
||||
"targets": {
|
||||
"browsers": "chrome 80"
|
||||
},
|
||||
"shippedProposals": true
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
23
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-80/stdout.txt
vendored
Normal file
23
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-80/stdout.txt
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
@babel/preset-env: `DEBUG` option
|
||||
|
||||
Using targets:
|
||||
{
|
||||
"chrome": "80"
|
||||
}
|
||||
|
||||
Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
syntax-numeric-separator { "chrome":"80" }
|
||||
syntax-class-properties { "chrome":"80" }
|
||||
proposal-private-methods { "chrome":"80" }
|
||||
syntax-nullish-coalescing-operator { "chrome":"80" }
|
||||
syntax-optional-chaining { "chrome":"80" }
|
||||
syntax-json-strings { "chrome":"80" }
|
||||
syntax-optional-catch-binding { "chrome":"80" }
|
||||
syntax-async-generators { "chrome":"80" }
|
||||
syntax-object-rest-spread { "chrome":"80" }
|
||||
transform-modules-commonjs { "chrome":"80" }
|
||||
proposal-dynamic-import { "chrome":"80" }
|
||||
|
||||
Using polyfills: No polyfills were added, since the `useBuiltIns` option was not set.
|
||||
1
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-84/input.mjs
vendored
Normal file
1
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-84/input.mjs
vendored
Normal file
@ -0,0 +1 @@
|
||||
import '@babel/polyfill';
|
||||
16
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-84/options.json
vendored
Normal file
16
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-84/options.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"validateLogs": true,
|
||||
"ignoreOutput": true,
|
||||
"presets": [
|
||||
[
|
||||
"env",
|
||||
{
|
||||
"debug": true,
|
||||
"targets": {
|
||||
"browsers": "chrome 84"
|
||||
},
|
||||
"shippedProposals": true
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
22
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-84/stdout.txt
vendored
Normal file
22
packages/babel-preset-env/test/fixtures/debug/shippedProposals-chrome-84/stdout.txt
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
@babel/preset-env: `DEBUG` option
|
||||
|
||||
Using targets:
|
||||
{
|
||||
"chrome": "84"
|
||||
}
|
||||
|
||||
Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
syntax-numeric-separator { "chrome":"84" }
|
||||
syntax-class-properties { "chrome":"84" }
|
||||
syntax-nullish-coalescing-operator { "chrome":"84" }
|
||||
syntax-optional-chaining { "chrome":"84" }
|
||||
syntax-json-strings { "chrome":"84" }
|
||||
syntax-optional-catch-binding { "chrome":"84" }
|
||||
syntax-async-generators { "chrome":"84" }
|
||||
syntax-object-rest-spread { "chrome":"84" }
|
||||
transform-modules-commonjs { "chrome":"84" }
|
||||
proposal-dynamic-import { "chrome":"84" }
|
||||
|
||||
Using polyfills: No polyfills were added, since the `useBuiltIns` option was not set.
|
||||
@ -11,6 +11,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-class-properties { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-private-methods { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-optional-chaining { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-json-strings { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
|
||||
@ -11,6 +11,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-class-properties { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-private-methods { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-optional-chaining { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-json-strings { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
|
||||
@ -11,6 +11,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-class-properties { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-private-methods { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-optional-chaining { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-json-strings { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
|
||||
@ -11,6 +11,8 @@ Using modules transform: auto
|
||||
|
||||
Using plugins:
|
||||
proposal-numeric-separator { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-class-properties { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-private-methods { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-nullish-coalescing-operator { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-optional-chaining { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
proposal-json-strings { "chrome":"52", "firefox":"50", "ie":"11" }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user