Skip to content

Commit

Permalink
feat: add convert function from 2.1.0 to 2.2.0 (#56)
Browse files Browse the repository at this point in the history
  • Loading branch information
magicmatatjahu authored Sep 28, 2021
1 parent 30e05ad commit 7d94819
Show file tree
Hide file tree
Showing 4 changed files with 248 additions and 1 deletion.
9 changes: 8 additions & 1 deletion lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const conversions = {
'2.0.0-rc2': from__2_0_0_rc1__to__2_0_0_rc2,
'2.0.0': from__2_0_0_rc2__to__2_0_0,
'2.1.0': from__2_0_0__to__2_1_0,
'2.2.0': from__2_1_0__to__2_2_0,
}
const conversionVersions = Object.keys(conversions);

Expand Down Expand Up @@ -143,7 +144,7 @@ function from__2_0_0_rc1__to__2_0_0_rc2(asyncapi2rc1, options) { // NOSONAR
_.each(result.channels, (channel, channelName) => {
if (channel.parameters) {
const parametersMap = {};
const paramNames = channelName.match(/\{([^\}]+)\}/g).map(p => p.substr(1, p.length - 2));
const paramNames = channelName.match(/\{([^\}]{1,100})\}/g).map(p => p.substr(1, p.length - 2));
channel.parameters.forEach((parameter, index) => {
const name = parameter.name || paramNames[index];
if (parameter.name) delete parameter.name;
Expand Down Expand Up @@ -195,3 +196,9 @@ function from__2_0_0__to__2_1_0(asyncapi2) {
result.asyncapi = '2.1.0';
return result;
}

function from__2_1_0__to__2_2_0(asyncapi2) {
const result = asyncapi2;
result.asyncapi = '2.2.0';
return result;
}
14 changes: 14 additions & 0 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,20 @@ describe('#convert', () => {
const result = convert(input, '2.1.0');
assertResults(output, result);
});

it('should convert from 2.0.0 to 2.2.0', () => {
const input = fs.readFileSync(path.resolve(__dirname, 'input', '2.0.0', 'streetlights.yml'), 'utf8');
const output = fs.readFileSync(path.resolve(__dirname, 'output', '2.2.0', 'streetlights.yml'), 'utf8');
const result = convert(input, '2.2.0');
assertResults(output, result);
});

it('should convert from 2.1.0 to 2.2.0', () => {
const input = fs.readFileSync(path.resolve(__dirname, 'input', '2.1.0', 'streetlights.yml'), 'utf8');
const output = fs.readFileSync(path.resolve(__dirname, 'output', '2.2.0', 'streetlights.yml'), 'utf8');
const result = convert(input, '2.2.0');
assertResults(output, result);
});
});

/*
Expand Down
113 changes: 113 additions & 0 deletions test/input/2.1.0/streetlights.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
asyncapi: 2.1.0
info:
title: Streetlights API
version: 1.0.0
description: "The Smartylighting Streetlights API allows you to remotely manage the city lights.\n\n### Check out its awesome features:\n\n* Turn a specific streetlight on/off \U0001F303\n* Dim a specific streetlight \U0001F60E\n* Receive real-time information about environmental lighting conditions \U0001F4C8\n"
license:
name: Apache 2.0
url: 'https://www.apache.org/licenses/LICENSE-2.0'
servers:
default:
url: 'api.streetlights.smartylighting.com:{port}'
description: Test broker
variables:
port:
description: Secure connection (TLS) is available through port 8883.
default: '1883'
enum:
- '1883'
- '8883'
protocol: mqtt
security:
- apiKey: []
components:
messages:
lightMeasured:
summary: >-
Inform about environmental lighting conditions for a particular
streetlight.
payload:
$ref: '#/components/schemas/lightMeasuredPayload'
turnOnOff:
summary: Command a particular streetlight to turn the lights on or off.
payload:
$ref: '#/components/schemas/turnOnOffPayload'
dimLight:
summary: Command a particular streetlight to dim the lights.
payload:
$ref: '#/components/schemas/dimLightPayload'
schemas:
lightMeasuredPayload:
type: object
properties:
lumens:
type: integer
minimum: 0
description: Light intensity measured in lumens.
sentAt:
$ref: '#/components/schemas/sentAt'
turnOnOffPayload:
type: object
properties:
command:
type: string
enum:
- 'on'
- 'off'
description: Whether to turn on or off the light.
sentAt:
$ref: '#/components/schemas/sentAt'
dimLightPayload:
type: object
properties:
percentage:
type: integer
description: Percentage to which the light should be dimmed to.
minimum: 0
maximum: 100
sentAt:
$ref: '#/components/schemas/sentAt'
sentAt:
type: string
format: date-time
description: Date and time when the message was sent.
securitySchemes:
apiKey:
type: apiKey
in: user
description: Provide your API key as the user and leave the password empty.
parameters:
streetlightId:
name: streetlightId
description: The ID of the streetlight.
schema:
type: string
channels:
'smartylighting/streetlights/1/0/event/{streetlightId}/lighting/measured':
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
publish:
message:
$ref: '#/components/messages/lightMeasured'
'smartylighting/streetlights/1/0/action/{streetlightId}/turn/on':
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
subscribe:
message:
$ref: '#/components/messages/turnOnOff'
'smartylighting/streetlights/1/0/action/{streetlightId}/turn/off':
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
subscribe:
message:
$ref: '#/components/messages/turnOnOff'
'smartylighting/streetlights/1/0/action/{streetlightId}/dim':
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
subscribe:
message:
$ref: '#/components/messages/dimLight'
113 changes: 113 additions & 0 deletions test/output/2.2.0/streetlights.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
asyncapi: 2.2.0
info:
title: Streetlights API
version: 1.0.0
description: "The Smartylighting Streetlights API allows you to remotely manage the city lights.\n\n### Check out its awesome features:\n\n* Turn a specific streetlight on/off \U0001F303\n* Dim a specific streetlight \U0001F60E\n* Receive real-time information about environmental lighting conditions \U0001F4C8\n"
license:
name: Apache 2.0
url: 'https://www.apache.org/licenses/LICENSE-2.0'
servers:
default:
url: 'api.streetlights.smartylighting.com:{port}'
description: Test broker
variables:
port:
description: Secure connection (TLS) is available through port 8883.
default: '1883'
enum:
- '1883'
- '8883'
protocol: mqtt
security:
- apiKey: []
components:
messages:
lightMeasured:
summary: >-
Inform about environmental lighting conditions for a particular
streetlight.
payload:
$ref: '#/components/schemas/lightMeasuredPayload'
turnOnOff:
summary: Command a particular streetlight to turn the lights on or off.
payload:
$ref: '#/components/schemas/turnOnOffPayload'
dimLight:
summary: Command a particular streetlight to dim the lights.
payload:
$ref: '#/components/schemas/dimLightPayload'
schemas:
lightMeasuredPayload:
type: object
properties:
lumens:
type: integer
minimum: 0
description: Light intensity measured in lumens.
sentAt:
$ref: '#/components/schemas/sentAt'
turnOnOffPayload:
type: object
properties:
command:
type: string
enum:
- 'on'
- 'off'
description: Whether to turn on or off the light.
sentAt:
$ref: '#/components/schemas/sentAt'
dimLightPayload:
type: object
properties:
percentage:
type: integer
description: Percentage to which the light should be dimmed to.
minimum: 0
maximum: 100
sentAt:
$ref: '#/components/schemas/sentAt'
sentAt:
type: string
format: date-time
description: Date and time when the message was sent.
securitySchemes:
apiKey:
type: apiKey
in: user
description: Provide your API key as the user and leave the password empty.
parameters:
streetlightId:
name: streetlightId
description: The ID of the streetlight.
schema:
type: string
channels:
'smartylighting/streetlights/1/0/event/{streetlightId}/lighting/measured':
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
publish:
message:
$ref: '#/components/messages/lightMeasured'
'smartylighting/streetlights/1/0/action/{streetlightId}/turn/on':
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
subscribe:
message:
$ref: '#/components/messages/turnOnOff'
'smartylighting/streetlights/1/0/action/{streetlightId}/turn/off':
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
subscribe:
message:
$ref: '#/components/messages/turnOnOff'
'smartylighting/streetlights/1/0/action/{streetlightId}/dim':
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
subscribe:
message:
$ref: '#/components/messages/dimLight'

0 comments on commit 7d94819

Please sign in to comment.