UNPKG

ts-api-core

Version:

Nodejs api framework core

87 lines 4.49 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 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) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseRouteGraphWrapper = void 0; const apis_1 = require("../base/apis"); const error_1 = require("../base/error"); const result_code_1 = require("../base/result.code"); const base_route_raw_wrapper_1 = require("./base.route.raw.wrapper"); const base_wrapper_1 = require("./base.wrapper"); /** * 动态执行 `GraphQL` 请求数据加工基类 */ class BaseRouteGraphWrapper extends base_route_raw_wrapper_1.BaseRouteRawWrapper { constructor() { super(...arguments); this.TAG = "wrapper.graph"; } executeRequest(context) { const _super = Object.create(null, { getRequestArgsItem: { get: () => super.getRequestArgsItem }, executeRequest: { get: () => super.executeRequest } }); return __awaiter(this, void 0, void 0, function* () { const config = context.route.config ? context.route.config : undefined; if (config) { if (!config.name) { throw new error_1.SysError("没有指定要执行的GraphQL查询名称", this.TAG, result_code_1.ResultCode.E_Valid_Param_NoFindConfig); } if (!config.query) { throw new error_1.SysError("没有指定要执行的GraphQL查询语句", this.TAG, result_code_1.ResultCode.E_Valid_Param_NoFindConfig); } let api = apis_1.API_Graphql_Execute; if (context.route.apis) { if (Array.isArray(context.route.apis)) { throw new error_1.SysError("GraphQL查询时数据源 api 不允许使用数组的方式,必须是 String 类型", this.TAG, result_code_1.ResultCode.E_Valid_Param_NoFindConfig); } api = context.route.apis; } // 动态执行 wrapper 中指定的函数 if (config.args) { const args = {}; config.args.forEach((item) => { const v = _super.getRequestArgsItem.call(this, context, item, 1); args[item.name] = v; }); return this.callGraphQL(context, config, args, api); } else { return this.callGraphQL(context, config, undefined, api); } } return _super.executeRequest.call(this, context); }); } /** 发起 GraphQL 查询请求 */ callGraphQL(context, config, args, api) { var _a; return __awaiter(this, void 0, void 0, function* () { const body = { name: config.name, query: config.query, args }; if (config.operationName) { body.operationName = config.operationName; } const httpRequest = new base_wrapper_1.HttpPost(api, body); const [data, reqid] = yield new base_wrapper_1.BaseWrapper(context).requestApi(httpRequest); const rawData = ((_a = context.route.resp) === null || _a === void 0 ? void 0 : _a.src) ? data[context.route.resp.src] : data; // config.raw 未设置或为真(1或true)时直接使用 rawData const result = config.raw === undefined || config.raw === 1 || config.raw === true ? rawData : this.parserApiResult(context, context.route.resp, rawData); return new base_wrapper_1.WrapperResult(result, reqid); }); } } exports.BaseRouteGraphWrapper = BaseRouteGraphWrapper; //# sourceMappingURL=base.route.graph.wrapper.js.map