Générateur automatique de PropTypes, defaultProps et documentation pour vos composants React en JSX.
- Présentation
- Fonctionnalités
- Installation
- Utilisation
- Syntaxe supportée
- Architecture du code
- Exemples
- Contribuer
- Licence
jsx-typify
permet d'ajouter automatiquement des PropTypes, des defaultProps et de générer une documentation complète (Markdown, JSON, TypeScript, JSDoc) à partir d'annotations simples dans vos fichiers JSX.
- Génération automatique de
propTypes
etdefaultProps
- Support des types avancés :
Enum
,Required
,Event
,shape
,arrayOf
, etc. - Génération de documentation :
- Markdown (
.props.md
) - JSON (
.props.json
) - TypeScript (
.props.d.ts
) - JSDoc (
.props.jsdoc
)
- Markdown (
- Utilisation simple par script ou en batch sur un dossier
npm install
# ou
yarn install
Assurez-vous d'avoir Node.js ≥ 14.
MyComponent.type({
name: Required(String),
status: Enum(['active', 'inactive']),
onClick: Event('ClickEvent'),
user: {
id: String,
email: String
},
tags: [String]
});
MyComponent.defaults({
name: 'John',
status: 'active',
tags: ['default']
});
node example/run-example.js
Ou utilisez le module dans votre propre script :
const { injectPropTypes } = require('./typify/parse.js');
injectPropTypes('./src/MonComposant.jsx');
-
Types simples :
String
,Number
,Boolean
,Object
,Array
,Node
,Element
-
Enum :
Enum(['val1', 'val2'])
-
Required :
Required(Type)
ouRequired(Enum([...]))
-
Event :
Event('ClickEvent')
,Event('ChangeEvent')
, etc. -
Shape :
{ prop: Type, ... }
-
Array :
[Type]
-
defaultProps :
.defaults({ ... })
typify/
├─ parse.js # Point d'entrée principal (orchestration)
├─ parser.js # Parsing et extraction des infos de l'AST
├─ propTypeGenerator.js # Génération des PropTypes (tous types)
├─ defaultPropGenerator.js # Génération des defaultProps et extraction pour la doc
├─ docGenerator.js # Génération de la documentation (MD, JSON, TS, JSDoc)
└─ typeMapping.js # Mapping des types simples et DOM
Chaque module a une responsabilité claire, facilitant la maintenance et l'extension.
Voir le dossier example/
pour un exemple complet :
node example/run-example.js
UserProfile.type({
name: Required(String),
status: Enum(['active', 'inactive']),
onClick: Event('ClickEvent'),
user: {
id: String,
email: String
},
tags: [String]
});
Génère automatiquement :
UserProfile.propTypes = {
name: PropTypes.string.isRequired,
status: PropTypes.oneOf(['active', 'inactive']),
onClick: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({})]),
user: PropTypes.shape({ id: PropTypes.string, email: PropTypes.string }),
tags: PropTypes.arrayOf(PropTypes.string)
};
-
UserProfile.props.md
(Markdown) -
UserProfile.props.json
(JSON) -
UserProfile.props.d.ts
(TypeScript) -
UserProfile.props.jsdoc
(JSDoc)
Les contributions sont les bienvenues ! Pour proposer une amélioration ou corriger un bug :
- Forkez le dépôt
- Créez une branche pour votre fonctionnalité ou correction
- Ajoutez vos modules ou améliorez l'existant
- Testez vos modifications
- Proposez une Pull Request claire et documentée
Bonnes pratiques :
- Respectez la structure modulaire du projet
- Ajoutez des exemples et/ou des tests si possible
- Documentez toute nouvelle fonctionnalité dans le README
Contact : [marcos.adodo@gmail.com]
MIT