From 5183a58449b445c84a5c63d338d31154938cc924 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Fri, 27 Apr 2018 09:27:41 +0900 Subject: [PATCH] Add error handling --- bin/node-red-nodegen.js | 28 +- lib/nodegen.js | 564 ++++++++++++++++++++------------------- package.json | 3 +- test/lib/nodegen_spec.js | 119 +++++---- 4 files changed, 371 insertions(+), 343 deletions(-) diff --git a/bin/node-red-nodegen.js b/bin/node-red-nodegen.js index 3e159be..f914052 100644 --- a/bin/node-red-nodegen.js +++ b/bin/node-red-nodegen.js @@ -83,24 +83,36 @@ if (!argv.h && !argv.help) { request(sourcePath, function (error, response, body) { if (!error) { data.src = JSON.parse(body); - var filename = nodegen.swagger2node(data, options); - console.log('Success: ' + filename); + nodegen.swagger2node(data, options).then(function (result) { + console.log('Success: ' + result); + }).catch(function (error) { + console.log('Error: ' + error); + }); } else { console.error(error); } }); } else if (sourcePath.endsWith('.json')) { data.src = JSON.parse(fs.readFileSync(sourcePath)); - var filename = nodegen.swagger2node(data, options); - console.log('Success: ' + filename); + nodegen.swagger2node(data, options).then(function (result) { + console.log('Success: ' + result); + }).catch(function (error) { + console.log('Error: ' + error); + }); } else if (sourcePath.endsWith('.yaml')) { data.src = yamljs.load(sourcePath); - var filename = nodegen.swagger2node(data, options); - console.log('Success: ' + filename); + nodegen.swagger2node(data, options).then(function (result) { + console.log('Success: ' + result); + }).catch(function (error) { + console.log('Error: ' + error); + }); } else if (sourcePath.endsWith('.js')) { data.src = fs.readFileSync(sourcePath); - var filename = nodegen.function2node(data, options); - console.log('Success: ' + filename); + nodegen.function2node(data, options).then(function (result) { + console.log('Success: ' + result); + }).catch(function (error) { + console.log('Error: ' + error); + }); } else { console.error('error: Unsupported file type'); } diff --git a/lib/nodegen.js b/lib/nodegen.js index cb9cc32..e251cee 100644 --- a/lib/nodegen.js +++ b/lib/nodegen.js @@ -14,6 +14,7 @@ * limitations under the License. **/ +var when = require("when"); var fs = require('fs'); var child_process = require('child_process'); var request = require('request'); @@ -98,336 +99,343 @@ function extractKeywords(keywordsStr) { } function function2node(data, options) { - // Read meta data in js file - var meta = {}; - var parts = new String(data.src).split('\n'); - parts.forEach(function (part) { - var match = /^\/\/ (\w+): (.*)/.exec(part.toString()); - if (match) { - if (match[1] === 'name') { - meta.name = match[2].replace(/([A-Z])/g, ' $1').toLowerCase().replace(/[^ a-z0-9]+/g, '').replace(/^ | $/, '').replace(/ +/g, '-'); - } else { - meta[match[1]] = match[2]; + return when.promise(function (resolve, reject) { + // Read meta data in js file + var meta = {}; + var parts = new String(data.src).split('\n'); + parts.forEach(function (part) { + var match = /^\/\/ (\w+): (.*)/.exec(part.toString()); + if (match) { + if (match[1] === 'name') { + meta.name = match[2].replace(/([A-Z])/g, ' $1').toLowerCase().replace(/[^ a-z0-9]+/g, '').replace(/^ | $/, '').replace(/ +/g, '-'); + } else { + meta[match[1]] = match[2]; + } } - } - }); - - if (!data.name || data.name === '') { - data.name = meta.name; - } + }); - if (data.module) { - if (data.prefix) { - console.error('error: module name and prefix are conflicted.'); + if (!data.name || data.name === '') { + data.name = meta.name; } - } else { - if (data.prefix) { - data.module = data.prefix + data.name; + + if (data.module) { + if (data.prefix) { + reject('error: module name and prefix are conflicted.'); + return; + } } else { - data.module = 'node-red-contrib-' + data.name; + if (data.prefix) { + data.module = data.prefix + data.name; + } else { + data.module = 'node-red-contrib-' + data.name; + } } - } - - if (!data.version || data.version === '') { - data.version = '0.0.1'; - } - - if (data.name === 'function') { - console.error('\'function\' is duplicated node name. Use another name.'); - } else { - var params = { - nodeName: data.name, - projectName: data.module, - projectVersion: data.version, - keywords: extractKeywords(data.keywords), - category: data.category || 'function', - func: jsStringEscape(data.src), - outputs: meta.outputs - }; - - createCommonFiles(__dirname + '/../templates/function', data); - // Create package.json - var packageTemplate = fs.readFileSync(path.join(__dirname, '../templates/function/package.json.mustache'), 'utf-8'); - var packageSourceCode = mustache.render(packageTemplate, params); - fs.writeFileSync(path.join(data.dst, data.module, 'package.json'), packageSourceCode); - - // Create node.js - var nodeTemplate = fs.readFileSync(path.join(__dirname, '../templates/function/node.js.mustache'), 'utf-8'); - var nodeSourceCode = mustache.render(nodeTemplate, params); - if (options.obfuscate) { - nodeSourceCode = obfuscator.obfuscate(nodeSourceCode, { stringArrayEncoding: 'rc4' }); + if (!data.version || data.version === '') { + data.version = '0.0.1'; } - fs.writeFileSync(path.join(data.dst, data.module, 'node.js'), nodeSourceCode); - - // Create node.html - var htmlTemplate = fs.readFileSync(path.join(__dirname, '../templates/function/node.html.mustache'), 'utf-8'); - var htmlSourceCode = mustache.render(htmlTemplate, params); - fs.writeFileSync(path.join(data.dst, data.module, 'node.html'), htmlSourceCode); - - // Create README.md - var readmeTemplate = fs.readFileSync(path.join(__dirname, '../templates/function/README.md.mustache'), 'utf-8'); - var readmeSourceCode = mustache.render(readmeTemplate, params); - fs.writeFileSync(path.join(data.dst, data.module, 'README.md'), readmeSourceCode); - - // Create LICENSE file - var licenseTemplate = fs.readFileSync(path.join(__dirname, '../templates/function/LICENSE.mustache'), 'utf-8'); - var licenseSourceCode = mustache.render(licenseTemplate, params); - fs.writeFileSync(path.join(data.dst, data.module, 'LICENSE'), licenseSourceCode); - if (options.tgz) { - runNpmPack(data); - return path.join(data.dst, data.module + '-' + data.version + '.tgz'); + if (data.name === 'function') { + reject('\'function\' is duplicated node name. Use another name.'); + return; } else { - return path.join(data.dst, data.module); + var params = { + nodeName: data.name, + projectName: data.module, + projectVersion: data.version, + keywords: extractKeywords(data.keywords), + category: data.category || 'function', + func: jsStringEscape(data.src), + outputs: meta.outputs + }; + + createCommonFiles(__dirname + '/../templates/function', data); + + // Create package.json + var packageTemplate = fs.readFileSync(path.join(__dirname, '../templates/function/package.json.mustache'), 'utf-8'); + var packageSourceCode = mustache.render(packageTemplate, params); + fs.writeFileSync(path.join(data.dst, data.module, 'package.json'), packageSourceCode); + + // Create node.js + var nodeTemplate = fs.readFileSync(path.join(__dirname, '../templates/function/node.js.mustache'), 'utf-8'); + var nodeSourceCode = mustache.render(nodeTemplate, params); + if (options.obfuscate) { + nodeSourceCode = obfuscator.obfuscate(nodeSourceCode, { stringArrayEncoding: 'rc4' }); + } + fs.writeFileSync(path.join(data.dst, data.module, 'node.js'), nodeSourceCode); + + // Create node.html + var htmlTemplate = fs.readFileSync(path.join(__dirname, '../templates/function/node.html.mustache'), 'utf-8'); + var htmlSourceCode = mustache.render(htmlTemplate, params); + fs.writeFileSync(path.join(data.dst, data.module, 'node.html'), htmlSourceCode); + + // Create README.md + var readmeTemplate = fs.readFileSync(path.join(__dirname, '../templates/function/README.md.mustache'), 'utf-8'); + var readmeSourceCode = mustache.render(readmeTemplate, params); + fs.writeFileSync(path.join(data.dst, data.module, 'README.md'), readmeSourceCode); + + // Create LICENSE file + var licenseTemplate = fs.readFileSync(path.join(__dirname, '../templates/function/LICENSE.mustache'), 'utf-8'); + var licenseSourceCode = mustache.render(licenseTemplate, params); + fs.writeFileSync(path.join(data.dst, data.module, 'LICENSE'), licenseSourceCode); + + if (options.tgz) { + runNpmPack(data); + resolve(path.join(data.dst, data.module + '-' + data.version + '.tgz')); + } else { + resolve(path.join(data.dst, data.module)); + } } - } + }); } function swagger2node(data, options) { - // Modify swagger data - var swagger = JSON.parse(JSON.stringify(data.src), function (key, value) { - if (key === 'consumes' || key === 'produces') { // Filter type of 'Content-Type' and 'Accept' in request header - if (value.indexOf('application/json') >= 0) { - return ['application/json']; - } else if (value.indexOf('application/xml') >= 0) { - return ['application/xml']; - } else if (value.indexOf('text/csv') >= 0) { - return ['text/csv']; - } else if (value.indexOf('text/plain') >= 0) { - return ['text/plain']; - } else if (value.indexOf('multipart/form-data') >= 0) { - return ['multipart/form-data']; - } else if (value.indexOf('application/octet-stream') >= 0) { - return ['application/octet-stream']; - } else { + return when.promise(function (resolve, reject) { + // Modify swagger data + var swagger = JSON.parse(JSON.stringify(data.src), function (key, value) { + if (key === 'consumes' || key === 'produces') { // Filter type of 'Content-Type' and 'Accept' in request header + if (value.indexOf('application/json') >= 0) { + return ['application/json']; + } else if (value.indexOf('application/xml') >= 0) { + return ['application/xml']; + } else if (value.indexOf('text/csv') >= 0) { + return ['text/csv']; + } else if (value.indexOf('text/plain') >= 0) { + return ['text/plain']; + } else if (value.indexOf('multipart/form-data') >= 0) { + return ['multipart/form-data']; + } else if (value.indexOf('application/octet-stream') >= 0) { + return ['application/octet-stream']; + } else { + return undefined; + } + } else if (key === 'default') { // Handle swagger-js-codegen bug return undefined; + } else if (key === 'operationId') { // Sanitize 'operationId' (remove special chars) + return value.replace(/(?!\w|\s)./g, ''); + } else { + return value; } - } else if (key === 'default') { // Handle swagger-js-codegen bug - return undefined; - } else if (key === 'operationId') { // Sanitize 'operationId' (remove special chars) - return value.replace(/(?!\w|\s)./g, ''); - } else { - return value; - } - }); - - var className = swagger.info.title.toLowerCase().replace(/(^|[^a-z0-9]+)[a-z0-9]/g, - function (str) { - return str.replace(/^[^a-z0-9]+/, '').toUpperCase(); }); - if (!data.name || data.name === '') { - data.name = className.replace(/([A-Z])/g, '-$1').slice(1).toLowerCase(); - } + var className = swagger.info.title.toLowerCase().replace(/(^|[^a-z0-9]+)[a-z0-9]/g, + function (str) { + return str.replace(/^[^a-z0-9]+/, '').toUpperCase(); + }); - if (data.module) { - if (data.prefix) { - console.error('error: module name and prefix are conflicted.'); + if (!data.name || data.name === '') { + data.name = className.replace(/([A-Z])/g, '-$1').slice(1).toLowerCase(); } - } else { - if (data.prefix) { - data.module = data.prefix + data.name; + + if (data.module) { + if (data.prefix) { + reject('error: module name and prefix are conflicted.'); + return; + } } else { - data.module = 'node-red-contrib-' + data.name; + if (data.prefix) { + data.module = data.prefix + data.name; + } else { + data.module = 'node-red-contrib-' + data.name; + } } - } - if (!data.version || data.version === '') { - if (swagger.info.version) { - var version = swagger.info.version.replace(/[^0-9\.]/g, ''); - if (version.match(/^[0-9]+$/)) { - data.version = version + '.0.0'; - } else if (version.match(/^[0-9]+\.[0-9]+$/)) { - data.version = version + '.0'; - } else if (version.match(/^[0-9]+\.[0-9]+\.[0-9]+$/)) { - data.version = version; + if (!data.version || data.version === '') { + if (swagger.info.version) { + var version = swagger.info.version.replace(/[^0-9\.]/g, ''); + if (version.match(/^[0-9]+$/)) { + data.version = version + '.0.0'; + } else if (version.match(/^[0-9]+\.[0-9]+$/)) { + data.version = version + '.0'; + } else if (version.match(/^[0-9]+\.[0-9]+\.[0-9]+$/)) { + data.version = version; + } else { + data.version = '0.0.1'; + } } else { data.version = '0.0.1'; } - } else { - data.version = '0.0.1'; } - } - createCommonFiles(path.join(__dirname, '../templates/swagger'), data); + createCommonFiles(path.join(__dirname, '../templates/swagger'), data); - // Create Node.js SDK - var nodejsSourceCode = CodeGen.getNodeCode({ - className: className, - swagger: swagger, - lint: false, - beautify: false - }); - if (options.obfuscate) { - nodejsSourceCode = obfuscator.obfuscate(nodejsSourceCode, { stringArrayEncoding: 'rc4' }); - } - fs.writeFileSync(path.join(data.dst, data.module, 'lib.js'), nodejsSourceCode); + // Create Node.js SDK + var nodejsSourceCode = CodeGen.getNodeCode({ + className: className, + swagger: swagger, + lint: false, + beautify: false + }); + if (options.obfuscate) { + nodejsSourceCode = obfuscator.obfuscate(nodejsSourceCode, { stringArrayEncoding: 'rc4' }); + } + fs.writeFileSync(path.join(data.dst, data.module, 'lib.js'), nodejsSourceCode); - // Create package.json - var packageSourceCode = CodeGen.getCustomCode({ - className: className, - swagger: swagger, - template: { - class: fs.readFileSync(path.join(__dirname, '../templates/swagger/package.json.mustache'), 'utf-8'), - method: '', - type: '' - }, - mustache: { - 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; - } else { - return 'Apache-2.0'; - } + // Create package.json + var packageSourceCode = CodeGen.getCustomCode({ + className: className, + swagger: swagger, + template: { + class: fs.readFileSync(path.join(__dirname, '../templates/swagger/package.json.mustache'), 'utf-8'), + method: '', + type: '' }, - projectAuthor: swagger.info.contact && swagger.info.contact.name ? swagger.info.contact.name : '' - }, - lint: false, - beautify: false - }); - fs.writeFileSync(path.join(data.dst, data.module, 'package.json'), packageSourceCode); + mustache: { + 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; + } else { + return 'Apache-2.0'; + } + }, + projectAuthor: swagger.info.contact && swagger.info.contact.name ? swagger.info.contact.name : '' + }, + lint: false, + beautify: false + }); + fs.writeFileSync(path.join(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) : ''; + // 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, + swagger: swagger, + template: { + class: fs.readFileSync(path.join(__dirname, '../templates/swagger/node.js.mustache'), 'utf-8'), + method: '', + type: '' + }, + mustache: { + nodeName: data.name, + isBodyParam: isBodyParam, + isNotBodyParam: isNotBodyParam + }, + lint: false, + beautify: false + }); + if (options.obfuscate) { + nodeSourceCode = obfuscator.obfuscate(nodeSourceCode, { stringArrayEncoding: 'rc4' }); } - }; + fs.writeFileSync(path.join(data.dst, data.module, 'node.js'), nodeSourceCode); - // Create node.js - var nodeSourceCode = CodeGen.getCustomCode({ - className: className, - swagger: swagger, - template: { - class: fs.readFileSync(path.join(__dirname, '../templates/swagger/node.js.mustache'), 'utf-8'), - method: '', - type: '' - }, - mustache: { - nodeName: data.name, - isBodyParam: isBodyParam, - isNotBodyParam: isNotBodyParam - }, - lint: false, - beautify: false - }); - if (options.obfuscate) { - nodeSourceCode = obfuscator.obfuscate(nodeSourceCode, { stringArrayEncoding: 'rc4' }); - } - fs.writeFileSync(path.join(data.dst, data.module, 'node.js'), nodeSourceCode); + // Create node.html + var htmlSourceCode = CodeGen.getCustomCode({ + className: className, + swagger: swagger, + template: { + class: fs.readFileSync(path.join(__dirname, '../templates/swagger/node.html.mustache'), 'utf-8'), + method: '', + type: '' + }, + mustache: { + nodeName: data.name, + category: data.category || 'function', + isNotBodyParam: isNotBodyParam, + hasOptionalParams: hasOptionalParams + }, + lint: false, + beautify: false + }); + fs.writeFileSync(path.join(data.dst, data.module, 'node.html'), htmlSourceCode); - // Create node.html - var htmlSourceCode = CodeGen.getCustomCode({ - className: className, - swagger: swagger, - template: { - class: fs.readFileSync(path.join(__dirname, '../templates/swagger/node.html.mustache'), 'utf-8'), - method: '', - type: '' - }, - mustache: { - nodeName: data.name, - category: data.category || 'function', - isNotBodyParam: isNotBodyParam, - hasOptionalParams: hasOptionalParams - }, - lint: false, - beautify: false - }); - fs.writeFileSync(path.join(data.dst, data.module, 'node.html'), htmlSourceCode); + // Create language files + var languages = fs.readdirSync(path.join(__dirname, '../templates/swagger/locales')); + languages.forEach(function (language) { + var languageFileSourceCode = CodeGen.getCustomCode({ + className: className, + swagger: swagger, + template: { + class: fs.readFileSync(path.join(__dirname, '../templates/swagger/locales', language, 'node.json.mustache'), 'utf-8'), + method: '', + type: '' + }, + mustache: { + nodeName: data.name, + }, + lint: false, + beautify: false + }); + fs.writeFileSync(path.join(data.dst, data.module, 'locales', language, 'node.json'), + JSON.stringify(JSON.parse(languageFileSourceCode), null, 4)); + }); - // Create language files - var languages = fs.readdirSync(path.join(__dirname, '../templates/swagger/locales')); - languages.forEach(function (language) { - var languageFileSourceCode = CodeGen.getCustomCode({ + // Create README.md + var readmeSourceCode = CodeGen.getCustomCode({ className: className, swagger: swagger, template: { - class: fs.readFileSync(path.join(__dirname, '../templates/swagger/locales', language, 'node.json.mustache'), 'utf-8'), + class: fs.readFileSync(path.join(__dirname, '../templates/swagger/README.md.mustache'), 'utf-8'), method: '', type: '' }, mustache: { nodeName: data.name, + projectName: data.module, }, lint: false, beautify: false }); - fs.writeFileSync(path.join(data.dst, data.module, 'locales', language, 'node.json'), - JSON.stringify(JSON.parse(languageFileSourceCode), null, 4)); - }); + fs.writeFileSync(path.join(data.dst, data.module, 'README.md'), readmeSourceCode); - // Create README.md - var readmeSourceCode = CodeGen.getCustomCode({ - className: className, - swagger: swagger, - template: { - class: fs.readFileSync(path.join(__dirname, '../templates/swagger/README.md.mustache'), 'utf-8'), - method: '', - type: '' - }, - mustache: { - nodeName: data.name, + // Create LICENSE file + var licenseSourceCode = CodeGen.getCustomCode({ projectName: data.module, - }, - lint: false, - beautify: false - }); - fs.writeFileSync(path.join(data.dst, data.module, 'README.md'), readmeSourceCode); - - // Create LICENSE file - var licenseSourceCode = CodeGen.getCustomCode({ - projectName: data.module, - className: className, - swagger: swagger, - template: { - class: fs.readFileSync(path.join(__dirname, '../templates/swagger/LICENSE.mustache'), 'utf-8'), - method: '', - type: '' - }, - mustache: { - licenseName: function () { - if (swagger.info.license && swagger.info.license.name) { - return swagger.info.license.name; - } else { - return 'Apache-2.0'; - } + className: className, + swagger: swagger, + template: { + class: fs.readFileSync(path.join(__dirname, '../templates/swagger/LICENSE.mustache'), 'utf-8'), + method: '', + type: '' }, - licenseUrl: function () { - if (swagger.info.license && swagger.info.license.url) { - return swagger.info.license.url; - } else { - return ''; + mustache: { + licenseName: function () { + if (swagger.info.license && swagger.info.license.name) { + return swagger.info.license.name; + } else { + return 'Apache-2.0'; + } + }, + licenseUrl: function () { + if (swagger.info.license && swagger.info.license.url) { + return swagger.info.license.url; + } else { + return ''; + } } - } - }, - lint: false, - beautify: false - }); - fs.writeFileSync(path.join(data.dst, data.module, 'LICENSE'), licenseSourceCode); + }, + lint: false, + beautify: false + }); + fs.writeFileSync(path.join(data.dst, data.module, 'LICENSE'), licenseSourceCode); - if (options.tgz) { - runNpmPack(data); - return path.join(data.dst, data.module + '-' + data.version + '.tgz'); - } else { - return path.join(data.dst, data.module); - } + if (options.tgz) { + runNpmPack(data); + resolve(path.join(data.dst, data.module + '-' + data.version + '.tgz')); + } else { + resolve(path.join(data.dst, data.module)); + } + }); } module.exports = { diff --git a/package.json b/package.json index 4c37838..42e528c 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "mustache": "2.3.0", "request": "2.83.0", "swagger-js-codegen": "1.12.0", + "when": "3.7.8", "yamljs": "0.3.0" }, "devDependencies": { @@ -59,7 +60,7 @@ "grunt-simple-mocha": "0.4.1", "grunt-mocha-istanbul": "5.0.2", "should": "13.1.3", - "node-red":"^0.18.4", + "node-red": "^0.18.4", "node-red-node-test-helper": "^0.1.6", "sinon": "4.1.3", "supertest": "3.0.0", diff --git a/test/lib/nodegen_spec.js b/test/lib/nodegen_spec.js index e0c1c64..592fc6b 100644 --- a/test/lib/nodegen_spec.js +++ b/test/lib/nodegen_spec.js @@ -10,17 +10,18 @@ describe('nodegen library', function () { var options = {}; var data = { 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.version.should.equal('0.0.1'); - fs.statSync(result + '/node.html').size.should.be.above(0); - fs.statSync(result + '/node.js').size.should.be.above(0); - fs.statSync(result + '/icons/icon.png').size.should.be.above(0); - fs.statSync(result + '/README.md').size.should.be.above(0); - fs.statSync(result + '/LICENSE').size.should.be.above(0); - del.sync(result); - done(); + nodegen.function2node(data, options).then(function (result) { + var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json')); + packageSourceCode.name.should.equal('node-red-contrib-lowercase'); + packageSourceCode.version.should.equal('0.0.1'); + fs.statSync(result + '/node.html').size.should.be.above(0); + fs.statSync(result + '/node.js').size.should.be.above(0); + fs.statSync(result + '/icons/icon.png').size.should.be.above(0); + fs.statSync(result + '/README.md').size.should.be.above(0); + fs.statSync(result + '/LICENSE').size.should.be.above(0); + del.sync(result); + done(); + }); }); it('should handle parameters (node and module name)', function (done) { var options = {}; @@ -30,12 +31,13 @@ describe('nodegen library', function () { 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-node-function-node'); - packageSourceCode.version.should.equal('0.0.1'); - del.sync(result); - done(); + nodegen.function2node(data, options).then(function (result) { + var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json')); + packageSourceCode.name.should.equal('node-red-node-function-node'); + packageSourceCode.version.should.equal('0.0.1'); + del.sync(result); + done(); + }); }); it('should handle parameters (prefix and node name)', function (done) { var options = {}; @@ -45,12 +47,13 @@ describe('nodegen library', function () { 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-prefix-nodename'); - packageSourceCode.version.should.equal('0.0.1'); - del.sync(result); - done(); + nodegen.function2node(data, options).then(function (result) { + var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json')); + packageSourceCode.name.should.equal('node-red-prefix-nodename'); + packageSourceCode.version.should.equal('0.0.1'); + del.sync(result); + done(); + }); }); it('should handle parameters (version)', function (done) { var options = {}; @@ -59,12 +62,13 @@ describe('nodegen library', function () { 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.version.should.equal('4.5.1'); - del.sync(result); - done(); + nodegen.function2node(data, options).then(function (result) { + var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json')); + packageSourceCode.name.should.equal('node-red-contrib-lowercase'); + packageSourceCode.version.should.equal('4.5.1'); + del.sync(result); + done(); + }); }); it('should handle parameters (keywords)', function (done) { var options = {}; @@ -73,12 +77,13 @@ describe('nodegen library', function () { 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(); + nodegen.function2node(data, options).then(function (result) { + 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 = { @@ -87,11 +92,12 @@ describe('nodegen library', function () { }; var data = { dst: '.' }; data.src = fs.readFileSync('samples/lower-case.js'); - var result = nodegen.function2node(data, options); - fs.statSync(result).isFile().should.be.eql(true); - del.sync(result); - del.sync(result.replace(/-[0-9]+\.[0-9]+\.[0-9]+\.tgz$/, '')); - done(); + nodegen.function2node(data, options).then(function (result) { + fs.statSync(result).isFile().should.be.eql(true); + del.sync(result); + del.sync(result.replace(/-[0-9]+\.[0-9]+\.[0-9]+\.tgz$/, '')); + done(); + }); }); }); @@ -102,22 +108,23 @@ describe('nodegen library', function () { var sourcePath = 'http://petstore.swagger.io/v2/swagger.json'; request(sourcePath, function (error, response, body) { data.src = JSON.parse(body); - var result = nodegen.swagger2node(data, options); - var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json')); - packageSourceCode.name.should.equal('node-red-contrib-swagger-petstore'); - packageSourceCode.version.should.equal('1.0.0'); - packageSourceCode.license.should.equal('Apache 2.0'); - fs.statSync(result + '/node.html').size.should.be.above(0); - fs.statSync(result + '/node.js').size.should.be.above(0); - fs.statSync(result + '/lib.js').size.should.be.above(0); - fs.statSync(result + '/icons/icon.png').size.should.be.above(0); - fs.statSync(result + '/locales/en-US/node.json').size.should.be.above(0); - fs.statSync(result + '/locales/ja/node.json').size.should.be.above(0); - fs.statSync(result + '/locales/zh-CN/node.json').size.should.be.above(0); - fs.statSync(result + '/README.md').size.should.be.above(0); - fs.statSync(result + '/LICENSE').size.should.be.above(0); - del.sync(result); - done(); + nodegen.swagger2node(data, options).then(function (result) { + var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json')); + packageSourceCode.name.should.equal('node-red-contrib-swagger-petstore'); + packageSourceCode.version.should.equal('1.0.0'); + packageSourceCode.license.should.equal('Apache 2.0'); + fs.statSync(result + '/node.html').size.should.be.above(0); + fs.statSync(result + '/node.js').size.should.be.above(0); + fs.statSync(result + '/lib.js').size.should.be.above(0); + fs.statSync(result + '/icons/icon.png').size.should.be.above(0); + fs.statSync(result + '/locales/en-US/node.json').size.should.be.above(0); + fs.statSync(result + '/locales/ja/node.json').size.should.be.above(0); + fs.statSync(result + '/locales/zh-CN/node.json').size.should.be.above(0); + fs.statSync(result + '/README.md').size.should.be.above(0); + fs.statSync(result + '/LICENSE').size.should.be.above(0); + del.sync(result); + done(); + }); }); }); });