UNPKG

polyglot-cli

Version:
119 lines (107 loc) 3.4 kB
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}`)); };