diff --git a/CHANGELOG.md b/CHANGELOG.md index 8044b214..b1b313e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +# [2.2.0-next.1](https://github.com/rdkcentral/firebolt-openrpc/compare/v2.1.1-next.3...v2.2.0-next.1) (2023-11-30) + + +### Features + +* Improve generated doc formatting ([#155](https://github.com/rdkcentral/firebolt-openrpc/issues/155)) ([4613281](https://github.com/rdkcentral/firebolt-openrpc/commit/46132810ac5e5b0a8b9baa22903cb8a367b46f63)) + +## [2.1.1-next.3](https://github.com/rdkcentral/firebolt-openrpc/compare/v2.1.1-next.2...v2.1.1-next.3) (2023-11-09) + + +### Bug Fixes + +* Provider openrpc response and error methods have a wrapper object ([#148](https://github.com/rdkcentral/firebolt-openrpc/issues/148)) ([373626e](https://github.com/rdkcentral/firebolt-openrpc/commit/373626ed598447bb670ac67e97ca8ed1bf32f28f)) + ## [2.1.1-next.2](https://github.com/rdkcentral/firebolt-openrpc/compare/v2.1.1-next.1...v2.1.1-next.2) (2023-11-01) diff --git a/NOTICE b/NOTICE index 25fc7bbf..6db36d20 100644 --- a/NOTICE +++ b/NOTICE @@ -20,3 +20,5 @@ The component may include material which is licensed under other licenses / copy listed below. Your use of this material within the component is also subject to the terms and conditions of these licenses. The LICENSE file contains the text of all the licenses which apply within this component.. + +npm is a registered trademark of npm, Inc. diff --git a/languages/javascript/templates/examples/default.md b/languages/javascript/templates/examples/default.md index ecc979ba..8a407397 100644 --- a/languages/javascript/templates/examples/default.md +++ b/languages/javascript/templates/examples/default.md @@ -1,6 +1,4 @@ import { ${module} } from '${package.name}' -${module}.${method.name}(${example.params}) - .then(${method.result.name} => { - console.log(${method.result.name}) - }) \ No newline at end of file +let ${method.result.name} = await ${module}.${method.name}(${example.params}) +console.log(${method.result.name}) \ No newline at end of file diff --git a/languages/javascript/templates/examples/polymorphic-pull-event.md b/languages/javascript/templates/examples/polymorphic-pull-event.md index 7bc2baa7..5881ac08 100644 --- a/languages/javascript/templates/examples/polymorphic-pull-event.md +++ b/languages/javascript/templates/examples/polymorphic-pull-event.md @@ -1,9 +1,8 @@ import { ${module} } from '${package.name}' -${module}.${method.pulls.for}(function(parameters) { +let success = await ${module}.${method.pulls.for}(async parameters => { console.log(parameters.entityId) console.log(parameters.assetId) - return Promise.resolve(${originator.params[1].example.value}) -}).then(success => { - console.log(success) -}) \ No newline at end of file + return ${originator.params[1].example.value} +}) +console.log(success) \ No newline at end of file diff --git a/languages/javascript/templates/examples/polymorphic-pull.md b/languages/javascript/templates/examples/polymorphic-pull.md index 7c53080c..d754217d 100644 --- a/languages/javascript/templates/examples/polymorphic-pull.md +++ b/languages/javascript/templates/examples/polymorphic-pull.md @@ -1,6 +1,4 @@ import { ${module} } from '${package.name}' -${module}.${method.name}(${method.params[1].example.value}) - .then(success => { - console.log(success) - }) \ No newline at end of file +let success = await ${module}.${method.name}(${method.params[1].example.value}) +console.log(success) \ No newline at end of file diff --git a/languages/javascript/templates/examples/setter.md b/languages/javascript/templates/examples/setter.md index c258314a..85c2bcff 100644 --- a/languages/javascript/templates/examples/setter.md +++ b/languages/javascript/templates/examples/setter.md @@ -1,6 +1,4 @@ import { ${module} } from '${package.name}' -${module}.${method.setter.for}(${example.params}) - .then(${method.result.name} => { - console.log(${method.result.name}) - }) \ No newline at end of file +let ${method.result.name} = await ${module}.${method.setter.for}(${example.params}) +console.log(${method.result.name}) \ No newline at end of file diff --git a/languages/javascript/templates/examples/subscriber.md b/languages/javascript/templates/examples/subscriber.md index 99c0516f..0dd6a7a3 100644 --- a/languages/javascript/templates/examples/subscriber.md +++ b/languages/javascript/templates/examples/subscriber.md @@ -1,7 +1,6 @@ import { ${module} } from '${package.name}' -${method.alternative}(value => { +let listenerId = await ${method.alternative}(value => { console.log(value) -}).then(listenerId => { - console.log(listenerId) -}) \ No newline at end of file +}) +console.log(listenerId) \ No newline at end of file diff --git a/languages/markdown/templates/codeblocks/provider.md b/languages/markdown/templates/codeblocks/provider.md index 32823cb0..e30d3a19 100644 --- a/languages/markdown/templates/codeblocks/provider.md +++ b/languages/markdown/templates/codeblocks/provider.md @@ -23,7 +23,7 @@ import { ${info.title} } from '${package.name}' class My${provider} { ${provider.interface.start} async ${provider.interface.name}(parameters, session) { - return await Promise.resolve(${provider.interface.example.result}) + return ${provider.interface.example.result} } ${provider.interface.end} } diff --git a/package-lock.json b/package-lock.json index a5dcd108..b4220f0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@firebolt-js/openrpc", - "version": "2.1.1-next.2", + "version": "2.2.0-next.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@firebolt-js/openrpc", - "version": "2.1.1-next.2", + "version": "2.2.0-next.1", "license": "Apache-2.0", "dependencies": { "ajv": "^8.3.0", diff --git a/package.json b/package.json index 6039a61a..5ecb67ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@firebolt-js/openrpc", - "version": "2.1.1-next.2", + "version": "2.2.0-next.1", "description": "The Firebolt SDK Code & Doc Generator", "main": "languages/javascript/src/sdk.mjs", "type": "module", diff --git a/src/macrofier/engine.mjs b/src/macrofier/engine.mjs index aa9f4656..3f7596ec 100644 --- a/src/macrofier/engine.mjs +++ b/src/macrofier/engine.mjs @@ -1093,7 +1093,7 @@ function insertMethodMacros(template, methodObj, json, templates, examples = {}) } } - const paramDelimiter = config.operators ? config.operators.paramDelimiter : ', ' + const paramDelimiter = config.operators ? config.operators.paramDelimiter : '' const temporalItemName = isTemporalSetMethod(methodObj) ? methodObj.result.schema.items && methodObj.result.schema.items.title || 'Item' : '' const temporalAddName = isTemporalSetMethod(methodObj) ? `on${temporalItemName}Available` : '' diff --git a/src/shared/modules.mjs b/src/shared/modules.mjs index e913877c..095acd87 100644 --- a/src/shared/modules.mjs +++ b/src/shared/modules.mjs @@ -684,21 +684,16 @@ const createResponseFromProvider = (provider, type, json) => { if (provider.tags.find(t => t[`x-${type.toLowerCase()}`])) { response.params = [ { - name: type.toLowerCase(), - required: true, + name: "correlationId", schema: { - allOf: [ - { - "$ref": "https://meta.comcast.com/firebolt/types#/definitions/ProviderResponse" // use this schema for both Errors and Results - }, - { - "type": "object", - "properties": { - "result": provider.tags.find(t => t[`x-${type.toLowerCase()}`])[`x-${type.toLowerCase()}`] - } - } - ] - } + type: "string" + }, + required: true + }, + { + name: type === 'Error' ? 'error' : "result", + schema: provider.tags.find(t => t[`x-${type.toLowerCase()}`])[`x-${type.toLowerCase()}`], + required: true } ] @@ -739,11 +734,12 @@ const createResponseFromProvider = (provider, type, json) => { name: schema.examples.length === 1 ? "Example" : `Example #${n++}`, params: [ { - name: `${type.toLowerCase()}`, - value: { - correlationId: "123", - result: param - } + name: 'correlationId', + value: '123' + }, + { + name: 'result', + value: param } ], result: { @@ -782,11 +778,12 @@ const createResponseFromProvider = (provider, type, json) => { name: 'Example 1', params: [ { - name: `${type.toLowerCase()}`, - value: { - correlationId: "123", - result: value - } + name: 'correlationId', + value: '123' + }, + { + name: type === 'Error' ? 'error' : 'result', + value } ], result: { diff --git a/test/openrpc/simple.json b/test/openrpc/simple.json index 0d7f41c7..7d009546 100644 --- a/test/openrpc/simple.json +++ b/test/openrpc/simple.json @@ -311,6 +311,61 @@ } } ] + }, + { + "name": "methodWithMultipleParams", + "summary": "A method that takes two parameters", + "description": "A method that takes two parameters", + "tags": [ + { + "name": "capabilities", + "x-uses": ["xrn:firebolt:capability:test:test"] + } + ], + "params": [ + { + "name": "id", + "required": true, + "schema": { + "type": "number" + }, + "summary": "A test number" + }, + { + "name": "title", + "required": true, + "schema": { + "type": "string" + }, + "summary": "A string test parameter." + } + ], + "result": { + "name": "result", + "summary": "A result for testing basic method generation.", + "schema": { + "type": "null" + } + }, + "examples": [ + { + "name": "Default Example", + "params": [ + { + "name": "id", + "value": 42 + }, + { + "name": "title", + "value": "test" + } + ], + "result": { + "name": "Default Result", + "value": null + } + } + ] } ], "components": { diff --git a/test/suite/simple.test.js b/test/suite/simple.test.js index e9ca5fd7..c969afce 100644 --- a/test/suite/simple.test.js +++ b/test/suite/simple.test.js @@ -17,11 +17,47 @@ */ import { Simple } from '../../build/sdk/javascript/src/sdk.mjs' -import Setup from '../Setup' import { expect } from '@jest/globals'; + +class TransportSpy { + + constructor(spy) { + this.spy = spy + this.responder = null + } + + async send(msg) { + let parsed = JSON.parse(msg) + this.spy(parsed) + this.responder(JSON.stringify({ + jsonrpc: '2.0', + id: parsed.id, + result: {} + })) + } + + receive(callback) { + this.responder = callback + } +} + test('Basic', () => { return Simple.method(true).then(result => { expect(result.foo).toBe("here's foo") }) }); + +test('Multiple Parameters', async () => { + let cb = null; + let promise = new Promise((resolve, reject) => { + cb = resolve + }) + window['__firebolt'].setTransportLayer(new TransportSpy(cb)) + await Simple.methodWithMultipleParams(5, 'foo') + let msg = await promise + expect(msg.method).toBe('simple.methodWithMultipleParams') + expect(msg.params.id).toBe(5) + expect(msg.params.title).toBe('foo') + console.log(JSON.stringify(msg)) +});