diff --git a/lib/nodegen.js b/lib/nodegen.js index 005fd75..3717952 100644 --- a/lib/nodegen.js +++ b/lib/nodegen.js @@ -90,7 +90,7 @@ function runNpmPack(data) { function extractKeywords(keywordsStr) { var keywords = ["node-red-nodegen"]; - keywords = keywordsStr ? keywords.concat(csv.parse(keywordsStr)[0]) : keywords; + keywords = keywordsStr ? keywords.concat(csv.parse(keywordsStr)[0]) : keywords; keywords = keywords.map(k => ({ name: k })); keywords[keywords.length - 1].last = true; return keywords; @@ -200,7 +200,7 @@ function swagger2node(data, options) { } else if (key === 'default') { // 3. Handle swagger-js-codegen bug return undefined; } else if (key === 'operationId') { // 4. Sanitize 'operationId' (remove special chars) - return value.replace(/(?!\w|\s)./g, ''); + return value.replace(/(?!\w|\s)./g, ''); } else { return value; } @@ -257,7 +257,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, @@ -286,6 +286,24 @@ function swagger2node(data, options) { }); fs.writeFileSync(data.dst + '/' + data.module + '/package.json', packageSourceCode); + // Mustache helpers + var isNotBodyParam = function () { + return function (content, render) { + return render('{{camelCaseName}}') !== 'body' ? render(content) : ''; + } + }; + var isBodyParam = function () { + return function (content, render) { + return render('{{camelCaseName}}') === 'body' ? render(content) : ''; + } + }; + var hasOptionalParams = function () { + return function (content, render) { + var params = render('{{#parameters}}{{^required}}{{camelCaseName}},{{/required}}{{/parameters}}'); + return params.split(',').filter(p => p).some(p => p !== 'body') ? render(content) : ''; + } + }; + // Create node.js var nodeSourceCode = CodeGen.getCustomCode({ className: className, @@ -297,6 +315,8 @@ function swagger2node(data, options) { }, mustache: { nodeName: data.name, + isBodyParam: isBodyParam, + isNotBodyParam: isNotBodyParam }, lint: false, beautify: false @@ -317,7 +337,9 @@ function swagger2node(data, options) { }, mustache: { nodeName: data.name, - category: data.category || 'function' + category: data.category || 'function', + isNotBodyParam: isNotBodyParam, + hasOptionalParams: hasOptionalParams }, lint: false, beautify: false @@ -426,7 +448,7 @@ function widget2node(data, options) { } } else { - new_src = new_src +part +"\n"; + new_src = new_src + part + "\n"; } }); @@ -468,33 +490,33 @@ function widget2node(data, options) { params[name] = conf.vars[name]; } } - + var basedir = __dirname + '/../templates/widget'; createCommonFiles(basedir, data); // Create package.json - var packageTemplate = fs.readFileSync(basedir+'/package.json.mustache', 'utf-8'); + var packageTemplate = fs.readFileSync(basedir + '/package.json.mustache', 'utf-8'); var packageSourceCode = mustache.render(packageTemplate, params); fs.writeFileSync(data.dst + '/' + data.module + '/package.json', packageSourceCode); // Create node.js - var nodeTemplate = fs.readFileSync(basedir+'/node.js.mustache', 'utf-8'); + var nodeTemplate = fs.readFileSync(basedir + '/node.js.mustache', 'utf-8'); var nodeSourceCode = mustache.render(nodeTemplate, params); fs.writeFileSync(data.dst + '/' + data.module + '/node.js', nodeSourceCode); // Create node.html - var htmlTemplate = fs.readFileSync(basedir+'/node.html.mustache', 'utf-8'); + var htmlTemplate = fs.readFileSync(basedir + '/node.html.mustache', 'utf-8'); var htmlSourceCode = mustache.render(htmlTemplate, params); fs.writeFileSync(data.dst + '/' + data.module + '/node.html', htmlSourceCode); // Create README.md - var readmeTemplate = fs.readFileSync(basedir+'/README.md.mustache', 'utf-8'); + var readmeTemplate = fs.readFileSync(basedir + '/README.md.mustache', 'utf-8'); var readmeSourceCode = mustache.render(readmeTemplate, params); fs.writeFileSync(data.dst + '/' + data.module + '/README.md', readmeSourceCode); // Create LICENSE file - var licenseTemplate = fs.readFileSync(basedir+'/LICENSE.mustache', 'utf-8'); + var licenseTemplate = fs.readFileSync(basedir + '/LICENSE.mustache', 'utf-8'); var licenseSourceCode = mustache.render(licenseTemplate, params); fs.writeFileSync(data.dst + '/' + data.module + '/LICENSE', licenseSourceCode); diff --git a/templates/swagger/locales/en-US/node.json.mustache b/templates/swagger/locales/en-US/node.json.mustache index d86cdc0..b03633b 100644 --- a/templates/swagger/locales/en-US/node.json.mustache +++ b/templates/swagger/locales/en-US/node.json.mustache @@ -17,7 +17,7 @@ "{{&camelCaseName}}": "{{&camelCaseName}}", {{/parameters}} {{/methods}} - "optionalParameters": "Option" + "optionalParameters": "Options" } } } diff --git a/templates/swagger/node.html.mustache b/templates/swagger/node.html.mustache index 462c4d5..54a58ca 100644 --- a/templates/swagger/node.html.mustache +++ b/templates/swagger/node.html.mustache @@ -9,13 +9,14 @@ {{#methods}} {{#parameters}} {{&methodName}}_{{&camelCaseName}}: { value: "" }, + {{&methodName}}_{{&camelCaseName}}Type: {value: "str"}, {{/parameters}} {{/methods}} name: { value: "" } }, - inputs:1, - outputs:1, + inputs: 1, + outputs: 1, icon: "icon.png", label: function() { return this.name || "{{&nodeName}}"; @@ -31,7 +32,13 @@ var showParameters = function() { {{#methods}} {{#parameters}} + $("#node-input-{{&methodName}}_{{&camelCaseName}}").typedInput({ + default: 'str', + typeField: $("#node-input-{{&methodName}}_{{&camelCaseName}}Type"), + types: ['str', 'msg'] + }); $("#{{&methodName}}_{{&camelCaseName}}").hide(); + {{/parameters}} {{/methods}} @@ -39,24 +46,20 @@ $("#optional-parameters-label").hide(); {{#methods}} if ($("#node-input-method").val() === '{{&methodName}}') { - {{#parameters}} - {{^required}} - if ('{{&camelCaseName}}' !== 'body') { - $("#optional-parameters").show(); - $("#optional-parameters-label").show(); - } - {{/required}} - {{/parameters}} + {{#hasOptionalParams}} + $("#optional-parameters").show(); + $("#optional-parameters-label").show(); + {{/hasOptionalParams}} } {{/methods}} - + if ($("#optional-parameters").prop('checked')) { {{#methods}} if ($("#node-input-method").val() === '{{&methodName}}') { {{#parameters}} - if ('{{&camelCaseName}}' !== 'body') { - $("#{{&methodName}}_{{&camelCaseName}}").show(); - } + {{#isNotBodyParam}} + $("#{{&methodName}}_{{&camelCaseName}}").show(); + {{/isNotBodyParam}} {{/parameters}} } {{/methods}} @@ -65,9 +68,9 @@ if ($("#node-input-method").val() === '{{&methodName}}') { {{#parameters}} {{#required}} - if ('{{&camelCaseName}}' !== 'body') { - $("#{{&methodName}}_{{&camelCaseName}}").show(); - } + {{#isNotBodyParam}} + $("#{{&methodName}}_{{&camelCaseName}}").show(); + {{/isNotBodyParam}} {{/required}} {{/parameters}} } @@ -115,7 +118,7 @@ {{/methods}} - + @@ -123,17 +126,14 @@ {{#parameters}}