persona-community-5/.pnpm-store/v3/files/a7/a5daa8d10f6b969d0ce760f032ab274b5725fc4db1bfdeb567ff017d27ceaabaa52df9dd4e2d928f5e9b82f7506900d05f23d2591a7742838cd974134638d6-exec
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

306 lines
7.3 KiB
Plaintext
Executable File

import { mapOf, type NodeType, listOf } from '.';
import { DependentRequired, Schema, SchemaProperties } from './oas3_1';
import { Discriminator, DiscriminatorMapping, ExternalDocs, Xml } from './oas3';
const Root: NodeType = {
properties: {
arazzo: { type: 'string' },
info: 'Info',
sourceDescriptions: 'SourceDescriptions',
workflows: 'Workflows',
components: 'Components',
},
required: ['arazzo', 'info', 'sourceDescriptions', 'workflows'],
extensionsPrefix: 'x-',
};
const NamedParameters: NodeType = {
properties: {},
additionalProperties: 'Parameter',
};
const NamedSuccessActions: NodeType = {
properties: {},
additionalProperties: 'SuccessActionObject',
};
const NamedFailureActions: NodeType = {
properties: {},
additionalProperties: 'FailureActionObject',
};
const Components: NodeType = {
properties: {
inputs: 'NamedInputs',
parameters: 'NamedParameters',
successActions: 'NamedSuccessActions',
failureActions: 'NamedFailureActions',
},
extensionsPrefix: 'x-',
};
const NamedInputs: NodeType = mapOf('Schema');
const Info: NodeType = {
properties: {
title: { type: 'string' },
description: { type: 'string' },
summary: { type: 'string' },
version: { type: 'string' },
},
required: ['title', 'version'],
extensionsPrefix: 'x-',
};
const SourceDescriptions: NodeType = {
properties: {},
items: (value: any) => {
if (value?.type === 'openapi') {
return 'OpenAPISourceDescription';
} else {
return 'ArazzoSourceDescription';
}
},
};
const OpenAPISourceDescription: NodeType = {
properties: {
name: { type: 'string' },
type: { type: 'string', enum: ['openapi'] },
url: { type: 'string' },
'x-serverUrl': { type: 'string' },
},
required: ['name', 'type', 'url'],
extensionsPrefix: 'x-',
};
const ArazzoSourceDescription: NodeType = {
properties: {
name: { type: 'string' },
type: { type: 'string', enum: ['arazzo'] },
url: { type: 'string' },
},
required: ['name', 'type', 'url'],
extensionsPrefix: 'x-',
};
const ReusableObject: NodeType = {
properties: {
reference: { type: 'string' },
value: {}, // any
},
required: ['reference'],
extensionsPrefix: 'x-',
};
const Parameter: NodeType = {
properties: {
in: { type: 'string', enum: ['header', 'query', 'path', 'cookie'] },
name: { type: 'string' },
value: {}, // any
},
required: ['name', 'value'],
extensionsPrefix: 'x-',
};
const Parameters: NodeType = {
properties: {},
items: (value: any) => {
if (value?.reference) {
return 'ReusableObject';
} else {
return 'Parameter';
}
},
};
const Workflow: NodeType = {
properties: {
workflowId: { type: 'string' },
summary: { type: 'string' },
description: { type: 'string' },
parameters: 'Parameters',
dependsOn: { type: 'array', items: { type: 'string' } },
inputs: 'Schema',
outputs: 'Outputs',
steps: 'Steps',
successActions: 'OnSuccessActionList',
failureActions: 'OnFailureActionList',
},
required: ['workflowId', 'steps'],
extensionsPrefix: 'x-',
};
const Workflows: NodeType = listOf('Workflow');
const Steps: NodeType = listOf('Step');
const Step: NodeType = {
properties: {
stepId: { type: 'string' },
description: { type: 'string' },
operationId: { type: 'string' },
operationPath: { type: 'string' },
workflowId: { type: 'string' },
parameters: 'Parameters',
successCriteria: listOf('CriterionObject'),
onSuccess: 'OnSuccessActionList',
onFailure: 'OnFailureActionList',
outputs: 'Outputs',
'x-operation': 'ExtendedOperation',
requestBody: 'RequestBody',
},
required: ['stepId'],
requiredOneOf: ['x-operation', 'operationId', 'operationPath', 'workflowId'],
extensionsPrefix: 'x-',
};
const Outputs: NodeType = {
properties: {},
additionalProperties: {
type: 'string',
},
};
const RequestBody: NodeType = {
properties: {
contentType: { type: 'string' },
payload: {},
replacements: listOf('Replacement'),
},
required: ['payload'],
extensionsPrefix: 'x-',
};
const Replacement: NodeType = {
properties: {
target: { type: 'string' },
value: {},
},
required: ['target', 'value'],
extensionsPrefix: 'x-',
};
const ExtendedOperation: NodeType = {
properties: {
url: { type: 'string' },
method: {
enum: [
'get',
'post',
'put',
'delete',
'patch',
'head',
'options',
'trace',
'connect',
'query',
'GET',
'POST',
'PUT',
'DELETE',
'PATCH',
'OPTIONS',
'HEAD',
'TRACE',
'CONNECT',
'QUERY',
],
},
},
required: ['url', 'method'],
};
const CriterionObject: NodeType = {
properties: {
condition: { type: 'string' },
context: { type: 'string' },
type: (value: any) => {
if (!value) {
return undefined;
} else if (typeof value === 'string') {
return { enum: ['regex', 'jsonpath', 'simple', 'xpath'] };
} else if (value?.type === 'jsonpath') {
return 'JSONPathCriterion';
} else {
return 'XPathCriterion';
}
},
},
required: ['condition'],
};
const JSONPathCriterion: NodeType = {
properties: {
type: { type: 'string', enum: ['jsonpath'] },
version: { type: 'string', enum: ['draft-goessner-dispatch-jsonpath-00'] },
},
};
const XPathCriterion: NodeType = {
properties: {
type: { type: 'string', enum: ['xpath'] },
version: { type: 'string', enum: ['xpath-30', 'xpath-20', 'xpath-10'] },
},
};
const SuccessActionObject: NodeType = {
properties: {
name: { type: 'string' },
type: { type: 'string', enum: ['goto', 'end'] },
stepId: { type: 'string' },
workflowId: { type: 'string' },
criteria: listOf('CriterionObject'),
},
required: ['type', 'name'],
};
const OnSuccessActionList: NodeType = {
properties: {},
items: (value: any) => {
if (value?.type && value?.name) {
return 'SuccessActionObject';
} else {
return 'ReusableObject';
}
},
};
const FailureActionObject: NodeType = {
properties: {
name: { type: 'string' },
type: { type: 'string', enum: ['goto', 'retry', 'end'] },
workflowId: { type: 'string' },
stepId: { type: 'string' },
retryAfter: { type: 'number' },
retryLimit: { type: 'number' },
criteria: listOf('CriterionObject'),
},
required: ['type', 'name'],
};
const OnFailureActionList: NodeType = {
properties: {},
items: (value: any) => {
if (value?.type && value?.name) {
return 'FailureActionObject';
} else {
return 'ReusableObject';
}
},
};
export const Arazzo1Types: Record<string, NodeType> = {
Root,
Info,
SourceDescriptions,
OpenAPISourceDescription,
ArazzoSourceDescription,
Parameters,
Parameter,
ReusableObject,
Workflows,
Workflow,
Steps,
Step,
RequestBody,
Replacement,
ExtendedOperation,
Outputs,
CriterionObject,
XPathCriterion,
JSONPathCriterion,
SuccessActionObject,
OnSuccessActionList,
FailureActionObject,
OnFailureActionList,
Schema,
NamedSchemas: mapOf('Schema'),
ExternalDocs,
DiscriminatorMapping,
Discriminator,
DependentRequired,
SchemaProperties,
PatternProperties: SchemaProperties,
Components,
NamedInputs,
NamedParameters,
NamedSuccessActions,
NamedFailureActions,
Xml,
};