swagger-typed-express-docs
Version:
Simple express runtime parser and documentation swagger generator with 100% support of Typescript static types
162 lines (161 loc) • 5.64 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.T = exports.tTransformType = void 0;
var utils_1 = require("./utils");
var tNumber = {
type: 'number',
required: true,
};
var tBoolean = {
type: 'boolean',
required: true,
};
var tString = {
type: 'string',
required: true,
};
var tAny = {
type: 'any',
required: true,
};
var tOneOf = function (options) { return ({
type: 'oneOf',
required: true,
options: options,
}); };
var tEnum = function (options) {
if (options.some(function (i) { return typeof i !== 'string' && typeof i !== 'boolean' && typeof i !== 'number'; })) {
throw new Error("T.enum get invalid options ".concat(JSON.stringify(options), ", only number, boolean and string is supported"));
}
return {
type: 'enum',
required: true,
options: options,
};
};
var tObject = function (a) { return ({
type: 'object',
required: true,
properties: a,
}); };
var tHashMap = function (a) { return ({
type: 'hashMap',
required: true,
property: a,
}); };
var tList = function (items) { return ({
type: 'array',
required: true,
items: items,
}); };
var tLazy = function (name, tSchema) { return ({
type: 'lazy',
name: name,
required: true,
getSchema: tSchema,
}); };
var tTransformType = function (encodedTSchema, decodedTSchema, syncDecoder, syncEncoder) {
if (syncEncoder === void 0) { syncEncoder = (function (v) { return v; }); }
return {
type: 'transformType',
encodedTSchema: encodedTSchema,
decodedTSchema: decodedTSchema,
required: true,
syncDecoder: syncDecoder,
syncEncoder: syncEncoder,
};
};
exports.tTransformType = tTransformType;
var tNonNullable = function (a) {
return __assign(__assign({}, a), { required: true });
};
var tNullable = function (a) {
return __assign(__assign({}, a), { required: false });
};
var tNullableTransform = function (a) {
return __assign(__assign({}, a), { encodedTSchema: __assign(__assign({}, a.encodedTSchema), { required: false }), decodedTSchema: __assign(__assign({}, a.decodedTSchema), { required: false }) });
};
var tAddValidator = function (schema, validator) {
if (schema.type === 'transformType')
throw new Error('cannot add validator for transformType');
return __assign(__assign({}, schema), { validator: validator });
};
var deepNullable = function (schema) {
if (schema.type === 'array') {
return __assign(__assign({}, tNullable(schema)), { items: deepNullable(schema.items) });
}
else if (schema.type === 'hashMap') {
return __assign(__assign({}, tNullable(schema)), { property: deepNullable(schema.property) });
}
else if (schema.type === 'oneOf') {
return __assign(__assign({}, tNullable(schema)), { options: schema.options.map(function (o) { return deepNullable(o); }) });
}
else if (schema.type === 'object') {
return __assign(__assign({}, tNullable(schema)), { properties: (0, utils_1.mapEntries)(function (_a) {
var _b = __read(_a, 2), k = _b[0], v = _b[1];
return [k, deepNullable(v)];
}, schema.properties) });
}
else if (schema.type === 'transformType') {
return __assign(__assign({}, tNullable(schema)), { encodedTSchema: deepNullable(schema.encodedTSchema), decodedTSchema: deepNullable(schema.decodedTSchema) });
}
return tNullable(schema);
};
exports.T = {
number: tNonNullable(tNumber),
null_number: tNullable(tNumber),
boolean: tNonNullable(tBoolean),
null_boolean: tNullable(tBoolean),
string: tNonNullable(tString),
null_string: tNullable(tString),
any: tNonNullable(tAny),
null_any: tNullable(tAny),
oneOf: function (options) {
return tNonNullable(tOneOf(options));
},
null_oneOf: function (options) {
return tNullable(tOneOf(options));
},
enum: function (options) { return tNonNullable(tEnum(options)); },
null_enum: function (options) { return tNullable(tEnum(options)); },
object: function (args) { return tNonNullable(tObject(args)); },
null_object: function (args) { return tNullable(tObject(args)); },
list: function (items) { return tNonNullable(tList(items)); },
null_list: function (items) { return tNullable(tList(items)); },
hashMap: function (args) { return tNonNullable(tHashMap(args)); },
null_hashMap: function (args) { return tNullable(tHashMap(args)); },
transformType: exports.tTransformType,
addValidator: tAddValidator,
deepNullable: deepNullable,
nonNullable: tNonNullable,
nullable: tNullable,
nullableTransform: tNullableTransform,
lazy: tLazy,
};
;