|
| 1 | +// Canonical gitmoji prefix convention. Must stay in sync with docs/DEVELOPMENT.md. |
| 2 | +// The order within each category is the priority used by the changelog generator. |
| 3 | + |
| 4 | +export type GitmojiCategory = 'public' | 'internal' |
| 5 | + |
| 6 | +export interface Gitmoji { |
| 7 | + emoji: string |
| 8 | + label: string |
| 9 | + category: GitmojiCategory |
| 10 | +} |
| 11 | + |
| 12 | +export const GITMOJI: readonly Gitmoji[] = [ |
| 13 | + // User-facing changes |
| 14 | + { emoji: 'π₯', label: 'Breaking change', category: 'public' }, |
| 15 | + { emoji: 'β¨', label: 'New feature', category: 'public' }, |
| 16 | + { emoji: 'π', label: 'Bug fix', category: 'public' }, |
| 17 | + { emoji: 'β‘οΈ', label: 'Performance', category: 'public' }, |
| 18 | + { emoji: 'π', label: 'Documentation', category: 'public' }, |
| 19 | + { emoji: 'βοΈ', label: 'Experimental', category: 'public' }, |
| 20 | + |
| 21 | + // Internal changes |
| 22 | + { emoji: 'π·', label: 'Build/CI', category: 'internal' }, |
| 23 | + { emoji: 'β»οΈ', label: 'Refactor', category: 'internal' }, |
| 24 | + { emoji: 'π¨', label: 'Code structure', category: 'internal' }, |
| 25 | + { emoji: 'β
', label: 'Tests', category: 'internal' }, |
| 26 | + { emoji: 'π§', label: 'Configuration', category: 'internal' }, |
| 27 | + { emoji: 'π₯', label: 'Removal', category: 'internal' }, |
| 28 | + { emoji: 'π', label: 'Code review', category: 'internal' }, |
| 29 | + { emoji: 'π¨', label: 'Linting', category: 'internal' }, |
| 30 | + { emoji: 'π§Ή', label: 'Cleanup', category: 'internal' }, |
| 31 | + { emoji: 'π', label: 'Logging', category: 'internal' }, |
| 32 | +] |
| 33 | + |
| 34 | +// Strip the Unicode variation selector (U+FE0F) so 'β‘' and 'β‘οΈ' compare equal. |
| 35 | +const VARIATION_SELECTOR = /οΈ/g |
| 36 | +export const normalizeGitmoji = (value: string): string => value.replace(VARIATION_SELECTOR, '') |
| 37 | + |
| 38 | +export const PUBLIC_EMOJI_PRIORITY: readonly string[] = GITMOJI.filter((g) => g.category === 'public').map( |
| 39 | + (g) => g.emoji |
| 40 | +) |
| 41 | +export const INTERNAL_EMOJI_PRIORITY: readonly string[] = GITMOJI.filter((g) => g.category === 'internal').map( |
| 42 | + (g) => g.emoji |
| 43 | +) |
0 commit comments