Skip to content

fix: emoji with CommumJS #4557

@ViniDevBR

Description

@ViniDevBR

Steps to Reproduce

Only modules accept top level await.


const config = require("@commitlint/config-conventional")
const createPreset = require("conventional-changelog-conventionalcommits")
cosnt { merge } = require("lodash-es")

async function createEmojiParser() {
  const emojiRegexPart = Object.values(config.prompt.questions.type.enum)
    .map((value) => value.emoji.trim())
    .join('|')

  const parserOpts = {
    breakingHeaderPattern: new RegExp(
      `^(?:${emojiRegexPart})\\s+(\\w*)(?:\\((.*)\\))?!:\\s+(.*)$`
    ),
    headerPattern: new RegExp(
      `^(?:${emojiRegexPart})\\s+(\\w*)(?:\\((.*)\\))?!?:\\s+(.*)$`
    ),
  }

  const defaultPreset = await createPreset()

  return merge({}, defaultPreset, {
    conventionalChangelog: { parserOpts },
    parserOpts,
    recommendedBumpOpts: { parserOpts },
  })
}

const emojiParser = await createEmojiParser()

/**
 * @type {import('@commitlint/types').UserConfig}
 */
module.exports = {
  extends: ['@commitlint/config-conventional'],
  parserPreset: emojiParser,
  prompt: {
    questions: {
      type: {
        description: 'Select the type of change that you\'re committing',
        headerWithEmoji: true,
        enum: {
          feat: {
            description: 'A new feature',
            title: 'Features',
            emoji: '',
          },
          fix: {
            description: 'A bug fix',
            title: 'Bug Fixes',
            emoji: '🐛',
          },
          docs: {
            description: 'Documentation only changes',
            title: 'Documentation',
            emoji: '📚',
          },
          style: {
            description:
              'Changes that do not affect the meaning of the code (linters)',
            title: 'Styles',
            emoji: '🎨',
          },
          refactor: {
            description:
              'A code change that neither fixes a bug nor adds a feature',
            title: 'Code Refactoring',
            emoji: '♻️ ',
          },
          perf: {
            description: 'A code change that improves performance',
            title: 'Performance Improvements',
            emoji: '🚀',
          },
          test: {
            description: 'Adding missing tests or correcting existing tests',
            title: 'Tests',
            emoji: '🧪',
          },
          build: {
            description:
              'Changes that affect the build system or external dependencies (yarn)',
            title: 'Builds',
            emoji: '🏗️ ',
          },
          ci: {
            description:
              'Changes to our CI configuration files and scripts (GitActions)',
            title: 'Continuous Integrations',
            emoji: '⚙️ ',
          },
          chore: {
            description: 'Other changes that don\'t modify src or test files',
            title: 'Chores',
            emoji: '🧩',
          },
          revert: {
            description: 'Reverts a previous commit',
            title: 'Reverts',
            emoji: '',
          },
        },
      },
    },
  },
}

Current Behavior

This doesnt work with commonJS.

Expected Behavior

Should a option for CommomJS.

A tried changed the imports for require

and tried to change await files for .then

tried to

export.module = (async () => { 
  emojiParser = await createEmojiParser()

  return {
    extends: ['@commitlint/config-conventional'],
  parserPreset: emojiParser ,
  prompt: {
    questions: {
      type: {
        description: 'Select the type of change that you\'re committing',
        headerWithEmoji: true,
        enum: {
          feat: {
            description: 'A new feature',
            title: 'Features',
            emoji: '✨',
          },
          fix: {
            description: 'A bug fix',
            title: 'Bug Fixes',
            emoji: '🐛',
          },
          docs: {
            description: 'Documentation only changes',
            title: 'Documentation',
            emoji: '📚',
          },
          style: {
            description:
              'Changes that do not affect the meaning of the code (linters)',
            title: 'Styles',
            emoji: '🎨',
          },
          refactor: {
            description:
              'A code change that neither fixes a bug nor adds a feature',
            title: 'Code Refactoring',
            emoji: '♻️ ',
          },
          perf: {
            description: 'A code change that improves performance',
            title: 'Performance Improvements',
            emoji: '🚀',
          },
          test: {
            description: 'Adding missing tests or correcting existing tests',
            title: 'Tests',
            emoji: '🧪',
          },
          build: {
            description:
              'Changes that affect the build system or external dependencies (yarn)',
            title: 'Builds',
            emoji: '🏗️ ',
          },
          ci: {
            description:
              'Changes to our CI configuration files and scripts (GitActions)',
            title: 'Continuous Integrations',
            emoji: '⚙️ ',
          },
          chore: {
            description: 'Other changes that don\'t modify src or test files',
            title: 'Chores',
            emoji: '🧩',
          },
          revert: {
            description: 'Reverts a previous commit',
            title: 'Reverts',
            emoji: '⏪',
          },
        },
      },
    },
  },
  }
}

Affected packages

  • cli
  • core
  • prompt
  • config-angular

Possible Solution

Works with commomJS

Context

No response

commitlint --version

"@commitlint/cli": "^20.1.0",

git --version

2.37.0

node --version

22.15.1

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions