From 93e40c2400824159e018b68c6c5ed7a0c8a3cfe9 Mon Sep 17 00:00:00 2001 From: joelchu Date: Tue, 26 Nov 2019 12:45:56 +0800 Subject: [PATCH 1/2] jsonql-resolver to 0.9.9 --- packages/koa/package.json | 2 +- .../middlewares/public-method-middleware.js | 4 ++-- packages/koa/src/options/index.js | 19 ++++++++++------- packages/resolver/package.json | 4 ++-- packages/resolver/src/provide-node-clients.js | 21 ++++++++++++++++--- packages/resolver/tests/clients.test.js | 12 ++++++----- .../tests/fixtures/contract/es/contract.json | 2 +- 7 files changed, 42 insertions(+), 22 deletions(-) diff --git a/packages/koa/package.json b/packages/koa/package.json index 43399f49..171bb401 100644 --- a/packages/koa/package.json +++ b/packages/koa/package.json @@ -74,7 +74,7 @@ "debug": "^4.1.1", "esm": "^3.2.25", "fs-extra": "^8.1.0", - "jsonql-constants": "^1.8.10", + "jsonql-constants": "^1.8.11", "jsonql-contract": "^1.8.4", "jsonql-errors": "^1.1.6", "jsonql-jwt": "^1.3.4", diff --git a/packages/koa/src/middlewares/public-method-middleware.js b/packages/koa/src/middlewares/public-method-middleware.js index 64e0a081..4573f250 100644 --- a/packages/koa/src/middlewares/public-method-middleware.js +++ b/packages/koa/src/middlewares/public-method-middleware.js @@ -2,7 +2,7 @@ // running pass to the auth-middleware otherwise, it will not able to // get to the next one import { QUERY_NAME, MUTATION_NAME, AUTH_TYPE } from 'jsonql-constants' -import { resolveMethod, handleAuthMethods } from 'jsonql-resolver' +import { resolverRenderHandler, handleAuthMethods } from 'jsonql-resolver' import { getDebug, extractParamsFromContract } from '../utils' const debug = getDebug('public-method-middleware') @@ -16,7 +16,7 @@ export default function publicMethodMiddleware(opts) { if (resolverType === QUERY_NAME || resolverType === MUTATION_NAME) { let params = extractParamsFromContract(contract, resolverType, resolverName) if (params.public === true) { - return resolveMethod(ctx, resolverType, opts, contract) + return resolverRenderHandler(ctx, resolverType, opts, contract) } } else if (resolverType === AUTH_TYPE && resolverName === opts.loginHandlerName) { // @BUG some how the contract here becomes true instead of an object diff --git a/packages/koa/src/options/index.js b/packages/koa/src/options/index.js index 9f52a9f9..8aa528d6 100644 --- a/packages/koa/src/options/index.js +++ b/packages/koa/src/options/index.js @@ -6,7 +6,7 @@ import { join, resolve } from 'path' import fsx from 'fs-extra' import _ from 'lodash' -const { CHECKED_KEY } = require('jsonql-constants') +const { CHECKED_KEY, INIT_CONTRACT_PROP_KEY, INIT_CLIENT_PROP_KEY } = require('jsonql-constants') import { checkConfig, isString } from 'jsonql-params-validator' import { rsaPemKeys } from 'jsonql-jwt' import { validateClientConfig, clientsGenerator } from 'jsonql-resolver' @@ -36,15 +36,16 @@ const applyGetContract = function(config) { .thru(result => { let [processed, config] = result if (!processed) { - debug(`call initContract`) + debug(`call ${INIT_CONTRACT_PROP_KEY}`) // get resolve later inside the middleware - config.initContract = getContract(config) + config[INIT_CONTRACT_PROP_KEY] = getContract(config) } return config; }) .thru(config => { if (config.withPublicContract) { debug(`call generate public contract`) + // we just let it run and don't wait for it getContract(config, true) } return config; @@ -82,10 +83,11 @@ const applyAuthOptions = function(config) { * @return {object} the modified configuration if there is need for it */ const initNodeClient = function(config) { - - - - // @TODO + const clientConfigs = validateClientConfig(config) + if (clientConfigs !== false) { + debug(`create the clients config at the options level`) + config[INIT_CLIENT_PROP_KEY] = clientsGenerator(clientConfigs) + } return config; } @@ -101,7 +103,8 @@ export function configCheck(config = {}) { debug(`config already checked, pass it through`, time, now - time) return config; } - const fn = chainFns(checkConfig, applyGetContract, applyAuthOptions) + // @TODO should take this bit out for re-use + const fn = chainFns(checkConfig, applyGetContract, applyAuthOptions, initNodeClient) const opts = fn(config, appProps, constProps) // return opts; return injectToFn(opts, CHECKED_KEY, now) diff --git a/packages/resolver/package.json b/packages/resolver/package.json index 922e6b20..07f768cb 100644 --- a/packages/resolver/package.json +++ b/packages/resolver/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-resolver", - "version": "0.9.8", + "version": "0.9.9", "description": "This is NOT for general use, please do not install it directly. This module is part of the jsonql tools supporting modules.", "main": "index.js", "files": [ @@ -27,7 +27,7 @@ }, "dependencies": { "debug": "^4.1.1", - "jsonql-constants": "^1.8.10", + "jsonql-constants": "^1.8.11", "jsonql-errors": "^1.1.6", "jsonql-jwt": "^1.3.4", "jsonql-node-client": "^1.2.4", diff --git a/packages/resolver/src/provide-node-clients.js b/packages/resolver/src/provide-node-clients.js index 714d4757..fa7ea947 100644 --- a/packages/resolver/src/provide-node-clients.js +++ b/packages/resolver/src/provide-node-clients.js @@ -1,4 +1,5 @@ // setup and inject the clients into resolver +const { INIT_CLIENT_PROP_KEY } = require('jsonql-constants') const { injectNodeClient, validateClientConfig, @@ -23,7 +24,8 @@ let hasClientConfig; * @return {function} the resolver with injection if any */ function provideNodeClients(resolver, config) { - return new Promise(resolve => { + return new Promise((resolve, rejecter) => { + // back to the old code if (hasClientConfig === false) { debug(`nothing to inject`) return resolve(resolver) // nothing to do @@ -33,6 +35,17 @@ function provideNodeClients(resolver, config) { debug(`inject client from cache`) return resolve(injectNodeClient(resolver, clients)) } + // new on 0.9.9 check INIT_CLIENT_PROP_KEY from the config + if (config[INIT_CLIENT_PROP_KEY] && config[INIT_CLIENT_PROP_KEY].then) { + debug(`using the new INIT_CLIENT_PROP_KEY methods`) + return config[INIT_CLIENT_PROP_KEY] + .then(_clients => { + clients = _clients + resolve(injectNodeClient(resolver, _clients)) + }) + .catch(rejecter) + } + // pass the check result hasClientConfig = validateClientConfig(config) if (hasClientConfig === false) { debug(`check and nothing to inject`, config) @@ -41,9 +54,11 @@ function provideNodeClients(resolver, config) { debug(`run init clients`) // run init client once clientsGenerator(hasClientConfig) - .then(clients => { - resolve(injectNodeClient(resolver, clients)) + .then(_clients => { + clients = _clients; // cache it + resolve(injectNodeClient(resolver, _clients)) }) + .catch(rejecter) }) } diff --git a/packages/resolver/tests/clients.test.js b/packages/resolver/tests/clients.test.js index 10d1d336..19cca38d 100644 --- a/packages/resolver/tests/clients.test.js +++ b/packages/resolver/tests/clients.test.js @@ -1,10 +1,11 @@ // this is for testing the inject client const test = require('ava') +const { join } = require('path') +const nodeClient = require('jsonql-node-client') const debug = require('debug')('jsonql-resolver:test:clients') +// where is this method moved to? +// const { findClient } = require('../src/utils') const anotherServer = require('./fixtures/another-server') -const nodeClient = require('jsonql-node-client') -const { findClient } = require('../src/utils') -const { join } = require('path') const { executeResolver } = require('../') const readJson = require('./fixtures/read-json') const { createQuery } = require('jsonql-utils') @@ -31,7 +32,7 @@ test.after(t => { // remove the client contract , because that's part of the test rmdirs(join(baseDir, 'contract', 'nodeClient0')) }) - +/* test(`Just testing the filter / reduce method`, t => { let name = 'name0' let clients = [{ name }] @@ -46,6 +47,7 @@ test(`Test the nodeClient is working correctly with the configuration`, async t const result = await client.query.anotherService(`One`) t.truthy(result.indexOf('another')) }) +*/ test.only(`The callMsService resolver should able to call another jsonql service`, async t => { @@ -53,7 +55,7 @@ test.only(`The callMsService resolver should able to call another jsonql service const payload = createQuery(resolverName, ['Joel']) let opts = t.context.opts; - opts.clientConfig = [t.context.clientConfig]; + opts.clientConfig = [t.context.clientConfig] const result = await executeResolver( opts, diff --git a/packages/resolver/tests/fixtures/contract/es/contract.json b/packages/resolver/tests/fixtures/contract/es/contract.json index 9fc01312..b7a0585e 100644 --- a/packages/resolver/tests/fixtures/contract/es/contract.json +++ b/packages/resolver/tests/fixtures/contract/es/contract.json @@ -43,6 +43,6 @@ } }, "auth": {}, - "timestamp": 1574734426, + "timestamp": 1574743546, "sourceType": "module" } -- Gitee From 34f9da1b3466148db5a495ac0351d49f4da5a754 Mon Sep 17 00:00:00 2001 From: joelchu Date: Tue, 26 Nov 2019 12:50:10 +0800 Subject: [PATCH 2/2] integrate the new jsonql-resolver into the middleware for the nodeClient integration --- packages/koa/package.json | 2 +- packages/resolver/tests/fixtures/contract/es/contract.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/koa/package.json b/packages/koa/package.json index 171bb401..2ab52d74 100644 --- a/packages/koa/package.json +++ b/packages/koa/package.json @@ -80,7 +80,7 @@ "jsonql-jwt": "^1.3.4", "jsonql-node-client": "^1.2.4", "jsonql-params-validator": "^1.4.11", - "jsonql-resolver": "^0.9.8", + "jsonql-resolver": "^0.9.9", "jsonql-utils": "^0.8.5", "jsonql-web-console": "^0.4.3", "koa-compose": "^4.1.0", diff --git a/packages/resolver/tests/fixtures/contract/es/contract.json b/packages/resolver/tests/fixtures/contract/es/contract.json index b7a0585e..59602fde 100644 --- a/packages/resolver/tests/fixtures/contract/es/contract.json +++ b/packages/resolver/tests/fixtures/contract/es/contract.json @@ -43,6 +43,6 @@ } }, "auth": {}, - "timestamp": 1574743546, + "timestamp": 1574743733, "sourceType": "module" } -- Gitee