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
JavaScript
;
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;