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.

97 lines (96 loc) 3.18 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 extractProperties_1 = __importDefault(require("../extractProperties")); var parseGenerics = function (_a) { var node = _a.node, ids = _a.ids, imports = _a.imports, props = _a.props, paths = _a.paths, resolveCustomGenerics = _a.resolveCustomGenerics, extension = _a.extension; var name = ""; node.forEachChild(function (n) { if ((0, typescript_1.isIdentifier)(n)) name = n.escapedText.toString(); }); if (name === "") return __assign({}, props); var typeArgs = node.typeArguments; if (!typeArgs || !resolveCustomGenerics) return __assign({}, props); var resolvingFunc = resolveCustomGenerics[name]; var argProps = {}; var propsPerArg = []; for (var _i = 0, typeArgs_1 = typeArgs; _i < typeArgs_1.length; _i++) { var arg = typeArgs_1[_i]; argProps = (0, extractProperties_1.default)({ node: arg, imports: imports, ids: ids, resolveCustomGenerics: resolveCustomGenerics, paths: paths, props: argProps, extension: extension }); } var newProps = resolvingFunc({ propertiesPerArg: propsPerArg, combinedProperties: argProps, }); return newProps; }; exports.default = parseGenerics; // let genericNode: // | ts.TypeAliasDeclaration // | ts.InterfaceDeclaration // | undefined; // const newNode = ids[name]?.parent; // if ( // name in ids && // (isTypeAliasDeclaration(newNode) || isInterfaceDeclaration(newNode)) // ) // genericNode = newNode; // else if (name in imports) // genericNode = searchForExport({ imports, paths, name }); // else return { ...props }; // if (!genericNode) return { ...props }; // const typeParams = genericNode.typeParameters /* // const extracted = extractProperties({ // imports, // ids, // node: arg, // paths, // props, // resolveCustomGenerics, // }); // propsPerArg.push(extracted); // if (isInterfaceDeclaration(arg)) // argProps = mergeProps({ // node: arg, // imports, // ids, // paths, // props: argProps, // resolveCustomGenerics, // }); // else // argProps = mergeObj({ // node: arg, // imports, // ids, // paths, // props: argProps, // resolveCustomGenerics, // }); */