UNPKG

node-red-nodegen

Version:

Node generator for Node-RED

136 lines (126 loc) 4.41 kB
const fs = require('fs'); const path = require('path'); const csv = require('csv-string'); const child_process = require('child_process'); const jimp = require("jimp"); function createCommonFiles(templateDirectory, data) { "use strict"; // Make directories try { fs.mkdirSync(path.join(data.dst, data.module)); } catch (error) { if (error.code !== 'EEXIST') { console.error(error); } } var isStockIcon = data.icon && (data.icon.match(/^(alert|arduino|arrow-in|batch|bluetooth|bridge-dash|bridge|cog|comment|db|debug|envelope|feed|file-in|file-out|file|function|hash|inject|join|leveldb|light|link-out|mongodb|mouse|node-changed|node-error|parser-csv|parser-html|parser-json|parser-xml|parser-yaml|range|redis|rpi|serial|sort|split|subflow|swap|switch|template|timer|trigger|twitter|watch|white-globe)\.png$/) || data.icon.match(/^(node-red|font-awesome)/)); if (!isStockIcon) { try { fs.mkdirSync(path.join(data.dst, data.module, 'icons')); } catch (error) { if (error.code !== 'EEXIST') { console.error(error); } } } if (data.icon) { if (!isStockIcon) { try { jimp.read(data.icon, function (error2, image) { if (!error2) { var outputPath = path.join(data.dst, data.module, 'icons', path.basename(data.icon)); if (image.bitmap.width === 40 && image.bitmap.height === 60) { var buf = fs.readFileSync(data.icon); fs.writeFileSync(outputPath, buf); } else { image.background(0xFFFFFFFF).resize(40, 60).write(outputPath); } } else { console.log('error occurs while converting icon file.'); } }); } catch (error) { console.error(error); } } } else { var icons = fs.readdirSync(path.join(templateDirectory, 'icons')); icons.forEach(function (icon) { try { var buf = fs.readFileSync(path.join(templateDirectory, 'icons', icon)); fs.writeFileSync(path.join(data.dst, data.module, 'icons', icon), buf); } catch (error) { console.error(error); } }); } try { fs.mkdirSync(path.join(data.dst, data.module, 'locales')); } catch (error) { if (error.code !== 'EEXIST') { console.error(error); } } try { var languages = fs.readdirSync(path.join(templateDirectory, 'locales')); languages.forEach(function (language) { try { fs.mkdirSync(path.join(data.dst, data.module, 'locales', language)); } catch (error) { if (error.code !== 'EEXIST') { console.error(error); } } }); } catch (error) { if (error.code !== 'ENOENT') { console.error(error); } } try { fs.mkdirSync(path.join(data.dst, data.module, 'examples')); } catch (error) { if (error.code !== 'EEXIST') { console.error(error); } } try { fs.mkdirSync(path.join(data.dst, data.module, 'test')); } catch (error) { if (error.code !== 'EEXIST') { console.error(error); } } } function runNpmPack(data) { "use strict"; var npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm'; try { child_process.execFileSync(npmCommand, ['pack', './' + data.module], { cwd: data.dst }); } catch (error) { console.error(error); } } function extractKeywords(keywordsStr) { "use strict"; var keywords = ["node-red-nodegen"]; keywords = keywordsStr ? keywords.concat(csv.parse(keywordsStr)[0]) : keywords; keywords = keywords.map(k => ({ name: k })); keywords[keywords.length - 1].last = true; return keywords; } function skipBom(body) { if (body[0]===0xEF && body[1]===0xBB && body[2]===0xBF) { return body.slice(3); } else { return body; } } module.exports = { createCommonFiles, runNpmPack, extractKeywords, skipBom }