UNPKG

@vkontakte/api-schema-typescript-generator

Version:

VK API TypeScript generator

88 lines (83 loc) 4.41 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.main = void 0; const path_1 = __importDefault(require("path")); const chalk_1 = __importDefault(require("chalk")); const perf_hooks_1 = require("perf_hooks"); const cli_1 = require("./cli"); const log_1 = require("./log"); const APITypingsGenerator_1 = require("./generators/APITypingsGenerator"); const helpers_1 = require("./helpers"); const helpMessage = ` Options: ${chalk_1.default.greenBright('--help')} Shows this help. ${chalk_1.default.greenBright('--schemaDir')} The relative path to directory with ${chalk_1.default.bold('methods.json')}, ${chalk_1.default.bold('objects.json')} and ${chalk_1.default.bold('responses.json')} files. ${chalk_1.default.greenBright('--outDir')} The directory where the files will be generated. If you skip this param, script will work in linter mode without emitting files to file system. ${chalk_1.default.bold('Please note')} that this folder will be cleared after starting the generation. ${chalk_1.default.greenBright('--methods')} List of methods to generate responses and all needed objects. Example: - ${chalk_1.default.bold("'*'")} - to generate all responses and objects. - ${chalk_1.default.bold("'messages.*, users.get, groups.isMember'")} - to generate all methods from messages section, users.get and groups.isMember. `; async function main() { console.log(chalk_1.default.bold('VK API Schema TypeScript generator')); const startTime = perf_hooks_1.performance.now(); const args = (0, cli_1.parseArguments)(); let { help, schemaDir, outDir, methods } = args; if (help) { console.log(helpMessage); return; } const helpHint = `Use ${chalk_1.default.greenBright('--help')} to see all options.`; if (!schemaDir) { (0, log_1.consoleLogErrorAndExit)(`You should specify ${chalk_1.default.greenBright('schemaDir')}. ${helpHint}`); return; } if (!outDir) { (0, log_1.consoleLogInfo)(`${chalk_1.default.greenBright('outDir')} option is empty. ${helpHint}`); (0, log_1.consoleLogInfo)('Script will work in linter mode without emitting files to file system.'); } if (!Array.isArray(methods) || !methods.length) { (0, log_1.consoleLogErrorAndExit)(`You should specify ${chalk_1.default.greenBright('methods')}. ${helpHint}`); return; } schemaDir = path_1.default.resolve(schemaDir); outDir = outDir ? path_1.default.resolve(outDir) : ''; // Read and check required schema files const [methodsDefinitions, { definitions: responsesDefinitions }, { definitions: objectsDefinitions }, { errors: errorsDefinitions },] = await Promise.all([ (0, helpers_1.readJSONFile)(path_1.default.resolve(schemaDir, 'methods.json')), (0, helpers_1.readJSONFile)(path_1.default.resolve(schemaDir, 'responses.json')), (0, helpers_1.readJSONFile)(path_1.default.resolve(schemaDir, 'objects.json')), (0, helpers_1.readJSONFile)(path_1.default.resolve(schemaDir, 'errors.json')), ]); if (!Object.keys(methodsDefinitions).length) { (0, log_1.consoleLogErrorAndExit)(`${chalk_1.default.greenBright('responses.json')} file is invalid.`); return; } if (!Object.keys(responsesDefinitions).length) { (0, log_1.consoleLogErrorAndExit)(`${chalk_1.default.greenBright('responses.json')} file is invalid.`); return; } if (!Object.keys(objectsDefinitions).length) { (0, log_1.consoleLogErrorAndExit)(`${chalk_1.default.greenBright('objects.json')} file is invalid.`); return; } const needEmit = !!outDir; const generator = new APITypingsGenerator_1.APITypingsGenerator({ needEmit, outDirPath: outDir, methodsDefinitions, objects: objectsDefinitions, responses: responsesDefinitions, errors: errorsDefinitions, methodsPattern: methods.join(','), }); generator.generate(); const endTime = perf_hooks_1.performance.now(); (0, log_1.consoleLog)(`✨ Done in ${((endTime - startTime) / 1000).toFixed(2)}s.`); } exports.main = main;