diff --git a/cli.js b/cli.js index acc3ea4d..efe66261 100755 --- a/cli.js +++ b/cli.js @@ -40,7 +40,7 @@ if (!asyncapiFile) { program.help(); // This exits the process } if (!version) { - version = '2.3.0'; + version = '2.4.0'; } try { diff --git a/src/convert.ts b/src/convert.ts index d69dc7d9..7df0ea8d 100644 --- a/src/convert.ts +++ b/src/convert.ts @@ -23,6 +23,7 @@ import type { AsyncAPIDocument, ConvertVersion, ConvertOptions } from './interfa '2.1.0': from__2_0_0__to__2_1_0, '2.2.0': from__2_1_0__to__2_2_0, '2.3.0': from__2_2_0__to__2_3_0, + '2.4.0': from__2_3_0__to__2_4_0, }; const conversionVersions = Object.keys(conversions); @@ -213,4 +214,9 @@ function from__2_1_0__to__2_2_0(asyncapi: AsyncAPIDocument, _: ConvertOptions) { function from__2_2_0__to__2_3_0(asyncapi: AsyncAPIDocument, _: ConvertOptions) { asyncapi.asyncapi = '2.3.0'; return asyncapi; +} + +function from__2_3_0__to__2_4_0(asyncapi: AsyncAPIDocument, _: ConvertOptions) { + asyncapi.asyncapi = '2.4.0'; + return asyncapi; } \ No newline at end of file diff --git a/src/interfaces.ts b/src/interfaces.ts index 6c0ee301..4c2d418d 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -1,5 +1,5 @@ export type AsyncAPIDocument = { asyncapi: string } & Record; -export type ConvertVersion = '1.1.0' | '1.2.0' | '2.0.0-rc1' | '2.0.0-rc2' | '2.0.0' | '2.1.0' | '2.2.0' | '2.3.0'; +export type ConvertVersion = '1.1.0' | '1.2.0' | '2.0.0-rc1' | '2.0.0-rc2' | '2.0.0' | '2.1.0' | '2.2.0' | '2.3.0' | '2.4.0'; export interface ConvertOptions { id?: string; } diff --git a/test/convert.spec.ts b/test/convert.spec.ts index 6bf0bd79..842313e4 100644 --- a/test/convert.spec.ts +++ b/test/convert.spec.ts @@ -191,6 +191,20 @@ it('should convert from 2.2.0 to 2.3.0', () => { assertResults(output, result); }); +it('should convert from 2.2.0 to 2.4.0', () => { + const input = fs.readFileSync(path.resolve(__dirname, 'input', '2.2.0', 'streetlights.yml'), 'utf8'); + const output = fs.readFileSync(path.resolve(__dirname, 'output', '2.4.0', 'streetlights.yml'), 'utf8'); + const result = convert(input, '2.4.0'); + assertResults(output, result); +}); + +it('should convert from 2.3.0 to 2.4.0', () => { + const input = fs.readFileSync(path.resolve(__dirname, 'input', '2.3.0', 'streetlights.yml'), 'utf8'); + const output = fs.readFileSync(path.resolve(__dirname, 'output', '2.4.0', 'streetlights.yml'), 'utf8'); + const result = convert(input, '2.4.0'); + assertResults(output, result); +}); + it('should convert from 2.0.0 to 2.1.0 (JSON case)', () => { const input = fs.readFileSync(path.resolve(__dirname, 'input', '2.0.0', 'streetlights.json'), 'utf8'); let output = fs.readFileSync(path.resolve(__dirname, 'output', '2.1.0', 'streetlights.json'), 'utf8'); diff --git a/test/input/2.3.0/streetlights.yml b/test/input/2.3.0/streetlights.yml new file mode 100644 index 00000000..d4133f21 --- /dev/null +++ b/test/input/2.3.0/streetlights.yml @@ -0,0 +1,112 @@ +asyncapi: 2.3.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: + 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' diff --git a/test/output/2.4.0/streetlights.yml b/test/output/2.4.0/streetlights.yml new file mode 100644 index 00000000..67913f4a --- /dev/null +++ b/test/output/2.4.0/streetlights.yml @@ -0,0 +1,112 @@ +asyncapi: 2.4.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: + 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'