1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-04-19 01:17:18 +02:00
unleash.unleash/src/lib/openapi/spec/playground-strategy-schema.ts
Thomas Heartman df59b10fb6
OpenAPI: more schema cleanup (#4353)
This PR fixes additional schemas that hadn't been described properly
2023-07-28 06:59:05 +00:00

204 lines
7.8 KiB
TypeScript

import { FromSchema } from 'json-schema-to-ts';
import { parametersSchema } from './parameters-schema';
import { playgroundConstraintSchema } from './playground-constraint-schema';
import { playgroundSegmentSchema } from './playground-segment-schema';
import { variantSchema } from './variant-schema';
import { overrideSchema } from './override-schema';
export const playgroundStrategyEvaluation = {
evaluationComplete: 'complete',
evaluationIncomplete: 'incomplete',
unknownResult: 'unknown',
} as const;
export const strategyEvaluationResults = {
anyOf: [
{
type: 'object',
additionalProperties: false,
required: ['evaluationStatus', 'enabled'],
properties: {
evaluationStatus: {
type: 'string',
description:
"Signals that this strategy could not be evaluated. This is most likely because you're using a custom strategy that Unleash doesn't know about.",
enum: [playgroundStrategyEvaluation.evaluationIncomplete],
},
enabled: {
description:
"Whether this strategy resolves to `false` or if it might resolve to `true`. Because Unleash can't evaluate the strategy, it can't say for certain whether it will be `true`, but if you have failing constraints or segments, it _can_ determine that your strategy would be `false`.",
anyOf: [
{ type: 'boolean', enum: [false] },
{
type: 'string',
enum: [playgroundStrategyEvaluation.unknownResult],
},
],
},
},
},
{
type: 'object',
additionalProperties: false,
required: ['evaluationStatus', 'enabled'],
properties: {
evaluationStatus: {
description:
'Signals that this strategy was evaluated successfully.',
type: 'string',
enum: ['complete'],
},
enabled: {
type: 'boolean',
description:
'Whether this strategy evaluates to true or not.',
},
variant: {
description: `The feature variant you receive based on the provided context or the _disabled
variant_. If a feature is disabled or doesn't have any
variants, you would get the _disabled variant_.
Otherwise, you'll get one of the feature's defined variants.`,
type: 'object',
additionalProperties: false,
required: ['name', 'enabled'],
properties: {
name: {
type: 'string',
description:
"The variant's name. If there is no variant or if the toggle is disabled, this will be `disabled`",
example: 'red-variant',
},
enabled: {
type: 'boolean',
description:
"Whether the variant is enabled or not. If the feature is disabled or if it doesn't have variants, this property will be `false`",
},
payload: {
type: 'object',
additionalProperties: false,
required: ['type', 'value'],
description:
'An optional payload attached to the variant.',
properties: {
type: {
description: 'The format of the payload.',
type: 'string',
enum: ['json', 'csv', 'string'],
},
value: {
type: 'string',
description:
'The payload value stringified.',
example: '{"property": "value"}',
},
},
},
},
nullable: true,
example: { name: 'green', enabled: true },
},
variants: {
type: 'array',
description: 'The feature variants.',
items: { $ref: variantSchema.$id },
},
},
},
],
} as const;
export const playgroundStrategySchema = {
$id: '#/components/schemas/playgroundStrategySchema',
type: 'object',
description:
'An evaluated feature toggle strategy as used by the Playground',
additionalProperties: false,
required: [
'id',
'name',
'result',
'segments',
'constraints',
'parameters',
'disabled',
'links',
],
properties: {
name: {
description: "The strategy's name.",
type: 'string',
},
title: {
type: 'string',
example: 'Beta rollout',
description: "Description of the feature's purpose.",
},
id: {
description: "The strategy's id.",
type: 'string',
example: '3AECCF7E-FF82-4174-8287-8EBE06079A50',
},
result: {
description: `The strategy's evaluation result. If the strategy is a custom strategy that Unleash can't evaluate, \`evaluationStatus\` will be \`${playgroundStrategyEvaluation.unknownResult}\`. Otherwise, it will be \`true\` or \`false\``,
...strategyEvaluationResults,
},
disabled: {
type: 'boolean',
description:
"The strategy's status. Disabled strategies are not evaluated",
example: false,
nullable: true,
},
segments: {
type: 'array',
description:
"The strategy's segments and their evaluation results.",
items: {
$ref: playgroundSegmentSchema.$id,
},
},
constraints: {
type: 'array',
description:
"The strategy's constraints and their evaluation results.",
items: {
$ref: playgroundConstraintSchema.$id,
},
},
parameters: {
description:
"The strategy's constraints and their evaluation results.",
example: {
myParam1: 'param value',
},
$ref: parametersSchema.$id,
},
links: {
description:
'A set of links to actions you can perform on this strategy',
type: 'object',
required: ['edit'],
properties: {
edit: {
type: 'string',
example:
'/projects/some-project/features/some-feature/strategies/edit?environmentId=some-env&strategyId= 3AECCF7E-FF82-4174-8287-8EBE06079A50',
},
},
},
},
components: {
schemas: {
playgroundConstraintSchema,
playgroundSegmentSchema,
parametersSchema,
variantSchema,
overrideSchema,
},
},
} as const;
export type PlaygroundStrategySchema = FromSchema<
typeof playgroundStrategySchema
>;