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.

77 lines (76 loc) 2.81 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 extractProperties_1 = __importDefault(require("../extractProperties")); function convertValue(_a) { var node = _a.node, ids = _a.ids, imports = _a.imports, props = _a.props, paths = _a.paths, resolveCustomGenerics = _a.resolveCustomGenerics, extension = _a.extension; if ((0, typescript_1.isIdentifier)(node)) { var name_1 = node.escapedText.toString(); if (name_1 === "Date") return { bsonType: "date" }; return name_1; } if ((0, typescript_1.isLiteralTypeNode)(node)) return convertValue({ node: node.literal, ids: ids, imports: imports, props: props, paths: paths, resolveCustomGenerics: resolveCustomGenerics, extension: extension }); if ((0, typescript_1.isArrayTypeNode)(node)) return { bsonType: "array", items: __assign({}, (0, extractProperties_1.default)({ node: node.elementType, ids: ids, imports: imports, props: props, paths: paths, resolveCustomGenerics: resolveCustomGenerics, extension: extension })), }; if ((0, typescript_1.isStringLiteral)(node)) return { bsonType: "string", enum: [node.text], }; if ((0, typescript_1.isNumericLiteral)(node)) return { bsonType: "double", enum: [node.text], }; switch (ts_morph_1.ts.SyntaxKind[node.kind]) { case "StringKeyword": return { bsonType: "string" }; case "BooleanKeyword": return { bsonType: "bool" }; case "NumberKeyword": return { bsonType: "double" }; case "TrueKeyword": return { bsonType: "bool", enum: [true] }; case "FalseKeyword": return { bsonType: "bool", enum: [false] }; default: return undefined; } } exports.default = convertValue;