fix: throw error when accessing private method without a getter (#12689)

* fix: class private accessor without getter

* Provide default return if 'writeOnlyError' is not available

* Add warning for old `@babel/helpers`

* Add missing helper call
This commit is contained in:
Federico Ciardi 2021-01-26 17:16:47 +01:00 committed by GitHub
parent b727e67347
commit 5a020b24b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 24 additions and 2 deletions

View File

@ -225,6 +225,16 @@ const privateNameHandlerSpec = {
if (isMethod) {
if (isAccessor) {
if (!getId && setId) {
if (file.availableHelper("writeOnlyError")) {
return t.callExpression(file.addHelper("writeOnlyError"), [
t.stringLiteral(name),
]);
}
console.warn(
`@babel/helpers is outdated, update it to silence this warning.`,
);
}
return t.callExpression(file.addHelper("classPrivateFieldGet"), [
this.receiver(member),
t.cloneNode(id),

View File

@ -875,6 +875,12 @@ helpers.readOnlyError = helper("7.0.0-beta.0")`
}
`;
helpers.writeOnlyError = helper("7.12.12")`
export default function _writeOnlyError(name) {
throw new TypeError("\\"" + name + "\\" is write-only");
}
`;
helpers.classNameTDZError = helper("7.0.0-beta.0")`
export default function _classNameTDZError(name) {
throw new Error("Class \\"" + name + "\\" cannot be referenced in computed property keys.");

View File

@ -6,7 +6,7 @@ class Cl {
}
constructor() {
expect(this.#privateFieldValue).toBeUndefined();
expect(() => this.#privateFieldValue).toThrow(TypeError);
}
}

View File

@ -14,7 +14,7 @@ class Cl {
value: 0
});
this.publicField = babelHelpers.classPrivateFieldGet(this, _privateFieldValue);
this.publicField = babelHelpers.writeOnlyError("privateFieldValue");
}
}

View File

@ -60,6 +60,7 @@
"./helpers/taggedTemplateLiteral": "./helpers/taggedTemplateLiteral.js",
"./helpers/taggedTemplateLiteralLoose": "./helpers/taggedTemplateLiteralLoose.js",
"./helpers/readOnlyError": "./helpers/readOnlyError.js",
"./helpers/writeOnlyError": "./helpers/writeOnlyError.js",
"./helpers/classNameTDZError": "./helpers/classNameTDZError.js",
"./helpers/temporalUndefined": "./helpers/temporalUndefined.js",
"./helpers/tdz": "./helpers/tdz.js",
@ -140,6 +141,7 @@
"./helpers/esm/taggedTemplateLiteral": "./helpers/esm/taggedTemplateLiteral.js",
"./helpers/esm/taggedTemplateLiteralLoose": "./helpers/esm/taggedTemplateLiteralLoose.js",
"./helpers/esm/readOnlyError": "./helpers/esm/readOnlyError.js",
"./helpers/esm/writeOnlyError": "./helpers/esm/writeOnlyError.js",
"./helpers/esm/classNameTDZError": "./helpers/esm/classNameTDZError.js",
"./helpers/esm/temporalUndefined": "./helpers/esm/temporalUndefined.js",
"./helpers/esm/tdz": "./helpers/esm/tdz.js",

View File

@ -59,6 +59,7 @@
"./helpers/taggedTemplateLiteral": "./helpers/taggedTemplateLiteral.js",
"./helpers/taggedTemplateLiteralLoose": "./helpers/taggedTemplateLiteralLoose.js",
"./helpers/readOnlyError": "./helpers/readOnlyError.js",
"./helpers/writeOnlyError": "./helpers/writeOnlyError.js",
"./helpers/classNameTDZError": "./helpers/classNameTDZError.js",
"./helpers/temporalUndefined": "./helpers/temporalUndefined.js",
"./helpers/tdz": "./helpers/tdz.js",
@ -139,6 +140,7 @@
"./helpers/esm/taggedTemplateLiteral": "./helpers/esm/taggedTemplateLiteral.js",
"./helpers/esm/taggedTemplateLiteralLoose": "./helpers/esm/taggedTemplateLiteralLoose.js",
"./helpers/esm/readOnlyError": "./helpers/esm/readOnlyError.js",
"./helpers/esm/writeOnlyError": "./helpers/esm/writeOnlyError.js",
"./helpers/esm/classNameTDZError": "./helpers/esm/classNameTDZError.js",
"./helpers/esm/temporalUndefined": "./helpers/esm/temporalUndefined.js",
"./helpers/esm/tdz": "./helpers/esm/tdz.js",

View File

@ -59,6 +59,7 @@
"./helpers/taggedTemplateLiteral": "./helpers/taggedTemplateLiteral.js",
"./helpers/taggedTemplateLiteralLoose": "./helpers/taggedTemplateLiteralLoose.js",
"./helpers/readOnlyError": "./helpers/readOnlyError.js",
"./helpers/writeOnlyError": "./helpers/writeOnlyError.js",
"./helpers/classNameTDZError": "./helpers/classNameTDZError.js",
"./helpers/temporalUndefined": "./helpers/temporalUndefined.js",
"./helpers/tdz": "./helpers/tdz.js",
@ -139,6 +140,7 @@
"./helpers/esm/taggedTemplateLiteral": "./helpers/esm/taggedTemplateLiteral.js",
"./helpers/esm/taggedTemplateLiteralLoose": "./helpers/esm/taggedTemplateLiteralLoose.js",
"./helpers/esm/readOnlyError": "./helpers/esm/readOnlyError.js",
"./helpers/esm/writeOnlyError": "./helpers/esm/writeOnlyError.js",
"./helpers/esm/classNameTDZError": "./helpers/esm/classNameTDZError.js",
"./helpers/esm/temporalUndefined": "./helpers/esm/temporalUndefined.js",
"./helpers/esm/tdz": "./helpers/esm/tdz.js",