polyglot-cli
Version:
Infinum Polyglot CLI
119 lines (107 loc) • 3.4 kB
JavaScript
const fs = require('fs');
const prompt = require('prompt');
const colors = require('colors/safe');
const {sortBy} = require('lodash');
const network = require('../common/network');
const config = require('../common/config');
const utils = require('../common/utils');
const polyglotUtils = require('../common/polyglot');
const serializers = {
1: 'flat',
2: 'nested'
};
const namedPlaceholderFormats = {
1: 'harmony',
2: 'mustache'
};
module.exports = function(program, opts, fileSystem = fs, requestCb = () => true) {
const err = polyglotUtils.checkInitErrors({project: false});
if (err) {
return err;
}
if (config.project && config.project.token) {
return utils.error(`The project ${config.project.name} is already initialized`);
}
return network.read('/projects').then((projects) => {
requestCb();
const sortedProjects = sortBy(projects, 'name');
sortedProjects.forEach((project, index) => {
utils.log(`${index} - ${project.name}`);
});
const schema = {
properties: {
project: {
description: colors.prompt('Project number'),
format: 'number',
required: true,
conform(value) {
return value >= 0 && value < sortedProjects.length;
}
},
serializer: {
description: colors.prompt('Serializer type:\n1 - Flat\n2 - Nested'),
format: 'number',
required: true,
conform(value) {
return value in serializers;
}
},
locale: {
description: colors.prompt('Locale format:\n1 - en_US\n2 - en\n3 - US'),
format: 'number',
required: true,
conform(value) {
return value > 0 && value < 4;
}
},
filetype: {
description: colors.prompt('File type:\n1 - Single\n2 - Multi'),
format: 'number',
required: true,
conform(value) {
return value > 0 && value < 3;
}
},
namedPlaceholderFormats: {
description: colors.prompt('Named placeholder:\n1 - ${name}\n2 - {{name}}'),
format: 'number',
required: true,
conform(value) {
return value > 0 && value < 2;
}
},
path: {
description: colors.prompt('Relative path to the translations folder (with filename if single file)'),
format: 'string',
required: true
}
}
};
prompt.message = '';
prompt.start(opts);
return Promise.all([sortedProjects, utils.prompt(prompt, schema)]);
}).then(([projects, result]) => {
const project = projects[result.project];
const data = {
name: project.name,
token: project.token,
id: project.id,
path: result.path,
serializer: serializers[result.serializer],
filetype: result.filetype,
initialized: (new Date()).toISOString(),
lastUpdatedAt: 0,
placeholder: {
named: namedPlaceholderFormats[result.namedPlaceholderFormats]
},
locale: {
language: result.locale !== '3',
country: result.locale !== '2'
}
};
polyglotUtils.saveProject(fileSystem, data);
utils.info(`Project ${data.name} was initialized`);
config.project = data;
return data;
}).catch((e) => utils.error(`Something went wrong: ${e}`));
};