UNPKG

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