-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
61 lines (56 loc) · 1.78 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var through = require('through2');
var CodeGen = require('swagger-js-codegen').CodeGen;
var safeLoad = require("js-yaml").safeLoad;
var PluginError = require('gulp-util').PluginError;
var defaults = require('object.defaults');
module.exports = function (options) {
options = options || {};
defaults(options, {
type: "typescript",
swaggerOptions: {}
});
return through.obj(function (file, encoding, callback) {
if (file.isNull()) {
// nothing to do
return callback(null, file);
}
if (file.isStream()) {
this.emit('error', new PluginError("gulp-swagger-js-codegen", 'Streams not supported!'));
return callback(null, file);
} else if (file.isBuffer()) {
var contents = file.contents.toString("utf8");
var json;
try {
json = JSON.parse(contents);
} catch (e) {
json = safeLoad(contents);
}
if (typeof json !== "object") {
var err = new PluginError("gulp-swagger-js-codegen", 'Input must be valid JSON or YAML');
this.emit('error', err);
return callback(null, file);
}
options.swaggerOptions.swagger = json;
var output;
var fileName;
switch (options.type) {
case "typescript":
output = CodeGen.getTypescriptCode(options.swaggerOptions);
fileName = "api.ts";
break;
case "node":
output = CodeGen.getNodeCode(options.swaggerOptions);
fileName = "api.js";
break;
case "angular":
output = CodeGen.getAngularCode(options.swaggerOptions);
fileName = "api.js";
break;
}
var newFile = file.clone();
newFile.contents = new Buffer(output);
newFile.path = './' + (options.name || fileName)
callback(null, newFile);
}
});
};