UNPKG

ern-api-gen

Version:

Electrode Native API generator

203 lines (199 loc) 7.11 kB
"use strict"; 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()); }); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) t[p[i]] = s[p[i]]; return t; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); const ern_core_1 = require("ern-core"); const index_1 = require("./index"); const Constants_1 = require("./Constants"); exports.GENERATE = [ ['android', 'ERNAndroid'], ['javascript', 'ERNES6'], ['IOS', 'ERNSwift'], ]; function generateSwagger(_a, outFolder) { var { apiSchemaPath = Constants_1.MODEL_FILE, name, namespace = '' } = _a, optional = __rest(_a, ["apiSchemaPath", "name", "namespace"]); return __awaiter(this, void 0, void 0, function* () { const inputSpec = path_1.default.resolve(outFolder, apiSchemaPath); const shared = Object.assign({ apiPackage: `${namespace}.api`, description: optional.apiDescription, groupId: namespace, inputSpec, modelPackage: `${namespace}.model`, projectVersion: optional.apiVersion, version: optional.apiVersion }, optional); for (const [projectName, lang] of exports.GENERATE) { const cc = new index_1.CodegenConfigurator(Object.assign({}, shared, { lang, outputDir: outFolder + '/' + projectName, projectName })); const opts = yield cc.toClientOptInput(); new index_1.DefaultGenerator().opts(opts).generate(); } }); } exports.generateSwagger = generateSwagger; function generatePackageJson(_a) { var { npmScope, reactNativeVersion, apiVersion = '1.0.0', apiDescription, apiAuthor, apiLicense, bridgeVersion = '', packageName } = _a, conf = __rest(_a, ["npmScope", "reactNativeVersion", "apiVersion", "apiDescription", "apiAuthor", "apiLicense", "bridgeVersion", "packageName"]); return JSON.stringify({ author: apiAuthor, dependencies: { 'react-native-electrode-bridge': `${bridgeVersion.split('.')[0]}.${bridgeVersion.split('.')[1]}.x`, }, description: apiDescription, devDependencies: { 'flow-bin': Constants_1.FLOW_BIN_VERSION, }, ern: { message: conf, moduleType: `${ern_core_1.ModuleTypes.API}`, }, keywords: [`${ern_core_1.ModuleTypes.API}`], license: apiLicense, main: 'javascript/src/index.js', name: npmScope ? `@${npmScope}/${packageName}` : packageName, scripts: { flow: 'flow', }, version: apiVersion, }, null, 2); } exports.generatePackageJson = generatePackageJson; function generateInitialSchema({ namespace, apiSchemaPath, }) { return __awaiter(this, void 0, void 0, function* () { return apiSchemaPath && fs_1.default.existsSync(apiSchemaPath) ? ern_core_1.fileUtils.readFile(apiSchemaPath) : ` { "swagger": "2.0", "info": { "description": "Walmart Item Module", "title": "WalmartItem", "contact": { "name": "ERN Mobile Platform Team" } }, "paths": { "/items": { "get": { "tags": [ "WalmartItem" ], "description": "Returns all items from the system that the user has access to", "operationId": "findItems", "parameters": [{ "name": "limit", "in": "query", "description": "maximum number of results to return", "required": false, "type": "integer", "format": "int32" }], "responses": { "200": { "description": "Item response", "schema": { "type": "array", "items": { "$ref": "#/definitions/Item" } } } } }, "post": { "tags": [ "WalmartItem" ], "description": "Creates a Item in the store.", "operationId": "addItem", "parameters": [{ "name": "item", "in": "body", "description": "Item to add", "required": true, "schema": { "$ref": "#/definitions/Item" } }], "responses": { "200": { "schema": { "type": "boolean" } } } } }, "event/itemAdded": { "event": { "tags": [ "WalmartItem" ], "operationId": "itemAdded", "parameters": [{ "name": "itemId", "in": "path", "description": "Event to notify new item added", "required": true, "type": "string" }] } } }, "definitions": { "Item": { "type": "object", "required": [ "name", "id" ], "properties": { "id": { "type": "integer", "format": "int64" }, "name": { "type": "string" }, "desc": { "type": "string" } } } } } `; }); } exports.generateInitialSchema = generateInitialSchema; function generateFlowConfig() { return ` [ignore] [include] [libs] [lints] [options] `; } exports.generateFlowConfig = generateFlowConfig; function generateProject(config = {}, outFolder) { return __awaiter(this, void 0, void 0, function* () { yield ern_core_1.fileUtils.writeFile(path_1.default.join(outFolder, Constants_1.PKG_FILE), generatePackageJson(config)); yield ern_core_1.fileUtils.writeFile(path_1.default.join(outFolder, Constants_1.MODEL_FILE), yield generateInitialSchema(config)); yield ern_core_1.fileUtils.writeFile(path_1.default.join(outFolder, Constants_1.FLOW_CONFIG_FILE), generateFlowConfig()); yield generateSwagger(config, outFolder); }); } exports.default = generateProject; //# sourceMappingURL=generateProject.js.map