Skip to content

Commit 6a31ff9

Browse files
committed
Split each mode into its own src/test files
1 parent 5e1a059 commit 6a31ff9

File tree

16 files changed

+1023
-1018
lines changed

16 files changed

+1023
-1018
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
node-red-contrib-*
33
node-red-node-*
44
./nodegen
5-
samples
65

76
# Dependency directories
87
node_modules

Gruntfile.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ module.exports = function (grunt) {
44
generateNode_lowerCase: {
55
command: 'node bin/node-red-nodegen.js samples/lower-case.js -o ./nodegen'
66
},
7-
getSwagger_swaggerPetstore: {
8-
command: 'node bin/getswagger.js'
9-
},
107
generateNode_swaggerPetstore: {
118
command: 'node bin/node-red-nodegen.js samples/swagger.json -o ./nodegen'
129
}

bin/getswagger.js

Lines changed: 0 additions & 35 deletions
This file was deleted.

lib/function/index.js

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
const util = require("../util");
2+
3+
const fs = require('fs');
4+
const path = require('path');
5+
const mustache = require('mustache');
6+
const jsStringEscape = require('js-string-escape');
7+
const obfuscator = require('javascript-obfuscator');
8+
9+
const TEMPLATE_DIR = path.join(__dirname,'../../templates/function');
10+
11+
module.exports = function(data, options) {
12+
// console.log("OPT",options);
13+
// console.log("DATA",data);
14+
"use strict";
15+
return new Promise(function (resolve, reject) {
16+
// Read meta data in js file
17+
var meta = {};
18+
var parts = new String(data.src).split('\n');
19+
parts.forEach(function (part) {
20+
var match = /^\/\/ (\w+): (.*)/.exec(part.toString());
21+
if (match) {
22+
if (match[1] === 'name') {
23+
meta.name = match[2].replace(/([A-Z])/g, ' $1').toLowerCase().replace(/[^ a-z0-9]+/g, '').replace(/^ | $/, '').replace(/ +/g, '-');
24+
} else {
25+
meta[match[1]] = match[2];
26+
}
27+
}
28+
});
29+
30+
if (!data.name || data.name === '') {
31+
data.name = meta.name;
32+
}
33+
34+
if (data.module) {
35+
if (data.prefix) {
36+
reject('module name and prefix are conflicted.');
37+
return;
38+
}
39+
} else {
40+
if (data.prefix) {
41+
data.module = data.prefix + data.name;
42+
} else {
43+
data.module = 'node-red-contrib-' + data.name;
44+
}
45+
}
46+
47+
if (!data.version || data.version === '') {
48+
data.version = '0.0.1';
49+
}
50+
51+
if (data.icon) {
52+
if (!data.icon.match(/\.(png|gif)$/) && !data.icon.match(/^(node-red|font-awesome)/)) {
53+
data.icon = data.icon + '.png';
54+
}
55+
if (!data.icon.match(/^[a-zA-Z0-9\-\./]+$/)) {
56+
reject('invalid icon file name');
57+
return;
58+
}
59+
}
60+
61+
if (data.color) {
62+
if (data.color.match(/^[a-zA-Z0-9]{6}$/)) {
63+
data.color = '#' + data.color;
64+
} else {
65+
reject('invalid color');
66+
return;
67+
}
68+
}
69+
70+
if (data.name === 'function') {
71+
reject('\'function\' is duplicated node name. Use another name.');
72+
return;
73+
} else if (!data.name.match(/^[a-z0-9\-]+$/)) {
74+
reject('invalid node name');
75+
return;
76+
} else {
77+
var params = {
78+
nodeName: data.name,
79+
projectName: data.module,
80+
projectVersion: data.version,
81+
keywords: util.extractKeywords(data.keywords),
82+
category: data.category || 'function',
83+
icon: function () {
84+
if (data.icon ) {
85+
if (!data.icon.match(/^(node-red|font-awesome)/)) {
86+
return path.basename(data.icon);
87+
}
88+
else { return data.icon; }
89+
} else {
90+
return 'icon.png';
91+
}
92+
},
93+
color: data.color || '#C0DEED',
94+
func: jsStringEscape(data.src),
95+
outputs: meta.outputs || data.outputs,
96+
inputLabels: JSON.stringify(data.inputLabels || []),
97+
outputLabels: JSON.stringify(data.outputLabels || []),
98+
nodeInfo: jsStringEscape(data.info || ""),
99+
nodeRead: data.info || ""
100+
};
101+
102+
util.createCommonFiles(TEMPLATE_DIR, data);
103+
104+
// Create package.json
105+
var packageTemplate = fs.readFileSync(path.join(TEMPLATE_DIR, 'package.json.mustache'), 'utf-8');
106+
var packageSourceCode = mustache.render(packageTemplate, params);
107+
fs.writeFileSync(path.join(data.dst, data.module, 'package.json'), packageSourceCode);
108+
109+
// Create node.js
110+
var nodeTemplate = fs.readFileSync(path.join(TEMPLATE_DIR, 'node.js.mustache'), 'utf-8');
111+
var nodeSourceCode = mustache.render(nodeTemplate, params);
112+
if (options.obfuscate) {
113+
nodeSourceCode = obfuscator.obfuscate(nodeSourceCode, { stringArrayEncoding: 'rc4' }).getObfuscatedCode();
114+
}
115+
fs.writeFileSync(path.join(data.dst, data.module, 'node.js'), nodeSourceCode);
116+
117+
// Create node.html
118+
var htmlTemplate = fs.readFileSync(path.join(TEMPLATE_DIR, 'node.html.mustache'), 'utf-8');
119+
var htmlSourceCode = mustache.render(htmlTemplate, params);
120+
fs.writeFileSync(path.join(data.dst, data.module, 'node.html'), htmlSourceCode);
121+
122+
// Create flow.json
123+
var flowTemplate = fs.readFileSync(path.join(TEMPLATE_DIR, 'examples/flow.json.mustache'), 'utf-8');
124+
var flowSourceCode = mustache.render(flowTemplate, params);
125+
fs.writeFileSync(path.join(data.dst, data.module, 'examples/flow.json'), flowSourceCode);
126+
127+
// Create node_spec.js
128+
var nodeSpecTemplate = fs.readFileSync(path.join(TEMPLATE_DIR, 'test/node_spec.js.mustache'), 'utf-8');
129+
var nodeSpecSourceCode = mustache.render(nodeSpecTemplate, params);
130+
fs.writeFileSync(path.join(data.dst, data.module, 'test/node_spec.js'), nodeSpecSourceCode);
131+
132+
// Create README.md
133+
var readmeTemplate = fs.readFileSync(path.join(TEMPLATE_DIR, 'README.md.mustache'), 'utf-8');
134+
var readmeSourceCode = mustache.render(readmeTemplate, params);
135+
fs.writeFileSync(path.join(data.dst, data.module, 'README.md'), readmeSourceCode);
136+
137+
// Create LICENSE file
138+
var licenseTemplate = fs.readFileSync(path.join(TEMPLATE_DIR, 'LICENSE.mustache'), 'utf-8');
139+
var licenseSourceCode = mustache.render(licenseTemplate, params);
140+
fs.writeFileSync(path.join(data.dst, data.module, 'LICENSE'), licenseSourceCode);
141+
142+
if (options.tgz) {
143+
util.runNpmPack(data);
144+
resolve(path.join(data.dst, data.module + '-' + data.version + '.tgz'));
145+
} else {
146+
resolve(path.join(data.dst, data.module));
147+
}
148+
}
149+
});
150+
}

0 commit comments

Comments
 (0)