From 944a66ceb3861877b3ff3736f431147d9cd218f4 Mon Sep 17 00:00:00 2001 From: joelchu Date: Sun, 22 Sep 2019 16:55:17 +0800 Subject: [PATCH 1/3] just update the prepare statement for jsonql-contract --- packages/contract-cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contract-cli/package.json b/packages/contract-cli/package.json index 1ac575fd..ad60b3c7 100755 --- a/packages/contract-cli/package.json +++ b/packages/contract-cli/package.json @@ -11,7 +11,7 @@ "scripts": { "dev": "DEBUG=jsonql-contract:* node ./test.js", "coverage": "nyc ava --verbose", - "prepare": "npm run test", + "prepare": "ava --verbose", "cli": "DEBUG=jsonql-contract* node ./cli.js", "cli:watch": "DEBUG=jsonql-contract* node ./watch.js", "test:cli": "npm run cli configFile ./tests/fixtures/cmd-config-test.js", -- Gitee From 2b3c21ded4f1700525e0359df22c0ab1414aaf61 Mon Sep 17 00:00:00 2001 From: joelchu Date: Sun, 22 Sep 2019 22:36:46 +0800 Subject: [PATCH 2/3] port the api code from jsonql-koa to jsonql-contract --- packages/contract-cli/extra.js | 52 +++++++++++++++++++ packages/contract-cli/package.json | 5 +- packages/contract-cli/src/options.js | 6 ++- packages/contract-cli/tests/koa-debug.test.js | 4 +- 4 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 packages/contract-cli/extra.js diff --git a/packages/contract-cli/extra.js b/packages/contract-cli/extra.js new file mode 100644 index 00000000..9596537d --- /dev/null +++ b/packages/contract-cli/extra.js @@ -0,0 +1,52 @@ +// ported from jsonql-koa for testing +// this need to get call from the beginning +// so make this available in different places +const fsx = require('fs-extra') +const { join } = require('path') +const contractApi = require('./index') +const { + DEFAULT_CONTRACT_FILE_NAME, + PUBLIC_CONTRACT_FILE_NAME +} = require('jsonql-constants') + +const debug = require('debug')('jsonql-contract:contract-generator') +/** + * @param {string} contractDir where the contract is + * @param {boolean} pub system of public + * @return {mixed} false on not found + */ +const readContract = function(contractDir, pub) { + const file = join(contractDir, pub ? PUBLIC_CONTRACT_FILE_NAME : DEFAULT_CONTRACT_FILE_NAME) + if (fsx.existsSync(file)) { + debug('Serving up the existing one from ', file) + return fsx.readJsonSync(file) + } + return false; +} + +/** + * contract create handler + * @param {object} opts options + * @param {boolean} pub where to serve this + * @param {boolean} start is this the first call + * @return {object} promise to resolve contract json + */ +const contractGenerator = function(opts, pub = false, start = false) { + return new Promise((resolver, rejecter) => { + if (opts.buildContractOnStart === false && start === false) { + const contract = readContract(opts.contractDir, pub) + if (contract !== false) { + return resolver(contract) + } + } + contractApi(Object.assign({}, opts, { public: pub })) + .then(resolver) + .catch(rejecter) + }) +} + +// export +module.exports { + contractGenerator, + readContract +} diff --git a/packages/contract-cli/package.json b/packages/contract-cli/package.json index ad60b3c7..f0a3946d 100755 --- a/packages/contract-cli/package.json +++ b/packages/contract-cli/package.json @@ -1,12 +1,13 @@ { "name": "jsonql-contract", - "version": "1.7.13", + "version": "1.7.14", "description": "JS API / command line tool to generate the contract.json for jsonql", "main": "index.js", "files": [ "src", "cli.js", - "index.js" + "index.js", + "extra.js" ], "scripts": { "dev": "DEBUG=jsonql-contract:* node ./test.js", diff --git a/packages/contract-cli/src/options.js b/packages/contract-cli/src/options.js index 9b231623..fb894415 100644 --- a/packages/contract-cli/src/options.js +++ b/packages/contract-cli/src/options.js @@ -53,7 +53,7 @@ const defaultOptions = { resolverDir: createConfig(resolve(join(BASE_DIR, DEFAULT_RESOLVER_DIR)) , STRING_TYPE, {[ALIAS_KEY]: 'inDir'}), contractDir: createConfig(resolve(join(BASE_DIR, DEFAULT_CONTRACT_DIR)), STRING_TYPE, {[ALIAS_KEY]: 'outDir'}), // show or hide the description field in the public contract - // contractWithDesc: createConfig(false, [BOOLEAN_TYPE]), @1.7.6 move to Koa + // contractWithDesc: createConfig(false, [BOOLEAN_TYPE]), @1.7.6 move to Koa // remove the old one and always create a new one - useful during development alwaysNew: createConfig(false, [BOOLEAN_TYPE]), // where to put the public method @@ -68,7 +68,9 @@ const defaultOptions = { configFile: createConfig(false, [STRING_TYPE], {[OPTIONAL_KEY]: true, [ALIAS_KEY]: 'c'}), announceUrl: createConfig(false, [STRING_TYPE], {[OPTIONAL_KEY]: true, [ALIAS_KEY]: 'a'}), logDirectory: constructConfig(false, [STRING_TYPE], true), - tmpDir: createConfig(join(BASE_DIR, 'tmp'), [STRING_TYPE]) + tmpDir: createConfig(join(BASE_DIR, 'tmp'), [STRING_TYPE]), + // ported from jsonql-koa + buildContractOnStart: constructConfig(false, [BOOLEAN_TYPE], true) } // export it module.exports = config => checkConfigAsync(config, defaultOptions, constProps) diff --git a/packages/contract-cli/tests/koa-debug.test.js b/packages/contract-cli/tests/koa-debug.test.js index de0885fe..95abb221 100644 --- a/packages/contract-cli/tests/koa-debug.test.js +++ b/packages/contract-cli/tests/koa-debug.test.js @@ -4,7 +4,7 @@ const { join } = require('path') const fsx = require('fs-extra') const debug = require('debug')('jsonql-contract:koa-debugging') -const generator = require('../index') +const { contractGenerator } = require('../extra') const resolverDir = join(__dirname, 'fixtures', 'koa-resolvers') const contractDir = join(__dirname, 'tmp', 'koa-debug') @@ -14,7 +14,7 @@ test.after(t => { }) test(`It should able to generate a contract without error`, async t => { - const result = await generator({ + const result = await contractGenerator({ resolverDir, contractDir, returnAs: 'json' -- Gitee From 98178b4d2fca41e7e9e4f4b275509e3bd7359da9 Mon Sep 17 00:00:00 2001 From: joelchu Date: Sun, 22 Sep 2019 22:41:57 +0800 Subject: [PATCH 3/3] The strangest bug ever, it works right here with the ported code just like that, wtf --- packages/contract-cli/extra.js | 2 +- packages/contract-cli/tests/koa-debug.test.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/contract-cli/extra.js b/packages/contract-cli/extra.js index 9596537d..0e0d1fd8 100644 --- a/packages/contract-cli/extra.js +++ b/packages/contract-cli/extra.js @@ -46,7 +46,7 @@ const contractGenerator = function(opts, pub = false, start = false) { } // export -module.exports { +module.exports = { contractGenerator, readContract } diff --git a/packages/contract-cli/tests/koa-debug.test.js b/packages/contract-cli/tests/koa-debug.test.js index 95abb221..81305157 100644 --- a/packages/contract-cli/tests/koa-debug.test.js +++ b/packages/contract-cli/tests/koa-debug.test.js @@ -1,6 +1,7 @@ // this resolvers cause an error with the updateMsService resolver when call from within jsonql-koa const test = require('ava') const { join } = require('path') +const { inspect } = require('util') const fsx = require('fs-extra') const debug = require('debug')('jsonql-contract:koa-debugging') @@ -20,7 +21,7 @@ test(`It should able to generate a contract without error`, async t => { returnAs: 'json' }) - debug('%O', result) + debug(inspect(result, false, null)) t.truthy(result.query) }) -- Gitee