Renaming exported components and props

DevLink now renames exported components and props to ensure that the generated React code has valid, collision-free identifiers. Here is a summary of the changes that it makes:

Components

DevLink sanitizes exported component names to handle:

  • Emojis and special characters: My πŸ˜€ Component β†’ MyComponent
  • Numbers at the start: 123 β†’ UnknownComponent123, 1Component β†’ UnknownComponent1Component
  • Reserved words: class β†’ UnknownComponentClass
  • Empty or whitespace-only names: "" or " " β†’ UnknownComponent
  • Collisions: Multiple components named MyComponent β†’ MyComponent, MyComponent2, MyComponent3

Props

DevLink sanitizes exported prop names to handle:

  • Emojis and special characters: πŸ˜€ β†’ unknownProp
  • Numbers at the start: 123 β†’ unknownProp123, 1prop β†’ unknownProp1Prop
  • Reserved words: return β†’ returnProp, private β†’ privateProp
  • React reserved props: key β†’ keyProp, ref β†’ refProp
  • HTML attributes for component props: class β†’ classProp, for β†’ forProp
  • Empty or whitespace-only names: "" or " " β†’ unknownProp

Note: HTML attributes like data-* and aria-* are preserved as-is and not sanitized.

What’s Fixed

This update fixes several critical issues in the previous system:

  • No more leading underscores: Previously, names starting with numbers like 123 would become _123 or __123, which violates JavaScript naming conventions
  • Better handling of reserved words: Component props named class or for now become classProp and forProp instead of _class and _for
  • React conflicts resolved: Props named key or ref now become keyProp and refProp to avoid conflicts with React’s special props
  • Fallback for invalid names: Empty or whitespace-only names now get meaningful fallback names instead of breaking

For more information, see What DevLink Exports.