diff --git a/.changeset/late-numbers-raise.md b/.changeset/late-numbers-raise.md new file mode 100644 index 00000000000..2aea24b02b6 --- /dev/null +++ b/.changeset/late-numbers-raise.md @@ -0,0 +1,5 @@ +--- +'react-docgen': patch +--- + +Fixed crash when classes with private fields are used diff --git a/packages/react-docgen/src/utils/__tests__/getMemberExpressionValuePath-test.ts b/packages/react-docgen/src/utils/__tests__/getMemberExpressionValuePath-test.ts index 1175c87a59e..2f4824ad175 100644 --- a/packages/react-docgen/src/utils/__tests__/getMemberExpressionValuePath-test.ts +++ b/packages/react-docgen/src/utils/__tests__/getMemberExpressionValuePath-test.ts @@ -15,6 +15,27 @@ describe('getMemberExpressionValuePath', () => { ); }); + test('ignores unrelated private field', () => { + const def = parse.statement( + ` + class Foo { + #isprivate = {}; + + classMethod() { + this.#isprivate = {}; + } + } + const Boo = () => {}; + Boo.propTypes = {}; + `, + 1, + ); + + expect(getMemberExpressionValuePath(def, 'propTypes')).toBe( + def.parentPath.get('body')[2].get('expression').get('right'), + ); + }); + test('takes the correct property definitions', () => { const def = parse.statement(` var Foo = () => {}; diff --git a/packages/react-docgen/src/utils/getMemberExpressionValuePath.ts b/packages/react-docgen/src/utils/getMemberExpressionValuePath.ts index a1ee86e3b52..c2a73e681d2 100644 --- a/packages/react-docgen/src/utils/getMemberExpressionValuePath.ts +++ b/packages/react-docgen/src/utils/getMemberExpressionValuePath.ts @@ -87,7 +87,7 @@ const explodedVisitors = visitors.explode({ const property = memberPath.get('property'); if ( - (!memberPath.node.computed || + ((!memberPath.node.computed && property.isIdentifier()) || property.isStringLiteral() || property.isNumericLiteral()) && getNameOrValue(property) === state.memberName &&