fontellizr
Version:
Module to generate fontello webfont from svg set
57 lines (44 loc) • 1.54 kB
JavaScript
const { writeFileSync } = require('fs');
const { parse, basename } = require('path');
const { post, get } = require('needle');
const decompress = require('decompress');
const { FONTELLO_HOST } = require('../utils/constants');
const errorHandler = (err) => { if (err) throw err; };
const getSessionId = (config) => {
const data = {
config: {
buffer: Buffer.from(JSON.stringify(config)),
content_type: 'application/octet-stream',
},
};
return new Promise((resolve, reject) => {
post(FONTELLO_HOST, data, { multipart: true }, (err, resp, body) => {
if (err || resp.statusCode !== 200) return reject(err || resp);
resolve(body);
});
});
};
const downloadFont = (sessionId, options) => {
const { stylesDestDir, fontsDestDir } = options;
const map = (file) => {
if (file.type !== 'file') return;
const { base, dir } = parse(file.path);
const folder = basename(dir);
if (folder === 'css') {
writeFileSync(`${stylesDestDir}/${base}`, file.data, errorHandler);
}
if (folder === 'font') {
writeFileSync(`${fontsDestDir}/${base}`, file.data, errorHandler);
}
};
return new Promise((resolve, reject) => {
get(`${FONTELLO_HOST}/${sessionId}/get`, (err, resp) => {
if (err) return reject(err);
decompress(resp.body, ({ map })).then(resolve).catch(reject);
});
});
};
module.exports = (config, options) => {
const download = (sessionId) => downloadFont(sessionId, options);
return getSessionId(config).then(download);
};