a2r
Version:
A2R Framework
137 lines (136 loc) • 4.78 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.addActiveProject = exports.getKey = exports.getKeys = exports.setKey = exports.setKeys = exports.init = exports.saveSettings = exports.getSettings = exports.settingsExist = void 0;
const path_1 = __importDefault(require("path"));
const fs_1 = require("@a2r/fs");
const getProjectPath_1 = __importDefault(require("./getProjectPath"));
const settings_1 = require("../settings");
const settingsFileName = 'settings.json';
/**
* Formats dev settings
* @param settings Dev settings
*/
const formatSettings = (settings) => JSON.stringify(settings, null, 2);
const getSettingsPath = async (projectPath) => {
const mainProjectPath = projectPath || (await (0, getProjectPath_1.default)());
return path_1.default.resolve(mainProjectPath, settings_1.projectsInternalPath, settings_1.devServerPath, settingsFileName);
};
/**
* Checks if dev settings exist
*/
const settingsExist = async (projectPath) => {
const settingsPath = await getSettingsPath(projectPath);
return (0, fs_1.exists)(settingsPath);
};
exports.settingsExist = settingsExist;
/**
* Gets dev settings
* @param projectPath Main project path
*/
const getSettings = async (projectPath) => {
const settingsPath = await getSettingsPath(projectPath);
const fileContent = await (0, fs_1.readFile)(settingsPath, 'utf8');
return JSON.parse(fileContent);
};
exports.getSettings = getSettings;
/**
* Writes given info as dev settings
* @param info Info to save
* @param projectPath Main project path
*/
const saveSettings = async (info, projectPath) => {
const settingsPath = await getSettingsPath(projectPath);
await (0, fs_1.writeFile)(settingsPath, formatSettings(info));
return info;
};
exports.saveSettings = saveSettings;
/**
* Inits dev settings
* @param serverPort Port that server will be using
* @param projectPath Main project path
*/
const init = async (serverPort, serverDockerName, serverDockerImage, keys, projectPath) => {
const check = await (0, exports.settingsExist)(projectPath);
if (check) {
const settings = await (0, exports.getSettings)(projectPath);
settings.server = {
port: serverPort,
dockerName: serverDockerName,
dockerImage: serverDockerImage,
serverPath: settings_1.dockerServerPath,
};
settings.keys = (keys || []).reduce((t, [key, value]) => (Object.assign(Object.assign({}, t), { [key]: value })), {});
settings.activeProjects = settings.activeProjects || [];
return (0, exports.saveSettings)(settings, projectPath);
}
const settings = {
server: {
port: serverPort,
dockerName: serverDockerName,
dockerImage: serverDockerImage,
serverPath: settings_1.dockerServerPath,
},
keys: (keys || []).reduce((t, [key, value]) => (Object.assign(Object.assign({}, t), { [key]: value })), {}),
activeProjects: [],
};
return (0, exports.saveSettings)(settings, projectPath);
};
exports.init = init;
/**
* Update several key-value pairs
* @param keys Key-Value pairs
*/
const setKeys = async (keys) => {
const settings = await (0, exports.getSettings)();
keys.forEach(([key, value]) => {
settings.keys[key] = value;
});
await (0, exports.saveSettings)(settings);
};
exports.setKeys = setKeys;
/**
* Set key value
* @param key Key name
* @param value Key value
*/
const setKey = async (key, value) => {
const settings = await (0, exports.getSettings)();
settings.keys[key] = value;
await (0, exports.saveSettings)(settings);
};
exports.setKey = setKey;
/**
* Gets keys dictionary
*/
const getKeys = async () => {
const settings = await (0, exports.getSettings)();
return settings.keys;
};
exports.getKeys = getKeys;
/**
* Gets key value
* @param key Key name
*/
const getKey = async (key) => {
const settings = await (0, exports.getSettings)();
return settings.keys[key];
};
exports.getKey = getKey;
/**
* Adds project to active project
* @param project Project info
*/
const addActiveProject = async (project) => {
const settings = await (0, exports.getSettings)();
const activeProjects = settings.activeProjects.slice();
const existing = activeProjects.findIndex(p => p.path === project.path);
if (existing !== -1) {
activeProjects.splice(existing, 1);
}
activeProjects.push(project);
await (0, exports.saveSettings)(Object.assign(Object.assign({}, settings), { activeProjects }));
};
exports.addActiveProject = addActiveProject;