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.

36 lines (35 loc) 1.84 kB
"use strict"; 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 findSubNode_1 = __importDefault(require("./searchNodeFunc/findSubNode")); function categorizeNodes(nodes) { var _a; var imports = {}; var identifiers = {}; for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { var node = nodes_1[_i]; //create a map of all unique Types Declarations for O(1) look up if ((0, typescript_1.isIdentifier)(node) && ((0, typescript_1.isTypeAliasDeclaration)(node.parent) || (0, typescript_1.isInterfaceDeclaration)(node.parent) || (0, typescript_1.isVariableDeclaration)(node.parent))) identifiers[node.escapedText.toString()] = node; //create a map for all import names and paths else if ((0, typescript_1.isImportDeclaration)(node)) { var importClause = (0, findSubNode_1.default)((_a = node.importClause) === null || _a === void 0 ? void 0 : _a.namedBindings, function (node) { return (0, typescript_1.isIdentifier)(node); }); for (var _b = 0, importClause_1 = importClause; _b < importClause_1.length; _b++) { var identifier = importClause_1[_b]; //store import name with import file location if ((0, typescript_1.isIdentifier)(identifier)) { var text = identifier.escapedText.toString(); imports[text] = node.moduleSpecifier.getText(); } } } } return { imports: imports, identifiers: identifiers }; } exports.default = categorizeNodes;