UNPKG

json-ts

Version:

Automatically generate Typescript Definition files or Flow types from JSON input

116 lines 12.6 kB
#!/usr/bin/env node "use strict"; 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 minimist = require("minimist"); var stdin = require("get-stdin"); var _1 = require("./"); var immutable_1 = require("immutable"); var path_1 = require("path"); var fs_1 = require("fs"); var argv = minimist(process.argv.slice(2)); // unique input var inputs = immutable_1.OrderedSet(argv._); // defaults var defaults = { stdin: false, namespace: false, flow: false }; // merged options with defaults var options = __assign({}, defaults, argv); if (options.stdin) { stdin().then(function (str) { if (str === '') { console.error('no input provided'); } else { try { JSON.parse(str); console.log(_1.json2ts(str, options)); } catch (e) { console.error('Invalid JSON'); console.error(e.message); } } }) .catch(function (err) { console.error(err); }); } else { if (inputs.size === 0) { console.error('Oops! You provided no inputs'); console.log("\nYou can pipe JSON to this program with the --stdin flag:\n\n curl http://example.com/some-json | json-ts --stdin\n \nOr, provide path names:\n\n json-ts path/to/my-file.json\n "); } else { var queue = inputs .map(function (input) { return { input: input, parsed: path_1.parse(input), }; }) .map(function (incoming) { return { incoming: incoming, resolved: resolveInput(incoming, process.cwd()) }; }); var withErrors = queue.filter(function (x) { return x.resolved.errors.length > 0; }); var withoutErrors = queue.filter(function (x) { return x.resolved.errors.length === 0; }); if (withErrors.size) { console.log('Sorry, there were errors with your input.'); withErrors.forEach(function (item) { console.log(''); console.log(" " + item.incoming.input + ":"); console.log(' ', item.resolved.errors[0].error.message); }); } else { var strings = withoutErrors.map(function (item) { return item.resolved.content; }); console.log(_1.json2tsMulti(strings, options)); } } } function resolveInput(incoming, cwd) { var absolute = path_1.join(cwd, incoming.parsed.dir, incoming.parsed.base); if (!fs_1.existsSync(absolute)) { return { errors: [{ kind: 'FileNotFound', error: new Error("File not found") }] }; } var data = fs_1.readFileSync(absolute, 'utf8'); try { JSON.parse(data); return { errors: [], content: data }; } catch (e) { return { errors: [{ kind: 'InvalidJson', error: e }] }; } } // console.log('options:', options); // console.log('inputs:', inputs); // console.log('args', argv); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBLG1DQUFzQztBQUN0QyxpQ0FBb0M7QUFDcEMsdUJBQXlDO0FBQ3pDLHVDQUE2QztBQUM3Qyw2QkFBNkM7QUFDN0MseUJBQXNEO0FBQ3RELElBQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTdDLGVBQWU7QUFDZixJQUFNLE1BQU0sR0FBRyxzQkFBVSxDQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUUxQyxXQUFXO0FBQ1gsSUFBTSxRQUFRLEdBQUc7SUFDYixLQUFLLEVBQUUsS0FBSztJQUNaLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLElBQUksRUFBRSxLQUFLO0NBQ2QsQ0FBQztBQUVGLCtCQUErQjtBQUMvQixJQUFNLE9BQU8sZ0JBQ04sUUFBUSxFQUNSLElBQUksQ0FDVixDQUFDO0FBRUYsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEIsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQUMsR0FBVztRQUNyQixFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixJQUFJLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsT0FBTyxDQUFDLEtB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LElBQUksRUFBRSxjQUFjO29CQUNwQixLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUM7aUJBQ3JDLENBQUM7U0FDTCxDQUFBO0lBQ0wsQ0FBQztJQUNELElBQU0sSUFBSSxHQUFHLGlCQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLElBQUksQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDO1lBQ0gsTUFBTSxFQUFFLEVBQUU7WUFDVixPQUFPLEVBQUUsSUFBSTtTQUNoQixDQUFBO0lBQ0wsQ0FBQztJQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxNQUFNLENBQUM7WUFDSCxNQUFNLEVBQUUsQ0FBQztvQkFDTCxJQUFJLEVBQUUsYUFBYTtvQkFDbkIsS0FBSyxFQUFFLENBQUM7aUJBQ1gsQ0FBQztTQUNMLENBQUE7SUFDTCxDQUFDO0FBQ0wsQ0FBQztBQUNELG9DQUFvQztBQUNwQyxrQ0FBa0M7QUFDbEMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IG1pbmltaXN0ID0gcmVxdWlyZSgnbWluaW1pc3QnKTtcbmltcG9ydCBzdGRpbiA9IHJlcXVpcmUoJ2dldC1zdGRpbicpO1xuaW1wb3J0IHtqc29uMnRzLCBqc29uMnRzTXVsdGl9IGZyb20gJy4vJztcbmltcG9ydCB7ZnJvbUpTLCBPcmRlcmVkU2V0fSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHtqb2luLCBwYXJzZSwgUGFyc2VkUGF0aH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGUsIHJlYWRGaWxlU3luY30gZnJvbSBcImZzXCI7XG5jb25zdCBhcmd2ID0gbWluaW1pc3QocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKTtcblxuLy8gdW5pcXVlIGlucHV0XG5jb25zdCBpbnB1dHMgPSBPcmRlcmVkU2V0PHN0cmluZz4oYXJndi5fKTtcblxuLy8gZGVmYXVsdHNcbmNvbnN0IGRlZmF1bHRzID0ge1xuICAgIHN0ZGluOiBmYWxzZSxcbiAgICBuYW1lc3BhY2U6IGZhbHNlLFxuICAgIGZsb3c6IGZhbHNlXG59O1xuXG4vLyBtZXJnZWQgb3B0aW9ucyB3aXRoIGRlZmF1bHRzXG5jb25zdCBvcHRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRzLFxuICAgIC4uLmFyZ3Zcbn07XG5cbmlmIChvcHRpb25zLnN0ZGluKSB7XG4gICAgc3RkaW4oKS50aGVuKChzdHI6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoc3RyID09PSAnJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignbm8gaW5wdXQgcHJvdmlkZWQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgSlNPTi5wYXJzZShzdHIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGpzb24ydHMoc3RyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBKU09OJyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH0pXG59IGVsc2Uge1xuICAgIGlmIChpbnB1dHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdPb3BzISBZb3UgcHJvdmlkZWQgbm8gaW5wdXRzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcbllvdSBjYW4gcGlwZSBKU09OIHRvIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSAtLXN0ZGluIGZsYWc6XG5cbiAgICBjdXJsIGh0dHA6Ly9leGFtcGxlLmNvbS9zb21lLWpzb24gfCBqc29uLXRzIC0tc3RkaW5cbiAgICBcbk9yLCBwcm92aWRlIHBhdGggbmFtZXM6XG5cbiAgICBqc29uLXRzIHBhdGgvdG8vbXktZmlsZS5qc29uXG4gICAgICAgIGApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gaW5wdXRzXG4gICAgICAgICAgICAubWFwKGlucHV0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkOiBwYXJzZShpbnB1dCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKGluY29taW5nID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpbmNvbWluZyxcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWQ6IHJlc29sdmVJbnB1dChpbmNvbWluZywgcHJvY2Vzcy5jd2QoKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB3aXRoRXJyb3JzID0gcXVldWUuZmlsdGVyKHggPT4geC5yZXNvbHZlZC5lcnJvcnMubGVuZ3RoID4gMCk7XG4gICAgICAgIGNvbnN0IHdpdGhvdXRFcnJvcnMgPSBxdWV1ZS5maWx0ZXIoeCA9PiB4LnJlc29sdmVkLmVycm9ycy5sZW5ndGggPT09IDApO1xuICAgICAgICBpZiAod2l0aEVycm9ycy5zaXplKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU29ycnksIHRoZXJlIHdlcmUgZXJyb3JzIHdpdGggeW91ciBpbnB1dC4nKTtcbiAgICAgICAgICAgIHdpdGhFcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2l0ZW0uaW5jb21pbmcuaW5wdXR9OmApO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCcgICAgJywgaXRlbS5yZXNvbHZlZC5lcnJvcnNbMF0uZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5ncyA9IHdpdGhvdXRFcnJvcnMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnJlc29sdmVkLmNvbnRlbnQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGpzb24ydHNNdWx0aSgoc3RyaW5ncyBhcyBhbnkpLCBvcHRpb25zKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmludGVyZmFjZSBJSW5jb21pbmdJbnB1dCB7XG4gICAgaW5wdXQ6IHN0cmluZyxcbiAgICBwYXJzZWQ6IFBhcnNlZFBhdGgsXG59XG5pbnRlcmZhY2UgSW5wdXRFcnJvciB7XG4gICAga2luZDogc3RyaW5nLFxuICAgIGVycm9yOiBFcnJvclxufVxuaW50ZXJmYWNlIElSZXNvbHZlZElucHV0IHtcbiAgICBlcnJvcnM6IElucHV0RXJyb3JbXSxcbiAgICBjb250ZW50Pzogc3RyaW5nXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVJbnB1dChpbmNvbWluZzogSUluY29taW5nSW5wdXQsIGN3ZCk6IElSZXNvbHZlZElucHV0IHtcbiAgICBjb25zdCBhYnNvbHV0ZSA9IGpvaW4oY3dkLCBpbmNvbWluZy5wYXJzZWQuZGlyLCBpbmNvbWluZy5wYXJzZWQuYmFzZSk7XG4gICAgaWYgKCFleGlzdHNTeW5jKGFic29sdXRlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JzOiBbe1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdGaWxlTm90Rm91bmQnLFxuICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoYEZpbGUgbm90IGZvdW5kYClcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHJlYWRGaWxlU3luYyhhYnNvbHV0ZSwgJ3V0ZjgnKTtcbiAgICB0cnkge1xuICAgICAgICBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGRhdGFcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yczogW3tcbiAgICAgICAgICAgICAgICBraW5kOiAnSW52YWxpZEpzb24nLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlXG4gICAgICAgICAgICB9XVxuICAgICAgICB9XG4gICAgfVxufVxuLy8gY29uc29sZS5sb2coJ29wdGlvbnM6Jywgb3B0aW9ucyk7XG4vLyBjb25zb2xlLmxvZygnaW5wdXRzOicsIGlucHV0cyk7XG4vLyBjb25zb2xlLmxvZygnYXJncycsIGFyZ3YpO1xuIl19