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 (isMethod) {
if (isAccessor) { 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"), [ return t.callExpression(file.addHelper("classPrivateFieldGet"), [
this.receiver(member), this.receiver(member),
t.cloneNode(id), 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")` helpers.classNameTDZError = helper("7.0.0-beta.0")`
export default function _classNameTDZError(name) { export default function _classNameTDZError(name) {
throw new Error("Class \\"" + name + "\\" cannot be referenced in computed property keys."); throw new Error("Class \\"" + name + "\\" cannot be referenced in computed property keys.");

View File

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

View File

@ -14,7 +14,7 @@ class Cl {
value: 0 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/taggedTemplateLiteral": "./helpers/taggedTemplateLiteral.js",
"./helpers/taggedTemplateLiteralLoose": "./helpers/taggedTemplateLiteralLoose.js", "./helpers/taggedTemplateLiteralLoose": "./helpers/taggedTemplateLiteralLoose.js",
"./helpers/readOnlyError": "./helpers/readOnlyError.js", "./helpers/readOnlyError": "./helpers/readOnlyError.js",
"./helpers/writeOnlyError": "./helpers/writeOnlyError.js",
"./helpers/classNameTDZError": "./helpers/classNameTDZError.js", "./helpers/classNameTDZError": "./helpers/classNameTDZError.js",
"./helpers/temporalUndefined": "./helpers/temporalUndefined.js", "./helpers/temporalUndefined": "./helpers/temporalUndefined.js",
"./helpers/tdz": "./helpers/tdz.js", "./helpers/tdz": "./helpers/tdz.js",
@ -140,6 +141,7 @@
"./helpers/esm/taggedTemplateLiteral": "./helpers/esm/taggedTemplateLiteral.js", "./helpers/esm/taggedTemplateLiteral": "./helpers/esm/taggedTemplateLiteral.js",
"./helpers/esm/taggedTemplateLiteralLoose": "./helpers/esm/taggedTemplateLiteralLoose.js", "./helpers/esm/taggedTemplateLiteralLoose": "./helpers/esm/taggedTemplateLiteralLoose.js",
"./helpers/esm/readOnlyError": "./helpers/esm/readOnlyError.js", "./helpers/esm/readOnlyError": "./helpers/esm/readOnlyError.js",
"./helpers/esm/writeOnlyError": "./helpers/esm/writeOnlyError.js",
"./helpers/esm/classNameTDZError": "./helpers/esm/classNameTDZError.js", "./helpers/esm/classNameTDZError": "./helpers/esm/classNameTDZError.js",
"./helpers/esm/temporalUndefined": "./helpers/esm/temporalUndefined.js", "./helpers/esm/temporalUndefined": "./helpers/esm/temporalUndefined.js",
"./helpers/esm/tdz": "./helpers/esm/tdz.js", "./helpers/esm/tdz": "./helpers/esm/tdz.js",

View File

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

View File

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