mirror of
https://github.com/quine-global/hyper.git
synced 2026-01-12 20:18:41 -09:00
62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
const {writeFileSync, readFileSync} = require('fs');
|
|
const {sync: mkdirpSync} = require('mkdirp');
|
|
const {defaultCfg, cfgPath, plugs, defaultPlatformKeyPath} = require('./paths');
|
|
const {_init, _extractDefault} = require('./init');
|
|
|
|
let defaultConfig;
|
|
|
|
const _write = function(path, data) {
|
|
// This method will take text formatted as Unix line endings and transform it
|
|
// to text formatted with DOS line endings. We do this because the default
|
|
// text editor on Windows (notepad) doesn't Deal with LF files. Still. In 2017.
|
|
const crlfify = function(str) {
|
|
return str.replace(/\r?\n/g, '\r\n');
|
|
};
|
|
const format = process.platform === 'win32' ? crlfify(data.toString()) : data;
|
|
writeFileSync(path, format, 'utf8');
|
|
};
|
|
|
|
const _importConf = function() {
|
|
// init plugin directories if not present
|
|
mkdirpSync(plugs.base);
|
|
mkdirpSync(plugs.local);
|
|
|
|
try {
|
|
const defaultCfgRaw = readFileSync(defaultCfg, 'utf8');
|
|
const _defaultCfg = _extractDefault(defaultCfgRaw);
|
|
// Importing platform specific keymap
|
|
try {
|
|
const content = readFileSync(defaultPlatformKeyPath(), 'utf8');
|
|
const mapping = JSON.parse(content);
|
|
_defaultCfg.keymaps = mapping;
|
|
} catch (err) {
|
|
//eslint-disable-next-line no-console
|
|
console.error(err);
|
|
}
|
|
// Importing user config
|
|
try {
|
|
const _cfgPath = readFileSync(cfgPath, 'utf8');
|
|
return {userCfg: _cfgPath, defaultCfg: _defaultCfg};
|
|
} catch (err) {
|
|
_write(cfgPath, defaultCfgRaw);
|
|
return {userCfg: defaultCfgRaw, defaultCfg: _defaultCfg};
|
|
}
|
|
} catch (err) {
|
|
//eslint-disable-next-line no-console
|
|
console.log(err);
|
|
}
|
|
};
|
|
|
|
exports._import = () => {
|
|
const imported = _importConf();
|
|
defaultConfig = imported.defaultCfg;
|
|
const result = _init(imported);
|
|
return result;
|
|
};
|
|
|
|
exports.getDefaultConfig = () => {
|
|
if (!defaultConfig) {
|
|
defaultConfig = _extractDefault(_importConf().defaultCfg);
|
|
}
|
|
return defaultConfig;
|
|
};
|