diff --git a/packages/babel-helper-create-class-features-plugin/src/fields.js b/packages/babel-helper-create-class-features-plugin/src/fields.js index 4665236de7..0c4631ba12 100644 --- a/packages/babel-helper-create-class-features-plugin/src/fields.js +++ b/packages/babel-helper-create-class-features-plugin/src/fields.js @@ -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), diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index a000c2c9fc..0eeed454b0 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -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."); diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/get-only-setter/exec.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/get-only-setter/exec.js index 92e8197700..d51b209c7b 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/get-only-setter/exec.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/get-only-setter/exec.js @@ -6,7 +6,7 @@ class Cl { } constructor() { - expect(this.#privateFieldValue).toBeUndefined(); + expect(() => this.#privateFieldValue).toThrow(TypeError); } } diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/get-only-setter/output.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/get-only-setter/output.js index 96984c5b88..d49c3805ad 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/get-only-setter/output.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/get-only-setter/output.js @@ -14,7 +14,7 @@ class Cl { value: 0 }); - this.publicField = babelHelpers.classPrivateFieldGet(this, _privateFieldValue); + this.publicField = babelHelpers.writeOnlyError("privateFieldValue"); } } diff --git a/packages/babel-runtime-corejs2/package.json b/packages/babel-runtime-corejs2/package.json index 320f4ccfdf..70c818d9a5 100644 --- a/packages/babel-runtime-corejs2/package.json +++ b/packages/babel-runtime-corejs2/package.json @@ -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", diff --git a/packages/babel-runtime-corejs3/package.json b/packages/babel-runtime-corejs3/package.json index 84b4648cfe..4ea7f245e2 100644 --- a/packages/babel-runtime-corejs3/package.json +++ b/packages/babel-runtime-corejs3/package.json @@ -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", diff --git a/packages/babel-runtime/package.json b/packages/babel-runtime/package.json index 5be6467641..f8e7b9abd4 100644 --- a/packages/babel-runtime/package.json +++ b/packages/babel-runtime/package.json @@ -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",