UNPKG

gapi-cli

Version:

Gapi command line interface

106 lines (105 loc) 5.69 kB
#! /usr/bin/env node "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const typedi_1 = require("typedi"); const args_service_1 = require("../core/services/args.service"); const exec_service_1 = require("../core/services/exec.service"); const config_service_1 = require("../core/services/config.service"); const fs_1 = require("fs"); let SchemaTask = class SchemaTask { constructor() { this.execService = typedi_1.Container.get(exec_service_1.ExecService); this.argsService = typedi_1.Container.get(args_service_1.ArgsService); this.configService = typedi_1.Container.get(config_service_1.ConfigService); } run() { return __awaiter(this, void 0, void 0, function* () { this.folder = this.configService.config.config.schema.introspectionOutputFolder; this.endpoint = this.configService.config.config.schema.introspectionEndpoint; this.pattern = this.configService.config.config.schema.pattern; this.node_modules = __dirname.replace('tasks', 'node_modules'); this.bashFolder = __dirname.replace('tasks', 'bash'); if (process.argv[3] === 'introspect') { this.createDir(); yield this.generateSchema(); console.log(`Typings introspection based on GAPI Schema created inside folder: ${this.folder}/index.d.ts`); } if (process.argv[3] === 'collect' || this.argsService.args.includes('--collect-documents')) { this.createDir(); yield this.collectQueries(); console.log(`Schema documents created inside folder: ${this.folder}/documents.json`); } console.log(`To change export folder for this command you need to check this link https://github.com/Stradivario/gapi-cli/wiki/schema`); }); } createDir() { if (!fs_1.existsSync(this.folder)) { fs_1.mkdirSync(this.folder); } } collectQueries() { return __awaiter(this, void 0, void 0, function* () { yield this.execService.call(`node ${this.node_modules}/graphql-document-collector/bin/graphql-document-collector '${this.pattern ? this.pattern : '**/*.graphql'}' > ${this.folder}/documents-temp.json`); const readDocumentsTemp = fs_1.readFileSync(`${this.folder}/documents-temp.json`, 'utf-8'); if (this.argsService.args.includes('--collect-types')) { this.generateTypes(readDocumentsTemp); } const parsedDocuments = `/* tslint:disable */ \n export const DOCUMENTS = ${readDocumentsTemp}`; fs_1.writeFileSync(`${this.folder}/documents.ts`, parsedDocuments, 'utf8'); fs_1.unlinkSync(`${this.folder}/documents-temp.json`); }); } generateSchema() { return __awaiter(this, void 0, void 0, function* () { yield this.execService.call(`export NODE_TLS_REJECT_UNAUTHORIZED=0 && node ${this.node_modules}/apollo-codegen/lib/cli.js introspect-schema ${this.endpoint} --output ${this.folder}/schema.json`, { async: true }); yield this.execService.call(`export NODE_TLS_REJECT_UNAUTHORIZED=0 && node ${this.bashFolder}/gql2ts/index.js ${this.folder}/schema.json -o ${this.folder}/index.ts`, { async: true }); }); } generateTypes(readDocumentsTemp) { return __awaiter(this, void 0, void 0, function* () { let types = 'export type DocumentTypes =\n | '; const documents = Object.keys(JSON.parse(readDocumentsTemp)); let count = 0; documents.forEach(key => { count++; const n = key.lastIndexOf('/'); const result = key.substring(n + 1); if (result === 'ListMovies.graphql') { return; } if (result === 'Place.graphql') { return; } if (result === 'Movie.graphql') { return; } if (documents.length === count) { types += `'${result}';`; } else { types += `'${result}'\n | `; } }); console.log(types); fs_1.writeFileSync(`${this.folder}/documentTypes.ts`, types, 'utf8'); }); } }; SchemaTask = __decorate([ typedi_1.Service() ], SchemaTask); exports.SchemaTask = SchemaTask;