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.

59 lines (58 loc) 2.32 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 __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var typescript_1 = require("typescript"); var parsePropValues_1 = __importDefault(require("./parsePropValues")); var extractProperties_1 = __importDefault(require("../extractProperties")); function parseProperties(_a) { var node = _a.node, imports = _a.imports, ids = _a.ids, paths = _a.paths, props = _a.props, resolveCustomGenerics = _a.resolveCustomGenerics, extension = _a.extension; var newProps = {}; var key = undefined; var keyProps = undefined; var isRequired = (0, typescript_1.isPropertySignature)(node) ? !node.questionToken : false; node.forEachChild(function (n) { var value = (0, parsePropValues_1.default)({ node: n, imports: imports, paths: paths, props: props, ids: ids, resolveCustomGenerics: resolveCustomGenerics, extension: extension }); if ((0, typescript_1.isIdentifier)(n) && typeof value === "string") key = value; else if (value !== undefined) keyProps = value; else keyProps = (0, extractProperties_1.default)({ imports: imports, ids: ids, node: n, paths: paths, props: props, resolveCustomGenerics: resolveCustomGenerics, extension: extension }); }); //assign all props extracted if (key && keyProps) newProps[key] = { value: keyProps }; if (key && isRequired) newProps[key] = __assign(__assign({}, newProps[key]), { required: true }); return newProps; } exports.default = parseProperties;