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.
38 lines (37 loc) • 1.95 kB
JavaScript
;
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
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 findSubNode_1 = __importDefault(require("../searchNodeFunc/findSubNode"));
var typescript_1 = require("typescript");
var findParentTypeNode_1 = __importDefault(require("../searchNodeFunc/findParentTypeNode"));
var categorizeNodes_1 = __importDefault(require("../categorizeNodes"));
var initalizeNewFile = function (_a) {
var configPath = _a.configPath, filePath = _a.filePath, identifier = _a.identifier;
var project = new ts_morph_1.Project({
tsConfigFilePath: configPath,
});
var file = project.getSourceFileOrThrow(filePath);
var node = file.compilerNode;
var statements = node.statements;
var nodes = [];
for (var _i = 0, statements_1 = statements; _i < statements_1.length; _i++) {
var statement = statements_1[_i];
nodes = __spreadArray(__spreadArray([], nodes, true), (0, findSubNode_1.default)(statement, function (node) { return !(0, typescript_1.isExportSpecifier)(node.parent); }), true);
}
var _b = (0, categorizeNodes_1.default)(nodes), imports = _b.imports, identifiers = _b.identifiers;
var idParent = (0, findParentTypeNode_1.default)(identifiers[identifier].parent);
return { idParent: idParent, imports: imports, identifiers: identifiers };
};
exports.default = initalizeNewFile;