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