'use strict'; const message = process.env['HUSKY_GIT_PARAMS']; const fs = require('fs'); const types = ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'release', 'revert', 'style', 'test']; const scopes = ['showcase', 'packaging', 'changelog', 'schematics', 'module:*']; function parseMessage(message) { const PATTERN = /^(\w+)(?:\(([^)]+)\))?\: (.+)$/; const match = PATTERN.exec(message); if (!match) { return null; } return { type: match[1] || null, scope: match[2] || null, }; } function getScopesRule() { const messages = fs.readFileSync(message, { encoding: 'utf-8' }); const parsed = parseMessage(messages.split('\n')[0]); if (!parsed) { return [2, 'always', scopes]; } const { scope, type } = parsed; if (scope && !scopes.includes(scope) && type !== 'release' && !/module:.+/.test(scope)) { return [2, 'always', scopes]; } else { return [2, 'always', []]; } } module.exports = { extends: ['@commitlint/config-conventional'], rules: { 'type-enum': [2, 'always', types], 'scope-enum': getScopesRule, }, };