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.

140 lines (139 loc) 5.31 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 ts_morph_1 = require("ts-morph"); var typescript_1 = require("typescript"); var mergeProps_1 = __importDefault(require("./mergeFuncs/mergeProps")); var parseProperties_1 = __importDefault(require("./parseStatements/parseProperties")); var mergeObj_1 = __importDefault(require("./mergeFuncs/mergeObj")); var parsePropValues_1 = __importDefault(require("./parseStatements/parsePropValues")); var parseGenerics_1 = __importDefault(require("./parseStatements/parseGenerics")); var parseTypeRefs_1 = __importDefault(require("./parseStatements/parseTypeRefs")); function extractProperties(_a) { var imports = _a.imports, ids = _a.ids, node = _a.node, paths = _a.paths, props = _a.props, resolveCustomGenerics = _a.resolveCustomGenerics, extension = _a.extension; switch (ts_morph_1.ts.SyntaxKind[node.kind]) { case "IntersectionType": props = (0, mergeObj_1.default)({ node: node, imports: imports, ids: ids, paths: paths, props: props, resolveCustomGenerics: resolveCustomGenerics, extension: extension }); break; case "TypeLiteral": props = (0, mergeProps_1.default)({ node: node, imports: imports, ids: ids, paths: paths, props: props, resolveCustomGenerics: resolveCustomGenerics, extension: extension }); break; case "InterfaceDeclaration": props = (0, mergeProps_1.default)({ node: node, imports: imports, ids: ids, paths: paths, props: props, resolveCustomGenerics: resolveCustomGenerics, extension: extension }); break; case "TypeAliasDeclaration": props = (0, mergeObj_1.default)({ node: node, imports: imports, ids: ids, paths: paths, props: props, resolveCustomGenerics: resolveCustomGenerics, extension: extension }); break; case "UnionType": props = { anyOf: [], }; node.forEachChild(function (n) { props.anyOf.push(__assign({}, extractProperties({ imports: imports, ids: ids, node: n, paths: paths, props: {}, resolveCustomGenerics: resolveCustomGenerics, extension: extension }))); }); break; case "PropertySignature": props = (0, parseProperties_1.default)({ imports: imports, ids: ids, node: node, paths: paths, props: props, resolveCustomGenerics: resolveCustomGenerics, extension: extension }); break; case "TypeReference": //parse generics if ((0, typescript_1.isTypeReferenceNode)(node) && node.typeArguments) { props = (0, parseGenerics_1.default)({ node: node, props: props, ids: ids, imports: imports, paths: paths, resolveCustomGenerics: resolveCustomGenerics, extension: extension }); } else props = (0, parseTypeRefs_1.default)({ node: node, props: props, ids: ids, imports: imports, paths: paths, resolveCustomGenerics: resolveCustomGenerics, extension: extension }); break; default: var newProps = (0, parsePropValues_1.default)({ node: node, ids: ids, imports: imports, paths: paths, props: props, resolveCustomGenerics: resolveCustomGenerics, extension: extension }); if (newProps && typeof newProps !== "string") props = newProps; break; } return props; } exports.default = extractProperties;