ts-to-mongo-schema
Version:
Using the Typescript Compiler API, this program parses through Typescript, to generate a JSON Schema that conforms to MongoDB's bson format. Useful when generating large schemas, and being unable to use a javascript or typescript library like Moongoose.
54 lines (53 loc) • 2.27 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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var extractProperties_1 = __importDefault(require("../extractProperties"));
function mergeObj(_a) {
var node = _a.node, imports = _a.imports, ids = _a.ids, paths = _a.paths, props = _a.props, resolveCustomGenerics = _a.resolveCustomGenerics, extension = _a.extension;
var mergedProps = {
bsonType: "object",
properties: {},
required: [],
};
node.forEachChild(function (n) {
var extracted = (0, extractProperties_1.default)({
imports: imports,
ids: ids,
node: n,
paths: paths,
props: props,
resolveCustomGenerics: resolveCustomGenerics,
extension: extension,
});
if (extracted.properties && extracted.required)
mergedProps = __assign(__assign({}, mergedProps), { properties: __assign(__assign({}, mergedProps.properties), extracted.properties), required: __spreadArray(__spreadArray([], extracted.required, true), mergedProps.required, true) });
else if (extracted.anyOf) {
if (extracted.anyOf.length > 1)
mergedProps = __assign(__assign({}, mergedProps), extracted);
}
});
return mergedProps;
}
exports.default = mergeObj;