Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions bin/node-red-nodegen.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ var data = {
name: argv.name || argv.n,
module: argv.module,
version: argv.version || argv.v,
keywords: argv.keywords || argv.k,
category: argv.category || argv.c,
dst: argv.output || argv.o || '.'
};

Expand All @@ -44,6 +46,8 @@ function help() {
' [--name <node name>]' +
' [--module <module name>]' +
' [--version <version number>' +
' [--keywords <keywords list>' +
' [--category <node category>' +
//' [--icon <png or gif file>' +
//' [--color <node color>' +
' [--tgz]' +
Expand All @@ -63,6 +67,8 @@ function help() {
' --name : Node name (default: name defined in source)\n' +
' --module : Module name (default: "node-red-contrib-<node name>")\n' +
' --version : Node version (format: "number.number.number" like "4.5.1")\n' +
' --keywords : Additional keywords (format: comma separated string, default: "node-red-nodegen")\n' +
' --category : Node category (default: "function")\n' +
//' --icon : png or gif file for node appearance (image size should be 10x20)\n';
//' --color : color for node appearance (format: color hexadecimal numbers like "#A6BBCF")\n';
' --tgz : Save node as tgz file\n' +
Expand Down
15 changes: 14 additions & 1 deletion lib/nodegen.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ var request = require('request');
var mustache = require('mustache');
var jsStringEscape = require('js-string-escape');
var obfuscator = require('javascript-obfuscator');
var csv = require('csv-string');
var CodeGen = require('swagger-js-codegen').CodeGen;

function createCommonFiles(templateDirectory, data) {
Expand Down Expand Up @@ -87,6 +88,14 @@ function runNpmPack(data) {
}
}

function extractKeywords(keywordsStr) {
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 function2node(data, options) {
// Read meta data in js file
var meta = {};
Expand Down Expand Up @@ -129,6 +138,8 @@ function function2node(data, options) {
nodeName: data.name,
projectName: data.module,
projectVersion: data.version,
keywords: extractKeywords(data.keywords),
category: data.category || 'function',
func: jsStringEscape(data.src),
outputs: meta.outputs
};
Expand Down Expand Up @@ -244,7 +255,7 @@ function swagger2node(data, options) {
nodejsSourceCode = obfuscator.obfuscate(nodejsSourceCode, { stringArrayEncoding: 'rc4' });
}
fs.writeFileSync(data.dst + '/' + data.module + '/lib.js', nodejsSourceCode);

// Create package.json
var packageSourceCode = CodeGen.getCustomCode({
className: className,
Expand All @@ -258,6 +269,7 @@ function swagger2node(data, options) {
nodeName: data.name,
projectName: data.module,
projectVersion: data.version,
keywords: extractKeywords(data.keywords),
licenseName: function () {
if (swagger.info.license && swagger.info.license.name) {
return swagger.info.license.name;
Expand Down Expand Up @@ -303,6 +315,7 @@ function swagger2node(data, options) {
},
mustache: {
nodeName: data.name,
category: data.category || 'function'
},
lint: false,
beautify: false
Expand Down
13 changes: 7 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,15 @@
"swagger-codegen"
],
"dependencies": {
"request": "2.83.0",
"yamljs": "0.3.0",
"mustache": "2.3.0",
"js-string-escape": "1.0.1",
"colors": "1.1.2",
"csv-string": "^3.1.2",
"javascript-obfuscator": "0.12.2",
"swagger-js-codegen": "1.12.0",
"js-string-escape": "1.0.1",
"minimist": "1.2.0",
"colors": "1.1.2"
"mustache": "2.3.0",
"request": "2.83.0",
"swagger-js-codegen": "1.12.0",
"yamljs": "0.3.0"
},
"devDependencies": {
"grunt": "1.0.1",
Expand Down
2 changes: 1 addition & 1 deletion templates/function/node.html.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
<script type="text/javascript">
RED.nodes.registerType('{{&nodeName}}',{
color:"#C0DEED",
category: 'function',
category: '{{&category}}',
defaults: {
name: {value:""},
func: {value:"\nreturn msg;"},
Expand Down
4 changes: 3 additions & 1 deletion templates/function/package.json.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
}
},
"keywords": [
"node-red-nodegen"
{{#keywords}}
"{{name}}"{{^last}}, {{/last}}
{{/keywords}}
]
}
2 changes: 1 addition & 1 deletion templates/swagger/node.html.mustache
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script type="text/javascript">
RED.nodes.registerType('{{&nodeName}}',{
category: 'function',
category: '{{&category}}',
color: '#89bf04',
defaults: {
service: { value: "", type: "{{&nodeName}}-service", required: true },
Expand Down
4 changes: 3 additions & 1 deletion templates/swagger/package.json.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
}
},
"keywords": [
"node-red-nodegen"
{{#keywords}}
"{{name}}"{{^last}}, {{/last}}
{{/keywords}}
],
"dependencies": {
"q": "1.5.1",
Expand Down
14 changes: 14 additions & 0 deletions test/lib/nodegen_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,20 @@ describe('nodegen library', function () {
del.sync(result);
done();
});
it('should handle parameters (keywords)', function (done) {
var options = {};
var data = {
keywords: 'node-red,function,lowercase',
dst: '.'
};
data.src = fs.readFileSync('samples/lower-case.js');
var result = nodegen.function2node(data, options);
var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json'));
packageSourceCode.name.should.equal('node-red-contrib-lowercase');
packageSourceCode.keywords.should.eql(['node-red-nodegen', 'node-red', 'function', 'lowercase']);
del.sync(result);
done();
});
it('should handle options', function (done) {
var options = {
tgz: true,
Expand Down