Skip to content

Add Handler for Union Type Annotation for generators#54600

Open
arushikesarwani94 wants to merge 15 commits into
facebook:mainfrom
arushikesarwani94:export-D87391424
Open

Add Handler for Union Type Annotation for generators#54600
arushikesarwani94 wants to merge 15 commits into
facebook:mainfrom
arushikesarwani94:export-D87391424

Conversation

@arushikesarwani94
Copy link
Copy Markdown
Contributor

Summary:
Added logic for handling Unions that will be used by all generators.

NOTE: Generators behavior still remain unchanged hence don't allow unions of different types. Only RN Compat Checker consumes this new change of Union support of different types

Changelog: [Internal]

Differential Revision: D87391424

Summary:

Adding NumberTypeAnnotation to the Codegen Schema in order to obtain parity with String & Boolean which will be the Union types

Changelog: [Internal]

Differential Revision: D87374063
Summary:

Adding the generic type T UnionTypeAnnotation. This will be used later to create Unions of types String, Number & Boolean.

Changelog: [Internal]

Differential Revision: D87374445
Summary:

Introduce NumberLiteralType & StringLiteralType in TypeScript just as they already exist in Flow here:

https://www.internalfb.com/code/fbsource/[9b248afa0cd5548b81dd44f1042b230e6069432b]/xplat/js/react-native-github/packages/react-native-codegen/src/CodegenSchema.js?lines=41-53

Changelog: [Internal]

Differential Revision: D87375511
Summary:
TupleTypeAnnotation is added for parity with UnionTypeAnnotation
to support future implementation. Currently limited to String and Number literals as per: https://docs.google.com/document/d/1pTBMOEIov5n5-0L9z925XPvGX1YxlmI6n6FJvd0oXtE/edit?tab=t.0#heading=h.fhe5py9plytd

Differential Revision: D87383455
Summary:

Introduce `BooleanLiteralTypeAnnotation` in Flow & TypeScript to match the existing `StringLiteralTypeAnnotation` & `NumberLiteralTypeAnnotation` since Unions will be supporting Booleans along with String & Number

Changelog: [Internal]

Differential Revision: D87384473
Summary:

Following types will be supported in Union currently:

1. Number : NumberType + NumberLiteralType
2. Boolean : BooleanType + BooleanLiteralType
3. String : StringType + StringLiteralType
4. Object: NativeModuleObjectType

These are the only ones that exist today as per : 

https://docs.google.com/document/d/1pTBMOEIov5n5-0L9z925XPvGX1YxlmI6n6FJvd0oXtE/edit?tab=t.0#heading=h.fhe5py9plytd

Changelog: [Internal]

Differential Revision: D87384995
Summary:

Adding `NumberLiteralUnionTypeAnnotation` & `BooleanLiteralUnionTypeAnnotation` to Flow & TypeScript so that they are in parity with other Union type : `StringLiteralUnionTypeAnnotation`. Number & Boolean aren't used anywhere yet.

Changelog: [Internal]

Differential Revision: D87386144
…n in Flow (facebook#54593)

Summary:

Just as `NumberLiteralTypeAnnotation` was part of the `NativeModuleBaseTypeAnnotation` in Flow, adding the `BooleanLiteralTypeAnnotation`. Similarly adding it to the StructCollector since this is needed for Flow exhaustiveness check in generators/modules in D87410022

NOTE: Didn't add this change for TS as both `NumberLiteralTypeAnnotation` was not included as part of `NativeModuleBaseTypeAnnotation` in TS, also the generators were not failing in TS for this.

Changelog: [Internal]

Differential Revision: D87392274
Summary:

Refactoring `NativeModuleUnionTypeAnnotation` to use the newly introduced `NativeModuleUnionTypeAnnotationMemberType`

Changelog: [Internal]

Differential Revision: D87386775
Summary:

Now that UnionTypeAnnotation itself supports both the member types and value, we can fold the  StringLiteralUnionTypeAnnotation into the UnionTypeAnnotation and un-special case the StringLiteralUnionTypeAnnotation

Changelog: [Internal]

Differential Revision: D87388948
…move the special handling of StringLiteralUnionType (facebook#54596)

Summary:

- Getting rid of emitStringLiteralUnion logic in parser
- Modifying the emitUnion logic in parser

Changelog: [Internal]

Differential Revision: D87412493
Summary:

Flow Parser changes to accomodate the new emitUnion

Changelog: [Internal]

Differential Revision: D87412532
Summary:

TypeScript Parser changes to accomodate new emitUnion

Changelog: [Internal]

Differential Revision: D87412635
)

Summary:

Now that different member types in Union is no more a parser error getting rid of `UnsupportedUnionTypeAnnotationParserError`

Changelog: [Internal]

Differential Revision: D87412703
Summary:
Added logic for handling Unions that will be used by all generators.

NOTE: Generators behavior still remain unchanged hence don't allow unions of different types. Only RN Compat Checker consumes this new change of Union support of different types

Changelog: [Internal]

Differential Revision: D87391424
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Nov 19, 2025
@meta-codesync
Copy link
Copy Markdown

meta-codesync Bot commented Nov 19, 2025

@arushikesarwani94 has exported this pull request. If you are a Meta employee, you can view the originating Diff in D87391424.

Copy link
Copy Markdown

@Chandramuhilan Chandramuhilan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated PR Review

PR: Add Handler for Union Type Annotation for generators
Files Changed: 14
Lines: +217 -140

Pattern-Based Analysis

Total Issues Found: 554

⚠️ High Priority (86)

  • Line 2: Potential division by zero - add zero check
  • Line 2: Potential division by zero - add zero check
  • Line 2: Potential division by zero - add zero check
  • Line 43: Potential division by zero - add zero check
  • Line 44: Potential division by zero - add zero check

ℹ️ Medium Priority (15)

  • Line 190: Weak cryptographic algorithm - use SHA-256 or better
  • Line 207: Weak cryptographic algorithm - use SHA-256 or better
  • Line 168: Potential null pointer access - add null check

Generated by PR Review Agent

@react-native-bot
Copy link
Copy Markdown
Collaborator

This PR is stale because it has been open for 180 days with no activity. It will be closed in 7 days unless you comment on it or remove the "Stale" label.

@react-native-bot react-native-bot added the Stale There has been a lack of activity on this issue and it may be closed soon. label May 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. fb-exported meta-exported p: Facebook Partner: Facebook Partner Stale There has been a lack of activity on this issue and it may be closed soon.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants