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 new file mode 100644 index 0000000000..cbda7ef341 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-1-0.ts @@ -0,0 +1,254 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'expiration', + insertText: 'expiration', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + }, + 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: 'Identifies the user who has sent the message.', + }, + 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\\\n\\\nThe routing keys the message should be routed to at the time of publishing.', + }, + 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\\\n\\\nA priority for the message.', + }, + 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\\\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', + }, + 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\\\n\\\nWhether the message is mandatory or not.', + }, + 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\\\n\\\nLike cc but consumers will not receive this information.', + }, + 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: '`boolean`\n\\\n\\\nName of the queue where the consumer should send the response.', + }, + 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\\\n\\\nWhether the message should include a timestamp or not.', + }, + 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\\\n\\\nWhether the consumer should ack the message or not.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'bindingVersion', + insertText: 'bindingVersion', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.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.1.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.1.0']], + }, + ], + }, +]; + +export default completion; 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 new file mode 100644 index 0000000000..2489dcacac --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/0-2-0.ts @@ -0,0 +1,254 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'expiration', + insertText: 'expiration', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + }, + 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: 'Identifies the user who has sent the message.', + }, + 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\\\n\\\nThe routing keys the message should be routed to at the time of publishing.', + }, + 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\\\n\\\nA priority for the message.', + }, + 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\\\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', + }, + 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\\\n\\\nWhether the message is mandatory or not.', + }, + 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\\\n\\\nLike cc but consumers will not receive this information.', + }, + 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: '`boolean`\n\\\n\\\nName of the queue where the consumer should send the response.', + }, + 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\\\n\\\nWhether the message should include a timestamp or not.', + }, + 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\\\n\\\nWhether the consumer should ack the message or not.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'bindingVersion', + insertText: 'bindingVersion', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.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.2.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.2.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 new file mode 100644 index 0000000000..5c29b66ec8 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/index.ts @@ -0,0 +1,46 @@ +import completion0_1_0Items from './0-1-0'; +import completion0_2_0Items from './0-2-0'; +import completionLatestItems from './latest'; +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + ...completion0_1_0Items, + ...completion0_2_0Items, + ...completionLatestItems, + { + label: 'bindingVersion', + insertText: 'bindingVersion', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', + }, + }, + { + target: 'bindingVersion', + label: '0.1.0', + insertText: '0.1.0', + kind: 12, + format: CompletionFormat.QUOTED_FORCED, + type: CompletionType.VALUE, + insertTextFormat: 2, + }, + { + target: 'bindingVersion', + label: '0.2.0', + insertText: '0.2.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.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/latest.ts similarity index 55% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/latest.ts index 4edadeea53..ee6cf13638 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/completion/latest.ts @@ -2,7 +2,7 @@ import { ApidomCompletionItem, CompletionFormat, CompletionType, -} from '../../../../../apidom-language-types'; +} from '../../../../../../apidom-language-types'; const completion: ApidomCompletionItem[] = [ { @@ -14,8 +14,15 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + value: + '`integer`\n\\\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'userId', @@ -28,6 +35,12 @@ const completion: ApidomCompletionItem[] = [ kind: 'markdown', value: 'Identifies the user who has sent the message.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'cc', @@ -38,8 +51,15 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The routing keys the message should be routed to at the time of publishing.', + value: + '[string]`\n\\\n\\\nThe routing keys the message should be routed to at the time of publishing.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'priority', @@ -50,8 +70,14 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'A priority for the message.', + value: '`integer`\n\\\n\\\nA priority for the message.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'deliveryMode', @@ -63,8 +89,14 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - 'Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', + '`integer`\n\\\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'mandatory', @@ -75,8 +107,14 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Whether the message is mandatory or not.', + value: '`boolean`\n\\\n\\\nWhether the message is mandatory or not.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'bcc', @@ -87,8 +125,14 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Like cc but consumers will not receive this information.', + value: '`[string]`\n\\\n\\\nLike cc but consumers will not receive this information.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'replyTo', @@ -99,8 +143,14 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Name of the queue where the consumer should send the response.', + value: '`boolean`\n\\\n\\\nName of the queue where the consumer should send the response.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'timestamp', @@ -111,8 +161,14 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Whether the message should include a timestamp or not.', + value: '`boolean`\n\\\n\\\nWhether the message should include a timestamp or not.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'ack', @@ -123,8 +179,14 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Whether the consumer should ack the message or not.', + value: '`boolean`\n\\\n\\\nWhether the consumer should ack the message or not.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'bindingVersion', @@ -135,8 +197,14 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'The version of this binding. If omitted, "latest" MUST be assumed.', + value: 'The version of this binding. If omitted, "0.2.0" MUST be assumed.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { target: 'deliveryMode', @@ -146,6 +214,12 @@ const completion: ApidomCompletionItem[] = [ format: CompletionFormat.UNQUOTED, type: CompletionType.VALUE, insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { target: 'deliveryMode', @@ -155,6 +229,12 @@ const completion: ApidomCompletionItem[] = [ format: CompletionFormat.UNQUOTED, type: CompletionType.VALUE, insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, ]; 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 69b1778d73..286774be6a 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,7 +1,7 @@ const documentation = [ { target: 'expiration', - docs: 'TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', + docs: '`integer`\n\\\n\\\nTTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.', }, { target: 'userId', @@ -9,23 +9,23 @@ const documentation = [ }, { target: 'cc', - docs: 'The routing keys the message should be routed to at the time of publishing.', + docs: '`[string]`\n\\\n\\\nThe routing keys the message should be routed to at the time of publishing.', }, { target: 'priority', - docs: 'A priority for the message.', + docs: '`integer`\n\\\n\\\nA priority for the message.', }, { target: 'deliveryMode', - docs: 'Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', + docs: '`integer`\n\\\n\\\nDelivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).', }, { target: 'mandatory', - docs: 'Whether the message is mandatory or not.', + docs: '`boolean`\n\\\n\\\nWhether the message is mandatory or not.', }, { target: 'bcc', - docs: 'Like cc but consumers will not receive this information.', + docs: '`[string]`\n\\\n\\\nLike cc but consumers will not receive this information.', }, { target: 'replyTo', @@ -33,18 +33,18 @@ const documentation = [ }, { target: 'timestamp', - docs: 'Whether the message should include a timestamp or not.', + docs: '`boolean`\n\\\n\\\nWhether the message should include a timestamp or not.', }, { target: 'ack', - docs: 'Whether the consumer should ack the message or not.', + docs: '`boolean`\n\\\n\\\nWhether the consumer should ack the message or not.', }, { target: 'bindingVersion', - docs: 'The version of this binding. If omitted, "latest" MUST be assumed.', + docs: 'The version of this binding. If omitted, "0.2.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, \"latest\" 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`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```", }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/act--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/act--type.ts new file mode 100644 index 0000000000..605cc576b0 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/act--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const ackTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_ACK_TYPE, + source: 'apilint', + message: "'ack' value must be a boolean", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['boolean'], + marker: 'value', + target: 'ack', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default ackTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..ee7b13c98a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,35 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields.', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [ + [ + 'expiration', + 'userId', + 'cc', + 'priority', + 'deliveryMode', + 'mandatory', + 'bcc', + 'replyTo', + 'timestamp', + 'ack', + 'bindingVersion', + ], + ], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/bcc--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/bcc--type.ts new file mode 100644 index 0000000000..b4f7a41035 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/bcc--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const bccTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_BCC_TYPE, + source: 'apilint', + message: "'bcc' must be an array of strings", + severity: 1, + linterFunction: 'apilintArrayOfType', + linterParams: ['string'], + marker: 'key', + target: 'bcc', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default bccTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/cc--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/cc--type.ts new file mode 100644 index 0000000000..27991a0e36 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/cc--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const ccTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_CC_TYPE, + source: 'apilint', + message: "'cc' must be an array of strings", + severity: 1, + linterFunction: 'apilintArrayOfType', + linterParams: ['string'], + marker: 'key', + target: 'cc', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default ccTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/delivery-mode--equals.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/delivery-mode--equals.ts new file mode 100644 index 0000000000..fc7c12d80e --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/delivery-mode--equals.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const deliveryModeEqualsLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_DELIVERY_MODE_EQUALS, + source: 'apilint', + message: "'deliveryMode' must be one of allowed values", + severity: 1, + linterFunction: 'apilintValueOrArray', + linterParams: [[1, 2]], + marker: 'value', + target: 'deliveryMode', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default deliveryModeEqualsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/expiration--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/expiration--type.ts new file mode 100644 index 0000000000..3068747343 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/expiration--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const expirationTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_EXPIRATION_TYPE, + source: 'apilint', + message: "'expiration' must be a non-negative integer", + severity: 1, + linterFunction: 'apilintNumber', + linterParams: [true, true, true], + marker: 'value', + target: 'expiration', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default expirationTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..687c33dc21 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,27 @@ +import allowedFieldsLint from './allowed-fields'; +import expirationTypeLint from './expiration--type'; +import userIdTypeLint from './user-id--type'; +import ccTypeLint from './cc--type'; +import priorityTypeLint from './priority--type'; +import deliveryModeEqualsLint from './delivery-mode--equals'; +import mandatoryTypeLint from './mandatory--type'; +import bccTypeLint from './bcc--type'; +import replyToTypeLint from './reply-to--type'; +import timestampTypeLint from './timestamp--type'; +import ackTypeLint from './act--type'; + +const lints = [ + expirationTypeLint, + userIdTypeLint, + ccTypeLint, + priorityTypeLint, + deliveryModeEqualsLint, + mandatoryTypeLint, + bccTypeLint, + replyToTypeLint, + timestampTypeLint, + ackTypeLint, + allowedFieldsLint, +]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/mandatory--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/mandatory--type.ts new file mode 100644 index 0000000000..de63c03f79 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/mandatory--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const mandatoryTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_MANDATORY_TYPE, + source: 'apilint', + message: "'mandatory' value must be a boolean", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['boolean'], + marker: 'value', + target: 'mandatory', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default mandatoryTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/priority--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/priority--type.ts new file mode 100644 index 0000000000..3f8ca085fb --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/priority--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const priorityTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_PRIORITY_TYPE, + source: 'apilint', + message: "'priority' must be an integer", + severity: 1, + linterFunction: 'apilintNumber', + linterParams: [true], + marker: 'value', + target: 'priority', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default priorityTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/reply-to--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/reply-to--type.ts new file mode 100644 index 0000000000..2c734f27be --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/reply-to--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const replyToTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_REPLY_TO_TYPE, + source: 'apilint', + message: "'replyTo' value must be a string", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['string'], + marker: 'value', + target: 'replyTo', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default replyToTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/timestamp--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/timestamp--type.ts new file mode 100644 index 0000000000..6c0a0ef5b0 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/timestamp--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const timestampTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_TIMESTAMP_TYPE, + source: 'apilint', + message: "'timestamp' value must be a boolean", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['boolean'], + marker: 'value', + target: 'timestamp', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default timestampTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/user-id--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/user-id--type.ts new file mode 100644 index 0000000000..5e4d2e00e9 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-1-0/user-id--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const userIdTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_USER_ID_TYPE, + source: 'apilint', + message: "'userId' value must be a string", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['string'], + marker: 'value', + target: 'userId', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default userIdTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/act--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/act--type.ts new file mode 100644 index 0000000000..d22aa28a12 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/act--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const ackTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_ACK_TYPE, + source: 'apilint', + message: "'ack' value must be a boolean", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['boolean'], + marker: 'value', + target: 'ack', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default ackTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/allowed-fields.ts new file mode 100644 index 0000000000..cbb6968627 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/allowed-fields.ts @@ -0,0 +1,35 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields.', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [ + [ + 'expiration', + 'userId', + 'cc', + 'priority', + 'deliveryMode', + 'mandatory', + 'bcc', + 'replyTo', + 'timestamp', + 'ack', + 'bindingVersion', + ], + ], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/bcc--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/bcc--type.ts new file mode 100644 index 0000000000..f03ec84c09 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/bcc--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const bccTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_BCC_TYPE, + source: 'apilint', + message: "'bcc' must be an array of strings", + severity: 1, + linterFunction: 'apilintArrayOfType', + linterParams: ['string'], + marker: 'key', + target: 'bcc', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default bccTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/cc--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/cc--type.ts new file mode 100644 index 0000000000..5b46851dd8 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/cc--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const ccTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_CC_TYPE, + source: 'apilint', + message: "'cc' must be an array of strings", + severity: 1, + linterFunction: 'apilintArrayOfType', + linterParams: ['string'], + marker: 'key', + target: 'cc', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default ccTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/delivery-mode--equals.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/delivery-mode--equals.ts new file mode 100644 index 0000000000..e2b9cfdbc4 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/delivery-mode--equals.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const deliveryModeEqualsLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_DELIVERY_MODE_EQUALS, + source: 'apilint', + message: "'deliveryMode' must be one of allowed values", + severity: 1, + linterFunction: 'apilintValueOrArray', + linterParams: [[1, 2]], + marker: 'value', + target: 'deliveryMode', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default deliveryModeEqualsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/expiration--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/expiration--type.ts new file mode 100644 index 0000000000..7b7792076b --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/expiration--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const expirationTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_EXPIRATION_TYPE, + source: 'apilint', + message: "'expiration' must be a non-negative integer", + severity: 1, + linterFunction: 'apilintNumber', + linterParams: [true, true, true], + marker: 'value', + target: 'expiration', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default expirationTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/index.ts new file mode 100644 index 0000000000..687c33dc21 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/index.ts @@ -0,0 +1,27 @@ +import allowedFieldsLint from './allowed-fields'; +import expirationTypeLint from './expiration--type'; +import userIdTypeLint from './user-id--type'; +import ccTypeLint from './cc--type'; +import priorityTypeLint from './priority--type'; +import deliveryModeEqualsLint from './delivery-mode--equals'; +import mandatoryTypeLint from './mandatory--type'; +import bccTypeLint from './bcc--type'; +import replyToTypeLint from './reply-to--type'; +import timestampTypeLint from './timestamp--type'; +import ackTypeLint from './act--type'; + +const lints = [ + expirationTypeLint, + userIdTypeLint, + ccTypeLint, + priorityTypeLint, + deliveryModeEqualsLint, + mandatoryTypeLint, + bccTypeLint, + replyToTypeLint, + timestampTypeLint, + ackTypeLint, + allowedFieldsLint, +]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/mandatory--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/mandatory--type.ts new file mode 100644 index 0000000000..1df4977692 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/mandatory--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const mandatoryTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_MANDATORY_TYPE, + source: 'apilint', + message: "'mandatory' value must be a boolean", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['boolean'], + marker: 'value', + target: 'mandatory', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default mandatoryTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/priority--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/priority--type.ts new file mode 100644 index 0000000000..d5bd5489b4 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/priority--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const priorityTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_PRIORITY_TYPE, + source: 'apilint', + message: "'priority' must be an integer", + severity: 1, + linterFunction: 'apilintNumber', + linterParams: [true], + marker: 'value', + target: 'priority', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default priorityTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/reply-to--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/reply-to--type.ts new file mode 100644 index 0000000000..502b6f4a4e --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/reply-to--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const replyToTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_REPLY_TO_TYPE, + source: 'apilint', + message: "'replyTo' value must be a string", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['string'], + marker: 'value', + target: 'replyTo', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default replyToTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/timestamp--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/timestamp--type.ts new file mode 100644 index 0000000000..b9d22e00a5 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/timestamp--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const timestampTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_TIMESTAMP_TYPE, + source: 'apilint', + message: "'timestamp' value must be a boolean", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['boolean'], + marker: 'value', + target: 'timestamp', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default timestampTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/user-id--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/user-id--type.ts new file mode 100644 index 0000000000..e4b67d4128 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/0-2-0/user-id--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const userIdTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_USER_ID_TYPE, + source: 'apilint', + message: "'userId' value must be a string", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['string'], + marker: 'value', + target: 'userId', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +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 c8fd5f3f1f..92cf3b3443 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,29 +1,13 @@ -import allowedFieldsLint from './allowed-fields'; -import expirationTypeLint from './expiration--type'; -import userIdTypeLint from './user-id--type'; -import ccTypeLint from './cc--type'; -import priorityTypeLint from './priority--type'; -import deliveryModeEqualsLint from './delivery-mode--equals'; -import mandatoryTypeLint from './mandatory--type'; -import bccTypeLint from './bcc--type'; -import replyToTypeLint from './reply-to--type'; -import timestampTypeLint from './timestamp--type'; -import ackTypeLint from './act--type'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBinding0_2_0Lints from './0-2-0'; +import operationBindingLatestLints from './latest'; import bindingVersionTypeLint from './binding-version--type'; const lints = [ - expirationTypeLint, - userIdTypeLint, - ccTypeLint, - priorityTypeLint, - deliveryModeEqualsLint, - mandatoryTypeLint, - bccTypeLint, - replyToTypeLint, - timestampTypeLint, - ackTypeLint, + ...operationBinding0_1_0Lints, + ...operationBinding0_2_0Lints, + ...operationBindingLatestLints, bindingVersionTypeLint, - allowedFieldsLint, ]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/act--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/act--type.ts similarity index 59% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/act--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/act--type.ts index 99e365a795..081f1ac85e 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/act--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/act--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const ackTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_ACK_TYPE, @@ -11,6 +11,12 @@ const ackTypeLint: LinterMeta = { marker: 'value', target: 'ack', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default ackTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/allowed-fields.ts similarity index 68% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/allowed-fields.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/allowed-fields.ts index e580b96c3c..5789680e3b 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/allowed-fields.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, @@ -23,6 +23,12 @@ const allowedFieldsLint: LinterMeta = { ], ], marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/bcc--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/bcc--type.ts similarity index 59% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/bcc--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/bcc--type.ts index cdedae848a..3b3b93e204 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/bcc--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/bcc--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const bccTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_BCC_TYPE, @@ -11,6 +11,12 @@ const bccTypeLint: LinterMeta = { marker: 'key', target: 'bcc', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default bccTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/cc--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/cc--type.ts similarity index 59% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/cc--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/cc--type.ts index 3bd2ccb7a9..052f5e4d96 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/cc--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/cc--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const ccTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_CC_TYPE, @@ -11,6 +11,12 @@ const ccTypeLint: LinterMeta = { marker: 'key', target: 'cc', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default ccTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/delivery-mode--equals.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/delivery-mode--equals.ts similarity index 63% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/delivery-mode--equals.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/delivery-mode--equals.ts index d2bb062b7c..954e8c8229 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/delivery-mode--equals.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/delivery-mode--equals.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const deliveryModeEqualsLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_DELIVERY_MODE_EQUALS, @@ -11,6 +11,12 @@ const deliveryModeEqualsLint: LinterMeta = { marker: 'value', target: 'deliveryMode', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default deliveryModeEqualsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/expiration--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/expiration--type.ts similarity index 62% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/expiration--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/expiration--type.ts index f1f3847391..c45f39446c 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/expiration--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/expiration--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const expirationTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_EXPIRATION_TYPE, @@ -11,6 +11,12 @@ const expirationTypeLint: LinterMeta = { marker: 'value', target: 'expiration', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default expirationTypeLint; 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 new file mode 100644 index 0000000000..687c33dc21 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/index.ts @@ -0,0 +1,27 @@ +import allowedFieldsLint from './allowed-fields'; +import expirationTypeLint from './expiration--type'; +import userIdTypeLint from './user-id--type'; +import ccTypeLint from './cc--type'; +import priorityTypeLint from './priority--type'; +import deliveryModeEqualsLint from './delivery-mode--equals'; +import mandatoryTypeLint from './mandatory--type'; +import bccTypeLint from './bcc--type'; +import replyToTypeLint from './reply-to--type'; +import timestampTypeLint from './timestamp--type'; +import ackTypeLint from './act--type'; + +const lints = [ + expirationTypeLint, + userIdTypeLint, + ccTypeLint, + priorityTypeLint, + deliveryModeEqualsLint, + mandatoryTypeLint, + bccTypeLint, + replyToTypeLint, + timestampTypeLint, + ackTypeLint, + allowedFieldsLint, +]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/mandatory--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/mandatory--type.ts similarity index 61% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/mandatory--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/mandatory--type.ts index be624836a0..c4835373f4 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/mandatory--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/mandatory--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const mandatoryTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_MANDATORY_TYPE, @@ -11,6 +11,12 @@ const mandatoryTypeLint: LinterMeta = { marker: 'value', target: 'mandatory', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default mandatoryTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/priority--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/priority--type.ts similarity index 60% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/priority--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/priority--type.ts index 364a14637c..f1d63d5f8e 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/priority--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/priority--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const priorityTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_PRIORITY_TYPE, @@ -11,6 +11,12 @@ const priorityTypeLint: LinterMeta = { marker: 'value', target: 'priority', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default priorityTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/reply-to--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/reply-to--type.ts similarity index 60% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/reply-to--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/reply-to--type.ts index 7636cb806f..061e754cee 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/reply-to--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/reply-to--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const replyToTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_REPLY_TO_TYPE, @@ -11,6 +11,12 @@ const replyToTypeLint: LinterMeta = { marker: 'value', target: 'replyTo', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default replyToTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/timestamp--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/timestamp--type.ts similarity index 61% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/timestamp--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/timestamp--type.ts index 7c8178d6ce..0df00268e5 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/timestamp--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/timestamp--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const timestampTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_TIMESTAMP_TYPE, @@ -11,6 +11,12 @@ const timestampTypeLint: LinterMeta = { marker: 'value', target: 'timestamp', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default timestampTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/user-id--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/user-id--type.ts similarity index 60% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/user-id--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/user-id--type.ts index 4972a1981a..bfea57a22b 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/user-id--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp/operation-binding/lint/latest/user-id--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const userIdTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_AMQP_OPERATION_BINDING_FIELD_USER_ID_TYPE, @@ -11,6 +11,12 @@ const userIdTypeLint: LinterMeta = { marker: 'value', target: 'userId', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default userIdTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/documentation.ts index 5327249fb9..a33a1bc010 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/documentation.ts @@ -1,6 +1,6 @@ const documentation = [ { - docs: 'This object MUST NOT contain any properties. Its name is reserved for future use.', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/tree/master/amqp1#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..546bc5967a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/index.ts index e5a90a6b9d..b9f1291d77 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/index.ts @@ -1,5 +1,6 @@ -import allowedFieldsLint from './allowed-fields'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; -const lints = [allowedFieldsLint]; +const lints = [...operationBinding0_1_0Lints, ...operationBindingLatestLints]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/latest/allowed-fields.ts similarity index 59% rename from packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/allowed-fields.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/latest/allowed-fields.ts index 332afdca89..1cd790d68c 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/latest/allowed-fields.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, @@ -9,6 +9,12 @@ const allowedFieldsLint: LinterMeta = { linterFunction: 'allowedFields', linterParams: [[]], marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/documentation.ts index 5327249fb9..9acea9e74b 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/documentation.ts @@ -1,6 +1,6 @@ const documentation = [ { - docs: 'This object MUST NOT contain any properties. Its name is reserved for future use.', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/tree/master/anypointmq#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/0-0-1/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/0-0-1/allowed-fields.ts new file mode 100644 index 0000000000..e0accb3652 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/0-0-1/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.0.1']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/0-0-1/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/0-0-1/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/0-0-1/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/index.ts index e5a90a6b9d..4376f43e67 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/index.ts @@ -1,5 +1,6 @@ -import allowedFieldsLint from './allowed-fields'; +import operationBinding0_0_1Lints from './0-0-1'; +import operationBindingLatestLints from './latest'; -const lints = [allowedFieldsLint]; +const lints = [...operationBinding0_0_1Lints, ...operationBindingLatestLints]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/latest/allowed-fields.ts similarity index 59% rename from packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/allowed-fields.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/latest/allowed-fields.ts index 332afdca89..1cd790d68c 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/amqp1/operation-binding/lint/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/latest/allowed-fields.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, @@ -9,6 +9,12 @@ const allowedFieldsLint: LinterMeta = { linterFunction: 'allowedFields', linterParams: [[]], marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/anypointmq/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/documentation.ts new file mode 100644 index 0000000000..fd6697cc4e --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/documentation.ts @@ -0,0 +1,6 @@ +const documentation = [ + { + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/googlepubsub/#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', + }, +]; +export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..546bc5967a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/index.ts new file mode 100644 index 0000000000..b9f1291d77 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/index.ts @@ -0,0 +1,6 @@ +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; + +const lints = [...operationBinding0_1_0Lints, ...operationBindingLatestLints]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/latest/allowed-fields.ts similarity index 59% rename from packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/allowed-fields.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/latest/allowed-fields.ts index 332afdca89..1cd790d68c 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/latest/allowed-fields.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, @@ -9,6 +9,12 @@ const allowedFieldsLint: LinterMeta = { linterFunction: 'allowedFields', linterParams: [[]], marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/meta.ts b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/meta.ts new file mode 100644 index 0000000000..6053863f41 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/googlepubsub/operation-binding/meta.ts @@ -0,0 +1,10 @@ +import lint from './lint'; +import documentation from './documentation'; +import { FormatMeta } from '../../../../../apidom-language-types'; + +const meta: FormatMeta = { + lint, + documentation, +}; + +export default meta; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/completion.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/completion.ts deleted file mode 100644 index 772924a4a5..0000000000 --- a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/completion.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { - ApidomCompletionItem, - CompletionFormat, - CompletionType, -} from '../../../../../apidom-language-types'; - -const completion: ApidomCompletionItem[] = [ - { - label: 'type', - insertText: 'type', - kind: 14, - format: CompletionFormat.QUOTED, - type: CompletionType.PROPERTY, - insertTextFormat: 2, - documentation: { - kind: 'markdown', - value: '**REQUIRED**. Type of operation. Its value MUST be either request or response.', - }, - }, - { - label: 'method', - insertText: 'method', - kind: 14, - format: CompletionFormat.QUOTED, - type: CompletionType.PROPERTY, - insertTextFormat: 2, - documentation: { - kind: 'markdown', - value: - 'When `type` is `request`, this is the HTTP method, otherwise it MUST be ignored. Its value MUST be one of `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`, `OPTIONS`, `CONNECT`, and `TRACE`.', - }, - }, - { - label: 'query', - insertText: 'query', - kind: 14, - format: CompletionFormat.OBJECT, - type: CompletionType.PROPERTY, - insertTextFormat: 2, - documentation: { - kind: 'markdown', - value: - '[Schema object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject)\n\\\n\\\nA Schema object containing the definitions for each query parameter. This schema MUST be of type `object` and have a `properties` key.', - }, - }, - { - label: 'bindingVersion', - insertText: 'bindingVersion', - kind: 14, - format: CompletionFormat.QUOTED, - type: CompletionType.PROPERTY, - insertTextFormat: 2, - documentation: { - kind: 'markdown', - value: 'The version of this binding. If omitted, "latest" MUST be assumed.', - }, - }, - { - target: 'type', - label: 'request', - insertText: 'request', - kind: 12, - format: CompletionFormat.QUOTED, - type: CompletionType.VALUE, - insertTextFormat: 2, - }, - { - target: 'type', - label: 'response', - insertText: 'response', - kind: 12, - format: CompletionFormat.QUOTED, - type: CompletionType.VALUE, - insertTextFormat: 2, - }, -]; - -export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/completion/0-1-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/completion/0-1-0.ts new file mode 100644 index 0000000000..fe442d79e5 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/completion/0-1-0.ts @@ -0,0 +1,245 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'type', + insertText: 'type', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '**REQUIRED**. Type of operation. Its value MUST be either request or response.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'method', + insertText: 'method', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + 'When `type` is `request`, this is the HTTP method, otherwise it MUST be ignored. Its value MUST be one of `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`, `OPTIONS`, `CONNECT`, and `TRACE`.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'query', + insertText: 'query', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '[Schema object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject)\n\\\n\\\nA Schema object containing the definitions for each query parameter. This schema MUST be of type `object` and have a `properties` key.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'type', + label: 'request', + insertText: 'request', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'type', + label: 'response', + insertText: 'response', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'method', + label: 'GET', + insertText: 'GET', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'method', + label: 'POST', + insertText: 'POST', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'method', + label: 'PUT', + insertText: 'PUT', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'method', + label: 'PATCH', + insertText: 'PATCH', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'method', + label: 'DELETE', + insertText: 'DELETE', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'method', + label: 'HEAD', + insertText: 'HEAD', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'method', + label: 'OPTIONS', + insertText: 'OPTIONS', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'method', + label: 'CONNECT', + insertText: 'CONNECT', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'method', + label: 'TRACE', + insertText: 'TRACE', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/completion/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/completion/index.ts new file mode 100644 index 0000000000..46141041b5 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/completion/index.ts @@ -0,0 +1,35 @@ +import completion0_1_0Items from './0-1-0'; +import completionLatestItems from './latest'; +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + ...completion0_1_0Items, + ...completionLatestItems, + { + label: 'bindingVersion', + insertText: 'bindingVersion', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: 'The current version is `0.1.0`', + }, + }, + { + target: 'bindingVersion', + label: '0.1.0', + insertText: '0.1.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/http/operation-binding/completion/latest.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/completion/latest.ts new file mode 100644 index 0000000000..5e1a60e029 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/completion/latest.ts @@ -0,0 +1,231 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'type', + insertText: 'type', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '**REQUIRED**. Type of operation. Its value MUST be either request or response.', + }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + label: 'method', + insertText: 'method', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + 'When `type` is `request`, this is the HTTP method, otherwise it MUST be ignored. Its value MUST be one of `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`, `OPTIONS`, `CONNECT`, and `TRACE`.', + }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + label: 'query', + insertText: 'query', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '[Schema object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject)\n\\\n\\\nA Schema object containing the definitions for each query parameter. This schema MUST be of type `object` and have a `properties` key.', + }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + target: 'type', + label: 'request', + insertText: 'request', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + target: 'type', + label: 'response', + insertText: 'response', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + target: 'method', + label: 'GET', + insertText: 'GET', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + target: 'method', + label: 'POST', + insertText: 'POST', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + target: 'method', + label: 'PUT', + insertText: 'PUT', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + target: 'method', + label: 'PATCH', + insertText: 'PATCH', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + target: 'method', + label: 'DELETE', + insertText: 'DELETE', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + target: 'method', + label: 'HEAD', + insertText: 'HEAD', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + target: 'method', + label: 'OPTIONS', + insertText: 'OPTIONS', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + target: 'method', + label: 'CONNECT', + insertText: 'CONNECT', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, + { + target: 'method', + label: 'TRACE', + insertText: 'TRACE', + kind: 12, + format: CompletionFormat.QUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/documentation.ts index 6689e69ec8..688ad8d15c 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/documentation.ts @@ -13,10 +13,10 @@ const documentation = [ }, { target: 'bindingVersion', - docs: 'The version of this binding. If omitted, "latest" MUST be assumed.', + docs: 'The version of this binding. If omitted, "0.1.0" MUST be assumed.', }, { - docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/http/README.md#operation-binding-object)\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`type` | string | **Required**. Type of operation. Its value MUST be either `request` or `response`.\n`method` | string | When `type` is `request`, this is the HTTP method, otherwise it MUST be ignored. Its value MUST be one of `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`, `OPTIONS`, `CONNECT`, and `TRACE`.\n`query` | [Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject) | A Schema object containing the definitions for each query parameter. This schema MUST be of type `object` and have a `properties` key.\n`bindingVersion` | string | 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\nchannels:\n /employees:\n subscribe:\n bindings:\n http:\n type: request\n method: GET\n query:\n type: object\n required:\n - companyId\n properties:\n companyId:\n type: number\n minimum: 1\n description: The Id of the company.\n additionalProperties: false\n bindingVersion: \'0.1.0\'\n```', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/http/README.md#operation-binding-object)\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`type` | string | **Required**. Type of operation. Its value MUST be either `request` or `response`.\n`method` | string | When `type` is `request`, this is the HTTP method, otherwise it MUST be ignored. Its value MUST be one of `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`, `OPTIONS`, `CONNECT`, and `TRACE`.\n`query` | [Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject) | A Schema object containing the definitions for each query parameter. This schema MUST be of type `object` and have a `properties` key.\n`bindingVersion` | string | The version of this binding. If omitted, "0.1.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 /employees:\n subscribe:\n bindings:\n http:\n type: request\n method: GET\n query:\n type: object\n required:\n - companyId\n properties:\n companyId:\n type: number\n minimum: 1\n description: The Id of the company.\n additionalProperties: false\n bindingVersion: \'0.1.0\'\n```', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/allowed-fields.ts similarity index 54% rename from packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/allowed-fields.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/allowed-fields.ts index f8cb9d886f..415174e6bf 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/allowed-fields.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, @@ -9,6 +9,13 @@ const allowedFieldsLint: LinterMeta = { linterFunction: 'allowedFields', linterParams: [['type', 'method', 'query', 'bindingVersion']], marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], }; export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..d728eba2c0 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,9 @@ +import allowedFieldsLint from './allowed-fields'; +import typeTypeLint from './type--type'; +import typeRequiredLint from './type--required'; +import methodTypeLint from './method--type'; +import queryTypeLint from './query--type'; + +const lints = [allowedFieldsLint, typeTypeLint, typeRequiredLint, methodTypeLint, queryTypeLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/method--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/method--type.ts similarity index 55% rename from packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/method--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/method--type.ts index b0e2341dad..9cb331e423 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/method--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/method--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const methodTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_HTTP_OPERATION_BINDING_FIELD_METHOD_TYPE, @@ -11,6 +11,13 @@ const methodTypeLint: LinterMeta = { marker: 'value', target: 'method', data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], }; export default methodTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/query--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/query--type.ts similarity index 55% rename from packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/query--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/query--type.ts index 6e092aeb9d..363966f9bb 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/query--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/query--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const queryTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_HTTP_OPERATION_BINDING_FIELD_QUERY_TYPE, @@ -11,6 +11,13 @@ const queryTypeLint: LinterMeta = { marker: 'value', target: 'query', data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], }; export default queryTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/type--required.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/type--required.ts similarity index 65% rename from packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/type--required.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/type--required.ts index 1c0a69f6bc..03f0629954 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/type--required.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/type--required.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const typeRequiredLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_HTTP_OPERATION_BINDING_FIELD_TYPE_REQUIRED, @@ -19,6 +19,13 @@ const typeRequiredLint: LinterMeta = { }, ], }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], }; export default typeRequiredLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/type--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/type--type.ts similarity index 55% rename from packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/type--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/type--type.ts index aa3a0d5d76..ccd56d8628 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/type--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/0-1-0/type--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const typeTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_HTTP_OPERATION_BINDING_FIELD_TYPE_TYPE, @@ -11,6 +11,13 @@ const typeTypeLint: LinterMeta = { marker: 'value', target: 'type', data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], }; export default typeTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/index.ts index 8793765273..f25a3dbd40 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/index.ts @@ -1,16 +1,10 @@ -import allowedFieldsLint from './allowed-fields'; -import typeTypeLint from './type--type'; -import typeRequiredLint from './type--required'; -import methodTypeLint from './method--type'; -import queryTypeLint from './query--type'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; import bindingVersionTypeLint from './binding-version--type'; const lints = [ - allowedFieldsLint, - typeTypeLint, - typeRequiredLint, - methodTypeLint, - queryTypeLint, + ...operationBinding0_1_0Lints, + ...operationBindingLatestLints, bindingVersionTypeLint, ]; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/allowed-fields.ts new file mode 100644 index 0000000000..6cb1e7c96c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [['type', 'method', 'query', 'bindingVersion']], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..d728eba2c0 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/index.ts @@ -0,0 +1,9 @@ +import allowedFieldsLint from './allowed-fields'; +import typeTypeLint from './type--type'; +import typeRequiredLint from './type--required'; +import methodTypeLint from './method--type'; +import queryTypeLint from './query--type'; + +const lints = [allowedFieldsLint, typeTypeLint, typeRequiredLint, methodTypeLint, queryTypeLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/method--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/method--type.ts new file mode 100644 index 0000000000..57550dcb35 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/method--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const methodTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_HTTP_OPERATION_BINDING_FIELD_METHOD_TYPE, + source: 'apilint', + message: "'method' value must be a string", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['string'], + marker: 'value', + target: 'method', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default methodTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/query--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/query--type.ts new file mode 100644 index 0000000000..73263954fc --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/query--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const queryTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_HTTP_OPERATION_BINDING_FIELD_QUERY_TYPE, + source: 'apilint', + message: 'query must be an object', + severity: 1, + linterFunction: 'apilintElementOrClass', + linterParams: ['schema'], + marker: 'value', + target: 'query', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default queryTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/type--required.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/type--required.ts new file mode 100644 index 0000000000..1806802fb4 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/type--required.ts @@ -0,0 +1,31 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const typeRequiredLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_HTTP_OPERATION_BINDING_FIELD_TYPE_REQUIRED, + source: 'apilint', + message: "should always have a 'type'", + severity: 1, + linterFunction: 'hasRequiredField', + linterParams: ['type'], + marker: 'key', + data: { + quickFix: [ + { + message: "add 'type' field", + action: 'addChild', + snippetYaml: 'type: \n ', + snippetJson: '"type": "",\n ', + }, + ], + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default typeRequiredLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/type--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/type--type.ts new file mode 100644 index 0000000000..4480dc1074 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/http/operation-binding/lint/latest/type--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const typeTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_HTTP_OPERATION_BINDING_FIELD_TYPE_TYPE, + source: 'apilint', + message: "'type' value must be a string", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['string'], + marker: 'value', + target: 'type', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default typeTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/documentation.ts new file mode 100644 index 0000000000..4449c0526f --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/documentation.ts @@ -0,0 +1,6 @@ +const documentation = [ + { + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/ibmmq/#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', + }, +]; +export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..546bc5967a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/index.ts new file mode 100644 index 0000000000..b9f1291d77 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/index.ts @@ -0,0 +1,6 @@ +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; + +const lints = [...operationBinding0_1_0Lints, ...operationBindingLatestLints]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/latest/allowed-fields.ts similarity index 59% rename from packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/allowed-fields.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/latest/allowed-fields.ts index 332afdca89..1cd790d68c 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/latest/allowed-fields.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, @@ -9,6 +9,12 @@ const allowedFieldsLint: LinterMeta = { linterFunction: 'allowedFields', linterParams: [[]], marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/meta.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/meta.ts new file mode 100644 index 0000000000..6053863f41 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ibmmq/operation-binding/meta.ts @@ -0,0 +1,10 @@ +import lint from './lint'; +import documentation from './documentation'; +import { FormatMeta } from '../../../../../apidom-language-types'; + +const meta: FormatMeta = { + lint, + documentation, +}; + +export default meta; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/documentation.ts index 5327249fb9..43447d0aba 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/documentation.ts @@ -1,6 +1,6 @@ const documentation = [ { - docs: 'This object MUST NOT contain any properties. Its name is reserved for future use.', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/jms/#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..546bc5967a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/index.ts index e5a90a6b9d..b9f1291d77 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/index.ts @@ -1,5 +1,6 @@ -import allowedFieldsLint from './allowed-fields'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; -const lints = [allowedFieldsLint]; +const lints = [...operationBinding0_1_0Lints, ...operationBindingLatestLints]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/latest/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/latest/allowed-fields.ts new file mode 100644 index 0000000000..1cd790d68c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/latest/allowed-fields.ts @@ -0,0 +1,20 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/jms/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/0-1-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/0-1-0.ts new file mode 100644 index 0000000000..436d25d659 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/0-1-0.ts @@ -0,0 +1,50 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'groupId', + insertText: 'groupId', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '[Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject)\n\\\n\\\nId of the consumer group.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'clientId', + insertText: 'clientId', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '[Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject)\n\\\n\\\nId of the consumer inside a consumer group.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/0-2-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/0-2-0.ts new file mode 100644 index 0000000000..49b1396311 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/0-2-0.ts @@ -0,0 +1,50 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'groupId', + insertText: 'groupId', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '[Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject)\n\\\n\\\nId of the consumer group.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, + { + label: 'clientId', + insertText: 'clientId', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '[Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject)\n\\\n\\\nId of the consumer inside a consumer group.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/0-3-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/0-3-0.ts new file mode 100644 index 0000000000..9a0b8e82da --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/0-3-0.ts @@ -0,0 +1,50 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'groupId', + insertText: 'groupId', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '[Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject)\n\\\n\\\nId of the consumer group.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, + { + label: 'clientId', + insertText: 'clientId', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '[Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject)\n\\\n\\\nId of the consumer inside a consumer group.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/index.ts new file mode 100644 index 0000000000..fe875ed80f --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/index.ts @@ -0,0 +1,57 @@ +import completion0_1_0Items from './0-1-0'; +import completion0_2_0Items from './0-2-0'; +import completion0_3_0Items from './0-3-0'; +import completionLatestItems from './latest'; +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + ...completion0_1_0Items, + ...completion0_2_0Items, + ...completion0_3_0Items, + ...completionLatestItems, + { + label: 'bindingVersion', + insertText: 'bindingVersion', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: 'The version of this binding. If omitted, "0.3.0" MUST be assumed.', + }, + }, + { + target: 'bindingVersion', + label: '0.1.0', + insertText: '0.1.0', + kind: 12, + format: CompletionFormat.QUOTED_FORCED, + type: CompletionType.VALUE, + insertTextFormat: 2, + }, + { + target: 'bindingVersion', + label: '0.2.0', + insertText: '0.2.0', + kind: 12, + format: CompletionFormat.QUOTED_FORCED, + 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/kafka/operation-binding/completion.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/latest.ts similarity index 71% rename from packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/latest.ts index e1d2cf43dc..d3d5716a72 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/completion/latest.ts @@ -2,7 +2,7 @@ import { ApidomCompletionItem, CompletionFormat, CompletionType, -} from '../../../../../apidom-language-types'; +} from '../../../../../../apidom-language-types'; const completion: ApidomCompletionItem[] = [ { @@ -17,6 +17,12 @@ const completion: ApidomCompletionItem[] = [ value: '[Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject)\n\\\n\\\nId of the consumer group.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'clientId', @@ -30,18 +36,12 @@ const completion: ApidomCompletionItem[] = [ value: '[Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject)\n\\\n\\\nId of the consumer inside a consumer group.', }, - }, - { - label: 'bindingVersion', - insertText: 'bindingVersion', - kind: 14, - format: CompletionFormat.QUOTED, - type: CompletionType.PROPERTY, - insertTextFormat: 2, - documentation: { - kind: 'markdown', - value: 'The version of this binding. If omitted, "latest" MUST be assumed.', - }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, ]; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/documentation.ts index ee43a2cc9d..3936d79ff6 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/documentation.ts @@ -9,10 +9,10 @@ const documentation = [ }, { target: 'bindingVersion', - docs: 'The version of this binding. If omitted, "latest" MUST be assumed.', + docs: 'The version of this binding. If omitted, "0.3.0" MUST be assumed.', }, { - docs: "#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/kafka/README.md#operation-binding-object)\n\nThis object contains information about the operation representation in Kafka.\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`groupId` | [Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject) | Id of the consumer group.\n`clientId` | [Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject) | Id of the consumer inside a consumer group.\n`bindingVersion` | string | 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\nchannels:\n user-signedup:\n publish:\n bindings:\n kafka:\n groupId:\n type: string\n enum: ['myGroupId']\n clientId:\n type: string\n enum: ['myClientId']\n bindingVersion: '0.1.0'\n```", + docs: "#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/kafka/README.md#operation-binding-object)\n\nThis object contains information about the operation representation in Kafka.\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`groupId` | [Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject) | Id of the consumer group.\n`clientId` | [Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject) | Id of the consumer inside a consumer group.\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 publish:\n bindings:\n kafka:\n groupId:\n type: string\n enum: ['myGroupId']\n clientId:\n type: string\n enum: ['myClientId']\n bindingVersion: '0.1.0'\n```", }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..3ba5787b54 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [['groupId', 'clientId', 'bindingVersion']], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/client-id--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/client-id--type.ts new file mode 100644 index 0000000000..1de80f84f7 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/client-id--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const clientIdTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_KAFKA_OPERATION_BINDING_FIELD_CLIENT_ID_TYPE, + source: 'apilint', + message: 'clientId must be an object', + severity: 1, + linterFunction: 'apilintElementOrClass', + linterParams: ['schema'], + marker: 'value', + target: 'clientId', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default clientIdTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/group-id--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/group-id--type.ts new file mode 100644 index 0000000000..92bb273bb5 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/group-id--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const groupIdTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_KAFKA_OPERATION_BINDING_FIELD_GROUP_ID_TYPE, + source: 'apilint', + message: 'groupId must be an object', + severity: 1, + linterFunction: 'apilintElementOrClass', + linterParams: ['schema'], + marker: 'value', + target: 'groupdId', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default groupIdTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e41d199a70 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,7 @@ +import allowedFieldsLint from './allowed-fields'; +import groupIdTypeLint from './group-id--type'; +import clientIdTypeLint from './client-id--type'; + +const lints = [allowedFieldsLint, groupIdTypeLint, clientIdTypeLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/allowed-fields.ts new file mode 100644 index 0000000000..2661b49b8b --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [['groupId', 'clientId', 'bindingVersion']], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/client-id--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/client-id--type.ts new file mode 100644 index 0000000000..965da48e9a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/client-id--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const clientIdTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_KAFKA_OPERATION_BINDING_FIELD_CLIENT_ID_TYPE, + source: 'apilint', + message: 'clientId must be an object', + severity: 1, + linterFunction: 'apilintElementOrClass', + linterParams: ['schema'], + marker: 'value', + target: 'clientId', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default clientIdTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/group-id--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/group-id--type.ts new file mode 100644 index 0000000000..2fa9e4b590 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/group-id--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const groupIdTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_KAFKA_OPERATION_BINDING_FIELD_GROUP_ID_TYPE, + source: 'apilint', + message: 'groupId must be an object', + severity: 1, + linterFunction: 'apilintElementOrClass', + linterParams: ['schema'], + marker: 'value', + target: 'groupdId', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default groupIdTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/index.ts new file mode 100644 index 0000000000..e41d199a70 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-2-0/index.ts @@ -0,0 +1,7 @@ +import allowedFieldsLint from './allowed-fields'; +import groupIdTypeLint from './group-id--type'; +import clientIdTypeLint from './client-id--type'; + +const lints = [allowedFieldsLint, groupIdTypeLint, clientIdTypeLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-3-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-3-0/allowed-fields.ts new file mode 100644 index 0000000000..698783803f --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-3-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [['groupId', 'clientId', '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/kafka/operation-binding/lint/0-3-0/client-id--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-3-0/client-id--type.ts new file mode 100644 index 0000000000..987d75ec35 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-3-0/client-id--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const clientIdTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_KAFKA_OPERATION_BINDING_FIELD_CLIENT_ID_TYPE, + source: 'apilint', + message: 'clientId must be an object', + severity: 1, + linterFunction: 'apilintElementOrClass', + linterParams: ['schema'], + marker: 'value', + target: 'clientId', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default clientIdTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-3-0/group-id--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-3-0/group-id--type.ts new file mode 100644 index 0000000000..440097296c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-3-0/group-id--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const groupIdTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_KAFKA_OPERATION_BINDING_FIELD_GROUP_ID_TYPE, + source: 'apilint', + message: 'groupId must be an object', + severity: 1, + linterFunction: 'apilintElementOrClass', + linterParams: ['schema'], + marker: 'value', + target: 'groupdId', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.3.0']], + }, + ], +}; + +export default groupIdTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-3-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-3-0/index.ts new file mode 100644 index 0000000000..e41d199a70 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/0-3-0/index.ts @@ -0,0 +1,7 @@ +import allowedFieldsLint from './allowed-fields'; +import groupIdTypeLint from './group-id--type'; +import clientIdTypeLint from './client-id--type'; + +const lints = [allowedFieldsLint, groupIdTypeLint, clientIdTypeLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/index.ts index b3b06cc2a8..4ce60e6a15 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/index.ts @@ -1,8 +1,15 @@ -import allowedFieldsLint from './allowed-fields'; -import groupIdTypeLint from './group-id--type'; -import clientIdTypeLint from './client-id--type'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBinding0_2_0Lints from './0-2-0'; +import operationBinding0_3_0Lints from './0-3-0'; +import operationBindingLatestLints from './latest'; import bindingVersionTypeLint from './binding-version--type'; -const lints = [allowedFieldsLint, groupIdTypeLint, clientIdTypeLint, bindingVersionTypeLint]; +const lints = [ + ...operationBinding0_1_0Lints, + ...operationBinding0_2_0Lints, + ...operationBinding0_3_0Lints, + ...operationBindingLatestLints, + bindingVersionTypeLint, +]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/allowed-fields.ts similarity index 58% rename from packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/allowed-fields.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/allowed-fields.ts index 96bcc0c1bb..dd353746ca 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/allowed-fields.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, @@ -9,6 +9,12 @@ const allowedFieldsLint: LinterMeta = { linterFunction: 'allowedFields', linterParams: [['groupId', 'clientId', 'bindingVersion']], marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/client-id--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/client-id--type.ts similarity index 61% rename from packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/client-id--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/client-id--type.ts index 89963d55f8..df2c8a87ab 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/client-id--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/client-id--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const clientIdTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_KAFKA_OPERATION_BINDING_FIELD_CLIENT_ID_TYPE, @@ -11,6 +11,12 @@ const clientIdTypeLint: LinterMeta = { marker: 'value', target: 'clientId', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default clientIdTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/group-id--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/group-id--type.ts similarity index 60% rename from packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/group-id--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/group-id--type.ts index d50028c04a..c803051f89 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/group-id--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/group-id--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const groupIdTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_KAFKA_OPERATION_BINDING_FIELD_GROUP_ID_TYPE, @@ -11,6 +11,12 @@ const groupIdTypeLint: LinterMeta = { marker: 'value', target: 'groupdId', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default groupIdTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e41d199a70 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/kafka/operation-binding/lint/latest/index.ts @@ -0,0 +1,7 @@ +import allowedFieldsLint from './allowed-fields'; +import groupIdTypeLint from './group-id--type'; +import clientIdTypeLint from './client-id--type'; + +const lints = [allowedFieldsLint, groupIdTypeLint, clientIdTypeLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/documentation.ts index 5327249fb9..8907d30de8 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/documentation.ts @@ -1,6 +1,6 @@ const documentation = [ { - docs: 'This object MUST NOT contain any properties. Its name is reserved for future use.', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/tree/master/mercure#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..546bc5967a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/index.ts index e5a90a6b9d..b9f1291d77 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/index.ts @@ -1,5 +1,6 @@ -import allowedFieldsLint from './allowed-fields'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; -const lints = [allowedFieldsLint]; +const lints = [...operationBinding0_1_0Lints, ...operationBindingLatestLints]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/latest/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/latest/allowed-fields.ts new file mode 100644 index 0000000000..1cd790d68c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/latest/allowed-fields.ts @@ -0,0 +1,20 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mercure/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/completion/0-1-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/completion/0-1-0.ts new file mode 100644 index 0000000000..26bf6cd945 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/completion/0-1-0.ts @@ -0,0 +1,97 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'qos', + insertText: 'qos', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '`integer`\n\\\n\\\nDefines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery).', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + label: 'retain', + insertText: 'retain', + kind: 14, + format: CompletionFormat.UNQUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: '`boolean`\n\\\n\\\nWhether the broker should retain the message or not.', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'qos', + label: '0', + insertText: '0', + kind: 12, + format: CompletionFormat.UNQUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'qos', + label: '1', + insertText: '1', + kind: 12, + format: CompletionFormat.UNQUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, + { + target: 'qos', + label: '2', + insertText: '2', + kind: 12, + format: CompletionFormat.UNQUOTED, + type: CompletionType.VALUE, + insertTextFormat: 2, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/completion/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/completion/index.ts new file mode 100644 index 0000000000..064c1a157d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/completion/index.ts @@ -0,0 +1,35 @@ +import completion0_1_0Items from './0-1-0'; +import completionLatestItems from './latest'; +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + ...completion0_1_0Items, + ...completionLatestItems, + { + label: 'bindingVersion', + insertText: 'bindingVersion', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: 'The version of this binding. If omitted, "0.1.0" MUST be assumed.', + }, + }, + { + target: 'bindingVersion', + label: '0.1.0', + insertText: '0.1.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/mqtt/operation-binding/completion.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/completion/latest.ts similarity index 54% rename from packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/completion.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/completion/latest.ts index 07a2fdacdc..a42a33c94c 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/completion.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/completion/latest.ts @@ -2,7 +2,7 @@ import { ApidomCompletionItem, CompletionFormat, CompletionType, -} from '../../../../../apidom-language-types'; +} from '../../../../../../apidom-language-types'; const completion: ApidomCompletionItem[] = [ { @@ -15,8 +15,14 @@ const completion: ApidomCompletionItem[] = [ documentation: { kind: 'markdown', value: - 'Defines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery).', + '`integer`\n\\\n\\\nDefines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery).', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { label: 'retain', @@ -27,20 +33,14 @@ const completion: ApidomCompletionItem[] = [ insertTextFormat: 2, documentation: { kind: 'markdown', - value: 'Whether the broker should retain the message or not.', - }, - }, - { - label: 'bindingVersion', - insertText: 'bindingVersion', - kind: 14, - format: CompletionFormat.QUOTED, - type: CompletionType.PROPERTY, - insertTextFormat: 2, - documentation: { - kind: 'markdown', - value: 'The version of this binding. If omitted, "latest" MUST be assumed.', + value: '`boolean`\n\\\n\\\nWhether the broker should retain the message or not.', }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { target: 'qos', @@ -50,6 +50,12 @@ const completion: ApidomCompletionItem[] = [ format: CompletionFormat.UNQUOTED, type: CompletionType.VALUE, insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { target: 'qos', @@ -59,6 +65,12 @@ const completion: ApidomCompletionItem[] = [ format: CompletionFormat.UNQUOTED, type: CompletionType.VALUE, insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, { target: 'qos', @@ -68,6 +80,12 @@ const completion: ApidomCompletionItem[] = [ format: CompletionFormat.UNQUOTED, type: CompletionType.VALUE, insertTextFormat: 2, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }, ]; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/documentation.ts index 23198eec32..3652a2f043 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/documentation.ts @@ -1,18 +1,18 @@ const documentation = [ { target: 'qos', - docs: 'Defines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery).', + docs: '`integer`\n\\\n\\\nDefines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery).', }, { target: 'retain', - docs: 'Whether the broker should retain the message or not.', + docs: '`boolean`\n\\\n\\\nWhether the broker should retain the message or not.', }, { target: 'bindingVersion', - docs: 'The version of this binding. If omitted, "latest" MUST be assumed.', + docs: 'The version of this binding. If omitted, "0.1.0" MUST be assumed.', }, { - docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/mqtt/README.md#operation-binding-object)\n\nThis object contains information about the operation representation in MQTT.\n\n##### Fixed Fields\n\nField Name | Type | Applies To | Description\n---|:---:|:---:|---\n`qos` | integer | Publish, Subscribe | Defines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery).\n`retain` | boolean | Publish, Subscribe | Whether the broker should retain the message or not.\n`bindingVersion` | string | Publish, Subscribe | 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\nchannels:\n user/signup:\n publish:\n bindings:\n mqtt:\n qos: 2\n retain: true\n bindingVersion: 0.1.0\n```', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/mqtt/README.md#operation-binding-object)\n\nThis object contains information about the operation representation in MQTT.\n\n##### Fixed Fields\n\nField Name | Type | Applies To | Description\n---|:---:|:---:|---\n`qos` | integer | Publish, Subscribe | Defines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery).\n`retain` | boolean | Publish, Subscribe | Whether the broker should retain the message or not.\n`bindingVersion` | string | Publish, Subscribe | The version of this binding. If omitted, "0.1.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 mqtt:\n qos: 2\n retain: true\n bindingVersion: 0.1.0\n```', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..316137357c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields.', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [['qos', 'retain', 'bindingVersion']], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..8c0d3f4d84 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,7 @@ +import allowedFieldsLint from './allowed-fields'; +import qosEqualsLint from './qos--equals'; +import retainTypeLint from './retain--type'; + +const lints = [allowedFieldsLint, qosEqualsLint, retainTypeLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/qos--equals.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/qos--equals.ts new file mode 100644 index 0000000000..1a8f72b8f8 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/qos--equals.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const qosEqualsLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_MQTT_OPERATION_BINDING_FIELD_QOS_EQUALS, + source: 'apilint', + message: "'qos' must be one of allowed values", + severity: 1, + linterFunction: 'apilintValueOrArray', + linterParams: [[0, 1, 2]], + marker: 'value', + target: 'qos', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default qosEqualsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/retain--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/retain--type.ts new file mode 100644 index 0000000000..a4862154aa --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/0-1-0/retain--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const retainTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_MQTT_OPERATION_BINDING_FIELD_RETAIN_TYPE, + source: 'apilint', + message: "'retain' value must be a boolean", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['boolean'], + marker: 'value', + target: 'retain', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default retainTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/index.ts index 705629850f..f25a3dbd40 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/index.ts @@ -1,8 +1,11 @@ -import allowedFieldsLint from './allowed-fields'; -import qosEqualsLint from './qos--equals'; -import retainTypeLint from './retain--type'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; import bindingVersionTypeLint from './binding-version--type'; -const lints = [allowedFieldsLint, qosEqualsLint, retainTypeLint, bindingVersionTypeLint]; +const lints = [ + ...operationBinding0_1_0Lints, + ...operationBindingLatestLints, + bindingVersionTypeLint, +]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/allowed-fields.ts similarity index 58% rename from packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/allowed-fields.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/allowed-fields.ts index 014db9c3e5..4be715b663 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/allowed-fields.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, @@ -9,6 +9,12 @@ const allowedFieldsLint: LinterMeta = { linterFunction: 'allowedFields', linterParams: [['qos', 'retain', 'bindingVersion']], marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..8c0d3f4d84 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/index.ts @@ -0,0 +1,7 @@ +import allowedFieldsLint from './allowed-fields'; +import qosEqualsLint from './qos--equals'; +import retainTypeLint from './retain--type'; + +const lints = [allowedFieldsLint, qosEqualsLint, retainTypeLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/qos--equals.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/qos--equals.ts similarity index 60% rename from packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/qos--equals.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/qos--equals.ts index 7b6c86310f..4c9c25d624 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/qos--equals.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/qos--equals.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const qosEqualsLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_MQTT_OPERATION_BINDING_FIELD_QOS_EQUALS, @@ -11,6 +11,12 @@ const qosEqualsLint: LinterMeta = { marker: 'value', target: 'qos', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default qosEqualsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/retain--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/retain--type.ts similarity index 60% rename from packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/retain--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/retain--type.ts index a0d7ba5ece..599b03b03b 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/retain--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt/operation-binding/lint/latest/retain--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const retainTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_MQTT_OPERATION_BINDING_FIELD_RETAIN_TYPE, @@ -11,6 +11,12 @@ const retainTypeLint: LinterMeta = { marker: 'value', target: 'retain', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default retainTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/documentation.ts index 5327249fb9..8091d18c04 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/documentation.ts @@ -1,6 +1,6 @@ const documentation = [ { - docs: 'This object MUST NOT contain any properties. Its name is reserved for future use.', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/tree/master/mqtt5#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..546bc5967a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/allowed-fields.ts deleted file mode 100644 index 332afdca89..0000000000 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/allowed-fields.ts +++ /dev/null @@ -1,14 +0,0 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; - -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: 1, - linterFunction: 'allowedFields', - linterParams: [[]], - marker: 'key', -}; - -export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/index.ts index e5a90a6b9d..b9f1291d77 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/index.ts @@ -1,5 +1,6 @@ -import allowedFieldsLint from './allowed-fields'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; -const lints = [allowedFieldsLint]; +const lints = [...operationBinding0_1_0Lints, ...operationBindingLatestLints]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/latest/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/latest/allowed-fields.ts new file mode 100644 index 0000000000..1cd790d68c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/latest/allowed-fields.ts @@ -0,0 +1,20 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/mqtt5/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/completion.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/completion/0-1-0.ts similarity index 55% rename from packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/completion.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/completion/0-1-0.ts index 6020a9807e..43d5ce2c38 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/completion.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/completion/0-1-0.ts @@ -2,7 +2,7 @@ import { ApidomCompletionItem, CompletionFormat, CompletionType, -} from '../../../../../apidom-language-types'; +} from '../../../../../../apidom-language-types'; const completion: ApidomCompletionItem[] = [ { @@ -16,18 +16,13 @@ const completion: ApidomCompletionItem[] = [ kind: 'markdown', value: 'Defines the name of the queue to use. It MUST NOT exceed 255 characters.', }, - }, - { - label: 'bindingVersion', - insertText: 'bindingVersion', - kind: 14, - format: CompletionFormat.QUOTED, - type: CompletionType.PROPERTY, - insertTextFormat: 2, - documentation: { - kind: 'markdown', - value: 'The version of this binding. If omitted, "latest" MUST be assumed.', - }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], }, ]; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/completion/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/completion/index.ts new file mode 100644 index 0000000000..064c1a157d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/completion/index.ts @@ -0,0 +1,35 @@ +import completion0_1_0Items from './0-1-0'; +import completionLatestItems from './latest'; +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + ...completion0_1_0Items, + ...completionLatestItems, + { + label: 'bindingVersion', + insertText: 'bindingVersion', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: 'The version of this binding. If omitted, "0.1.0" MUST be assumed.', + }, + }, + { + target: 'bindingVersion', + label: '0.1.0', + insertText: '0.1.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/nats/operation-binding/completion/latest.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/completion/latest.ts new file mode 100644 index 0000000000..188065752c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/completion/latest.ts @@ -0,0 +1,28 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'queue', + insertText: 'queue', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: 'Defines the name of the queue to use. It MUST NOT exceed 255 characters.', + }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/documentation.ts index c0891025d1..a942dd908e 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/documentation.ts @@ -5,10 +5,10 @@ const documentation = [ }, { target: 'bindingVersion', - docs: 'The version of this binding. If omitted, "latest" MUST be assumed.', + docs: 'The version of this binding. If omitted, "0.1.0" MUST be assumed.', }, { - docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/nats/README.md#operation-binding-object)\n\nField Name | Type | Description\n---|:---:|---\n| `queue` | string | Defines the name of the queue to use. It MUST NOT exceed 255 characters. |\n| `bindingVersion` | string | The version of this binding. If omitted, "latest" MUST be assumed. |', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/nats/README.md#operation-binding-object)\n\nField Name | Type | Description\n---|:---:|---\n| `queue` | string | Defines the name of the queue to use. It MUST NOT exceed 255 characters. |\n| `bindingVersion` | string | The version of this binding. If omitted, "0.1.0" MUST be assumed. |', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..bae659dd6a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [['queue', 'bindingVersion']], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..ea10feb033 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,7 @@ +import allowedFieldsLint from './allowed-fields'; +import queueTypeLint from './queue--type'; +import queueMaxLengthLint from './queue--max-length'; + +const lints = [allowedFieldsLint, queueTypeLint, queueMaxLengthLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/queue--max-length.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/queue--max-length.ts new file mode 100644 index 0000000000..abb485b0cf --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/queue--max-length.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const queueMaxLengthLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_NATS_OPERATION_BINDING_FIELD_QUEUE_MAX_LENGTH, + source: 'apilint', + message: "'queue' value must not exceed 255 characters", + severity: 1, + linterFunction: 'apilintMaxLength', + linterParams: [255], + marker: 'value', + target: 'queue', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default queueMaxLengthLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/queue--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/queue--type.ts new file mode 100644 index 0000000000..17983ec481 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/0-1-0/queue--type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const queueTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_NATS_OPERATION_BINDING_FIELD_QUEUE_TYPE, + source: 'apilint', + message: "'queue' value must be a string", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['string'], + marker: 'value', + target: 'queue', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default queueTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/index.ts index 936151db9c..f25a3dbd40 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/index.ts @@ -1,8 +1,11 @@ -import allowedFieldsLint from './allowed-fields'; -import queueTypeLint from './queue--type'; -import queueMaxLengthLint from './queue--max-length'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; import bindingVersionTypeLint from './binding-version--type'; -const lints = [allowedFieldsLint, queueTypeLint, queueMaxLengthLint, bindingVersionTypeLint]; +const lints = [ + ...operationBinding0_1_0Lints, + ...operationBindingLatestLints, + bindingVersionTypeLint, +]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/allowed-fields.ts similarity index 57% rename from packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/allowed-fields.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/allowed-fields.ts index 9214d77f35..c1a791d18b 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/allowed-fields.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, @@ -9,6 +9,12 @@ const allowedFieldsLint: LinterMeta = { linterFunction: 'allowedFields', linterParams: [['queue', 'bindingVersion']], marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..ea10feb033 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/index.ts @@ -0,0 +1,7 @@ +import allowedFieldsLint from './allowed-fields'; +import queueTypeLint from './queue--type'; +import queueMaxLengthLint from './queue--max-length'; + +const lints = [allowedFieldsLint, queueTypeLint, queueMaxLengthLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/queue--max-length.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/queue--max-length.ts similarity index 61% rename from packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/queue--max-length.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/queue--max-length.ts index a126bfddbb..b38d4507d9 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/queue--max-length.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/queue--max-length.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const queueMaxLengthLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_NATS_OPERATION_BINDING_FIELD_QUEUE_MAX_LENGTH, @@ -11,6 +11,12 @@ const queueMaxLengthLint: LinterMeta = { marker: 'value', target: 'queue', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default queueMaxLengthLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/queue--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/queue--type.ts similarity index 59% rename from packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/queue--type.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/queue--type.ts index 530d10876a..33edb91ac1 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/queue--type.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/nats/operation-binding/lint/latest/queue--type.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const queueTypeLint: LinterMeta = { code: ApilintCodes.ASYNCAPI2_NATS_OPERATION_BINDING_FIELD_QUEUE_TYPE, @@ -11,6 +11,12 @@ const queueTypeLint: LinterMeta = { marker: 'value', target: 'queue', data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default queueTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/documentation.ts index 5327249fb9..882230e643 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/documentation.ts @@ -1,6 +1,6 @@ const documentation = [ { - docs: 'This object MUST NOT contain any properties. Its name is reserved for future use.', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/tree/master/redis#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..546bc5967a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/allowed-fields.ts deleted file mode 100644 index 332afdca89..0000000000 --- a/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/allowed-fields.ts +++ /dev/null @@ -1,14 +0,0 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; - -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: 1, - linterFunction: 'allowedFields', - linterParams: [[]], - marker: 'key', -}; - -export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/index.ts index e5a90a6b9d..b9f1291d77 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/index.ts @@ -1,5 +1,6 @@ -import allowedFieldsLint from './allowed-fields'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; -const lints = [allowedFieldsLint]; +const lints = [...operationBinding0_1_0Lints, ...operationBindingLatestLints]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/latest/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/latest/allowed-fields.ts new file mode 100644 index 0000000000..1cd790d68c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/latest/allowed-fields.ts @@ -0,0 +1,20 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/redis/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/documentation.ts index 5327249fb9..766929764f 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/documentation.ts @@ -1,6 +1,6 @@ const documentation = [ { - docs: 'This object MUST NOT contain any properties. Its name is reserved for future use.', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/tree/master/sns#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..546bc5967a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/allowed-fields.ts deleted file mode 100644 index 332afdca89..0000000000 --- a/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/allowed-fields.ts +++ /dev/null @@ -1,14 +0,0 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; - -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: 1, - linterFunction: 'allowedFields', - linterParams: [[]], - marker: 'key', -}; - -export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/index.ts index e5a90a6b9d..b9f1291d77 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/index.ts @@ -1,5 +1,6 @@ -import allowedFieldsLint from './allowed-fields'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; -const lints = [allowedFieldsLint]; +const lints = [...operationBinding0_1_0Lints, ...operationBindingLatestLints]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/latest/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/latest/allowed-fields.ts new file mode 100644 index 0000000000..1cd790d68c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/latest/allowed-fields.ts @@ -0,0 +1,20 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sns/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion/0-1-0.ts similarity index 61% rename from packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion/0-1-0.ts index cc15256c36..8573378837 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion/0-1-0.ts @@ -2,7 +2,7 @@ import { ApidomCompletionItem, CompletionFormat, CompletionType, -} from '../../../../../apidom-language-types'; +} from '../../../../../../apidom-language-types'; const completion: ApidomCompletionItem[] = [ { @@ -17,18 +17,13 @@ const completion: ApidomCompletionItem[] = [ value: 'List of [Destination Objects](https://github.com/asyncapi/bindings/tree/master/solace#example-with-two-destinations).', }, - }, - { - label: 'bindingVersion', - insertText: 'bindingVersion', - kind: 14, - format: CompletionFormat.QUOTED, - type: CompletionType.PROPERTY, - insertTextFormat: 2, - documentation: { - kind: 'markdown', - value: 'The current version is 0.2.0.', - }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], }, ]; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion/0-2-0.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion/0-2-0.ts new file mode 100644 index 0000000000..6e8469e05a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion/0-2-0.ts @@ -0,0 +1,30 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'destinations', + insertText: 'destinations', + kind: 14, + format: CompletionFormat.ARRAY, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + 'List of [Destination Objects](https://github.com/asyncapi/bindings/tree/master/solace#example-with-two-destinations).', + }, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion/index.ts new file mode 100644 index 0000000000..dbe4444e5a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion/index.ts @@ -0,0 +1,46 @@ +import completion0_1_0Items from './0-1-0'; +import completion0_2_0Items from './0-2-0'; +import completionLatestItems from './latest'; +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + ...completion0_1_0Items, + ...completion0_2_0Items, + ...completionLatestItems, + { + label: 'bindingVersion', + insertText: 'bindingVersion', + kind: 14, + format: CompletionFormat.QUOTED, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: 'The current version is `0.2.0`', + }, + }, + { + target: 'bindingVersion', + label: '0.1.0', + insertText: '0.1.0', + kind: 12, + format: CompletionFormat.QUOTED_FORCED, + type: CompletionType.VALUE, + insertTextFormat: 2, + }, + { + target: 'bindingVersion', + label: '0.2.0', + insertText: '0.2.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/solace/operation-binding/completion/latest.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion/latest.ts new file mode 100644 index 0000000000..d8208078e7 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/completion/latest.ts @@ -0,0 +1,29 @@ +import { + ApidomCompletionItem, + CompletionFormat, + CompletionType, +} from '../../../../../../apidom-language-types'; + +const completion: ApidomCompletionItem[] = [ + { + label: 'destinations', + insertText: 'destinations', + kind: 14, + format: CompletionFormat.ARRAY, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + 'List of [Destination Objects](https://github.com/asyncapi/bindings/tree/master/solace#example-with-two-destinations).', + }, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], + }, +]; + +export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..c8a689859a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [['destinations', 'bindingVersion']], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-1-0/destinations--items-type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-1-0/destinations--items-type.ts new file mode 100644 index 0000000000..dc9e290855 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-1-0/destinations--items-type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const destinationsItemsTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_SOLACE_OPERATION_BINDING_FIELD_DESTINATIONS_TYPE, + source: 'apilint', + message: "'destinations' value must be a list of Destination Objects", + severity: 1, + linterFunction: 'apilintArrayOfElementsOrClasses', + linterParams: [['object']], + marker: 'value', + target: 'destinations', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default destinationsItemsTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..09b015732a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,6 @@ +import allowedFieldsLint from './allowed-fields'; +import destinationsItemsTypeLint from './destinations--items-type'; + +const lints = [allowedFieldsLint, destinationsItemsTypeLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-2-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-2-0/allowed-fields.ts new file mode 100644 index 0000000000..812204fc56 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-2-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [['destinations', 'bindingVersion']], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-2-0/destinations--items-type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-2-0/destinations--items-type.ts new file mode 100644 index 0000000000..8b31ef73c5 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-2-0/destinations--items-type.ts @@ -0,0 +1,23 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const destinationsItemsTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_SOLACE_OPERATION_BINDING_FIELD_DESTINATIONS_TYPE, + source: 'apilint', + message: "'destinations' value must be a list of Destination Objects", + severity: 1, + linterFunction: 'apilintArrayOfElementsOrClasses', + linterParams: [['object']], + marker: 'value', + target: 'destinations', + data: {}, + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.2.0']], + }, + ], +}; + +export default destinationsItemsTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-2-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-2-0/index.ts new file mode 100644 index 0000000000..09b015732a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/0-2-0/index.ts @@ -0,0 +1,6 @@ +import allowedFieldsLint from './allowed-fields'; +import destinationsItemsTypeLint from './destinations--items-type'; + +const lints = [allowedFieldsLint, destinationsItemsTypeLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/destinations--type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/destinations--type.ts deleted file mode 100644 index 279512191a..0000000000 --- a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/destinations--type.ts +++ /dev/null @@ -1,16 +0,0 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; - -const destinationsTypeLint: LinterMeta = { - code: ApilintCodes.ASYNCAPI2_SOLACE_OPERATION_BINDING_FIELD_DESTINATIONS_TYPE, - source: 'apilint', - message: "'destinations' value must be a list", - severity: 1, - linterFunction: 'apilintType', - linterParams: ['array'], - marker: 'value', - target: 'destinations', - data: {}, -}; - -export default destinationsTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/index.ts index 361a00b49d..92cf3b3443 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/index.ts @@ -1,7 +1,13 @@ -import allowedFieldsLint from './allowed-fields'; -import destinationsTypeLint from './destinations--type'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBinding0_2_0Lints from './0-2-0'; +import operationBindingLatestLints from './latest'; import bindingVersionTypeLint from './binding-version--type'; -const lints = [allowedFieldsLint, destinationsTypeLint, bindingVersionTypeLint]; +const lints = [ + ...operationBinding0_1_0Lints, + ...operationBinding0_2_0Lints, + ...operationBindingLatestLints, + bindingVersionTypeLint, +]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/latest/allowed-fields.ts similarity index 58% rename from packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/allowed-fields.ts rename to packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/latest/allowed-fields.ts index e703656043..bc4a50ecb6 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/allowed-fields.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/latest/allowed-fields.ts @@ -1,5 +1,5 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; const allowedFieldsLint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, @@ -9,6 +9,12 @@ const allowedFieldsLint: LinterMeta = { linterFunction: 'allowedFields', linterParams: [['destinations', 'bindingVersion']], marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], }; export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/latest/destinations--items-type.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/latest/destinations--items-type.ts new file mode 100644 index 0000000000..f6dabefef4 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/latest/destinations--items-type.ts @@ -0,0 +1,22 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +const destinationsItemsTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_SOLACE_OPERATION_BINDING_FIELD_DESTINATIONS_TYPE, + source: 'apilint', + message: "'destinations' value must be a list of Destination Objects", + severity: 1, + linterFunction: 'apilintArrayOfElementsOrClasses', + linterParams: [['object']], + marker: 'value', + target: 'destinations', + data: {}, + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], +}; + +export default destinationsItemsTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..09b015732a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/solace/operation-binding/lint/latest/index.ts @@ -0,0 +1,6 @@ +import allowedFieldsLint from './allowed-fields'; +import destinationsItemsTypeLint from './destinations--items-type'; + +const lints = [allowedFieldsLint, destinationsItemsTypeLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/documentation.ts index 5327249fb9..f2ee77aa48 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/documentation.ts @@ -1,6 +1,6 @@ const documentation = [ { - docs: 'This object MUST NOT contain any properties. Its name is reserved for future use.', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/tree/master/sqs#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..546bc5967a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/allowed-fields.ts deleted file mode 100644 index 332afdca89..0000000000 --- a/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/allowed-fields.ts +++ /dev/null @@ -1,14 +0,0 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; - -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: 1, - linterFunction: 'allowedFields', - linterParams: [[]], - marker: 'key', -}; - -export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/index.ts index e5a90a6b9d..b9f1291d77 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/index.ts @@ -1,5 +1,6 @@ -import allowedFieldsLint from './allowed-fields'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; -const lints = [allowedFieldsLint]; +const lints = [...operationBinding0_1_0Lints, ...operationBindingLatestLints]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/latest/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/latest/allowed-fields.ts new file mode 100644 index 0000000000..1cd790d68c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/latest/allowed-fields.ts @@ -0,0 +1,20 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/sqs/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/documentation.ts index 5327249fb9..6cdd41d666 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/documentation.ts @@ -1,6 +1,6 @@ const documentation = [ { - docs: 'This object MUST NOT contain any properties. Its name is reserved for future use.', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/tree/master/stomp#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..546bc5967a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/allowed-fields.ts deleted file mode 100644 index 332afdca89..0000000000 --- a/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/allowed-fields.ts +++ /dev/null @@ -1,14 +0,0 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; - -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: 1, - linterFunction: 'allowedFields', - linterParams: [[]], - marker: 'key', -}; - -export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/index.ts index e5a90a6b9d..b9f1291d77 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/index.ts @@ -1,5 +1,6 @@ -import allowedFieldsLint from './allowed-fields'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; -const lints = [allowedFieldsLint]; +const lints = [...operationBinding0_1_0Lints, ...operationBindingLatestLints]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/latest/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/latest/allowed-fields.ts new file mode 100644 index 0000000000..1cd790d68c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/latest/allowed-fields.ts @@ -0,0 +1,20 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/stomp/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/documentation.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/documentation.ts index 5327249fb9..cf5c865a28 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/documentation.ts @@ -1,6 +1,6 @@ const documentation = [ { - docs: 'This object MUST NOT contain any properties. Its name is reserved for future use.', + docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/tree/master/websockets#operation)\n\nThis object MUST NOT contain any properties. Its name is reserved for future use.', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/0-1-0/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/0-1-0/allowed-fields.ts new file mode 100644 index 0000000000..546bc5967a --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/0-1-0/allowed-fields.ts @@ -0,0 +1,21 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + targets: [{ path: 'bindingVersion' }], + function: 'apilintValueOrArray', + params: [['0.1.0']], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/0-1-0/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/0-1-0/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/0-1-0/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/allowed-fields.ts deleted file mode 100644 index 332afdca89..0000000000 --- a/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/allowed-fields.ts +++ /dev/null @@ -1,14 +0,0 @@ -import ApilintCodes from '../../../../../codes'; -import { LinterMeta } from '../../../../../../apidom-language-types'; - -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: 1, - linterFunction: 'allowedFields', - linterParams: [[]], - marker: 'key', -}; - -export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/index.ts index e5a90a6b9d..b9f1291d77 100644 --- a/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/index.ts @@ -1,5 +1,6 @@ -import allowedFieldsLint from './allowed-fields'; +import operationBinding0_1_0Lints from './0-1-0'; +import operationBindingLatestLints from './latest'; -const lints = [allowedFieldsLint]; +const lints = [...operationBinding0_1_0Lints, ...operationBindingLatestLints]; export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/latest/allowed-fields.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/latest/allowed-fields.ts new file mode 100644 index 0000000000..1cd790d68c --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/latest/allowed-fields.ts @@ -0,0 +1,20 @@ +import ApilintCodes from '../../../../../../codes'; +import { LinterMeta } from '../../../../../../../apidom-language-types'; + +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: 1, + linterFunction: 'allowedFields', + linterParams: [[]], + marker: 'key', + conditions: [ + { + function: 'missingField', + params: ['bindingVersion'], + }, + ], +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/latest/index.ts b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/latest/index.ts new file mode 100644 index 0000000000..e5a90a6b9d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/bindings/ws/operation-binding/lint/latest/index.ts @@ -0,0 +1,5 @@ +import allowedFieldsLint from './allowed-fields'; + +const lints = [allowedFieldsLint]; + +export default lints; diff --git a/packages/apidom-ls/src/config/asyncapi/config.ts b/packages/apidom-ls/src/config/asyncapi/config.ts index 62e4278162..bb266fed18 100644 --- a/packages/apidom-ls/src/config/asyncapi/config.ts +++ b/packages/apidom-ls/src/config/asyncapi/config.ts @@ -56,6 +56,7 @@ import anypointmqServerBidingMeta from './bindings/anypointmq/server-binding/met // Google Cloud Pub/Sub import googlepubsubChannelBindingMeta from './bindings/googlepubsub/channel-binding/meta'; import googlepubsubMessageBindingMeta from './bindings/googlepubsub/message-binding/meta'; +import googlepubsubOperationBindingMeta from './bindings/googlepubsub/operation-binding/meta'; // HTTP import httpChannelBindingMeta from './bindings/http/channel-binding/meta'; import httpMessageBindingMeta from './bindings/http/message-binding/meta'; @@ -64,6 +65,7 @@ import httpServerBindingMeta from './bindings/http/server-binding/meta'; // IBM MQ import ibmmqChannelBindingMeta from './bindings/ibmmq/channel-binding/meta'; import ibmmqMessageBindingMeta from './bindings/ibmmq/message-binding/meta'; +import ibmmqOperationBindingMeta from './bindings/ibmmq/operation-binding/meta'; import ibmmqServerBindingMeta from './bindings/ibmmq/server-binding/meta'; // JMS import jmsChannelBindingMeta from './bindings/jms/channel-binding/meta'; @@ -201,6 +203,7 @@ export default { // Google Cloud Pub/Sub googlepubsubChannelBinding: googlepubsubChannelBindingMeta, googlepubsubMessageBinding: googlepubsubMessageBindingMeta, + googlepubsubOperationBinding: googlepubsubOperationBindingMeta, // HTTP httpChannelBinding: httpChannelBindingMeta, httpMessageBinding: httpMessageBindingMeta, @@ -209,6 +212,7 @@ export default { // IMB MQ ibmmqChannelBinding: ibmmqChannelBindingMeta, ibmmqMessageBinding: ibmmqMessageBindingMeta, + ibmmqOperationBinding: ibmmqOperationBindingMeta, ibmmqServerBinding: ibmmqServerBindingMeta, // JMS jmsChannelBinding: jmsChannelBindingMeta, diff --git a/packages/apidom-ls/src/config/asyncapi/operation-bindings/completion.ts b/packages/apidom-ls/src/config/asyncapi/operation-bindings/completion.ts index 58401cd3fe..b13e364716 100644 --- a/packages/apidom-ls/src/config/asyncapi/operation-bindings/completion.ts +++ b/packages/apidom-ls/src/config/asyncapi/operation-bindings/completion.ts @@ -181,6 +181,7 @@ const completion: ApidomCompletionItem[] = [ targetSpecs: [ { namespace: 'asyncapi', version: '2.3.0' }, { namespace: 'asyncapi', version: '2.4.0' }, + { namespace: 'asyncapi', version: '2.5.0' }, ], }, { @@ -239,8 +240,37 @@ const completion: ApidomCompletionItem[] = [ { namespace: 'asyncapi', version: '2.2.0' }, { namespace: 'asyncapi', version: '2.3.0' }, { namespace: 'asyncapi', version: '2.4.0' }, + { namespace: 'asyncapi', version: '2.5.0' }, ], }, + { + label: 'googlepubsub', + insertText: 'googlepubsub', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '[Google Cloud Pub/Sub Operation Binding](https://github.com/asyncapi/bindings/blob/master/googlepubsub#operation)\n\\\n\\\nProtocol-specific information for a Google Cloud Pub/Sub operation.', + }, + targetSpecs: [{ namespace: 'asyncapi', version: '2.5.0' }], + }, + { + label: 'ibmmq', + insertText: 'ibmmq', + kind: 14, + format: CompletionFormat.OBJECT, + type: CompletionType.PROPERTY, + insertTextFormat: 2, + documentation: { + kind: 'markdown', + value: + '[IBM MQ Operation Binding](https://github.com/asyncapi/bindings/blob/master/ibmmq#operation)\n\\\n\\\nProtocol-specific information for an IBM MQ operation.', + }, + targetSpecs: [{ namespace: 'asyncapi', version: '2.5.0' }], + }, ]; export default completion; diff --git a/packages/apidom-ls/src/config/asyncapi/operation-bindings/documentation.ts b/packages/apidom-ls/src/config/asyncapi/operation-bindings/documentation.ts index 9c0239889a..4679cb47c5 100644 --- a/packages/apidom-ls/src/config/asyncapi/operation-bindings/documentation.ts +++ b/packages/apidom-ls/src/config/asyncapi/operation-bindings/documentation.ts @@ -1,74 +1,37 @@ +/** + * Omitted fixed fields: + * - http + * - ws + * - kafka + * - anypointmq + * - amqp + * - amqp1 + * - mqtt + * - mqtt5 + * - nats + * - jms + * - sns + * - solace + * - sqs + * - stomp + * - redis + * - mercure + * - ibmmq + * - googlepubsub + * + * Field omission reason: omitted fields do have a non-union type. Thus, + * documentation for these fields doesn't need to be specified here and will + * come directly from the type itself. Description of these fields doesn't + * contain significant information. + */ + const documentation = [ { target: '$ref', docs: 'A reference to an Operation Bindings', }, { - target: 'http', - docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/http/README.md#operation-binding-object)\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`type` | string | **Required**. Type of operation. Its value MUST be either `request` or `response`.\n`method` | string | When `type` is `request`, this is the HTTP method, otherwise it MUST be ignored. Its value MUST be one of `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`, `OPTIONS`, `CONNECT`, and `TRACE`.\n`query` | [Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject) | A Schema object containing the definitions for each query parameter. This schema MUST be of type `object` and have a `properties` key.\n`bindingVersion` | string | 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\nchannels:\n /employees:\n subscribe:\n bindings:\n http:\n type: request\n method: GET\n query:\n type: object\n required:\n - companyId\n properties:\n companyId:\n type: number\n minimum: 1\n description: The Id of the company.\n additionalProperties: false\n bindingVersion: \'0.1.0\'\n```', - }, - { - target: 'ws', - docs: '[WebSockets Operation Binding](https://github.com/asyncapi/bindings/blob/master/websockets#operation)\n\\\n\\\nProtocol-specific information for a WebSockets operation.', - }, - { - target: 'kafka', - docs: "#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/http/README.md#operation-binding-object)\n\nThis object contains information about the operation representation in Kafka.\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`groupId` | [Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject) | Id of the consumer group.\n`clientId` | [Schema Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#schemaObject) | Id of the consumer inside a consumer group.\n`bindingVersion` | string | 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\nchannels:\n user-signedup:\n publish:\n bindings:\n kafka:\n groupId:\n type: string\n enum: ['myGroupId']\n clientId:\n type: string\n enum: ['myClientId']\n bindingVersion: '0.1.0'\n```", - }, - { - target: 'anypointmq', - docs: '[Anypoint MQ Operation Binding](https://github.com/asyncapi/bindings/blob/master/anypointmq#operation)\n\\\n\\\nProtocol-specific information for an Anypoint MQ operation.', - }, - { - target: 'amqp', - 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](https://github.com/asyncapi/bindings/blob/master/amqp/README.md#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, \"latest\" 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```", - }, - { - target: 'amqp1', - docs: '[AMQP 1.0 Operation Binding](https://github.com/asyncapi/bindings/blob/master/amqp1#operation)\n\\\n\\\nProtocol-specific information for an AMQP 1.0 operation.', - }, - { - target: 'mqtt', - docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/mqtt/README.md#operation-binding-object)\n\nThis object contains information about the operation representation in MQTT.\n\n##### Fixed Fields\n\nField Name | Type | Applies To | Description\n---|:---:|:---:|---\n`qos` | integer | Publish, Subscribe | Defines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery).\n`retain` | boolean | Publish, Subscribe | Whether the broker should retain the message or not.\n`bindingVersion` | string | Publish, Subscribe | 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\nchannels:\n user/signup:\n publish:\n bindings:\n mqtt:\n qos: 2\n retain: true\n bindingVersion: 0.1.0\n```', - }, - { - target: 'mqtt5', - docs: '[MQTT 5 Operation Binding](https://github.com/asyncapi/bindings/blob/master/mqtt5#operation)\n\\\n\\\nProtocol-specific information for an MQTT 5 operation.', - }, - { - target: 'nats', - docs: '#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/nats/README.md#operation-binding-object)\n\nField Name | Type | Description\n---|:---:|---\n| `queue` | string | Defines the name of the queue to use. It MUST NOT exceed 255 characters. |\n| `bindingVersion` | string | The version of this binding. If omitted, "latest" MUST be assumed. |', - }, - { - target: 'jms', - docs: '[JMS Operation Binding](https://github.com/asyncapi/bindings/blob/master/jms#operation)\n\\\n\\\nProtocol-specific information for a JMS operation.', - }, - { - target: 'sns', - docs: '[SNS Operation Binding](https://github.com/asyncapi/bindings/blob/master/sns#operation)\n\\\n\\\nProtocol-specific information for an SNS operation.', - }, - { - target: 'solace', - docs: "#### [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/solace/README.md#operation-binding-object)\n\nWe need the ability to support several bindings for each operation, see the [Example](https://github.com/asyncapi/bindings/blob/master/solace/README.md#example) section below for details.\n\nField Name | Type | Description\n---|---|---\n`bindingVersion`|String|The current version is 0.2.0\n`destinations`|List of Destination Objects|Destination Objects are described next.\n\n#### Destination Object\n\nEach destination has the following structure. Note that bindings under a 'subscribe' operation define the behaviour of publishers, and those under a 'publish' operation define how subscribers are configured.\n\nField Name | Type | Description | Applicable Operation\n---|---|---|---\n`destinationType`|Enum|'queue' or 'topic'. If the type is queue, then the subscriber can bind to the queue, which in turn will subscribe to the topic as represented by the channel name or to the provided topicSubscriptions.|publish\n`deliveryMode`|Enum|'direct' or 'persistent'. This determines the quality of service for publishing messages as documented [here.](https://docs.solace.com/PubSub-Basics/Core-Concepts-Message-Delivery-Modes.htm) Default is 'persistent'.|subscribe\n`queue.name`|String|The name of the queue, only applicable when destinationType is 'queue'.|publish\n`queue.topicSubscriptions`|List of String|A list of topics that the queue subscribes to, only applicable when destinationType is 'queue'. If none is given, the queue subscribes to the topic as represented by the channel name.|publish\n`queue.accessType`|Enum|'exclusive' or 'nonexclusive'. This is documented [here.](https://docs.solace.com/PubSub-Basics/Endpoints.htm) Only applicable when destinationType is 'queue'.|publish\n`topic.topicSubscriptions`|List of String|A list of topics that the client subscribes to, only applicable when destinationType is 'topic'. If none is given, the client subscribes to the topic as represented by the channel name.|publish", - }, - { - target: 'sqs', - docs: '[SQS Operation Binding](https://github.com/asyncapi/bindings/blob/master/sqs#operation)\n\\\n\\\nProtocol-specific information for an SQS operation.', - }, - { - target: 'stomp', - docs: '[STOMP Operation Binding](https://github.com/asyncapi/bindings/blob/master/stomp#operation)\n\\\n\\\nProtocol-specific information for a STOMP operation.', - }, - { - target: 'redis', - docs: '[Redis Operation Binding](https://github.com/asyncapi/bindings/blob/master/redis#operation)\n\\\n\\\nProtocol-specific information for a Redis operation.', - }, - { - target: 'mercure', - docs: '[Mercure Operation Binding](https://github.com/asyncapi/bindings/blob/master/mercure#operation)\n\\\n\\\nProtocol-specific information for a Mercure operation.', - }, - { - docs: '#### [Operation Bindings Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#operationBindingsObject)\n\nMap describing protocol-specific definitions for an operation.\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`http` | [HTTP Operation Binding](https://github.com/asyncapi/bindings/blob/master/http/README.md#operation) | Protocol-specific information for an HTTP operation.\n`ws` | [WebSockets Operation Binding](https://github.com/asyncapi/bindings/blob/master/websockets/README.md#operation) | Protocol-specific information for a WebSockets operation.\n`kafka` | [Kafka Operation Binding](https://github.com/asyncapi/bindings/blob/master/kafka/README.md#operation) | Protocol-specific information for a Kafka operation.\n`anypointmq` | [Anypoint MQ Operation Binding](https://github.com/asyncapi/bindings/blob/master/anypointmq/README.md#operation) | Protocol-specific information for an Anypoint MQ operation.\n`amqp` | [AMQP Operation Binding](https://github.com/asyncapi/bindings/blob/master/amqp/README.md#operation) | Protocol-specific information for an AMQP 0-9-1 operation.\n`amqp1` | [AMQP 1.0 Operation Binding](https://github.com/asyncapi/bindings/blob/master/amqp1/README.md#operation) | Protocol-specific information for an AMQP 1.0 operation.\n`mqtt` | [MQTT Operation Binding](https://github.com/asyncapi/bindings/blob/master/mqtt/README.md#operation) | Protocol-specific information for an MQTT operation.\n`mqtt5` | [MQTT 5 Operation Binding](https://github.com/asyncapi/bindings/blob/master/mqtt5/README.md#operation) | Protocol-specific information for an MQTT 5 operation.\n`nats` | [NATS Operation Binding](https://github.com/asyncapi/bindings/blob/master/nats/README.md#operation) | Protocol-specific information for a NATS operation.\n`jms` | [JMS Operation Binding](https://github.com/asyncapi/bindings/blob/master/jms/README.md#operation) | Protocol-specific information for a JMS operation.\n`sns` | [SNS Operation Binding](https://github.com/asyncapi/bindings/blob/master/sns/README.md#operation) | Protocol-specific information for an SNS operation.\n`solace` | [Solace Operation Binding](https://github.com/asyncapi/bindings/blob/master/solace#operation) | Protocol-specific information for a Solace operation.\n`sqs` | [SQS Operation Binding](https://github.com/asyncapi/bindings/blob/master/sqs/README.md#operation) | Protocol-specific information for an SQS operation.\n`stomp` | [STOMP Operation Binding](https://github.com/asyncapi/bindings/blob/master/stomp/README.md#operation) | Protocol-specific information for a STOMP operation.\n`redis` | [Redis Operation Binding](https://github.com/asyncapi/bindings/blob/master/redis#operation) | Protocol-specific information for a Redis operation.\n`mercure` | [Mercure Operation Binding](https://github.com/asyncapi/bindings/blob/master/mercure#operation) | Protocol-specific information for a Mercure operation.\n\nThis object MAY be extended with [Specification Extensions](https://www.asyncapi.com/docs/reference/specification/v2.5.0#specificationExtensions).', + docs: '#### [Operation Bindings Object](https://www.asyncapi.com/docs/reference/specification/v2.5.0#operationBindingsObject)\n\nMap describing protocol-specific definitions for an operation.\n\n##### Fixed Fields\n\nField Name | Type | Description\n---|:---:|---\n`http` | [HTTP Operation Binding](https://github.com/asyncapi/bindings/blob/master/http/README.md#operation) | Protocol-specific information for an HTTP operation.\n`ws` | [WebSockets Operation Binding](https://github.com/asyncapi/bindings/blob/master/websockets/README.md#operation) | Protocol-specific information for a WebSockets operation.\n`kafka` | [Kafka Operation Binding](https://github.com/asyncapi/bindings/blob/master/kafka/README.md#operation) | Protocol-specific information for a Kafka operation.\n`anypointmq` | [Anypoint MQ Operation Binding](https://github.com/asyncapi/bindings/blob/master/anypointmq/README.md#operation) | Protocol-specific information for an Anypoint MQ operation.\n`amqp` | [AMQP Operation Binding](https://github.com/asyncapi/bindings/blob/master/amqp/README.md#operation) | Protocol-specific information for an AMQP 0-9-1 operation.\n`amqp1` | [AMQP 1.0 Operation Binding](https://github.com/asyncapi/bindings/blob/master/amqp1/README.md#operation) | Protocol-specific information for an AMQP 1.0 operation.\n`mqtt` | [MQTT Operation Binding](https://github.com/asyncapi/bindings/blob/master/mqtt/README.md#operation) | Protocol-specific information for an MQTT operation.\n`mqtt5` | [MQTT 5 Operation Binding](https://github.com/asyncapi/bindings/blob/master/mqtt5/README.md#operation) | Protocol-specific information for an MQTT 5 operation.\n`nats` | [NATS Operation Binding](https://github.com/asyncapi/bindings/blob/master/nats/README.md#operation) | Protocol-specific information for a NATS operation.\n`jms` | [JMS Operation Binding](https://github.com/asyncapi/bindings/blob/master/jms/README.md#operation) | Protocol-specific information for a JMS operation.\n`sns` | [SNS Operation Binding](https://github.com/asyncapi/bindings/blob/master/sns/README.md#operation) | Protocol-specific information for an SNS operation.\n`solace` | [Solace Operation Binding](https://github.com/asyncapi/bindings/blob/master/solace#operation) | Protocol-specific information for a Solace operation.\n`sqs` | [SQS Operation Binding](https://github.com/asyncapi/bindings/blob/master/sqs/README.md#operation) | Protocol-specific information for an SQS operation.\n`stomp` | [STOMP Operation Binding](https://github.com/asyncapi/bindings/blob/master/stomp/README.md#operation) | Protocol-specific information for a STOMP operation.\n`redis` | [Redis Operation Binding](https://github.com/asyncapi/bindings/blob/master/redis#operation) | Protocol-specific information for a Redis operation.\n`mercure` | [Mercure Operation Binding](https://github.com/asyncapi/bindings/blob/master/mercure#operation) | Protocol-specific information for a Mercure operation.\n`googlepubsub` | [Google Cloud Pub/Sub Operation Binding](https://github.com/asyncapi/bindings/blob/master/googlepubsub#operation) | Protocol-specific information for a Google Cloud Pub/Sub operation.\n`ibmmq` | [IBM MQ Operation Binding](https://github.com/asyncapi/bindings/blob/master/ibmmq#operation-binding-object) | Protocol-specific information for an IBM MQ operation.\n\nThis object MAY be extended with [Specification Extensions](https://www.asyncapi.com/docs/reference/specification/v2.5.0#specificationExtensions).', }, ]; export default documentation; diff --git a/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/allowed-fields-2-3--2-4.ts b/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/allowed-fields-2-3--2-4.ts index f8f744e905..731a660580 100644 --- a/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/allowed-fields-2-3--2-4.ts +++ b/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/allowed-fields-2-3--2-4.ts @@ -2,7 +2,7 @@ import ApilintCodes from '../../../codes'; import { LinterMeta } from '../../../../apidom-language-types'; // eslint-disable-next-line @typescript-eslint/naming-convention -const allowedFields2_3Lint: LinterMeta = { +const allowedFields2_3__2_4Lint: LinterMeta = { code: ApilintCodes.NOT_ALLOWED_FIELDS, source: 'apilint', message: 'Object includes not allowed fields', @@ -37,4 +37,4 @@ const allowedFields2_3Lint: LinterMeta = { ], }; -export default allowedFields2_3Lint; +export default allowedFields2_3__2_4Lint; diff --git a/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/allowed-fields-2-5.ts b/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/allowed-fields-2-5.ts new file mode 100644 index 0000000000..1f7173f718 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/allowed-fields-2-5.ts @@ -0,0 +1,39 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +// eslint-disable-next-line @typescript-eslint/naming-convention +const allowedFields2_5Lint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [ + [ + '$ref', + 'http', + 'ws', + 'kafka', + 'anypointmq', + 'amqp', + 'amqp1', + 'mqtt', + 'mqtt5', + 'nats', + 'jms', + 'sns', + 'solace', + 'sqs', + 'stomp', + 'redis', + 'mercure', + 'ibmmq', + 'googlepubsub', + ], + 'x-', + ], + marker: 'key', + targetSpecs: [{ namespace: 'asyncapi', version: '2.5.0' }], +}; + +export default allowedFields2_5Lint; diff --git a/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/googlepubsub--type.ts b/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/googlepubsub--type.ts new file mode 100644 index 0000000000..d8f585efb9 --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/googlepubsub--type.ts @@ -0,0 +1,16 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const googlepubsubTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_OPERATION_BINDINGS_FIELD_GOOGLEPUBSUB_TYPE, + source: 'apilint', + message: '"googlepubsub" must be a Google Cloud Pub/Sub Operation Binding', + severity: 1, + linterFunction: 'apilintElementOrClass', + linterParams: ['googlepubsubOperationBinding'], + marker: 'value', + target: 'googlepubsub', + data: {}, +}; + +export default googlepubsubTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/ibmmq--type.ts b/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/ibmmq--type.ts new file mode 100644 index 0000000000..d8b0dc475d --- /dev/null +++ b/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/ibmmq--type.ts @@ -0,0 +1,16 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const imbmqTypeLint: LinterMeta = { + code: ApilintCodes.ASYNCAPI2_OPERATION_BINDINGS_FIELD_IBMMQ_TYPE, + source: 'apilint', + message: '"ibmmq" must be a IBM MQ Operation Binding', + severity: 1, + linterFunction: 'apilintElementOrClass', + linterParams: ['ibmmqOperationBinding'], + marker: 'value', + target: 'ibmmq', + data: {}, +}; + +export default imbmqTypeLint; diff --git a/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/index.ts b/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/index.ts index 0766d57ba0..ed71416f68 100644 --- a/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/index.ts +++ b/packages/apidom-ls/src/config/asyncapi/operation-bindings/lint/index.ts @@ -1,6 +1,7 @@ import allowedFields2_0__2_1Lint from './allowed-fields-2-0--2-1'; import allowedFields2_2Lint from './allowed-fields-2-2'; import allowedFields2_3__2_4Lint from './allowed-fields-2-3--2-4'; +import allowedFields2_5Lint from './allowed-fields-2-5'; import $refValidLint from './$ref--valid'; import $refNoSiblingsLint from './$ref--no-siblings'; import httpTypeLint from './http--type'; @@ -19,11 +20,14 @@ import solaceTypeLint from './solace--type'; import sqsTypeLint from './sqs--type'; import stompTypeLint from './stomp--type'; import wsTypeLint from './ws--type'; +import imbmqTypeLint from './ibmmq--type'; +import googlepubsubTypeLint from './googlepubsub--type'; const lints = [ allowedFields2_0__2_1Lint, allowedFields2_2Lint, allowedFields2_3__2_4Lint, + allowedFields2_5Lint, $refValidLint, $refNoSiblingsLint, httpTypeLint, @@ -42,6 +46,8 @@ const lints = [ sqsTypeLint, stompTypeLint, wsTypeLint, + imbmqTypeLint, + googlepubsubTypeLint, ]; export default lints; diff --git a/packages/apidom-ls/src/config/codes.ts b/packages/apidom-ls/src/config/codes.ts index 2040ac609f..acc9b4f405 100644 --- a/packages/apidom-ls/src/config/codes.ts +++ b/packages/apidom-ls/src/config/codes.ts @@ -251,6 +251,8 @@ enum ApilintCodes { ASYNCAPI2_OPERATION_BINDINGS_FIELD_MERCURE_TYPE = 191400, ASYNCAPI2_OPERATION_BINDINGS_FIELD_$REF_VALID = 191500, ASYNCAPI2_OPERATION_BINDINGS_FIELD_$REF_NO_SIBLINGS, + ASYNCAPI2_OPERATION_BINDINGS_FIELD_IBMMQ_TYPE = 191600, + ASYNCAPI2_OPERATION_BINDINGS_FIELD_GOOGLEPUBSUB_TYPE = 191700, ASYNCAPI2_MESSAGE_BINDINGS = 200000, ASYNCAPI2_MESSAGE_BINDINGS_FIELD_HTTP_TYPE = 200100,