UNPKG

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
"use strict"; 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