swagger-typescript-generator
Version:
Generate typescript code from swagger.json. Before start this project I try use [swagger-typescript-codegen](https://github.com/mtennoe/swagger-typescript-codegen) based on [mustache templates](https://github.com/mtennoe/swagger-js-codegen/tree/master/lib
170 lines • 7.73 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SwaggerDoc = void 0;
var swagger_model_1 = require("./swagger-model");
var swagger_class_1 = require("./swagger-class");
var swagger_enum_1 = require("./swagger-enum");
var swagger_path_1 = require("./swagger-path");
var object_ex_1 = require("./object-ex");
var default_utils_1 = require("./default-utils");
var utils_1 = require("./utils");
var SwaggerDoc = /** @class */ (function (_super) {
__extends(SwaggerDoc, _super);
function SwaggerDoc(config, utils) {
var _a, _b;
var _this = _super.call(this) || this;
_this.models = [];
_this.classes = [];
_this.paths = [];
_this.enums = [];
_this.utils = default_utils_1.defaultUtils;
_this.config = config;
_this.utils = utils;
var source = config.source;
if (source.paths) {
_this.paths = Object.keys(source.paths).reduce(function (accum, key) {
var obj = source.paths[key];
accum.push(new swagger_path_1.SwaggerPath(_this, key, obj));
return accum;
}, []);
}
if (source.definitions) {
_this.models = Object.keys(source.definitions).reduce(function (accum, key) {
var obj = source.definitions[key];
accum.push(new swagger_model_1.SwaggerModel(_this, key, obj));
return accum;
}, []);
}
if ((_a = source.components) === null || _a === void 0 ? void 0 : _a.schemas) {
_this.models = Object.keys((_b = source.components) === null || _b === void 0 ? void 0 : _b.schemas).reduce(function (accum, key) {
var _a;
var obj = (_a = source.components) === null || _a === void 0 ? void 0 : _a.schemas[key];
accum.push(new swagger_model_1.SwaggerModel(_this, key, obj));
return accum;
}, []);
}
if (source.tags && source.tags.length) {
_this.classes = source.tags.map(function (tag) {
var paths = _this.paths.filter(function (f) { return f.tags.includes(tag.name); });
return new swagger_class_1.SwaggerClass(_this, tag.name, tag, paths);
}, []);
}
else {
var tags = _this.paths.map(function (p) { return p.tags; }).flat();
var uniqueTags = utils_1.uniqueItems(tags, function (t) { return t; });
_this.classes = uniqueTags.map(function (tag) {
var paths = _this.paths.filter(function (f) { return f.tags.includes(tag); });
var source = paths.map(function (p) { return p.source; });
return new swagger_class_1.SwaggerClass(_this, tag, source, paths);
}, []);
var newClasses = _this.paths
.filter(function (f) { return !f.tags.length; })
.map(function (p) {
return new swagger_class_1.SwaggerClass(_this, p.name, p.source, [p]);
})
.filter(function (f) { return f; });
_this.classes = utils_1.uniqueItems(__spreadArrays(newClasses, _this.classes), function (i) { return i.name; });
}
_this.init();
return _this;
}
SwaggerDoc.prototype.addEnums = function () {
var _this = this;
this.models.forEach(function (def) {
if (def.isEnum) {
var enumModel = new swagger_enum_1.SwaggerEnum(_this, def.name, {
modelDef: def,
}, def.source);
_this.enums.push(enumModel);
}
});
// enums
this.models.forEach(function (def) {
def.properties.forEach(function (defProp) {
if (defProp.modelType.isEnum) {
var enumModel = new swagger_enum_1.SwaggerEnum(_this, defProp.name, {
modelDef: def,
modelPropDef: defProp,
}, defProp.source);
_this.enums.push(enumModel);
}
});
});
this.classes.forEach(function (cl) {
cl.methods.forEach(function (meth) {
meth.parameters.forEach(function (par) {
if (par.modelType.isEnum) {
var enumModel = new swagger_enum_1.SwaggerEnum(_this, par.name, { methodPropertyDef: par }, meth.source);
_this.enums.push(enumModel);
}
});
});
});
// TODO optimize
var uniqueEnums = utils_1.uniqueItems(this.enums, function (e) { return e.name + JSON.stringify(e.enumValues); });
uniqueEnums.forEach(function (uniqueEnum) {
var _a, _b;
var similarEnums = _this.enums.filter(function (f) {
return JSON.stringify(f.enumValues) === JSON.stringify(uniqueEnum.enumValues);
});
var newNamespace = similarEnums
.map(function (m) { return m.namespace; })
.filter(function (f) { return f; });
(_a = uniqueEnum.duplicateNamespaces).push.apply(_a, newNamespace.flat());
uniqueEnum.duplicateNamespaces = utils_1.uniqueItems(uniqueEnum.duplicateNamespaces, function (k) { return k; });
var newKeys = similarEnums.map(function (m) { return m.keys; }).filter(function (f) { return f; });
(_b = uniqueEnum.keys).push.apply(_b, newKeys.flat());
uniqueEnum.keys = utils_1.uniqueItems(uniqueEnum.keys, function (k) { return k; });
});
this.enums = uniqueEnums;
};
SwaggerDoc.prototype.init = function () {
this.addEnums();
this.enums = utils_1.uniqueItems(this.enums, function (e) { return e.getFullName; });
this.paths.forEach(function (cl) { return cl.init(); });
this.enums.forEach(function (cl) { return cl.init(); });
this.models.forEach(function (def) { return def.init(); });
this.classes.forEach(function (cl) { return cl.init(); });
this.models = this.models.filter(function (f) { return !f.isEnum; });
};
Object.defineProperty(SwaggerDoc.prototype, "doc", {
get: function () {
return this;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SwaggerDoc.prototype, "config", {
get: function () {
return this.getPrivate("config");
},
set: function (value) {
this.setPrivate("config", value);
},
enumerable: false,
configurable: true
});
return SwaggerDoc;
}(object_ex_1.ObjectEx));
exports.SwaggerDoc = SwaggerDoc;
//# sourceMappingURL=swagger-doc.js.map