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:
parent
b727e67347
commit
5a020b24b7
@ -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),
|
||||
|
||||
@ -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.");
|
||||
|
||||
@ -6,7 +6,7 @@ class Cl {
|
||||
}
|
||||
|
||||
constructor() {
|
||||
expect(this.#privateFieldValue).toBeUndefined();
|
||||
expect(() => this.#privateFieldValue).toThrow(TypeError);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ class Cl {
|
||||
value: 0
|
||||
});
|
||||
|
||||
this.publicField = babelHelpers.classPrivateFieldGet(this, _privateFieldValue);
|
||||
this.publicField = babelHelpers.writeOnlyError("privateFieldValue");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user