persona-community-5/.pnpm-store/v3/files/57/405ac03f740e1bad37a4f4f022b53b21147fd9467a0b67511396d78f71e2cff8b5415d4a666b8c196f79af0e73a1fa1113e30a7e4cd3aeb7de36d0714573bf
rdev-worker a1d0d1bf1c
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
build: /implement-feature community-ui --requirements 'Build the React commu...
2026-02-24 08:22:30 +00:00

384 lines
9.6 KiB
Plaintext

import { listOf, mapOf } from '.';
import {
AsyncApi2Bindings,
Schema,
Dependencies,
Discriminator,
DiscriminatorMapping,
SchemaProperties,
CorrelationId,
Tag,
ServerMap,
ExternalDocs,
SecuritySchemeFlows,
ServerVariable,
Contact,
License,
MessageExample,
} from './asyncapi2';
import type { NodeType } from '.';
const Root: NodeType = {
properties: {
asyncapi: { type: 'string', enum: ['3.0.0'] },
info: 'Info',
id: { type: 'string' },
servers: 'ServerMap',
channels: 'NamedChannels',
components: 'Components',
operations: 'NamedOperations',
defaultContentType: { type: 'string' },
},
required: ['asyncapi', 'info'],
};
const Channel: NodeType = {
properties: {
address: { type: 'string' },
messages: 'NamedMessages',
title: { type: 'string' },
summary: { type: 'string' },
description: { type: 'string' },
servers: 'ServerList',
parameters: 'ParametersMap',
bindings: 'ChannelBindings',
tags: 'TagList',
externalDocs: 'ExternalDocs',
},
};
const Server: NodeType = {
properties: {
host: { type: 'string' },
pathname: { type: 'string' },
protocol: { type: 'string' },
protocolVersion: { type: 'string' },
description: { type: 'string' },
variables: 'ServerVariablesMap',
security: 'SecuritySchemeList',
bindings: 'ServerBindings',
externalDocs: 'ExternalDocs',
tags: 'TagList',
},
required: ['host', 'protocol'],
};
const Info: NodeType = {
properties: {
title: { type: 'string' },
version: { type: 'string' },
description: { type: 'string' },
termsOfService: { type: 'string' },
contact: 'Contact',
license: 'License',
tags: 'TagList',
externalDocs: 'ExternalDocs',
},
required: ['title', 'version'],
};
const Parameter: NodeType = {
properties: {
description: { type: 'string' },
enum: { type: 'array', items: { type: 'string' } },
default: { type: 'string' },
examples: { type: 'array', items: { type: 'string' } },
location: { type: 'string' },
},
};
const Message: NodeType = {
properties: {
headers: 'Schema',
payload: (value: Record<string, unknown>) => {
if (!!value && value?.['schemaFormat']) {
return {
properties: {
schema: 'Schema',
schemaFormat: { type: 'string' },
},
required: ['schema', 'schemaFormat'],
};
} else {
return 'Schema';
}
},
correlationId: 'CorrelationId',
contentType: { type: 'string' },
name: { type: 'string' },
title: { type: 'string' },
summary: { type: 'string' },
description: { type: 'string' },
tags: 'TagList',
externalDocs: 'ExternalDocs',
bindings: 'MessageBindings',
examples: 'MessageExampleList',
traits: 'MessageTraitList',
},
additionalProperties: {},
};
const OperationTrait: NodeType = {
properties: {
tags: 'TagList',
title: { type: 'string' },
summary: { type: 'string' },
description: { type: 'string' },
externalDocs: 'ExternalDocs',
security: 'SecuritySchemeList',
bindings: 'OperationBindings',
},
required: [],
};
const MessageTrait: NodeType = {
properties: {
headers: (value: unknown) => {
if (typeof value === 'function' || (typeof value === 'object' && !!value)) {
return {
properties: {
schema: 'Schema',
schemaFormat: { type: 'string' },
},
};
} else {
return 'Schema';
}
},
correlationId: 'CorrelationId',
contentType: { type: 'string' },
name: { type: 'string' },
title: { type: 'string' },
summary: { type: 'string' },
description: { type: 'string' },
tags: 'TagList',
externalDocs: 'ExternalDocs',
bindings: 'MessageBindings',
examples: 'MessageExampleList',
},
additionalProperties: {},
};
const Operation: NodeType = {
properties: {
action: { type: 'string', enum: ['send', 'receive'] },
channel: 'Channel',
title: { type: 'string' },
tags: 'TagList',
summary: { type: 'string' },
description: { type: 'string' },
externalDocs: 'ExternalDocs',
operationId: { type: 'string' },
security: 'SecuritySchemeList',
bindings: 'OperationBindings',
traits: 'OperationTraitList',
messages: 'MessageList',
reply: 'OperationReply',
},
required: ['action', 'channel'],
};
const OperationReply: NodeType = {
properties: {
channel: 'Channel',
messages: 'MessageList',
address: 'OperationReplyAddress',
},
};
const OperationReplyAddress: NodeType = {
properties: {
location: { type: 'string' },
description: { type: 'string' },
},
required: ['location'],
};
const Components: NodeType = {
properties: {
messages: 'NamedMessages',
parameters: 'NamedParameters',
schemas: 'NamedSchemas',
replies: 'NamedOperationReplies',
replyAddresses: 'NamedOperationRelyAddresses',
correlationIds: 'NamedCorrelationIds',
messageTraits: 'NamedMessageTraits',
operationTraits: 'NamedOperationTraits',
tags: 'NamedTags',
externalDocs: 'NamedExternalDocs',
securitySchemes: 'NamedSecuritySchemes',
servers: 'ServerMap',
serverVariables: 'ServerVariablesMap',
channels: 'NamedChannels',
operations: 'NamedOperations',
serverBindings: 'ServerBindings',
channelBindings: 'ChannelBindings',
operationBindings: 'OperationBindings',
messageBindings: 'MessageBindings',
},
};
const ImplicitFlow: NodeType = {
properties: {
refreshUrl: { type: 'string' },
availableScopes: { type: 'object', additionalProperties: { type: 'string' } },
authorizationUrl: { type: 'string' },
},
required: ['authorizationUrl', 'availableScopes'],
};
const PasswordFlow: NodeType = {
properties: {
refreshUrl: { type: 'string' },
availableScopes: { type: 'object', additionalProperties: { type: 'string' } },
tokenUrl: { type: 'string' },
},
required: ['tokenUrl', 'availableScopes'],
};
const ClientCredentials: NodeType = {
properties: {
refreshUrl: { type: 'string' },
availableScopes: { type: 'object', additionalProperties: { type: 'string' } },
tokenUrl: { type: 'string' },
},
required: ['tokenUrl', 'availableScopes'],
};
const AuthorizationCode: NodeType = {
properties: {
refreshUrl: { type: 'string' },
authorizationUrl: { type: 'string' },
availableScopes: { type: 'object', additionalProperties: { type: 'string' } },
tokenUrl: { type: 'string' },
},
required: ['authorizationUrl', 'tokenUrl', 'availableScopes'],
};
const SecurityScheme: NodeType = {
properties: {
type: {
enum: [
'userPassword',
'apiKey',
'X509',
'symmetricEncryption',
'asymmetricEncryption',
'httpApiKey',
'http',
'oauth2',
'openIdConnect',
'plain',
'scramSha256',
'scramSha512',
'gssapi',
],
},
description: { type: 'string' },
name: { type: 'string' },
in: { type: 'string', enum: ['query', 'header', 'cookie', 'user', 'password'] },
scheme: { type: 'string' },
bearerFormat: { type: 'string' },
flows: 'SecuritySchemeFlows',
openIdConnectUrl: { type: 'string' },
scopes: { type: 'array', items: { type: 'string' } },
},
required(value) {
switch (value?.type) {
case 'apiKey':
return ['type', 'in'];
case 'httpApiKey':
return ['type', 'name', 'in'];
case 'http':
return ['type', 'scheme'];
case 'oauth2':
return ['type', 'flows'];
case 'openIdConnect':
return ['type', 'openIdConnectUrl'];
default:
return ['type'];
}
},
allowed(value) {
switch (value?.type) {
case 'apiKey':
return ['type', 'in', 'description'];
case 'httpApiKey':
return ['type', 'name', 'in', 'description'];
case 'http':
return ['type', 'scheme', 'bearerFormat', 'description'];
case 'oauth2':
return ['type', 'flows', 'description', 'scopes'];
case 'openIdConnect':
return ['type', 'openIdConnectUrl', 'description', 'scopes'];
default:
return ['type', 'description'];
}
},
extensionsPrefix: 'x-',
};
export const AsyncApi3Types: Record<string, NodeType> = {
// from asyncapi2
...AsyncApi2Bindings,
CorrelationId,
SecuritySchemeFlows,
ServerVariable,
Contact,
License,
MessageExample,
Tag,
Dependencies,
Schema,
Discriminator,
DiscriminatorMapping,
SchemaProperties,
ServerMap,
ExternalDocs,
Root,
Channel,
Parameter,
Info,
Server,
MessageTrait,
Operation,
OperationReply,
OperationReplyAddress,
Components,
ImplicitFlow,
PasswordFlow,
ClientCredentials,
AuthorizationCode,
SecurityScheme,
Message,
OperationTrait,
ServerVariablesMap: mapOf('ServerVariable'),
NamedTags: mapOf('Tag'),
NamedExternalDocs: mapOf('ExternalDocs'),
NamedChannels: mapOf('Channel'),
ParametersMap: mapOf('Parameter'),
NamedOperations: mapOf('Operation'),
NamedOperationReplies: mapOf('OperationReply'),
NamedOperationRelyAddresses: mapOf('OperationReplyAddress'),
NamedSchemas: mapOf('Schema'),
NamedMessages: mapOf('Message'),
NamedMessageTraits: mapOf('MessageTrait'),
NamedOperationTraits: mapOf('OperationTrait'),
NamedParameters: mapOf('Parameter'),
NamedSecuritySchemes: mapOf('SecurityScheme'),
NamedCorrelationIds: mapOf('CorrelationId'),
ServerList: listOf('Server'),
SecuritySchemeList: listOf('SecurityScheme'),
MessageList: listOf('Message'),
OperationTraitList: listOf('OperationTrait'),
MessageTraitList: listOf('MessageTrait'),
MessageExampleList: listOf('MessageExample'),
TagList: listOf('Tag'),
};