json-ts
Version:
Automatically generate Typescript Definition files or Flow types from JSON input
65 lines • 10.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var ts = require("typescript");
var transformer_1 = require("./transformer");
function print(interfaceNodes, inputKind, options) {
var result = ts.createSourceFile('module', '');
var printer = ts.createPrinter({
newLine: ts.NewLineKind.LineFeed,
});
if (inputKind === ts.SyntaxKind.ArrayLiteralExpression) {
var first = interfaceNodes[0];
var newNode = ts.createNode(ts.SyntaxKind.TypeAliasDeclaration);
newNode.type = first.members[0].type;
newNode.name = ts.createIdentifier("" + options.prefix + options.rootName);
interfaceNodes[0] = newNode;
}
if (options.flow) {
var modified = interfaceNodes.map(function (x) {
var newNode = ts.createNode(ts.SyntaxKind.TypeAliasDeclaration);
newNode.modifiers = [ts.createToken(ts.SyntaxKind.ExportKeyword)];
newNode.type = ts.createTypeLiteralNode(x.members);
newNode.name = x.name;
return newNode;
});
var items = modified.map(function (x) {
return printer.printNode(ts.EmitHint.Unspecified, x, result);
}).join('\n') + '\n';
return ['// @flow', items].join('\n');
}
if (options.namespace) {
interfaceNodes.forEach(function (x) {
x.modifiers = [ts.createToken(ts.SyntaxKind.ExportKeyword)];
});
var ns = ts.createModuleDeclaration(undefined, [ts.createToken(ts.SyntaxKind.DeclareKeyword)], ts.createIdentifier(options.namespace), ts.createModuleBlock(interfaceNodes), ts.NodeFlags.Namespace);
return printer.printNode(ts.EmitHint.Unspecified, ns, result) + '\n';
}
return interfaceNodes.map(function (x) {
return printer.printNode(ts.EmitHint.Unspecified, x, result);
})
.join('\n') + '\n';
}
exports.print = print;
function printLiteral(node, kind, options) {
var result = ts.createSourceFile('module', '');
var printer = ts.createPrinter({
newLine: ts.NewLineKind.LineFeed,
});
var newNode = ts.createNode(ts.SyntaxKind.TypeAliasDeclaration);
newNode.type = ts.createNode(transformer_1.kindMap[kind]);
newNode.name = ts.createIdentifier("" + options.prefix + options.rootName);
return printer.printNode(ts.EmitHint.Unspecified, newNode, result);
}
exports.printLiteral = printLiteral;
function wrapper(blocks, options) {
if (options.namespace) {
var lines = [
"declare namespace " + options.namespace + " {"
].concat(blocks.split('\n').map(function (x) { return " " + x; }), [
"}",
]);
return lines.join('\n');
}
return blocks;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmludGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0JBQWlDO0FBQ2pDLDZDQUFpRjtBQUlqRixlQUFzQixjQUFjLEVBQUUsU0FBd0IsRUFBRSxPQUFzQjtJQUVsRixJQUFNLE1BQU0sR0FBSSxFQUFFLENBQUMsZ0JBQXdCLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTFELElBQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDN0IsT0FBTyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUTtLQUNuQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQU0sT0FBTyxHQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDckMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFVLENBQUMsQ0FBQztRQUMzRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNmLElBQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDO1lBQ2pDLElBQU0sT0FBTyxHQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNsRSxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkQsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQztZQUN4QixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUVyQixNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNwQixjQUFjLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQztZQUNwQixDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQ2pDLFNBQVMsRUFDVCxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUM5QyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUN0QyxFQUFFLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEVBQ3BDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUN6QixDQUFDO1FBQ0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN6RSxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRSxDQUFDLENBQUM7U0FDRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNCLENBQUM7QUFsREQsc0JBa0RDO0FBRUQsc0JBQTZCLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTztJQUM1QyxJQUFNLE1BQU0sR0FBSSxFQUFFLENBQUMsZ0JBQXdCLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTFELElBQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDN0IsT0FBTyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUTtLQUNuQyxDQUFDLENBQUM7SUFFSCxJQUFNLE9BQU8sR0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4RSxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMscUJBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBVSxDQUFDLENBQUM7SUFFM0UsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFaRCxvQ0FZQztBQUVELGlCQUFpQixNQUFNLEVBQUUsT0FBTztJQUM1QixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFNLEtBQUs7WUFDUCx1QkFBcUIsT0FBTyxDQUFDLFNBQVMsT0FBSTtpQkFDdkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxPQUFLLENBQUcsRUFBUixDQUFRLENBQUM7WUFDeEMsR0FBRztVQUNOLENBQUM7UUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge0ludGVyZmFjZU5vZGUsIGtpbmRNYXAsIGxvZywgTWVtYmVyTm9kZSwgbmFtZWRQcm9wfSBmcm9tIFwiLi90cmFuc2Zvcm1lclwiO1xuaW1wb3J0IG5lZWRzUXVvdGVzID0gcmVxdWlyZSgnbmVlZHNxdW90ZXMnKTtcbmltcG9ydCB7SnNvblRzT3B0aW9uc30gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50KGludGVyZmFjZU5vZGVzLCBpbnB1dEtpbmQ6IHRzLlN5bnRheEtpbmQsIG9wdGlvbnM6IEpzb25Uc09wdGlvbnMpOiBzdHJpbmcge1xuXG4gICAgY29uc3QgcmVzdWx0ID0gKHRzLmNyZWF0ZVNvdXJjZUZpbGUgYXMgYW55KSgnbW9kdWxlJywgJycpO1xuXG4gICAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoe1xuICAgICAgICBuZXdMaW5lOiB0cy5OZXdMaW5lS2luZC5MaW5lRmVlZCxcbiAgICB9KTtcblxuICAgIGlmIChpbnB1dEtpbmQgPT09IHRzLlN5bnRheEtpbmQuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbikge1xuICAgICAgICBjb25zdCBmaXJzdCA9IGludGVyZmFjZU5vZGVzWzBdO1xuICAgICAgICBjb25zdCBuZXdOb2RlIDogYW55ID0gdHMuY3JlYXRlTm9kZSh0cy5TeW50YXhLaW5kLlR5cGVBbGlhc0RlY2xhcmF0aW9uKTtcbiAgICAgICAgbmV3Tm9kZS50eXBlID0gZmlyc3QubWVtYmVyc1swXS50eXBlO1xuICAgICAgICBuZXdOb2RlLm5hbWUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKGAke29wdGlvbnMucHJlZml4fSR7b3B0aW9ucy5yb290TmFtZX1gKTtcbiAgICAgICAgaW50ZXJmYWNlTm9kZXNbMF0gPSBuZXdOb2RlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmZsb3cpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZWQgPSBpbnRlcmZhY2VOb2Rlcy5tYXAoeCA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdOb2RlIDogYW55ID0gdHMuY3JlYXRlTm9kZSh0cy5TeW50YXhLaW5kLlR5cGVBbGlhc0RlY2xhcmF0aW9uKTtcbiAgICAgICAgICAgIG5ld05vZGUubW9kaWZpZXJzID0gW3RzLmNyZWF0ZVRva2VuKHRzLlN5bnRheEtpbmQuRXhwb3J0S2V5d29yZCldO1xuICAgICAgICAgICAgbmV3Tm9kZS50eXBlID0gdHMuY3JlYXRlVHlwZUxpdGVyYWxOb2RlKHgubWVtYmVycyk7XG4gICAgICAgICAgICBuZXdOb2RlLm5hbWUgPSB4Lm5hbWU7XG4gICAgICAgICAgICByZXR1cm4gbmV3Tm9kZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaXRlbXMgPSBtb2RpZmllZC5tYXAoeCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIHgsIHJlc3VsdCk7XG4gICAgICAgIH0pLmpvaW4oJ1xcbicpICsgJ1xcbic7XG5cbiAgICAgICAgcmV0dXJuIFsnLy8gQGZsb3cnLCBpdGVtc10uam9pbignXFxuJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubmFtZXNwYWNlKSB7XG4gICAgICAgIGludGVyZmFjZU5vZGVzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICB4Lm1vZGlmaWVycyA9IFt0cy5jcmVhdGVUb2tlbih0cy5TeW50YXhLaW5kLkV4cG9ydEtleXdvcmQpXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG5zID0gdHMuY3JlYXRlTW9kdWxlRGVjbGFyYXRpb24oXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBbdHMuY3JlYXRlVG9rZW4odHMuU3ludGF4S2luZC5EZWNsYXJlS2V5d29yZCldLFxuICAgICAgICAgICAgdHMuY3JlYXRlSWRlbnRpZmllcihvcHRpb25zLm5hbWVzcGFjZSksXG4gICAgICAgICAgICB0cy5jcmVhdGVNb2R1bGVCbG9jayhpbnRlcmZhY2VOb2RlcyksXG4gICAgICAgICAgICB0cy5Ob2RlRmxhZ3MuTmFtZXNwYWNlXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgbnMsIHJlc3VsdCkgKyAnXFxuJztcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJmYWNlTm9kZXMubWFwKHggPT4ge1xuICAgICAgICByZXR1cm4gcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIHgsIHJlc3VsdCk7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oJ1xcbicpICsgJ1xcbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludExpdGVyYWwobm9kZSwga2luZCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHJlc3VsdCA9ICh0cy5jcmVhdGVTb3VyY2VGaWxlIGFzIGFueSkoJ21vZHVsZScsICcnKTtcblxuICAgIGNvbnN0IHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKHtcbiAgICAgICAgbmV3TGluZTogdHMuTmV3TGluZUtpbmQuTGluZUZlZWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBuZXdOb2RlIDogYW55ID0gdHMuY3JlYXRlTm9kZSh0cy5TeW50YXhLaW5kLlR5cGVBbGlhc0RlY2xhcmF0aW9uKTtcbiAgICBuZXdOb2RlLnR5cGUgPSB0cy5jcmVhdGVOb2RlKGtpbmRNYXBba2luZF0pO1xuICAgIG5ld05vZGUubmFtZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoYCR7b3B0aW9ucy5wcmVmaXh9JHtvcHRpb25zLnJvb3ROYW1lfWApO1xuXG4gICAgcmV0dXJuIHByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBuZXdOb2RlLCByZXN1bHQpO1xufVxuXG5mdW5jdGlvbiB3cmFwcGVyKGJsb2Nrcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLm5hbWVzcGFjZSkge1xuICAgICAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgICAgICAgIGBkZWNsYXJlIG5hbWVzcGFjZSAke29wdGlvbnMubmFtZXNwYWNlfSB7YCxcbiAgICAgICAgICAgIC4uLmJsb2Nrcy5zcGxpdCgnXFxuJykubWFwKHggPT4gYCAgJHt4fWApLFxuICAgICAgICAgICAgYH1gLFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHJldHVybiBibG9ja3M7XG59XG4iXX0=