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.
59 lines (58 loc) • 2.32 kB
JavaScript
;
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 parsePropValues_1 = __importDefault(require("./parsePropValues"));
var extractProperties_1 = __importDefault(require("../extractProperties"));
function parseProperties(_a) {
var node = _a.node, imports = _a.imports, ids = _a.ids, paths = _a.paths, props = _a.props, resolveCustomGenerics = _a.resolveCustomGenerics, extension = _a.extension;
var newProps = {};
var key = undefined;
var keyProps = undefined;
var isRequired = (0, typescript_1.isPropertySignature)(node) ? !node.questionToken : false;
node.forEachChild(function (n) {
var value = (0, parsePropValues_1.default)({
node: n,
imports: imports,
paths: paths,
props: props,
ids: ids,
resolveCustomGenerics: resolveCustomGenerics,
extension: extension
});
if ((0, typescript_1.isIdentifier)(n) && typeof value === "string")
key = value;
else if (value !== undefined)
keyProps = value;
else
keyProps = (0, extractProperties_1.default)({
imports: imports,
ids: ids,
node: n,
paths: paths,
props: props,
resolveCustomGenerics: resolveCustomGenerics,
extension: extension
});
});
//assign all props extracted
if (key && keyProps)
newProps[key] = { value: keyProps };
if (key && isRequired)
newProps[key] = __assign(__assign({}, newProps[key]), { required: true });
return newProps;
}
exports.default = parseProperties;