UNPKG

clipcc-l10n

Version:

Localization library for ClipCC.

172 lines (166 loc) 5.07 kB
// poeditor-api // By Alex Cui const https = require('https'); const fs = require('fs'); const path = require('path'); const querystring = require('querystring'); const FormData = require('form-data'); function postForm(url, args, files) { return new Promise((resolve, reject) => { let arg = querystring.stringify(args); let datas = ''; let form = new FormData(); for (const key in args) { form.append(key, args[key]); } for (const file in files) { form.append(file, files[file]) } let opt = { method: 'POST', headers: form.getHeaders() }; let time = 0; let req = https.request(new URL(url), opt, res => { res.on('data', data => { datas += data; }); res.on('end', () => { resolve(JSON.parse(datas)); }); }).on('error', err => { time = time + 1; if (time <= 3) { console.log(`Error, reconnecting ${arg}: ${time} ...`); req.write(arg); } else { console.log(err); reject(err); } }); form.pipe(req); }); } function post(url, args) { return new Promise((resolve, reject) => { let arg = querystring.stringify(args); let datas = ''; let opt = { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }; let time = 0; let req = https.request(new URL(url), opt, res => { res.on('data', data => { datas += data; }); res.on('end', () => { resolve(JSON.parse(datas)); }); }).on('error', err => { time = time + 1; if (time <= 3) { console.log(`Error, reconnecting ${arg}: ${time} ...`); req.write(arg); } else { console.log(err); reject(err); } }); req.write(arg); }); } // API class POEditorAPI { constructor(api_token) { this.api_token = api_token; } // Projects listProjects() { return post('https://api.poeditor.com/v2/projects/list', { api_token: this.api_token }); } viewProjectDetails(id) { return post('https://api.poeditor.com/v2/projects/view', { api_token: this.api_token, id: id }); } addProject(name, description) { return post('https://api.poeditor.com/v2/projects/add', { api_token: this.api_token, name: name, description: description }); } updateProjectSettings(id, name, description, reference_language) { return post('https://api.poeditor.com/v2/projects/update', { api_token: this.api_token, id: id, name: name, description: description, reference_language: reference_language }); } deleteProject(id) { return post('https://api.poeditor.com/v2/projects/delete', { api_token: this.api_token, id: id }); } upload(id, updating, file, language, overwrite, sync_terms, tags, read_from_source, fuzzy_trigger) { return postForm('https://api.poeditor.com/v2/projects/upload', { api_token: this.api_token, id: id, updating: updating, language: language, overwrite: overwrite, sync_terms: sync_terms, tags: tags, read_from_source: read_from_source, fuzzy_trigger: fuzzy_trigger }, { file: fs.createReadStream(file) }); } syncTerms(id, data) { return post('https://api.poeditor.com/v2/projects/sync', { api_token: this.api_token, id: id, data: data }); } export(id, language, type, tags) { //opt return post('https://api.poeditor.com/v2/projects/export', { api_token: this.api_token, id: id, language: language, type: type, tags: tags }) } async exportToFile(id, language, type, tags, filePath) { const url = (await this.export(id, language, type, tags)).result.url; if (!fs.existsSync(path.dirname(filePath))) { fs.mkdirSync(path.dirname(filePath), { recursive: true }); } const file = fs.createWriteStream(filePath); https.get(url, res => { res.on('end', () => { console.log(`Exported to ${filePath}`); }); file.on('finish', () => { file.close(); }).on('error', (err) => { fs.unlink(dest); }); res.pipe(file); }); } } module.exports = { POEditorAPI };