json-ts
Version:
Automatically generate Typescript Definition files or Flow types from JSON input
66 lines • 8.4 kB
JavaScript
;
var __assign = (this && this.__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;
};
Object.defineProperty(exports, "__esModule", { value: true });
var ts = require("typescript");
var parser_1 = require("./parser");
exports.parse = parser_1.parse;
var printer_1 = require("./printer");
exports.print = printer_1.print;
var transformer_1 = require("./transformer");
exports.transform = transformer_1.transform;
var collapse_interfaces_1 = require("./collapse-interfaces");
exports.defaults = {
prefix: "I",
rootName: "RootObject"
};
function json2ts(validJsonString, options) {
if (options === void 0) { options = {}; }
var mergedOptions = __assign({}, exports.defaults, options);
var _a = parser_1.parse(validJsonString, mergedOptions), stack = _a.stack, inputKind = _a.inputKind;
switch (inputKind) {
case ts.SyntaxKind.ArrayLiteralExpression:
case ts.SyntaxKind.ObjectLiteralExpression: {
var transformed = transformer_1.transform(stack, mergedOptions);
var flattened = collapse_interfaces_1.collapseInterfaces(transformed);
var printed = printer_1.print(flattened, inputKind, mergedOptions);
return printed;
}
default: {
var printed = printer_1.printLiteral(stack[0], inputKind, mergedOptions);
return printed;
}
}
}
exports.json2ts = json2ts;
function json2tsMulti(validJsonStrings, options) {
if (options === void 0) { options = {}; }
var inputKinds = new Set([]);
var mergedOptions = __assign({}, exports.defaults, options);
var joined = validJsonStrings.reduce(function (all, json) {
var _a = parser_1.parse(json, mergedOptions), stack = _a.stack, inputKind = _a.inputKind;
inputKinds.add(inputKind);
var transformed = transformer_1.transform(stack, mergedOptions);
return all.concat(transformed);
}, []);
if (inputKinds.size > 1) {
// todo handle mixed types
}
var flattened = collapse_interfaces_1.collapseInterfaces(joined);
var printed = printer_1.print(flattened, Array.from(inputKinds)[0], mergedOptions);
return printed;
}
exports.json2tsMulti = json2tsMulti;
if ((typeof window !== 'undefined') && ((typeof window.json2ts) === 'undefined')) {
window.json2ts = json2ts;
window.json2ts.parse = parser_1.parse;
window.json2ts.transform = transformer_1.transform;
window.json2ts.print = printer_1.print;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLCtCQUFpQztBQUNqQyxtQ0FBK0I7QUE2RDNCLGdCQTdESSxjQUFLLENBNkRKO0FBNURULHFDQUE4QztBQTZEMUMsZ0JBN0RJLGVBQUssQ0E2REo7QUE1RFQsNkNBQXdDO0FBNkRwQyxvQkE3REksdUJBQVMsQ0E2REo7QUE1RGIsNkRBQXlEO0FBUzVDLFFBQUEsUUFBUSxHQUFHO0lBQ3BCLE1BQU0sRUFBRSxHQUFHO0lBQ1gsUUFBUSxFQUFFLFlBQVk7Q0FDekIsQ0FBQztBQUVGLGlCQUF3QixlQUF1QixFQUFFLE9BQTJCO0lBQTNCLHdCQUFBLEVBQUEsWUFBMkI7SUFDeEUsSUFBTSxhQUFhLGdCQUNaLGdCQUFRLEVBQ1IsT0FBTyxDQUNiLENBQUM7SUFDSSxJQUFBLG1EQUEwRCxFQUF6RCxnQkFBSyxFQUFFLHdCQUFTLENBQTBDO0lBQ2pFLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDO1FBQzFDLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ3pDLElBQU0sV0FBVyxHQUFHLHVCQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3BELElBQU0sU0FBUyxHQUFHLHdDQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xELElBQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDbkIsQ0FBQztRQUNELFNBQVMsQ0FBQztZQUNOLElBQU0sT0FBTyxHQUFHLHNCQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNqRSxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ25CLENBQUM7SUFDTCxDQUFDO0FBQ0wsQ0FBQztBQW5CRCwwQkFtQkM7QUFFRCxzQkFBNkIsZ0JBQTBCLEVBQUUsT0FBMkI7SUFBM0Isd0JBQUEsRUFBQSxZQUEyQjtJQUNoRixJQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFNLGFBQWEsZ0JBQ1osZ0JBQVEsRUFDUixPQUFPLENBQ2IsQ0FBQztJQUNGLElBQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxVQUFDLEdBQUcsRUFBRSxJQUFJO1FBQ3ZDLElBQUEsd0NBQStDLEVBQTlDLGdCQUFLLEVBQUUsd0JBQVMsQ0FBK0I7UUFDdEQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFNLFdBQVcsR0FBRyx1QkFBUyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsMEJBQTBCO0lBQzlCLENBQUM7SUFFRCxJQUFNLFNBQVMsR0FBRyx3Q0FBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxJQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDM0UsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBcEJELG9DQW9CQztBQVNELEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRSxNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxjQUFLLENBQUM7SUFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsdUJBQVMsQ0FBQztJQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxlQUFLLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtwYXJzZX0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQge3ByaW50LCBwcmludExpdGVyYWx9IGZyb20gXCIuL3ByaW50ZXJcIjtcbmltcG9ydCB7dHJhbnNmb3JtfSBmcm9tIFwiLi90cmFuc2Zvcm1lclwiO1xuaW1wb3J0IHtjb2xsYXBzZUludGVyZmFjZXN9IGZyb20gXCIuL2NvbGxhcHNlLWludGVyZmFjZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBKc29uVHNPcHRpb25zIHtcbiAgICBuYW1lc3BhY2U/OiBzdHJpbmdcbiAgICBmbG93PzogYm9vbGVhblxuICAgIHByZWZpeD86IHN0cmluZ1xuICAgIHJvb3ROYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBwcmVmaXg6IFwiSVwiLFxuICAgIHJvb3ROYW1lOiBcIlJvb3RPYmplY3RcIlxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGpzb24ydHModmFsaWRKc29uU3RyaW5nOiBzdHJpbmcsIG9wdGlvbnM6IEpzb25Uc09wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICB9O1xuICAgIGNvbnN0IHtzdGFjaywgaW5wdXRLaW5kfSA9IHBhcnNlKHZhbGlkSnNvblN0cmluZywgbWVyZ2VkT3B0aW9ucyk7XG4gICAgc3dpdGNoIChpbnB1dEtpbmQpIHtcbiAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycmF5TGl0ZXJhbEV4cHJlc3Npb246XG4gICAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbjoge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm0oc3RhY2ssIG1lcmdlZE9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgZmxhdHRlbmVkID0gY29sbGFwc2VJbnRlcmZhY2VzKHRyYW5zZm9ybWVkKTtcbiAgICAgICAgICAgIGNvbnN0IHByaW50ZWQgPSBwcmludChmbGF0dGVuZWQsIGlucHV0S2luZCwgbWVyZ2VkT3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gcHJpbnRlZDtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBjb25zdCBwcmludGVkID0gcHJpbnRMaXRlcmFsKHN0YWNrWzBdLCBpbnB1dEtpbmQsIG1lcmdlZE9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHByaW50ZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqc29uMnRzTXVsdGkodmFsaWRKc29uU3RyaW5nczogc3RyaW5nW10sIG9wdGlvbnM6IEpzb25Uc09wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3QgaW5wdXRLaW5kcyA9IG5ldyBTZXQoW10pO1xuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmRlZmF1bHRzLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgfTtcbiAgICBjb25zdCBqb2luZWQgPSB2YWxpZEpzb25TdHJpbmdzLnJlZHVjZSgoYWxsLCBqc29uKSA9PiB7XG4gICAgICAgIGNvbnN0IHtzdGFjaywgaW5wdXRLaW5kfSA9IHBhcnNlKGpzb24sIG1lcmdlZE9wdGlvbnMpO1xuICAgICAgICBpbnB1dEtpbmRzLmFkZChpbnB1dEtpbmQpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybShzdGFjaywgbWVyZ2VkT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBhbGwuY29uY2F0KHRyYW5zZm9ybWVkKTtcbiAgICB9LCBbXSk7XG5cbiAgICBpZiAoaW5wdXRLaW5kcy5zaXplID4gMSkge1xuICAgICAgICAvLyB0b2RvIGhhbmRsZSBtaXhlZCB0eXBlc1xuICAgIH1cblxuICAgIGNvbnN0IGZsYXR0ZW5lZCA9IGNvbGxhcHNlSW50ZXJmYWNlcyhqb2luZWQpO1xuICAgIGNvbnN0IHByaW50ZWQgPSBwcmludChmbGF0dGVuZWQsIEFycmF5LmZyb20oaW5wdXRLaW5kcylbMF0sIG1lcmdlZE9wdGlvbnMpO1xuICAgIHJldHVybiBwcmludGVkO1xufVxuXG5leHBvcnQge1xuICAgIHBhcnNlLFxuICAgIHByaW50LFxuICAgIHRyYW5zZm9ybVxufVxuXG5kZWNsYXJlIHZhciB3aW5kb3c7XG5pZiAoKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSAmJiAoKHR5cGVvZiB3aW5kb3cuanNvbjJ0cykgPT09ICd1bmRlZmluZWQnKSkge1xuICAgIHdpbmRvdy5qc29uMnRzID0ganNvbjJ0cztcbiAgICB3aW5kb3cuanNvbjJ0cy5wYXJzZSA9IHBhcnNlO1xuICAgIHdpbmRvdy5qc29uMnRzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICB3aW5kb3cuanNvbjJ0cy5wcmludCA9IHByaW50O1xufVxuIl19