From 1ac6eed941e0e14be7ca287209e47fa435abe157 Mon Sep 17 00:00:00 2001 From: joelchu Date: Wed, 6 Nov 2019 14:36:06 +0800 Subject: [PATCH 1/3] add clean dir before jwt tet --- packages/node-client/package.json | 2 +- packages/node-client/tests/jwt.test.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 25c9e7e6..fd53c816 100755 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -55,7 +55,7 @@ }, "devDependencies": { "ava": "^2.4.0", - "jsonql-contract": "^1.8.1", + "jsonql-contract": "^1.8.2", "jsonql-koa": "^1.4.0", "jsonql-ws-server": "^1.3.5", "nyc": "^14.1.1", diff --git a/packages/node-client/tests/jwt.test.js b/packages/node-client/tests/jwt.test.js index f8342956..1ed43f4a 100644 --- a/packages/node-client/tests/jwt.test.js +++ b/packages/node-client/tests/jwt.test.js @@ -13,6 +13,9 @@ const port = 8890; const username = 'joel'; test.before(async t => { + // make sure the folder is clean + fsx.removeSync(contractDir) + const { stop } = await server(port, { contractDir, keysDir, -- Gitee From 8801bf7d5d0b573f12d83ff35731f519862f405b Mon Sep 17 00:00:00 2001 From: joelchu Date: Wed, 6 Nov 2019 15:33:32 +0800 Subject: [PATCH 2/3] Add a new combine split contract generator --- packages/contract-cli/extra.js | 19 ++++- packages/contract-cli/package.json | 5 +- packages/contract-cli/split.js | 26 +++++++ .../contract-cli/tests/split-task.test.js | 71 ++++++++++--------- packages/koa/contract.js | 8 +-- 5 files changed, 87 insertions(+), 42 deletions(-) create mode 100644 packages/contract-cli/split.js diff --git a/packages/contract-cli/extra.js b/packages/contract-cli/extra.js index 3037529e..695923b5 100644 --- a/packages/contract-cli/extra.js +++ b/packages/contract-cli/extra.js @@ -3,6 +3,8 @@ // so make this available in different places const fsx = require('fs-extra') const { join } = require('path') +const nbSplitTasks = require('nb-split-tasks') + const contractApi = require('./index') const { DEFAULT_CONTRACT_FILE_NAME, PUBLIC_CONTRACT_FILE_NAME } = require('jsonql-constants') @@ -42,8 +44,23 @@ const contractGenerator = function(opts, pub = false, start = false) { }) } +/** + * Export a new function that will call the split.js file + * and run the call in the another process + * @param {object} config configuration + * @param {boolean} [pub=false] default private contract, true for public + * @return {promise} resolve the contract + */ +const splitContractGenerator = function(config, pub = false) { + const pathToFn = join(__dirname, 'split.js') + const args = [config, pub] + return nbSplitTasks(pathToFn, [args], 'object') +} + + // export module.exports = { contractGenerator, - readContract + readContract, + splitContractGenerator } diff --git a/packages/contract-cli/package.json b/packages/contract-cli/package.json index 6a401d9b..9c383f62 100755 --- a/packages/contract-cli/package.json +++ b/packages/contract-cli/package.json @@ -1,13 +1,14 @@ { "name": "jsonql-contract", - "version": "1.8.2", + "version": "1.8.3", "description": "JS API / command line tool to generate the contract.json for jsonql", "main": "index.js", "files": [ "src", "cli.js", "index.js", - "extra.js" + "extra.js", + "split.js" ], "scripts": { "dev": "DEBUG=jsonql-contract:* node ./test.js", diff --git a/packages/contract-cli/split.js b/packages/contract-cli/split.js new file mode 100644 index 00000000..301fbd3b --- /dev/null +++ b/packages/contract-cli/split.js @@ -0,0 +1,26 @@ +// try to create a self reference split-task file +const { contractGenerator, readContract } = require('./extra') + +/** + * For split task to import this method + * @param {object} config configuration + * @param {boolean} pub public or not + * @return {promise} resolve the contract + */ +module.exports = function splitGetContract(config, pub) { + return new Promise((resolver, rejecter) => { + if (config) { + let contract = readContract(config.contractDir, pub) + if (contract !== false) { + return resolver(contract) + } + contractGenerator(config, pub) + .then(contract => { + resolver(contract) + }) + .catch(error => { + rejecter(error) + }) + } + }) +} diff --git a/packages/contract-cli/tests/split-task.test.js b/packages/contract-cli/tests/split-task.test.js index 4678a173..6feaedde 100644 --- a/packages/contract-cli/tests/split-task.test.js +++ b/packages/contract-cli/tests/split-task.test.js @@ -5,9 +5,12 @@ const { join } = require('path') const debug = require('debug')('jsonql-contract:test:split') const { EXT } = require('jsonql-constants') const nbSplitTasks = require('nb-split-tasks') +const fsx = require('fs-extra') // import method frr testing const { getResolverFiles } = require('../src/generator/read-files-out-contract') const { splitTask } = require('../src/generator/split-task') +const { splitContractGenerator } = require('../extra') + const { applyDefaultOptions } = require('../src') const { getResolver, @@ -16,50 +19,48 @@ const { } = require('../src/generator/get-resolver') const resolverDir = join(__dirname, 'fixtures', 'koa-resolvers') +const contractDir = join(__dirname, 'tmp', 'split-test') test.before(t => { - + fsx.removeSync(contractDir) }) -test.cb.skip(`First test the splitTask in a different environment`, t => { - t.plan(1) - const pathToFn = join(__dirname, '..', 'src', 'generator', 'sub', 'test.js') - let args = []; - for (let i=0; i<10; ++i) { - args.push([{idx: i+1}]) - } - - nbSplitTasks(pathToFn, args, 'array') - .then(result => { - t.true(Array.isArray(result)) - t.end() - }) +test.after(t=> { + fsx.removeSync(contractDir) }) test.cb(`It should able to split the task and return an array`, t => { t.plan(2) - applyDefaultOptions({ - resolverDir - }) - .then(config => { - return getResolverFiles(resolverDir, EXT) - .then(files => { - // prepare the payloads - t.truthy(files.length) - // create payload for task - const payload = { - files, - config, - resolverDir, // we should take this option out later - fileType: EXT // this also should be taken out - } - return splitTask('pre', payload) - }) - .then(result => { - debug(result) - t.pass() - t.end() + applyDefaultOptions({ resolverDir }) + .then(config => { + return getResolverFiles(resolverDir, EXT) + .then(files => { + // prepare the payloads + t.truthy(files.length) + // create payload for task + const payload = { + files, + config, + resolverDir, // we should take this option out later + fileType: EXT // this also should be taken out + } + return splitTask('pre', payload) + }) + .then(result => { + debug(result) + t.pass() + t.end() + }) }) +}) + +test.only(`It should able to call a self reference splitContractGenerator`, async t => { + const contract = await splitContractGenerator({ + resolverDir, + contractDir }) + + t.true(fsx.existsSync(join(contractDir, 'contract.json'))) + }) diff --git a/packages/koa/contract.js b/packages/koa/contract.js index 2bf5d075..d05b99e7 100644 --- a/packages/koa/contract.js +++ b/packages/koa/contract.js @@ -1,8 +1,8 @@ // @1.1.4 We move the contract generator to the top level // so you could do import generator from 'jsonql-koa/contract' // and pre-generate the contract to supply both the koa / ws setup -const { configCheck } = require('./src'); -const contractApi = require('jsonql-contract'); +const { configCheck } = require('./src') +const contractApi = require('jsonql-contract') /** * Wrap this in a promise @@ -28,5 +28,5 @@ module.exports = function(config, pub = false) { resolverDir, enableAuth }) - ); -}; + ) +} -- Gitee From df1d319c066a47571362d3e68c474f650425d0db Mon Sep 17 00:00:00 2001 From: joelchu Date: Wed, 6 Nov 2019 15:43:48 +0800 Subject: [PATCH 3/3] the new split contract generator test and ready --- packages/contract-cli/extra.js | 4 +++- packages/contract-cli/tests/split-task.test.js | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/contract-cli/extra.js b/packages/contract-cli/extra.js index 695923b5..edde258a 100644 --- a/packages/contract-cli/extra.js +++ b/packages/contract-cli/extra.js @@ -54,7 +54,9 @@ const contractGenerator = function(opts, pub = false, start = false) { const splitContractGenerator = function(config, pub = false) { const pathToFn = join(__dirname, 'split.js') const args = [config, pub] - return nbSplitTasks(pathToFn, [args], 'object') + const returnType = config.returnAs === 'json' ? 'object' : 'array' + return nbSplitTasks(pathToFn, [args], returnType) + .then(contract => returnType === 'array' ? contract[0] : contract) } diff --git a/packages/contract-cli/tests/split-task.test.js b/packages/contract-cli/tests/split-task.test.js index 6feaedde..e1363dc3 100644 --- a/packages/contract-cli/tests/split-task.test.js +++ b/packages/contract-cli/tests/split-task.test.js @@ -58,9 +58,13 @@ test.cb(`It should able to split the task and return an array`, t => { test.only(`It should able to call a self reference splitContractGenerator`, async t => { const contract = await splitContractGenerator({ resolverDir, - contractDir + contractDir, + returnAs: 'json' }) - t.true(fsx.existsSync(join(contractDir, 'contract.json'))) + // debug(contract) + t.pass() + // if return as is NOT json then it will be the path to the json + // t.true(fsx.existsSync(join(contractDir, 'contract.json'))) }) -- Gitee