gitmoji-cli
Version:
A gitmoji client for using emojis on commit messages.
84 lines • 2.61 kB
JavaScript
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 = {
[ ]: false,
[ ]: EMOJI_COMMIT_FORMATS.EMOJI,
[ ]: false,
[ ]: true,
[ ]: true,
[ ]: 'https://gitmoji.dev/api/gitmojis'
};
const LOCAL_CONFIGURATION = new Conf({
projectName: 'gitmoji',
schema: {
[ ]: {
type: 'boolean',
default: DEFAULT_CONFIGURATION[CONFIG.AUTO_ADD]
},
[ ]: {
enum: Object.values(EMOJI_COMMIT_FORMATS),
default: DEFAULT_CONFIGURATION[CONFIG.EMOJI_FORMAT]
},
[ ]: {
anyOf: [{
type: 'boolean'
}, {
type: 'array',
items: {
type: 'string'
}
}],
default: DEFAULT_CONFIGURATION[CONFIG.SCOPE_PROMPT]
},
[ ]: {
type: 'boolean',
default: DEFAULT_CONFIGURATION[CONFIG.MESSAGE_PROMPT]
},
[ ]: {
type: 'boolean',
default: DEFAULT_CONFIGURATION[CONFIG.CAPITALIZE_TITLE]
},
[ ]: {
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;