Skip to content

Commit

Permalink
feat: support 2.5.0 AsyncAPI (#144)
Browse files Browse the repository at this point in the history
  • Loading branch information
magicmatatjahu authored Sep 29, 2022
1 parent 208340b commit 6c34c11
Show file tree
Hide file tree
Showing 5 changed files with 256 additions and 5 deletions.
14 changes: 10 additions & 4 deletions src/convert.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,13 @@ import type { AsyncAPIDocument, ConvertVersion, ConvertOptions } from './interfa
'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,
'2.5.0': from__2_4_0__to__2_5_0,
};
const conversionVersions = Object.keys(conversions);

export function convert(asyncapi: string, version: ConvertVersion, options?: ConvertOptions): string;
export function convert(asyncapi: AsyncAPIDocument, version: ConvertVersion, options?: ConvertOptions): AsyncAPIDocument;
export function convert(asyncapi: string | AsyncAPIDocument, version: ConvertVersion, options: ConvertOptions = {}): string | AsyncAPIDocument {
export function convert(asyncapi: string, version?: ConvertVersion, options?: ConvertOptions): string;
export function convert(asyncapi: AsyncAPIDocument, version?: ConvertVersion, options?: ConvertOptions): AsyncAPIDocument;
export function convert(asyncapi: string | AsyncAPIDocument, version: ConvertVersion = '2.5.0', options: ConvertOptions = {}): string | AsyncAPIDocument {
const { format, document } = serializeInput(asyncapi);

const asyncapiVersion = document.asyncapi;
Expand Down Expand Up @@ -215,4 +216,9 @@ function from__2_2_0__to__2_3_0(asyncapi: AsyncAPIDocument, _: ConvertOptions) {
function from__2_3_0__to__2_4_0(asyncapi: AsyncAPIDocument, _: ConvertOptions) {
asyncapi.asyncapi = '2.4.0';
return asyncapi;
}
}

function from__2_4_0__to__2_5_0(asyncapi: AsyncAPIDocument, _: ConvertOptions) {
asyncapi.asyncapi = '2.5.0';
return asyncapi;
}
2 changes: 1 addition & 1 deletion src/interfaces.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export type AsyncAPIDocument = { asyncapi: string } & Record<string, any>;
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 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' | '2.5.0';
export interface ConvertOptions {}
21 changes: 21 additions & 0 deletions test/convert.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,27 @@ it('should convert from 2.3.0 to 2.4.0', () => {
assertResults(output, result);
});

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

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

it('should convert from 2.0.0 to latest', () => {
const input = fs.readFileSync(path.resolve(__dirname, 'input', '2.0.0', 'streetlights.yml'), 'utf8');
const output = fs.readFileSync(path.resolve(__dirname, 'output', '2.5.0', 'streetlights.yml'), 'utf8');
const result = convert(input);
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');
Expand Down
112 changes: 112 additions & 0 deletions test/input/2.4.0/streetlights.yml
Original file line number Diff line number Diff line change
@@ -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'
112 changes: 112 additions & 0 deletions test/output/2.5.0/streetlights.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
asyncapi: 2.5.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'

0 comments on commit 6c34c11

Please sign in to comment.