From 4c5a243fb8732511599f5095d4231e2f145de632 Mon Sep 17 00:00:00 2001 From: Oliwia Rogala Date: Mon, 23 Mar 2026 10:13:31 +0100 Subject: [PATCH 1/3] feat(ls): update AMQP bindings Co-Authored-By: Claude Sonnet 4.6 --- .../amqp/channel-binding/completion/0-1-0.ts | 3 +- .../amqp/channel-binding/completion/0-2-0.ts | 3 +- .../amqp/channel-binding/completion/0-3-0.ts | 102 ++ .../amqp/channel-binding/completion/index.ts | 13 +- .../amqp/channel-binding/completion/latest.ts | 3 +- .../amqp/channel-binding/documentation.ts | 13 +- .../lint/0-3-0/allowed-fields.ts | 23 + .../lint/0-3-0/exchange--type.ts | 25 + .../amqp/channel-binding/lint/0-3-0/index.ts | 8 + .../channel-binding/lint/0-3-0/is--equals.ts | 25 + .../channel-binding/lint/0-3-0/queue--type.ts | 25 + .../amqp/channel-binding/lint/index.ts | 2 + .../amqp/message-binding/completion/0-1-0.ts | 6 +- .../amqp/message-binding/completion/0-2-0.ts | 6 +- .../amqp/message-binding/completion/0-3-0.ts | 67 ++ .../amqp/message-binding/completion/index.ts | 13 +- .../amqp/message-binding/completion/latest.ts | 6 +- .../amqp/message-binding/documentation.ts | 15 +- .../lint/0-3-0/allowed-fields.ts | 23 + .../lint/0-3-0/content-encoding--type.ts | 25 + .../amqp/message-binding/lint/0-3-0/index.ts | 7 + .../lint/0-3-0/message-type--type.ts | 25 + .../amqp/message-binding/lint/index.ts | 2 + .../operation-binding/completion/0-1-0.ts | 246 ++++- .../operation-binding/completion/0-2-0.ts | 246 ++++- .../operation-binding/completion/0-3-0.ts | 436 ++++++++ .../operation-binding/completion/index.ts | 13 +- .../operation-binding/completion/latest.ts | 202 +++- .../amqp/operation-binding/documentation.ts | 15 +- .../operation-binding/lint/0-3-0/act--type.ts | 25 + .../lint/0-3-0/allowed-fields.ts | 36 + .../operation-binding/lint/0-3-0/bcc--type.ts | 25 + .../operation-binding/lint/0-3-0/cc--type.ts | 25 + .../lint/0-3-0/delivery-mode--equals.ts | 25 + .../lint/0-3-0/expiration--type.ts | 25 + .../operation-binding/lint/0-3-0/index.ts | 25 + .../lint/0-3-0/mandatory--type.ts | 25 + .../lint/0-3-0/priority--type.ts | 25 + .../lint/0-3-0/timestamp--type.ts | 25 + .../user-id--type.ts} | 15 +- .../amqp/operation-binding/lint/index.ts | 2 + .../lint/latest/allowed-fields.ts | 1 - .../operation-binding/lint/latest/index.ts | 2 - .../lint/0-1-0/allowed-fields.ts | 4 +- .../lint/0-2-0/allowed-fields.ts | 4 +- .../lint/0-3-0/allowed-fields.ts | 23 + .../amqp/server-binding/lint/0-3-0/index.ts | 5 + .../amqp/server-binding/lint/index.ts | 8 +- .../lint/latest/allowed-fields.ts | 4 +- .../apidom-ls/test/asyncapi-amqp-bindings.ts | 927 ++++++++++++++++++ ...-channel-binding-allowed-fields-0-1-0.yaml | 10 + ...-channel-binding-allowed-fields-0-2-0.yaml | 10 + ...-channel-binding-allowed-fields-0-3-0.yaml | 10 + ...channel-binding-allowed-fields-latest.yaml | 9 + .../amqp-channel-binding-exchange-type.yaml | 10 + .../amqp/amqp-channel-binding-is-equals.yaml | 10 + .../amqp/amqp-channel-binding-queue-type.yaml | 10 + ...-message-binding-allowed-fields-0-1-0.yaml | 10 + ...-message-binding-allowed-fields-0-2-0.yaml | 10 + ...-message-binding-allowed-fields-0-3-0.yaml | 10 + ...message-binding-allowed-fields-latest.yaml | 9 + ...message-binding-content-encoding-type.yaml | 10 + ...mqp-message-binding-message-type-type.yaml | 10 + .../amqp/amqp-operation-binding-ack-type.yaml | 10 + ...peration-binding-allowed-fields-0-1-0.yaml | 10 + ...peration-binding-allowed-fields-0-2-0.yaml | 10 + ...peration-binding-allowed-fields-0-3-0.yaml | 10 + ...eration-binding-allowed-fields-latest.yaml | 9 + .../amqp/amqp-operation-binding-bcc-type.yaml | 10 + .../amqp/amqp-operation-binding-cc-type.yaml | 10 + ...peration-binding-delivery-mode-equals.yaml | 10 + ...mqp-operation-binding-expiration-type.yaml | 10 + ...amqp-operation-binding-mandatory-type.yaml | 10 + .../amqp-operation-binding-priority-type.yaml | 10 + .../amqp-operation-binding-reply-to-type.yaml | 10 + ...amqp-operation-binding-timestamp-type.yaml | 10 + .../amqp-operation-binding-user-id-type.yaml | 10 + ...p-server-binding-allowed-fields-0-1-0.yaml | 12 + ...p-server-binding-allowed-fields-0-2-0.yaml | 12 + ...p-server-binding-allowed-fields-0-3-0.yaml | 12 + ...-server-binding-allowed-fields-latest.yaml | 11 + 81 files changed, 3089 insertions(+), 79 deletions(-) create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-3-0.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/allowed-fields.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/exchange--type.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/index.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/is--equals.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/queue--type.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-3-0.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/allowed-fields.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/content-encoding--type.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/index.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/message-type--type.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-3-0.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/act--type.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/allowed-fields.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/bcc--type.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/cc--type.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/delivery-mode--equals.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/expiration--type.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/index.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/mandatory--type.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/priority--type.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/timestamp--type.ts rename packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/{latest/reply-to--type.ts => 0-3-0/user-id--type.ts} (54%) create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-3-0/allowed-fields.ts create mode 100644 packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-3-0/index.ts create mode 100644 packages/apidom-ls/test/asyncapi-amqp-bindings.ts create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-1-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-2-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-3-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-latest.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-exchange-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-is-equals.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-queue-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-1-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-2-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-3-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-latest.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-content-encoding-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-message-type-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-ack-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-1-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-2-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-3-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-latest.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-bcc-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-cc-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-delivery-mode-equals.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-expiration-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-mandatory-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-priority-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-reply-to-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-timestamp-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-user-id-type.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-1-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-2-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-3-0.yaml create mode 100644 packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-latest.yaml diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-1-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-1-0.ts index 07bbfdd2b9..29762530b6 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-1-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-1-0.ts @@ -14,7 +14,8 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Defines what type of channel is it. Can be either `queue` or `routingKey` (default).', + value: + '`string`\n\\\n\\\nDefines what type of channel is it. Can be either `queue` or `routingKey` (default).', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-2-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-2-0.ts index 04c6f966d5..2e23b97638 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-2-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-2-0.ts @@ -14,7 +14,8 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Defines what type of channel is it. Can be either `queue` or `routingKey` (default).', + value: + '`string`\n\\\n\\\nDefines what type of channel is it. Can be either `queue` or `routingKey` (default).', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-3-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-3-0.ts new file mode 100644 index 0000000000..71a072fcb3 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-3-0.ts @@ -0,0 +1,102 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types.ts'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'is', + insertText: 'is', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`string`\n\\\n\\\nDefines what type of channel is it. Can be either `queue` or `routingKey` (default).', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'exchange', + insertText: 'exchange', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + 'Map[string, any]`\n\\\n\\\nWhen `is=routingKey`, this object defines the exchange properties.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'queue', + insertText: 'queue', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + 'Map[string, any]`\n\\\n\\\nWhen `is=queue`, this object defines the queue properties.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + target: 'is', + label: 'queue', + insertText: 'queue', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + target: 'is', + label: 'routingKey', + insertText: 'routingKey', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/index.ts index cbb0de5872..0b3da7568b 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/index.ts @@ -1,5 +1,6 @@ import completion0_1_0Items from './0-1-0.ts'; import completion0_2_0Items from './0-2-0.ts'; +import completion0_3_0Items from './0-3-0.ts'; import completionLatestItems from './latest.ts'; import { ApidomCompletionItem, @@ -10,6 +11,7 @@ import { const completion: ApidomCompletionItem[] = [ ...completion0_1_0Items, ...completion0_2_0Items, + ...completion0_3_0Items, ...completionLatestItems, { label: 'bindingVersion', @@ -20,7 +22,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, }, { @@ -41,6 +43,15 @@ const completion: ApidomCompletionItem[] = [ type: CompletionType.VALUE, insertTextFormat: 2, }, + { + target: 'bindingVersion', + label: '0.3.0', + insertText: '0.3.0', + kind: 12, + format: CompletionFormat.QUOTED_FORCED, + type: CompletionType.VALUE, + insertTextFormat: 2, + }, ]; export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/latest.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/latest.ts index ededea21b0..270503ff1d 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/latest.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/latest.ts @@ -14,7 +14,8 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Defines what type of channel is it. Can be either `queue` or `routingKey` (default).', + value: + '`string`\n\\\n\\\nDefines what type of channel is it. Can be either `queue` or `routingKey` (default).', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/documentation.ts index e219d31d28..9255461b0b 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/documentation.ts @@ -1,7 +1,9 @@ +import { AsyncAPI2, AsyncAPI3 } from '../../../target-specs.ts'; + const documentation = [ { target: 'is', - docs: 'Defines what type of channel is it. Can be either `queue` or `routingKey` (default).', + docs: '`string`\n\\\n\\\nDefines what type of channel is it. Can be either `queue` or `routingKey` (default).', }, { target: 'exchange', @@ -13,10 +15,15 @@ const documentation = [ }, { target: 'bindingVersion', - docs: 'The version of this binding. If omitted, "0.3.0" MUST be assumed.', + docs: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, { - docs: '#### [Channel Binding Object](https://github.com/asyncapi/bindings/tree/master/amqp#channel)\n\nThis object contains information about the channel representation in AMQP.\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`is` | string | Defines what type of channel is it. Can be either `queue` or `routingKey` (default).\n`exchange` | Map[string, any] | When `is`=`routingKey`, this object defines the exchange properties.\n`exchange.name` | string | The name of the exchange. It MUST NOT exceed 255 characters long.\n`exchange.type` | string | The type of the exchange. Can be either `topic`, `direct`, `fanout`, `default` or `headers`.\n`exchange.durable` | boolean | Whether the exchange should survive broker restarts or not.\n`exchange.autoDelete` | boolean | Whether the exchange should be deleted when the last queue is unbound from it.\n`exchange.vhost` | string | The virtual host of the exchange. Defaults to `/`.\n`queue` | Map[string, any] | When `is`=`queue`, this object defines the queue properties.\n`queue.name` | string | The name of the queue. It MUST NOT exceed 255 characters long.\n`queue.durable` | boolean | Whether the queue should survive broker restarts or not.\n`queue.exclusive` | boolean | Whether the queue should be used only by one connection or not.\n`queue.autoDelete` | boolean | Whether the queue should be deleted when the last consumer unsubscribes.\n`queue.vhost` | string | The virtual host of the queue. Defaults to `/`.\n`bindingVersion` | string | The version of this binding. If omitted, "0.2.0" MUST be assumed.\n\nThis object MUST contain only the properties defined above.\n\n##### Example\n\n\n\\\nYAML\n```yaml\nchannels:\n user/signedup:\n bindings:\n amqp:\n is: routingKey\n queue:\n name: my-queue-name\n durable: true\n exclusive: true\n autoDelete: false\n vhost: /\n exchange:\n name: myExchange\n type: topic\n durable: true\n autoDelete: false\n vhost: /\n bindingVersion: 0.2.0\n```', + docs: '#### [Channel Binding Object](https://github.com/asyncapi/bindings/tree/master/amqp#channel)\n\nThis object contains information about the channel representation in AMQP.\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`is` | string | Defines what type of channel is it. Can be either `queue` or `routingKey` (default).\n`exchange` | Map[string, any] | When `is`=`routingKey`, this object defines the exchange properties.\n`exchange.name` | string | The name of the exchange. It MUST NOT exceed 255 characters long.\n`exchange.type` | string | The type of the exchange. Can be either `topic`, `direct`, `fanout`, `default` or `headers`.\n`exchange.durable` | boolean | Whether the exchange should survive broker restarts or not.\n`exchange.autoDelete` | boolean | Whether the exchange should be deleted when the last queue is unbound from it.\n`exchange.vhost` | string | The virtual host of the exchange. Defaults to `/`.\n`queue` | Map[string, any] | When `is`=`queue`, this object defines the queue properties.\n`queue.name` | string | The name of the queue. It MUST NOT exceed 255 characters long.\n`queue.durable` | boolean | Whether the queue should survive broker restarts or not.\n`queue.exclusive` | boolean | Whether the queue should be used only by one connection or not.\n`queue.autoDelete` | boolean | Whether the queue should be deleted when the last consumer unsubscribes.\n`queue.vhost` | string | The virtual host of the queue. Defaults to `/`.\n`bindingVersion` | string | The version of this binding. If omitted, "0.3.0" MUST be assumed.\n\nThis object MUST contain only the properties defined above.\n\n##### Example\n\n\n\\\nYAML\n```yaml\nchannels:\n user/signedup:\n bindings:\n amqp:\n is: routingKey\n queue:\n name: my-queue-name\n durable: true\n exclusive: true\n autoDelete: false\n vhost: /\n exchange:\n name: myExchange\n type: topic\n durable: true\n autoDelete: false\n vhost: /\n bindingVersion: 0.3.0\n```', + targetSpecs: AsyncAPI2, + }, + { + docs: '#### [Channel Binding Object](https://github.com/asyncapi/bindings/tree/master/amqp#channel)\n\nThis object contains information about the channel representation in AMQP.\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`is` | string | Defines what type of channel is it. Can be either `queue` or `routingKey` (default).\n`exchange` | Map[string, any] | When `is`=`routingKey`, this object defines the exchange properties.\n`exchange.name` | string | The name of the exchange. It MUST NOT exceed 255 characters long.\n`exchange.type` | string | The type of the exchange. Can be either `topic`, `direct`, `fanout`, `default` or `headers`.\n`exchange.durable` | boolean | Whether the exchange should survive broker restarts or not.\n`exchange.autoDelete` | boolean | Whether the exchange should be deleted when the last queue is unbound from it.\n`exchange.vhost` | string | The virtual host of the exchange. Defaults to `/`.\n`queue` | Map[string, any] | When `is`=`queue`, this object defines the queue properties.\n`queue.name` | string | The name of the queue. It MUST NOT exceed 255 characters long.\n`queue.durable` | boolean | Whether the queue should survive broker restarts or not.\n`queue.exclusive` | boolean | Whether the queue should be used only by one connection or not.\n`queue.autoDelete` | boolean | Whether the queue should be deleted when the last consumer unsubscribes.\n`queue.vhost` | string | The virtual host of the queue. Defaults to `/`.\n`bindingVersion` | string | The version of this binding. If omitted, "0.3.0" MUST be assumed.\n\nThis object MUST contain only the properties defined above.\n\n##### Example\n\n\n\\\nYAML\n```yaml\nchannels:\n userSignup:\n address: \'user/signup\'\n bindings:\n amqp:\n is: routingKey\n exchange:\n name: myExchange\n type: topic\n durable: true\n autoDelete: false\n vhost: /\n bindingVersion: 0.3.0\n```', + targetSpecs: AsyncAPI3, }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/allowed-fields.ts new file mode 100644 index 0000000000..743252020c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/allowed-fields.ts @@ -0,0 +1,23 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: DiagnosticSeverity.Error, + linterFunction: 'allowedFields', + linterParams: [['is', 'exchange', 'queue', 'bindingVersion']], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/exchange--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/exchange--type.ts new file mode 100644 index 0000000000..290ef4c444 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/exchange--type.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const exchangeTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_CHANNEL_BINDING_FIELD_EXCHANGE_TYPE, + source: 'apilint', + message: "'exchange' value must be an object", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintType', + linterParams: ['object'], + marker: 'value', + target: 'exchange', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default exchangeTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/index.ts new file mode 100644 index 0000000000..c4b7ffeb48 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/index.ts @@ -0,0 +1,8 @@ +import allowedFieldsLint from './allowed-fields.ts'; +import exchangeTypeLint from './exchange--type.ts'; +import isEqualsLint from './is--equals.ts'; +import queueTypeLint from './queue--type.ts'; + +const lints = [exchangeTypeLint, isEqualsLint, queueTypeLint, allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/is--equals.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/is--equals.ts new file mode 100644 index 0000000000..0e35681995 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/is--equals.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const isEqualsLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_CHANNEL_BINDING_FIELD_IS_EQUALS, + source: 'apilint', + message: "'is' must be one of allowed values", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintValueOrArray', + linterParams: [['queue', 'routingKey']], + marker: 'value', + target: 'is', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default isEqualsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/queue--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/queue--type.ts new file mode 100644 index 0000000000..67759fbcb6 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/0-3-0/queue--type.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const queueTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_CHANNEL_BINDING_FIELD_QUEUE_TYPE, + source: 'apilint', + message: "'queue' value must be an object", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintType', + linterParams: ['object'], + marker: 'value', + target: 'queue', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default queueTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/index.ts index d8067641f0..eec31d1db9 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/lint/index.ts @@ -1,11 +1,13 @@ import channelBinding0_1_0Lints from './0-1-0/index.ts'; import channelBinding0_2_0Lints from './0-2-0/index.ts'; +import channelBinding0_3_0Lints from './0-3-0/index.ts'; import channelBindingLatestLints from './latest/index.ts'; import bindingVersionTypeLint from './binding-version--type.ts'; const lints = [ ...channelBinding0_1_0Lints, ...channelBinding0_2_0Lints, + ...channelBinding0_3_0Lints, ...channelBindingLatestLints, bindingVersionTypeLint, ]; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-1-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-1-0.ts index 41a39288b3..3bf026d23a 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-1-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-1-0.ts @@ -14,7 +14,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'A MIME encoding for the message content.', + value: '`string`\n\\\n\\\nA MIME encoding for the message content.', }, conditions: [ { @@ -33,7 +33,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Application-specific message type.', + value: '`string`\n\\\n\\\nApplication-specific message type.', }, conditions: [ { @@ -52,7 +52,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.2.0" MUST be assumed.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-2-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-2-0.ts index 0ce961ddde..396c02db77 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-2-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-2-0.ts @@ -14,7 +14,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'A MIME encoding for the message content.', + value: '`string`\n\\\n\\\nA MIME encoding for the message content.', }, conditions: [ { @@ -33,7 +33,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Application-specific message type.', + value: '`string`\n\\\n\\\nApplication-specific message type.', }, conditions: [ { @@ -52,7 +52,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.2.0" MUST be assumed.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-3-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-3-0.ts new file mode 100644 index 0000000000..aba33b4172 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-3-0.ts @@ -0,0 +1,67 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types.ts'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'contentEncoding', + insertText: 'contentEncoding', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`string`\n\\\n\\\nA MIME encoding for the message content.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'messageType', + insertText: 'messageType', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`string`\n\\\n\\\nApplication-specific message type.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'bindingVersion', + insertText: 'bindingVersion', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/index.ts index cbb0de5872..280702b0d7 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/index.ts @@ -1,5 +1,6 @@ import completion0_1_0Items from './0-1-0.ts'; import completion0_2_0Items from './0-2-0.ts'; +import completion0_3_0Items from './0-3-0.ts'; import completionLatestItems from './latest.ts'; import { ApidomCompletionItem, @@ -10,6 +11,7 @@ import { const completion: ApidomCompletionItem[] = [ ...completion0_1_0Items, ...completion0_2_0Items, + ...completion0_3_0Items, ...completionLatestItems, { label: 'bindingVersion', @@ -20,7 +22,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: 'The version of this binding. If omitted, "0.3.0" MUST be assumed.', }, }, { @@ -41,6 +43,15 @@ const completion: ApidomCompletionItem[] = [ type: CompletionType.VALUE, insertTextFormat: 2, }, + { + target: 'bindingVersion', + label: '0.3.0', + insertText: '0.3.0', + kind: 12, + format: CompletionFormat.QUOTED_FORCED, + type: CompletionType.VALUE, + insertTextFormat: 2, + }, ]; export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/latest.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/latest.ts index 89f8f9e19a..e0b2aee6e5 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/latest.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/latest.ts @@ -14,7 +14,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'A MIME encoding for the message content.', + value: '`string`\n\\\n\\\nA MIME encoding for the message content.', }, conditions: [ { @@ -32,7 +32,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Application-specific message type.', + value: '`string`\n\\\n\\\nApplication-specific message type.', }, conditions: [ { @@ -50,7 +50,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/documentation.ts index edf6c4a9ce..b33699788c 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/documentation.ts @@ -1,18 +1,25 @@ +import { AsyncAPI2, AsyncAPI3 } from '../../../target-specs.ts'; + const documentation = [ { target: 'contentEncoding', - docs: 'A MIME encoding for the message content.', + docs: '`string`\n\\\n\\\nA MIME encoding for the message content.', }, { target: 'messageType', - docs: 'Application-specific message type.', + docs: '`string`\n\\\n\\\nApplication-specific message type.', }, { target: 'bindingVersion', - docs: 'The version of this binding. If omitted, "0.3.0" MUST be assumed.', + docs: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, { - docs: '#### [Message Binding Object](https://github.com/asyncapi/bindings/blob/master/amqp#message)\n\nThis object contains information about the message representation in AMQP.\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`contentEncoding` | string | A MIME encoding for the message content.\n`messageType` | string | Application-specific message type.\n`bindingVersion` | string | The version of this binding. If omitted, "0.2.0" MUST be assumed.\n\nThis object MUST contain only the properties defined above.\n\n\n\\\nYAML\n```yaml\nchannels:\n user/signup:\n publish:\n message:\n bindings:\n amqp:\n contentEncoding: gzip\n messageType: \'user.signup\'\n bindingVersion: 0.2.0\n```', + docs: '#### [Message Binding Object](https://github.com/asyncapi/bindings/blob/master/amqp#message)\n\nThis object contains information about the message representation in AMQP.\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`contentEncoding` | string | A MIME encoding for the message content.\n`messageType` | string | Application-specific message type.\n`bindingVersion` | string | The version of this binding. If omitted, "0.3.0" MUST be assumed.\n\nThis object MUST contain only the properties defined above.\n\n\n\\\nYAML\n```yaml\nchannels:\n user/signup:\n publish:\n message:\n bindings:\n amqp:\n contentEncoding: gzip\n messageType: \'user.signup\'\n bindingVersion: 0.3.0\n```', + targetSpecs: AsyncAPI2, + }, + { + docs: "#### [Message Binding Object](https://github.com/asyncapi/bindings/blob/master/amqp#message)\n\nThis object contains information about the message representation in AMQP.\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`contentEncoding` | string | A MIME encoding for the message content.\n`messageType` | string | Application-specific message type.\n`bindingVersion` | string | The version of this binding. If omitted, \"0.3.0\" MUST be assumed.\n\nThis object MUST contain only the properties defined above.\n\n\n\\\nYAML\n```yaml\nchannels:\n userSignup:\n address: 'user/signup'\n messages:\n userSignupMessage:\n bindings:\n amqp:\n contentEncoding: gzip\n messageType: 'user.signup'\n bindingVersion: 0.3.0\n```", + targetSpecs: AsyncAPI3, }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/allowed-fields.ts new file mode 100644 index 0000000000..046cfbb42c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/allowed-fields.ts @@ -0,0 +1,23 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields.', + severity: DiagnosticSeverity.Error, + linterFunction: 'allowedFields', + linterParams: [['contentEncoding', 'messageType', 'bindingVersion']], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/content-encoding--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/content-encoding--type.ts new file mode 100644 index 0000000000..cf965e30d5 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/content-encoding--type.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const contentEncodingTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_MESSAGE_BINDING_FIELD_CONTENT_ENCODING_TYPE, + source: 'apilint', + message: "'contentEncoding' value must be a string", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintType', + linterParams: ['string'], + marker: 'value', + target: 'contentEncoding', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default contentEncodingTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/index.ts new file mode 100644 index 0000000000..d0d3fdd891 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/index.ts @@ -0,0 +1,7 @@ +import allowedFieldsLint from './allowed-fields.ts'; +import contentEncodingTypeLint from './content-encoding--type.ts'; +import messageTypeTypeLint from './message-type--type.ts'; + +const lints = [contentEncodingTypeLint, messageTypeTypeLint, allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/message-type--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/message-type--type.ts new file mode 100644 index 0000000000..6d5f22d9d2 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/0-3-0/message-type--type.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const messageTypeTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_MESSAGE_BINDING_FIELD_MESSAGE_TYPE_TYPE, + source: 'apilint', + message: "'messageType' value must be a string", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintType', + linterParams: ['string'], + marker: 'value', + target: 'messageType', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default messageTypeTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/index.ts index 11d88c5438..1381961c4d 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/lint/index.ts @@ -1,11 +1,13 @@ import messageBinding0_1_0Lints from './0-1-0/index.ts'; import messageBinding0_2_0Lints from './0-2-0/index.ts'; +import messageBinding0_3_0Lints from './0-3-0/index.ts'; import messageBindingLatestLints from './latest/index.ts'; import bindingVersionTypeLint from './binding-version--type.ts'; const lints = [ ...messageBinding0_1_0Lints, ...messageBinding0_2_0Lints, + ...messageBinding0_3_0Lints, ...messageBindingLatestLints, bindingVersionTypeLint, ]; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-1-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-1-0.ts index 65ec828659..c74b64513c 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-1-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-1-0.ts @@ -3,6 +3,7 @@ import { CompletionFormat, CompletionType, } from '../../../../../../apidom-language-types.ts'; +import { AsyncAPI2, AsyncAPI3 } from '../../../../target-specs.ts'; const completion: ApidomCompletionItem[] = [ { @@ -15,8 +16,30 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - '`integer`\n\\\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'expiration', + insertText: 'expiration', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\nApplies to `receive, send`.\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + }, + targetSpecs: AsyncAPI3, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -34,8 +57,31 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Identifies the user who has sent the message.', + value: + '`string`\n\\\nApplies to `publish, subscribe`.\n\\\nIdentifies the user who has sent the message.', }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'userId', + insertText: 'userId', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`string`\n\\\nApplies to `receive, send`.\n\\\nIdentifies the user who has sent the message.', + }, + targetSpecs: AsyncAPI3, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -54,8 +100,50 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - '[string]`\n\\\n\\\nThe routing keys the message should be routed to at the time of publishing.', + '`[string]`\n\\\nApplies to `publish, subscribe`.\n\\\nThe routing keys the message should be routed to at the time of publishing.', }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'cc', + insertText: 'cc', + kind: 14, + format: CompletionFormat.ARRAY, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`[string]`\n\\\nApplies to `receive, send`.\n\\\nThe routing keys the message should be routed to at the time of publishing.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'priority', + insertText: 'priority', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nA priority for the message.', + }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -73,8 +161,30 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`integer`\n\\\n\\\nA priority for the message.', + value: '`integer`\n\\\nApplies to `receive, send`.\n\\\nA priority for the message.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'deliveryMode', + insertText: 'deliveryMode', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -93,8 +203,9 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - '`integer`\n\\\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', + '`integer`\n\\\nApplies to `receive, send`.\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', }, + targetSpecs: AsyncAPI3, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -112,8 +223,50 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nWhether the message is mandatory or not.', + value: '`boolean`\n\\\nApplies to `publish`.\n\\\nWhether the message is mandatory or not.', }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'mandatory', + insertText: 'mandatory', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`boolean`\n\\\nApplies to `receive`.\n\\\nWhether the message is mandatory or not.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'bcc', + insertText: 'bcc', + kind: 14, + format: CompletionFormat.ARRAY, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`[string]`\n\\\nApplies to `publish`.\n\\\nLike cc but consumers will not receive this information.', + }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -131,8 +284,31 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`[string]`\n\\\n\\\nLike cc but consumers will not receive this information.', + value: + '`[string]`\n\\\nApplies to `receive`.\n\\\nLike cc but consumers will not receive this information.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'replyTo', + insertText: 'replyTo', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`string`\n\\\nApplies to `publish, subscribe`.\n\\\nName of the queue where the consumer should send the response.', }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -150,8 +326,31 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nName of the queue where the consumer should send the response.', + value: + '`string`\n\\\nApplies to `receive, send`.\n\\\nName of the queue where the consumer should send the response.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'timestamp', + insertText: 'timestamp', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`boolean`\n\\\nApplies to `publish, subscribe`.\n\\\nWhether the message should include a timestamp or not.', }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -169,8 +368,31 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nWhether the message should include a timestamp or not.', + value: + '`boolean`\n\\\nApplies to `receive, send`.\n\\\nWhether the message should include a timestamp or not.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'ack', + insertText: 'ack', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`boolean`\n\\\nApplies to `subscribe`.\n\\\nWhether the consumer should ack the message or not.', }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -188,8 +410,10 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nWhether the consumer should ack the message or not.', + value: + '`boolean`\n\\\nApplies to `send`.\n\\\nWhether the consumer should ack the message or not.', }, + targetSpecs: AsyncAPI3, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -207,7 +431,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.2.0" MUST be assumed.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-2-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-2-0.ts index fceeec823c..2409ec7478 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-2-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-2-0.ts @@ -3,6 +3,7 @@ import { CompletionFormat, CompletionType, } from '../../../../../../apidom-language-types.ts'; +import { AsyncAPI2, AsyncAPI3 } from '../../../../target-specs.ts'; const completion: ApidomCompletionItem[] = [ { @@ -15,8 +16,30 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - '`integer`\n\\\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'expiration', + insertText: 'expiration', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\nApplies to `receive, send`.\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + }, + targetSpecs: AsyncAPI3, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -34,8 +57,31 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Identifies the user who has sent the message.', + value: + '`string`\n\\\nApplies to `publish, subscribe`.\n\\\nIdentifies the user who has sent the message.', }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'userId', + insertText: 'userId', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`string`\n\\\nApplies to `receive, send`.\n\\\nIdentifies the user who has sent the message.', + }, + targetSpecs: AsyncAPI3, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -54,8 +100,50 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - '[string]`\n\\\n\\\nThe routing keys the message should be routed to at the time of publishing.', + '`[string]`\n\\\nApplies to `publish, subscribe`.\n\\\nThe routing keys the message should be routed to at the time of publishing.', }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'cc', + insertText: 'cc', + kind: 14, + format: CompletionFormat.ARRAY, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`[string]`\n\\\nApplies to `receive, send`.\n\\\nThe routing keys the message should be routed to at the time of publishing.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'priority', + insertText: 'priority', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nA priority for the message.', + }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -73,8 +161,30 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`integer`\n\\\n\\\nA priority for the message.', + value: '`integer`\n\\\nApplies to `receive, send`.\n\\\nA priority for the message.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'deliveryMode', + insertText: 'deliveryMode', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -93,8 +203,9 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - '`integer`\n\\\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', + '`integer`\n\\\nApplies to `receive, send`.\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', }, + targetSpecs: AsyncAPI3, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -112,8 +223,50 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nWhether the message is mandatory or not.', + value: '`boolean`\n\\\nApplies to `publish`.\n\\\nWhether the message is mandatory or not.', }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'mandatory', + insertText: 'mandatory', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`boolean`\n\\\nApplies to `receive`.\n\\\nWhether the message is mandatory or not.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'bcc', + insertText: 'bcc', + kind: 14, + format: CompletionFormat.ARRAY, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`[string]`\n\\\nApplies to `publish`.\n\\\nLike cc but consumers will not receive this information.', + }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -131,8 +284,31 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`[string]`\n\\\n\\\nLike cc but consumers will not receive this information.', + value: + '`[string]`\n\\\nApplies to `receive`.\n\\\nLike cc but consumers will not receive this information.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'replyTo', + insertText: 'replyTo', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`string`\n\\\nApplies to `publish, subscribe`.\n\\\nName of the queue where the consumer should send the response.', }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -150,8 +326,31 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nName of the queue where the consumer should send the response.', + value: + '`string`\n\\\nApplies to `receive, send`.\n\\\nName of the queue where the consumer should send the response.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'timestamp', + insertText: 'timestamp', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`boolean`\n\\\nApplies to `publish, subscribe`.\n\\\nWhether the message should include a timestamp or not.', }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -169,8 +368,31 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nWhether the message should include a timestamp or not.', + value: + '`boolean`\n\\\nApplies to `receive, send`.\n\\\nWhether the message should include a timestamp or not.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'ack', + insertText: 'ack', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`boolean`\n\\\nApplies to `subscribe`.\n\\\nWhether the consumer should ack the message or not.', }, + targetSpecs: AsyncAPI2, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -188,8 +410,10 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nWhether the consumer should ack the message or not.', + value: + '`boolean`\n\\\nApplies to `send`.\n\\\nWhether the consumer should ack the message or not.', }, + targetSpecs: AsyncAPI3, conditions: [ { targets: [{ path: 'bindingVersion' }], @@ -207,7 +431,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.2.0" MUST be assumed.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-3-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-3-0.ts new file mode 100644 index 0000000000..50377760c9 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-3-0.ts @@ -0,0 +1,436 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types.ts'; +import { AsyncAPI2, AsyncAPI3 } from '../../../../target-specs.ts'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'expiration', + insertText: 'expiration', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'expiration', + insertText: 'expiration', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\nApplies to `receive, send`.\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'userId', + insertText: 'userId', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`string`\n\\\nApplies to `publish, subscribe`.\n\\\nIdentifies the user who has sent the message.', + }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'userId', + insertText: 'userId', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`string`\n\\\nApplies to `receive, send`.\n\\\nIdentifies the user who has sent the message.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'cc', + insertText: 'cc', + kind: 14, + format: CompletionFormat.ARRAY, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`[string]`\n\\\nApplies to `publish, subscribe`.\n\\\nThe routing keys the message should be routed to at the time of publishing.', + }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'cc', + insertText: 'cc', + kind: 14, + format: CompletionFormat.ARRAY, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`[string]`\n\\\nApplies to `receive, send`.\n\\\nThe routing keys the message should be routed to at the time of publishing.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'priority', + insertText: 'priority', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nA priority for the message.', + }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'priority', + insertText: 'priority', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`integer`\n\\\nApplies to `receive, send`.\n\\\nA priority for the message.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'deliveryMode', + insertText: 'deliveryMode', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', + }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'deliveryMode', + insertText: 'deliveryMode', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\nApplies to `receive, send`.\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'mandatory', + insertText: 'mandatory', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`boolean`\n\\\nApplies to `publish`.\n\\\nWhether the message is mandatory or not.', + }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'mandatory', + insertText: 'mandatory', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`boolean`\n\\\nApplies to `receive`.\n\\\nWhether the message is mandatory or not.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'bcc', + insertText: 'bcc', + kind: 14, + format: CompletionFormat.ARRAY, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`[string]`\n\\\nApplies to `publish`.\n\\\nLike cc but consumers will not receive this information.', + }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'bcc', + insertText: 'bcc', + kind: 14, + format: CompletionFormat.ARRAY, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`[string]`\n\\\nApplies to `receive`.\n\\\nLike cc but consumers will not receive this information.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'timestamp', + insertText: 'timestamp', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`boolean`\n\\\nApplies to `publish, subscribe`.\n\\\nWhether the message should include a timestamp or not.', + }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'timestamp', + insertText: 'timestamp', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`boolean`\n\\\nApplies to `receive, send`.\n\\\nWhether the message should include a timestamp or not.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'ack', + insertText: 'ack', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`boolean`\n\\\nApplies to `subscribe`.\n\\\nWhether the consumer should ack the message or not.', + }, + targetSpecs: AsyncAPI2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'ack', + insertText: 'ack', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`boolean`\n\\\nApplies to `send`.\n\\\nWhether the consumer should ack the message or not.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'bindingVersion', + insertText: 'bindingVersion', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + target: 'deliveryMode', + label: '1', + insertText: '1', + kind: 12, + format: CompletionFormat.UNQUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + target: 'deliveryMode', + label: '2', + insertText: '2', + kind: 12, + format: CompletionFormat.UNQUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/index.ts index cbb0de5872..0b3da7568b 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/index.ts @@ -1,5 +1,6 @@ import completion0_1_0Items from './0-1-0.ts'; import completion0_2_0Items from './0-2-0.ts'; +import completion0_3_0Items from './0-3-0.ts'; import completionLatestItems from './latest.ts'; import { ApidomCompletionItem, @@ -10,6 +11,7 @@ import { const completion: ApidomCompletionItem[] = [ ...completion0_1_0Items, ...completion0_2_0Items, + ...completion0_3_0Items, ...completionLatestItems, { label: 'bindingVersion', @@ -20,7 +22,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, }, { @@ -41,6 +43,15 @@ const completion: ApidomCompletionItem[] = [ type: CompletionType.VALUE, insertTextFormat: 2, }, + { + target: 'bindingVersion', + label: '0.3.0', + insertText: '0.3.0', + kind: 12, + format: CompletionFormat.QUOTED_FORCED, + type: CompletionType.VALUE, + insertTextFormat: 2, + }, ]; export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/latest.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/latest.ts index 4287351a92..f8a1778aa6 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/latest.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/latest.ts @@ -3,6 +3,7 @@ import { CompletionFormat, CompletionType, } from '../../../../../../apidom-language-types.ts'; +import { AsyncAPI2, AsyncAPI3 } from '../../../../target-specs.ts'; const completion: ApidomCompletionItem[] = [ { @@ -15,8 +16,49 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - '`integer`\n\\\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', }, + targetSpecs: AsyncAPI2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + label: 'expiration', + insertText: 'expiration', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\nApplies to `receive, send`.\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + label: 'userId', + insertText: 'userId', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`string`\n\\\nApplies to `publish, subscribe`.\n\\\nIdentifies the user who has sent the message.', + }, + targetSpecs: AsyncAPI2, conditions: [ { function: 'missingField', @@ -33,8 +75,30 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Identifies the user who has sent the message.', + value: + '`string`\n\\\nApplies to `receive, send`.\n\\\nIdentifies the user who has sent the message.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + label: 'cc', + insertText: 'cc', + kind: 14, + format: CompletionFormat.ARRAY, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`[string]`\n\\\nApplies to `publish, subscribe`.\n\\\nThe routing keys the message should be routed to at the time of publishing.', }, + targetSpecs: AsyncAPI2, conditions: [ { function: 'missingField', @@ -52,8 +116,28 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - '[string]`\n\\\n\\\nThe routing keys the message should be routed to at the time of publishing.', + '`[string]`\n\\\nApplies to `receive, send`.\n\\\nThe routing keys the message should be routed to at the time of publishing.', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + label: 'priority', + insertText: 'priority', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nA priority for the message.', }, + targetSpecs: AsyncAPI2, conditions: [ { function: 'missingField', @@ -70,8 +154,9 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`integer`\n\\\n\\\nA priority for the message.', + value: '`integer`\n\\\nApplies to `receive, send`.\n\\\nA priority for the message.', }, + targetSpecs: AsyncAPI3, conditions: [ { function: 'missingField', @@ -89,8 +174,48 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - '`integer`\n\\\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', + '`integer`\n\\\nApplies to `publish, subscribe`.\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', }, + targetSpecs: AsyncAPI2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + label: 'deliveryMode', + insertText: 'deliveryMode', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\nApplies to `receive, send`.\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', + }, + targetSpecs: AsyncAPI3, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + label: 'mandatory', + insertText: 'mandatory', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`boolean`\n\\\nApplies to `publish`.\n\\\nWhether the message is mandatory or not.', + }, + targetSpecs: AsyncAPI2, conditions: [ { function: 'missingField', @@ -107,8 +232,9 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nWhether the message is mandatory or not.', + value: '`boolean`\n\\\nApplies to `receive`.\n\\\nWhether the message is mandatory or not.', }, + targetSpecs: AsyncAPI3, conditions: [ { function: 'missingField', @@ -125,8 +251,10 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`[string]`\n\\\n\\\nLike cc but consumers will not receive this information.', + value: + '`[string]`\n\\\nApplies to `publish`.\n\\\nLike cc but consumers will not receive this information.', }, + targetSpecs: AsyncAPI2, conditions: [ { function: 'missingField', @@ -135,16 +263,18 @@ const completion: ApidomCompletionItem[] = [ ], }, { - label: 'replyTo', - insertText: 'replyTo', + label: 'bcc', + insertText: 'bcc', kind: 14, - format: CompletionFormat.QUOTED, + format: CompletionFormat.ARRAY, type: CompletionType.PROPERTY, insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nName of the queue where the consumer should send the response.', + value: + '`[string]`\n\\\nApplies to `receive`.\n\\\nLike cc but consumers will not receive this information.', }, + targetSpecs: AsyncAPI3, conditions: [ { function: 'missingField', @@ -161,8 +291,30 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nWhether the message should include a timestamp or not.', + value: + '`boolean`\n\\\nApplies to `publish, subscribe`.\n\\\nWhether the message should include a timestamp or not.', }, + targetSpecs: AsyncAPI2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + label: 'timestamp', + insertText: 'timestamp', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`boolean`\n\\\nApplies to `receive, send`.\n\\\nWhether the message should include a timestamp or not.', + }, + targetSpecs: AsyncAPI3, conditions: [ { function: 'missingField', @@ -179,8 +331,30 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`boolean`\n\\\n\\\nWhether the consumer should ack the message or not.', + value: + '`boolean`\n\\\nApplies to `subscribe`.\n\\\nWhether the consumer should ack the message or not.', + }, + targetSpecs: AsyncAPI2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + label: 'ack', + insertText: 'ack', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`boolean`\n\\\nApplies to `send`.\n\\\nWhether the consumer should ack the message or not.', }, + targetSpecs: AsyncAPI3, conditions: [ { function: 'missingField', @@ -197,7 +371,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/documentation.ts index 70d3b7892d..b3f27e9692 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/documentation.ts @@ -1,3 +1,5 @@ +import { AsyncAPI2, AsyncAPI3 } from '../../../target-specs.ts'; + const documentation = [ { target: 'expiration', @@ -5,7 +7,7 @@ const documentation = [ }, { target: 'userId', - docs: 'Identifies the user who has sent the message.', + docs: '`string`\n\\\n\\\nIdentifies the user who has sent the message.', }, { target: 'cc', @@ -29,7 +31,7 @@ const documentation = [ }, { target: 'replyTo', - docs: 'Name of the queue where the consumer should send the response.', + docs: '`string`\n\\\n\\\nName of the queue where the consumer should send the response.', }, { target: 'timestamp', @@ -41,10 +43,15 @@ const documentation = [ }, { target: 'bindingVersion', - docs: 'The version of this binding. If omitted, "0.3.0" MUST be assumed.', + docs: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, { - docs: "#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/amqp/README.md#operation-binding-object)\n\nThis object contains information about the operation representation in AMQP.\n\n##### Fixed Fields\n\nField Name | Type | Applies To | Description\n---|:---:|:---:|---\n`expiration` | integer | Publish, Subscribe | TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.\n`userId` | string | Publish, Subscribe | Identifies the user who has sent the message.\n`cc` | [string] | Publish, Subscribe | The routing keys the message should be routed to at the time of publishing.\n`priority` | integer | Publish, Subscribe | A priority for the message.\n`deliveryMode` | integer | Publish, Subscribe | Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).\n`mandatory` | boolean | Publish | Whether the message is mandatory or not.\n`bcc` | [string] | Publish | Like [cc](#operationBindingObjectCC) but consumers will not receive this information.\n`replyTo` | string | Publish, Subscribe | Name of the queue where the consumer should send the response.\n`timestamp` | boolean | Publish, Subscribe | Whether the message should include a timestamp or not.\n`ack` | boolean | Subscribe | Whether the consumer should ack the message or not.\n`bindingVersion` | string | Publish, Subscribe | The version of this binding. If omitted, \"0.2.0\" MUST be assumed.\n\nThis object MUST contain only the properties defined above.\n\n##### Example\n\n\n\\\nYAML\n```yaml\nchannels:\n user/signup:\n publish:\n bindings:\n amqp:\n expiration: 100000\n userId: guest\n cc: ['user.logs']\n priority: 10\n deliveryMode: 2\n mandatory: false\n bcc: ['external.audit']\n replyTo: user.signedup\n timestamp: true\n ack: false\n bindingVersion: 0.2.0\n```", + docs: "#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/amqp/README.md#operation-binding-object)\n\nThis object contains information about the operation representation in AMQP.\n\n##### Fixed Fields\n\nField Name | Type | Applies To | Description\n---|:---:|:---:|---\n`expiration` | integer | Publish, Subscribe | TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.\n`userId` | string | Publish, Subscribe | Identifies the user who has sent the message.\n`cc` | [string] | Publish, Subscribe | The routing keys the message should be routed to at the time of publishing.\n`priority` | integer | Publish, Subscribe | A priority for the message.\n`deliveryMode` | integer | Publish, Subscribe | Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).\n`mandatory` | boolean | Publish | Whether the message is mandatory or not.\n`bcc` | [string] | Publish | Like [cc](#operationBindingObjectCC) but consumers will not receive this information.\n`timestamp` | boolean | Publish, Subscribe | Whether the message should include a timestamp or not.\n`ack` | boolean | Subscribe | Whether the consumer should ack the message or not.\n`bindingVersion` | string | Publish, Subscribe | The version of this binding. If omitted, \"0.3.0\" MUST be assumed.\n\nThis object MUST contain only the properties defined above.\n\n##### Example\n\n\n\\\nYAML\n```yaml\nchannels:\n user/signup:\n publish:\n bindings:\n amqp:\n expiration: 100000\n userId: guest\n cc: ['user.logs']\n priority: 10\n deliveryMode: 2\n mandatory: false\n bcc: ['external.audit']\n timestamp: true\n ack: false\n bindingVersion: 0.3.0\n```", + targetSpecs: AsyncAPI2, + }, + { + docs: "#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/amqp/README.md#operation-binding-object)\n\nThis object contains information about the operation representation in AMQP.\n\n##### Fixed Fields\n\nField Name | Type | Applies To Action | Description\n---|:---:|:---:|---\n`expiration` | integer | receive, send | TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.\n`userId` | string | receive, send | Identifies the user who has sent the message.\n`cc` | [string] | receive, send | The routing keys the message should be routed to at the time of publishing.\n`priority` | integer | receive, send | A priority for the message.\n`deliveryMode` | integer | receive, send | Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).\n`mandatory` | boolean | receive | Whether the message is mandatory or not.\n`bcc` | [string] | receive | Like [cc](#operationBindingObjectCC) but consumers will not receive this information.\n`timestamp` | boolean | receive, send | Whether the message should include a timestamp or not.\n`ack` | boolean | send | Whether the consumer should ack the message or not.\n`bindingVersion` | string | receive, send | The version of this binding. If omitted, \"latest\" MUST be assumed.\n\nThis object MUST contain only the properties defined above.\n\n##### Example\n\n\n\\\nYAML\n```yaml\noperations:\n userSignup:\n action: receive\n bindings:\n amqp:\n expiration: 100000\n userId: guest\n cc: ['user.logs']\n priority: 10\n deliveryMode: 2\n mandatory: false\n bcc: ['external.audit']\n timestamp: true\n ack: false\n bindingVersion: 0.3.0\n```", + targetSpecs: AsyncAPI3, }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/act--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/act--type.ts new file mode 100644 index 0000000000..7373ab6a09 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/act--type.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const ackTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_ACK_TYPE, + source: 'apilint', + message: "'ack' value must be a boolean", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintType', + linterParams: ['boolean'], + marker: 'value', + target: 'ack', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default ackTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/allowed-fields.ts new file mode 100644 index 0000000000..617f85cf55 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/allowed-fields.ts @@ -0,0 +1,36 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields.', + severity: DiagnosticSeverity.Error, + linterFunction: 'allowedFields', + linterParams: [ + [ + 'expiration', + 'userId', + 'cc', + 'priority', + 'deliveryMode', + 'mandatory', + 'bcc', + 'timestamp', + 'ack', + 'bindingVersion', + ], + ], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/bcc--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/bcc--type.ts new file mode 100644 index 0000000000..2ff14d9bc7 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/bcc--type.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const bccTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_BCC_TYPE, + source: 'apilint', + message: "'bcc' must be an array of strings", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintArrayOfType', + linterParams: ['string'], + marker: 'key', + target: 'bcc', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default bccTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/cc--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/cc--type.ts new file mode 100644 index 0000000000..6a02ffb152 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/cc--type.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const ccTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_CC_TYPE, + source: 'apilint', + message: "'cc' must be an array of strings", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintArrayOfType', + linterParams: ['string'], + marker: 'key', + target: 'cc', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default ccTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/delivery-mode--equals.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/delivery-mode--equals.ts new file mode 100644 index 0000000000..b963581b60 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/delivery-mode--equals.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const deliveryModeEqualsLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_DELIVERY_MODE_EQUALS, + source: 'apilint', + message: "'deliveryMode' must be one of allowed values", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintValueOrArray', + linterParams: [[1, 2]], + marker: 'value', + target: 'deliveryMode', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default deliveryModeEqualsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/expiration--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/expiration--type.ts new file mode 100644 index 0000000000..67bb3e3b48 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/expiration--type.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const expirationTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_EXPIRATION_TYPE, + source: 'apilint', + message: "'expiration' must be a non-negative integer", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintNumber', + linterParams: [true, true, true], + marker: 'value', + target: 'expiration', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default expirationTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/index.ts new file mode 100644 index 0000000000..e17a542d12 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/index.ts @@ -0,0 +1,25 @@ +import allowedFieldsLint from './allowed-fields.ts'; +import expirationTypeLint from './expiration--type.ts'; +import userIdTypeLint from './user-id--type.ts'; +import ccTypeLint from './cc--type.ts'; +import priorityTypeLint from './priority--type.ts'; +import deliveryModeEqualsLint from './delivery-mode--equals.ts'; +import mandatoryTypeLint from './mandatory--type.ts'; +import bccTypeLint from './bcc--type.ts'; +import timestampTypeLint from './timestamp--type.ts'; +import ackTypeLint from './act--type.ts'; + +const lints = [ + expirationTypeLint, + userIdTypeLint, + ccTypeLint, + priorityTypeLint, + deliveryModeEqualsLint, + mandatoryTypeLint, + bccTypeLint, + timestampTypeLint, + ackTypeLint, + allowedFieldsLint, +]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/mandatory--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/mandatory--type.ts new file mode 100644 index 0000000000..6ef1dc070c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/mandatory--type.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const mandatoryTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_MANDATORY_TYPE, + source: 'apilint', + message: "'mandatory' value must be a boolean", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintType', + linterParams: ['boolean'], + marker: 'value', + target: 'mandatory', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default mandatoryTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/priority--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/priority--type.ts new file mode 100644 index 0000000000..479b731f2c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/priority--type.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const priorityTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_PRIORITY_TYPE, + source: 'apilint', + message: "'priority' must be an integer", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintNumber', + linterParams: [true], + marker: 'value', + target: 'priority', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default priorityTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/timestamp--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/timestamp--type.ts new file mode 100644 index 0000000000..aeffd36032 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/timestamp--type.ts @@ -0,0 +1,25 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const timestampTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_TIMESTAMP_TYPE, + source: 'apilint', + message: "'timestamp' value must be a boolean", + severity: DiagnosticSeverity.Error, + linterFunction: 'apilintType', + linterParams: ['boolean'], + marker: 'value', + target: 'timestamp', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default timestampTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/reply-to--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/user-id--type.ts similarity index 54% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/reply-to--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/user-id--type.ts index 170785a26e..a716760efc 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/reply-to--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-3-0/user-id--type.ts @@ -3,22 +3,23 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types'; import ApilintCodes from '../../../../../../codes.ts'; import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; -const replyToTypeLint: LinterMeta = { - code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_REPLY_TO_TYPE, +const userIdTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_USER_ID_TYPE, source: 'apilint', - message: "'replyTo' value must be a string", + message: "'userId' value must be a string", severity: DiagnosticSeverity.Error, linterFunction: 'apilintType', linterParams: ['string'], marker: 'value', - target: 'replyTo', + target: 'userId', data: {}, conditions: [ { - function: 'missingField', - params: ['bindingVersion'], + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], }, ], }; -export default replyToTypeLint; +export default userIdTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/index.ts index 45e73af3d8..10556032ee 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/index.ts @@ -1,11 +1,13 @@ import operationBinding0_1_0Lints from './0-1-0/index.ts'; import operationBinding0_2_0Lints from './0-2-0/index.ts'; +import operationBinding0_3_0Lints from './0-3-0/index.ts'; import operationBindingLatestLints from './latest/index.ts'; import bindingVersionTypeLint from './binding-version--type.ts'; const lints = [ ...operationBinding0_1_0Lints, ...operationBinding0_2_0Lints, + ...operationBinding0_3_0Lints, ...operationBindingLatestLints, bindingVersionTypeLint, ]; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/allowed-fields.ts index 3b355643f3..5e48488580 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/allowed-fields.ts @@ -18,7 +18,6 @@ const allowedFieldsLint: LinterMeta = { 'deliveryMode', 'mandatory', 'bcc', - 'replyTo', 'timestamp', 'ack', 'bindingVersion', diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/index.ts index c8e544b986..e17a542d12 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/index.ts @@ -6,7 +6,6 @@ import priorityTypeLint from './priority--type.ts'; import deliveryModeEqualsLint from './delivery-mode--equals.ts'; import mandatoryTypeLint from './mandatory--type.ts'; import bccTypeLint from './bcc--type.ts'; -import replyToTypeLint from './reply-to--type.ts'; import timestampTypeLint from './timestamp--type.ts'; import ackTypeLint from './act--type.ts'; @@ -18,7 +17,6 @@ const lints = [ deliveryModeEqualsLint, mandatoryTypeLint, bccTypeLint, - replyToTypeLint, timestampTypeLint, ackTypeLint, allowedFieldsLint, diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-1-0/allowed-fields.ts index 709121fad1..1304f42fb9 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-1-0/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-1-0/allowed-fields.ts @@ -6,10 +6,10 @@ import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, source: 'apilint', - message: 'Object includes not allowed fields.', + message: 'This object MUST NOT contain any properties. Its name is reserved for future use.', severity: DiagnosticSeverity.Error, linterFunction: 'allowedFields', - linterParams: [['contentEncoding', 'messageType', 'bindingVersion']], + linterParams: [[]], marker: 'key', conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-2-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-2-0/allowed-fields.ts index 0f44f31e79..7cec7d6301 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-2-0/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-2-0/allowed-fields.ts @@ -6,10 +6,10 @@ import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, source: 'apilint', - message: 'Object includes not allowed fields.', + message: 'This object MUST NOT contain any properties. Its name is reserved for future use.', severity: DiagnosticSeverity.Error, linterFunction: 'allowedFields', - linterParams: [['contentEncoding', 'messageType', 'bindingVersion']], + linterParams: [[]], marker: 'key', conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-3-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-3-0/allowed-fields.ts new file mode 100644 index 0000000000..021dca1b84 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-3-0/allowed-fields.ts @@ -0,0 +1,23 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../../../../codes.ts'; +import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'This object MUST NOT contain any properties. Its name is reserved for future use.', + severity: DiagnosticSeverity.Error, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-3-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-3-0/index.ts new file mode 100644 index 0000000000..47f7d48761 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/0-3-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields.ts'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/index.ts index cd272a1742..285c8158cd 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/index.ts @@ -1,7 +1,13 @@ import serverBinding0_1_0Lints from './0-1-0/index.ts'; import serverBinding0_2_0Lints from './0-2-0/index.ts'; +import serverBinding0_3_0Lints from './0-3-0/index.ts'; import serverBindingLatestLints from './latest/index.ts'; -const lints = [...serverBinding0_1_0Lints, ...serverBinding0_2_0Lints, ...serverBindingLatestLints]; +const lints = [ + ...serverBinding0_1_0Lints, + ...serverBinding0_2_0Lints, + ...serverBinding0_3_0Lints, + ...serverBindingLatestLints, +]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/latest/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/latest/allowed-fields.ts index 61d64a9ebb..1d1ec3b58b 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/latest/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/server-binding/lint/latest/allowed-fields.ts @@ -6,10 +6,10 @@ import { LinterMeta } from '../../../../../../../apidom-language-types.ts'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, source: 'apilint', - message: 'Object includes not allowed fields.', + message: 'This object MUST NOT contain any properties. Its name is reserved for future use.', severity: DiagnosticSeverity.Error, linterFunction: 'allowedFields', - linterParams: [['contentEncoding', 'messageType', 'bindingVersion']], + linterParams: [[]], marker: 'key', conditions: [ { diff --git a/packages/apidom-ls/test/asyncapi-amqp-bindings.ts b/packages/apidom-ls/test/asyncapi-amqp-bindings.ts new file mode 100644 index 0000000000..fbb8d38e22 --- /dev/null +++ b/packages/apidom-ls/test/asyncapi-amqp-bindings.ts @@ -0,0 +1,927 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { assert } from 'chai'; +import { TextDocument } from 'vscode-languageserver-textdocument'; +import { Diagnostic, DiagnosticSeverity } from 'vscode-languageserver-types'; + +import getLanguageService from '../src/apidom-language-service.ts'; +import { + LanguageService, + LanguageServiceContext, + ValidationContext, +} from '../src/apidom-language-types.ts'; +import { metadata } from './metadata.ts'; +import { logPerformance, logLevel } from './test-utils.ts'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const bindingsPath = path.join(__dirname, 'fixtures', 'validation', 'asyncapi', 'bindings', 'amqp'); + +const specServerBindingAllowedFields010 = fs + .readFileSync(path.join(bindingsPath, 'amqp-server-binding-allowed-fields-0-1-0.yaml')) + .toString(); + +const specServerBindingAllowedFields020 = fs + .readFileSync(path.join(bindingsPath, 'amqp-server-binding-allowed-fields-0-2-0.yaml')) + .toString(); + +const specServerBindingAllowedFields030 = fs + .readFileSync(path.join(bindingsPath, 'amqp-server-binding-allowed-fields-0-3-0.yaml')) + .toString(); + +const specServerBindingAllowedFieldsLatest = fs + .readFileSync(path.join(bindingsPath, 'amqp-server-binding-allowed-fields-latest.yaml')) + .toString(); + +const specChannelBindingAllowedFields010 = fs + .readFileSync(path.join(bindingsPath, 'amqp-channel-binding-allowed-fields-0-1-0.yaml')) + .toString(); + +const specChannelBindingAllowedFields020 = fs + .readFileSync(path.join(bindingsPath, 'amqp-channel-binding-allowed-fields-0-2-0.yaml')) + .toString(); + +const specChannelBindingAllowedFields030 = fs + .readFileSync(path.join(bindingsPath, 'amqp-channel-binding-allowed-fields-0-3-0.yaml')) + .toString(); + +const specChannelBindingAllowedFieldsLatest = fs + .readFileSync(path.join(bindingsPath, 'amqp-channel-binding-allowed-fields-latest.yaml')) + .toString(); + +const specChannelBindingIsEquals = fs + .readFileSync(path.join(bindingsPath, 'amqp-channel-binding-is-equals.yaml')) + .toString(); + +const specMessageBindingAllowedFields010 = fs + .readFileSync(path.join(bindingsPath, 'amqp-message-binding-allowed-fields-0-1-0.yaml')) + .toString(); + +const specMessageBindingAllowedFields020 = fs + .readFileSync(path.join(bindingsPath, 'amqp-message-binding-allowed-fields-0-2-0.yaml')) + .toString(); + +const specMessageBindingAllowedFields030 = fs + .readFileSync(path.join(bindingsPath, 'amqp-message-binding-allowed-fields-0-3-0.yaml')) + .toString(); + +const specMessageBindingAllowedFieldsLatest = fs + .readFileSync(path.join(bindingsPath, 'amqp-message-binding-allowed-fields-latest.yaml')) + .toString(); + +const specMessageBindingContentEncodingType = fs + .readFileSync(path.join(bindingsPath, 'amqp-message-binding-content-encoding-type.yaml')) + .toString(); + +const specOperationBindingAllowedFields010 = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-allowed-fields-0-1-0.yaml')) + .toString(); + +const specOperationBindingAllowedFields020 = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-allowed-fields-0-2-0.yaml')) + .toString(); + +const specOperationBindingAllowedFields030 = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-allowed-fields-0-3-0.yaml')) + .toString(); + +const specOperationBindingAllowedFieldsLatest = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-allowed-fields-latest.yaml')) + .toString(); + +const specOperationBindingDeliveryModeEquals = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-delivery-mode-equals.yaml')) + .toString(); + +const specChannelBindingExchangeType = fs + .readFileSync(path.join(bindingsPath, 'amqp-channel-binding-exchange-type.yaml')) + .toString(); + +const specChannelBindingQueueType = fs + .readFileSync(path.join(bindingsPath, 'amqp-channel-binding-queue-type.yaml')) + .toString(); + +const specMessageBindingMessageTypeType = fs + .readFileSync(path.join(bindingsPath, 'amqp-message-binding-message-type-type.yaml')) + .toString(); + +const specOperationBindingExpirationType = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-expiration-type.yaml')) + .toString(); + +const specOperationBindingUserIdType = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-user-id-type.yaml')) + .toString(); + +const specOperationBindingCcType = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-cc-type.yaml')) + .toString(); + +const specOperationBindingPriorityType = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-priority-type.yaml')) + .toString(); + +const specOperationBindingMandatoryType = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-mandatory-type.yaml')) + .toString(); + +const specOperationBindingBccType = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-bcc-type.yaml')) + .toString(); + +const specOperationBindingReplyToType = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-reply-to-type.yaml')) + .toString(); + +const specOperationBindingTimestampType = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-timestamp-type.yaml')) + .toString(); + +const specOperationBindingAckType = fs + .readFileSync(path.join(bindingsPath, 'amqp-operation-binding-ack-type.yaml')) + .toString(); + +describe('asyncapi AMQP bindings test', function () { + const context: LanguageServiceContext = { + metadata: metadata(), + validatorProviders: [], + performanceLogs: logPerformance, + logLevel, + }; + + const languageService: LanguageService = getLanguageService(context); + + const validationContext: ValidationContext = { + comments: DiagnosticSeverity.Error, + maxNumberOfProblems: 100, + relatedInformation: false, + }; + + after(function () { + languageService.terminate(); + }); + + it('amqp server binding - not allowed fields (0.1.0)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-server-binding-allowed-fields-0-1-0.yaml', + 'yaml', + 0, + specServerBindingAllowedFields010, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 9, character: 6 }, + end: { line: 9, character: 10 }, + }, + message: + 'This object MUST NOT contain any properties. Its name is reserved for future use.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp server binding - not allowed fields (0.2.0)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-server-binding-allowed-fields-0-2-0.yaml', + 'yaml', + 0, + specServerBindingAllowedFields020, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 9, character: 6 }, + end: { line: 9, character: 10 }, + }, + message: + 'This object MUST NOT contain any properties. Its name is reserved for future use.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp server binding - not allowed fields (0.3.0)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-server-binding-allowed-fields-0-3-0.yaml', + 'yaml', + 0, + specServerBindingAllowedFields030, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 9, character: 6 }, + end: { line: 9, character: 10 }, + }, + message: + 'This object MUST NOT contain any properties. Its name is reserved for future use.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp server binding - not allowed fields (latest)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-server-binding-allowed-fields-latest.yaml', + 'yaml', + 0, + specServerBindingAllowedFieldsLatest, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 9, character: 6 }, + end: { line: 9, character: 10 }, + }, + message: + 'This object MUST NOT contain any properties. Its name is reserved for future use.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp channel binding - not allowed fields (0.1.0)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-channel-binding-allowed-fields-0-1-0.yaml', + 'yaml', + 0, + specChannelBindingAllowedFields010, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp channel binding - not allowed fields (0.2.0)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-channel-binding-allowed-fields-0-2-0.yaml', + 'yaml', + 0, + specChannelBindingAllowedFields020, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp channel binding - not allowed fields (0.3.0)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-channel-binding-allowed-fields-0-3-0.yaml', + 'yaml', + 0, + specChannelBindingAllowedFields030, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp channel binding - not allowed fields (latest)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-channel-binding-allowed-fields-latest.yaml', + 'yaml', + 0, + specChannelBindingAllowedFieldsLatest, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp channel binding - 'is' field must be one of allowed values (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-channel-binding-is-equals.yaml', + 'yaml', + 0, + specChannelBindingIsEquals, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 12 }, + end: { line: 8, character: 24 }, + }, + message: "'is' must be one of allowed values", + severity: 1, + code: 320100, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp message binding - not allowed fields (0.1.0)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-message-binding-allowed-fields-0-1-0.yaml', + 'yaml', + 0, + specMessageBindingAllowedFields010, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp message binding - not allowed fields (0.2.0)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-message-binding-allowed-fields-0-2-0.yaml', + 'yaml', + 0, + specMessageBindingAllowedFields020, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp message binding - not allowed fields (0.3.0)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-message-binding-allowed-fields-0-3-0.yaml', + 'yaml', + 0, + specMessageBindingAllowedFields030, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp message binding - not allowed fields (latest)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-message-binding-allowed-fields-latest.yaml', + 'yaml', + 0, + specMessageBindingAllowedFieldsLatest, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp message binding - 'contentEncoding' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-message-binding-content-encoding-type.yaml', + 'yaml', + 0, + specMessageBindingContentEncodingType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 25 }, + end: { line: 8, character: 28 }, + }, + message: "'contentEncoding' value must be a string", + severity: 1, + code: 330100, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp operation binding - not allowed fields (0.1.0)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-allowed-fields-0-1-0.yaml', + 'yaml', + 0, + specOperationBindingAllowedFields010, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp operation binding - not allowed fields (0.2.0)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-allowed-fields-0-2-0.yaml', + 'yaml', + 0, + specOperationBindingAllowedFields020, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp operation binding - replyTo not allowed in 0.3.0', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-allowed-fields-0-3-0.yaml', + 'yaml', + 0, + specOperationBindingAllowedFields030, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it('amqp operation binding - not allowed fields (latest)', async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-allowed-fields-latest.yaml', + 'yaml', + 0, + specOperationBindingAllowedFieldsLatest, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: 'Object includes not allowed fields.', + severity: 1, + code: 15000, + source: 'apilint', + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp operation binding - 'deliveryMode' must be one of allowed values (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-delivery-mode-equals.yaml', + 'yaml', + 0, + specOperationBindingDeliveryModeEquals, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 22 }, + end: { line: 8, character: 23 }, + }, + message: "'deliveryMode' must be one of allowed values", + severity: 1, + code: 340500, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp channel binding - 'exchange' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-channel-binding-exchange-type.yaml', + 'yaml', + 0, + specChannelBindingExchangeType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 18 }, + end: { line: 8, character: 21 }, + }, + message: "'exchange' value must be an object", + severity: 1, + code: 320200, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp channel binding - 'queue' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-channel-binding-queue-type.yaml', + 'yaml', + 0, + specChannelBindingQueueType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 15 }, + end: { line: 8, character: 18 }, + }, + message: "'queue' value must be an object", + severity: 1, + code: 320300, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp message binding - 'messageType' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-message-binding-message-type-type.yaml', + 'yaml', + 0, + specMessageBindingMessageTypeType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 21 }, + end: { line: 8, character: 24 }, + }, + message: "'messageType' value must be a string", + severity: 1, + code: 330200, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp operation binding - 'expiration' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-expiration-type.yaml', + 'yaml', + 0, + specOperationBindingExpirationType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 20 }, + end: { line: 8, character: 23 }, + }, + message: "'expiration' must be a non-negative integer", + severity: 1, + code: 340100, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp operation binding - 'userId' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-user-id-type.yaml', + 'yaml', + 0, + specOperationBindingUserIdType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 16 }, + end: { line: 8, character: 19 }, + }, + message: "'userId' value must be a string", + severity: 1, + code: 340200, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp operation binding - 'cc' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-cc-type.yaml', + 'yaml', + 0, + specOperationBindingCcType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: "'cc' must be an array of strings", + severity: 1, + code: 340300, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp operation binding - 'priority' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-priority-type.yaml', + 'yaml', + 0, + specOperationBindingPriorityType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 18 }, + end: { line: 8, character: 21 }, + }, + message: "'priority' must be an integer", + severity: 1, + code: 340400, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp operation binding - 'mandatory' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-mandatory-type.yaml', + 'yaml', + 0, + specOperationBindingMandatoryType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 19 }, + end: { line: 8, character: 22 }, + }, + message: "'mandatory' value must be a boolean", + severity: 1, + code: 340600, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp operation binding - 'bcc' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-bcc-type.yaml', + 'yaml', + 0, + specOperationBindingBccType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 7, character: 6 }, + end: { line: 7, character: 10 }, + }, + message: "'bcc' must be an array of strings", + severity: 1, + code: 340700, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp operation binding - 'replyTo' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-reply-to-type.yaml', + 'yaml', + 0, + specOperationBindingReplyToType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 17 }, + end: { line: 8, character: 20 }, + }, + message: "'replyTo' value must be a string", + severity: 1, + code: 340800, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp operation binding - 'timestamp' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-timestamp-type.yaml', + 'yaml', + 0, + specOperationBindingTimestampType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 19 }, + end: { line: 8, character: 22 }, + }, + message: "'timestamp' value must be a boolean", + severity: 1, + code: 340900, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); + + it("amqp operation binding - 'ack' field type (0.1.0)", async function () { + const doc: TextDocument = TextDocument.create( + 'foo://bar/amqp-operation-binding-ack-type.yaml', + 'yaml', + 0, + specOperationBindingAckType, + ); + + const result = await languageService.doValidation(doc, validationContext); + const expected: Diagnostic[] = [ + { + range: { + start: { line: 8, character: 13 }, + end: { line: 8, character: 16 }, + }, + message: "'ack' value must be a boolean", + severity: 1, + code: 350000, + source: 'apilint', + data: {}, + }, + ]; + assert.deepEqual(result, expected); + }); +}); diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-1-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-1-0.yaml new file mode 100644 index 0000000000..8b2e29aff5 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-1-0.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +channels: + channel1: + bindings: + amqp: + foo: bar + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-2-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-2-0.yaml new file mode 100644 index 0000000000..0c9dc3bb14 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-2-0.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +channels: + channel1: + bindings: + amqp: + foo: bar + bindingVersion: '0.2.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-3-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-3-0.yaml new file mode 100644 index 0000000000..8f754a5deb --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-0-3-0.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +channels: + channel1: + bindings: + amqp: + foo: bar + bindingVersion: '0.3.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-latest.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-latest.yaml new file mode 100644 index 0000000000..d747284e3e --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-allowed-fields-latest.yaml @@ -0,0 +1,9 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +channels: + channel1: + bindings: + amqp: + foo: bar diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-exchange-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-exchange-type.yaml new file mode 100644 index 0000000000..82700f59de --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-exchange-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +channels: + channel1: + bindings: + amqp: + exchange: foo + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-is-equals.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-is-equals.yaml new file mode 100644 index 0000000000..e1dad13cd6 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-is-equals.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +channels: + channel1: + bindings: + amqp: + is: invalidValue + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-queue-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-queue-type.yaml new file mode 100644 index 0000000000..fc7314da48 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-channel-binding-queue-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +channels: + channel1: + bindings: + amqp: + queue: foo + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-1-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-1-0.yaml new file mode 100644 index 0000000000..bdc588d8cd --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-1-0.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + messageBindings: + messageBindings1: + amqp: + foo: bar + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-2-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-2-0.yaml new file mode 100644 index 0000000000..b15de53beb --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-2-0.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + messageBindings: + messageBindings1: + amqp: + foo: bar + bindingVersion: '0.2.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-3-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-3-0.yaml new file mode 100644 index 0000000000..b365762da5 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-0-3-0.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + messageBindings: + messageBindings1: + amqp: + foo: bar + bindingVersion: '0.3.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-latest.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-latest.yaml new file mode 100644 index 0000000000..ac507df1b2 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-allowed-fields-latest.yaml @@ -0,0 +1,9 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + messageBindings: + messageBindings1: + amqp: + foo: bar diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-content-encoding-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-content-encoding-type.yaml new file mode 100644 index 0000000000..9e8db37122 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-content-encoding-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + messageBindings: + messageBindings1: + amqp: + contentEncoding: 123 + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-message-type-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-message-type-type.yaml new file mode 100644 index 0000000000..ef19ef6ba8 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-message-binding-message-type-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + messageBindings: + messageBindings1: + amqp: + messageType: 123 + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-ack-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-ack-type.yaml new file mode 100644 index 0000000000..3fba94a24f --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-ack-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + ack: foo + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-1-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-1-0.yaml new file mode 100644 index 0000000000..c84f56a486 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-1-0.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + foo: bar + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-2-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-2-0.yaml new file mode 100644 index 0000000000..25a0220d8e --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-2-0.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + foo: bar + bindingVersion: '0.2.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-3-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-3-0.yaml new file mode 100644 index 0000000000..9d070f94f0 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-0-3-0.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + replyTo: test + bindingVersion: '0.3.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-latest.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-latest.yaml new file mode 100644 index 0000000000..fc23c50efe --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-allowed-fields-latest.yaml @@ -0,0 +1,9 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + foo: bar diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-bcc-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-bcc-type.yaml new file mode 100644 index 0000000000..0fcf6b03ec --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-bcc-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + bcc: foo + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-cc-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-cc-type.yaml new file mode 100644 index 0000000000..25de31e203 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-cc-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + cc: foo + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-delivery-mode-equals.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-delivery-mode-equals.yaml new file mode 100644 index 0000000000..d98435b23b --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-delivery-mode-equals.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + deliveryMode: 3 + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-expiration-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-expiration-type.yaml new file mode 100644 index 0000000000..f8caa9a2dd --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-expiration-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + expiration: foo + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-mandatory-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-mandatory-type.yaml new file mode 100644 index 0000000000..0f7af03f10 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-mandatory-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + mandatory: foo + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-priority-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-priority-type.yaml new file mode 100644 index 0000000000..84d5b6a911 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-priority-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + priority: foo + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-reply-to-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-reply-to-type.yaml new file mode 100644 index 0000000000..e84e94d933 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-reply-to-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + replyTo: 123 + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-timestamp-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-timestamp-type.yaml new file mode 100644 index 0000000000..f14610f720 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-timestamp-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + timestamp: foo + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-user-id-type.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-user-id-type.yaml new file mode 100644 index 0000000000..79d97f533e --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-operation-binding-user-id-type.yaml @@ -0,0 +1,10 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +components: + operationBindings: + operationBindings1: + amqp: + userId: 123 + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-1-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-1-0.yaml new file mode 100644 index 0000000000..acad5b401a --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-1-0.yaml @@ -0,0 +1,12 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +servers: + server1: + host: rabbitmq.example.org:5672 + protocol: amqp + bindings: + amqp: + foo: bar + bindingVersion: '0.1.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-2-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-2-0.yaml new file mode 100644 index 0000000000..69fd0f2200 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-2-0.yaml @@ -0,0 +1,12 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +servers: + server1: + host: rabbitmq.example.org:5672 + protocol: amqp + bindings: + amqp: + foo: bar + bindingVersion: '0.2.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-3-0.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-3-0.yaml new file mode 100644 index 0000000000..1eeb36d755 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-0-3-0.yaml @@ -0,0 +1,12 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +servers: + server1: + host: rabbitmq.example.org:5672 + protocol: amqp + bindings: + amqp: + foo: bar + bindingVersion: '0.3.0' diff --git a/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-latest.yaml b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-latest.yaml new file mode 100644 index 0000000000..44ef9b77b3 --- /dev/null +++ b/packages/apidom-ls/test/fixtures/validation/asyncapi/bindings/amqp/amqp-server-binding-allowed-fields-latest.yaml @@ -0,0 +1,11 @@ +asyncapi: 3.0.0 +info: + title: Sample AsyncAPI + version: '1.0.0' +servers: + server1: + host: rabbitmq.example.org:5672 + protocol: amqp + bindings: + amqp: + foo: bar From 170719a8095e68512e239afe1c3146ebf2942885 Mon Sep 17 00:00:00 2001 From: Oliwia Rogala Date: Mon, 23 Mar 2026 14:04:14 +0100 Subject: [PATCH 2/3] fix(ls): binding version completion docs --- .../asyncapi/bindings/amqp/message-binding/completion/0-1-0.ts | 2 +- .../asyncapi/bindings/amqp/message-binding/completion/0-2-0.ts | 2 +- .../bindings/amqp/operation-binding/completion/0-1-0.ts | 2 +- .../bindings/amqp/operation-binding/completion/0-2-0.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-1-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-1-0.ts index 3bf026d23a..dde735a1f9 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-1-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-1-0.ts @@ -52,7 +52,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-2-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-2-0.ts index 396c02db77..a46d7be77d 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-2-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/0-2-0.ts @@ -52,7 +52,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-1-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-1-0.ts index c74b64513c..96a9ae8769 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-1-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-1-0.ts @@ -431,7 +431,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-2-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-2-0.ts index 2409ec7478..717da5e98a 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-2-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-2-0.ts @@ -431,7 +431,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.2.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, conditions: [ { From f4f83f18e9aa7a654984f715d3261c183f58ea62 Mon Sep 17 00:00:00 2001 From: Oliwia Rogala Date: Wed, 25 Mar 2026 08:24:55 +0100 Subject: [PATCH 3/3] fix(ls): fix typos --- .../bindings/amqp/channel-binding/completion/0-1-0.ts | 4 ++-- .../bindings/amqp/channel-binding/completion/0-2-0.ts | 4 ++-- .../bindings/amqp/channel-binding/completion/0-3-0.ts | 4 ++-- .../bindings/amqp/channel-binding/completion/latest.ts | 4 ++-- .../bindings/amqp/message-binding/completion/index.ts | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-1-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-1-0.ts index 29762530b6..fe5eedc324 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-1-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-1-0.ts @@ -35,7 +35,7 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - 'Map[string, any]`\n\\\n\\\nWhen `is=routingKey`, this object defines the exchange properties.', + '`Map[string, any]`\n\\\n\\\nWhen `is=routingKey`, this object defines the exchange properties.', }, conditions: [ { @@ -55,7 +55,7 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - 'Map[string, any]`\n\\\n\\\nWhen `is=queue`, this object defines the queue properties.', + '`Map[string, any]`\n\\\n\\\nWhen `is=queue`, this object defines the queue properties.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-2-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-2-0.ts index 2e23b97638..cfa8e4c6a6 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-2-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-2-0.ts @@ -35,7 +35,7 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - 'Map[string, any]`\n\\\n\\\nWhen `is=routingKey`, this object defines the exchange properties.', + '`Map[string, any]`\n\\\n\\\nWhen `is=routingKey`, this object defines the exchange properties.', }, conditions: [ { @@ -55,7 +55,7 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - 'Map[string, any]`\n\\\n\\\nWhen `is=queue`, this object defines the queue properties.', + '`Map[string, any]`\n\\\n\\\nWhen `is=queue`, this object defines the queue properties.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-3-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-3-0.ts index 71a072fcb3..2d36468007 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-3-0.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/0-3-0.ts @@ -35,7 +35,7 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - 'Map[string, any]`\n\\\n\\\nWhen `is=routingKey`, this object defines the exchange properties.', + '`Map[string, any]`\n\\\n\\\nWhen `is=routingKey`, this object defines the exchange properties.', }, conditions: [ { @@ -55,7 +55,7 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - 'Map[string, any]`\n\\\n\\\nWhen `is=queue`, this object defines the queue properties.', + '`Map[string, any]`\n\\\n\\\nWhen `is=queue`, this object defines the queue properties.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/latest.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/latest.ts index 270503ff1d..8fcdf416a7 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/latest.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/channel-binding/completion/latest.ts @@ -34,7 +34,7 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - 'Map[string, any]`\n\\\n\\\nWhen `is=routingKey`, this object defines the exchange properties.', + '`Map[string, any]`\n\\\n\\\nWhen `is=routingKey`, this object defines the exchange properties.', }, conditions: [ { @@ -53,7 +53,7 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - 'Map[string, any]`\n\\\n\\\nWhen `is=queue`, this object defines the queue properties.', + '`Map[string, any]`\n\\\n\\\nWhen `is=queue`, this object defines the queue properties.', }, conditions: [ { diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/index.ts index 280702b0d7..0b3da7568b 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/message-binding/completion/index.ts @@ -22,7 +22,7 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The version of this binding. If omitted, "0.3.0" MUST be assumed.', + value: '`string`\n\\\n\\\nThe version of this binding. If omitted, "0.3.0" MUST be assumed.', }, }, {