From 99d425c935c7f54130f0b5aacb91e157ac0ec0f6 Mon Sep 17 00:00:00 2001 From: Jeremy Fiel <jeremy.fiel@adp.com> Date: Thu, 17 Oct 2024 16:29:36 -0400 Subject: [PATCH] feat: add typings and interfaces for Overlay Specification v1.0.0 * updated references to use defined NodeTypes. * update `any` to `unknown` * run prettier * rebase latest changes from main * refactor to match #1898 type definitions related #1246 --- .changeset/stale-starfishes-rule.md | 6 ++++ packages/cli/src/__tests__/utils.test.ts | 1 + packages/core/src/types/overlay.ts | 40 ++++++++++++++++++++++++ packages/core/src/typings/overlay.ts | 19 +++++++++++ 4 files changed, 66 insertions(+) create mode 100644 .changeset/stale-starfishes-rule.md create mode 100644 packages/core/src/types/overlay.ts create mode 100644 packages/core/src/typings/overlay.ts diff --git a/.changeset/stale-starfishes-rule.md b/.changeset/stale-starfishes-rule.md new file mode 100644 index 0000000000..d7de485264 --- /dev/null +++ b/.changeset/stale-starfishes-rule.md @@ -0,0 +1,6 @@ +--- +"@redocly/openapi-core": minor +"@redocly/cli": minor +--- + +Added typings and interfaces for Overlay Specification v1.0.0. diff --git a/packages/cli/src/__tests__/utils.test.ts b/packages/cli/src/__tests__/utils.test.ts index 68ee11ab7a..3402333b10 100644 --- a/packages/cli/src/__tests__/utils.test.ts +++ b/packages/cli/src/__tests__/utils.test.ts @@ -502,6 +502,7 @@ describe('checkIfRulesetExist', () => { async2: {}, async3: {}, arazzo1: {}, + overlay1: {}, }; expect(() => checkIfRulesetExist(rules)).toThrowError( '⚠️ No rules were configured. Learn how to configure rules: https://redocly.com/docs/cli/rules/' diff --git a/packages/core/src/types/overlay.ts b/packages/core/src/types/overlay.ts new file mode 100644 index 0000000000..559d4d024a --- /dev/null +++ b/packages/core/src/types/overlay.ts @@ -0,0 +1,40 @@ +import { type NodeType, listOf } from '.'; + +const Root: NodeType = { + properties: { + overlay: { type: 'string' }, + info: 'Info', + extends: { type: 'string' }, + actions: 'Actions', + }, + required: ['overlay', 'info', 'actions'], + extensionsPrefix: 'x-', +}; + +const Info: NodeType = { + properties: { + title: { type: 'string' }, + version: { type: 'string' }, + }, + required: ['title', 'version'], + extensionsPrefix: 'x-', +}; + +const Actions: NodeType = listOf('Action'); +const Action: NodeType = { + properties: { + target: { type: 'string' }, + description: { type: 'string' }, + update: {}, // any + remove: { type: 'boolean' }, + }, + required: ['target'], + extensionsPrefix: 'x-', +}; + +export const Overlay1Types: Record<string, NodeType> = { + Root, + Info, + Actions, + Action, +}; diff --git a/packages/core/src/typings/overlay.ts b/packages/core/src/typings/overlay.ts new file mode 100644 index 0000000000..a529a51378 --- /dev/null +++ b/packages/core/src/typings/overlay.ts @@ -0,0 +1,19 @@ +export interface InfoObject { + title: string; + version: string; +} + +export interface ActionObject { + target: string; + description?: string; + update?: unknown; + remove?: boolean; +} +export interface Overlay1Definition { + overlay: '1.0.0'; + info: InfoObject; + extends?: string; + actions: ActionObject[]; +} + +export const VERSION_PATTERN = /^1\.0\.\d+(-.+)?$/;