UNPKG

gitmoji-cli

Version:

A gitmoji client for using emojis on commit messages.

84 lines 2.61 kB
import Conf from 'conf'; import { cwd } from 'process'; import { readFileSync } from 'fs'; import { dirname } from 'path'; import { pathExistsSync } from 'path-exists'; import { CONFIG, EMOJI_COMMIT_FORMATS } from "../../constants/configuration.js"; const DEFAULT_CONFIGURATION = { [CONFIG.AUTO_ADD]: false, [CONFIG.EMOJI_FORMAT]: EMOJI_COMMIT_FORMATS.EMOJI, [CONFIG.SCOPE_PROMPT]: false, [CONFIG.MESSAGE_PROMPT]: true, [CONFIG.CAPITALIZE_TITLE]: true, [CONFIG.GITMOJIS_URL]: 'https://gitmoji.dev/api/gitmojis' }; const LOCAL_CONFIGURATION = new Conf({ projectName: 'gitmoji', schema: { [CONFIG.AUTO_ADD]: { type: 'boolean', default: DEFAULT_CONFIGURATION[CONFIG.AUTO_ADD] }, [CONFIG.EMOJI_FORMAT]: { enum: Object.values(EMOJI_COMMIT_FORMATS), default: DEFAULT_CONFIGURATION[CONFIG.EMOJI_FORMAT] }, [CONFIG.SCOPE_PROMPT]: { anyOf: [{ type: 'boolean' }, { type: 'array', items: { type: 'string' } }], default: DEFAULT_CONFIGURATION[CONFIG.SCOPE_PROMPT] }, [CONFIG.MESSAGE_PROMPT]: { type: 'boolean', default: DEFAULT_CONFIGURATION[CONFIG.MESSAGE_PROMPT] }, [CONFIG.CAPITALIZE_TITLE]: { type: 'boolean', default: DEFAULT_CONFIGURATION[CONFIG.CAPITALIZE_TITLE] }, [CONFIG.GITMOJIS_URL]: { type: 'string', format: 'url', default: DEFAULT_CONFIGURATION[CONFIG.GITMOJIS_URL] } } }); const getFile = path => { try { return JSON.parse(readFileSync(path)); } catch (error) { return; } }; const getConfiguration = () => { const loadConfig = () => { let currentDir = cwd(); while (currentDir !== dirname(currentDir)) { const packageJson = `${currentDir}/package.json`; const configurationFile = `${currentDir}/.gitmojirc.json`; if (pathExistsSync(packageJson) && getFile(packageJson)?.gitmoji) { return getFile(packageJson)?.gitmoji; } if (pathExistsSync(configurationFile) && getFile(configurationFile)) { return getFile(configurationFile); } currentDir = dirname(currentDir); } return LOCAL_CONFIGURATION.store; }; return { get: key => { const resolvedConfiguration = loadConfig(); const configuration = typeof resolvedConfiguration === 'object' && Object.keys(resolvedConfiguration).length ? resolvedConfiguration : DEFAULT_CONFIGURATION; return configuration[key] ?? DEFAULT_CONFIGURATION[key]; }, set: (key, value) => LOCAL_CONFIGURATION.set(key, value) }; }; export default getConfiguration;