From 6ad6b8c2ba2bf5a332d5a73a3f43ab3cb90f5eed Mon Sep 17 00:00:00 2001 From: enzonotario Date: Sun, 16 Feb 2025 20:16:02 -0300 Subject: [PATCH] chore: types --- src/composables/useOpenapi.ts | 8 ++++---- src/composables/usePaths.ts | 4 ++-- src/composables/useSidebar.ts | 7 ++++--- src/lib/OpenApi.ts | 16 ++++++++-------- src/lib/createOpenApiInstance.ts | 4 ++-- .../generateMissingOperationIds.ts | 5 +++-- .../prepareOpenAPI/generateMissingSummary.ts | 6 +++--- src/lib/prepareOpenAPI/generateMissingTags.ts | 17 +++++++++++------ src/lib/prepareOpenAPI/prepareOpenAPI.ts | 8 ++++---- src/lib/processOpenAPI/getCodeSamples.ts | 2 +- src/lib/processOpenAPI/processOpenAPI.ts | 12 ++++++------ src/types.ts | 4 +++- 12 files changed, 51 insertions(+), 42 deletions(-) diff --git a/src/composables/useOpenapi.ts b/src/composables/useOpenapi.ts index a890383e..88e0c2c1 100644 --- a/src/composables/useOpenapi.ts +++ b/src/composables/useOpenapi.ts @@ -1,11 +1,11 @@ -import type { OpenAPI } from '@scalar/openapi-types' import type { OpenApi } from '../lib/OpenApi' +import type { OpenAPIDocument } from '../types' import type { PartialUseThemeConfig } from './useTheme' import { createOpenApiInstance } from '../lib/createOpenApiInstance' import { useTheme } from './useTheme' export interface OpenAPIData { - spec: OpenAPI.Document + spec: OpenAPIDocument openapi: ReturnType config?: PartialUseThemeConfig } @@ -20,7 +20,7 @@ export function useOpenapi({ spec, config, }: { - spec?: OpenAPI.Document + spec?: OpenAPIDocument config?: PartialUseThemeConfig } = {}) { if (config) { @@ -31,7 +31,7 @@ export function useOpenapi({ setupOpenApi({ spec, config }) } - function setupOpenApi({ spec, config }: { spec: OpenAPI.Document, config?: PartialUseThemeConfig }) { + function setupOpenApi({ spec, config }: { spec: OpenAPIDocument, config?: PartialUseThemeConfig }) { openapi = createOpenApiInstance({ spec, defaultTag: config?.spec?.defaultTag, diff --git a/src/composables/usePaths.ts b/src/composables/usePaths.ts index a4e260f3..70baae45 100644 --- a/src/composables/usePaths.ts +++ b/src/composables/usePaths.ts @@ -1,4 +1,4 @@ -import type { OpenAPI } from '@scalar/openapi-types' +import type { OpenAPIDocument } from '../types' import { OpenApi } from '../lib/OpenApi' import { prepareOpenAPI } from '../lib/prepareOpenAPI/prepareOpenAPI' @@ -7,7 +7,7 @@ export function usePaths({ defaultTag = undefined, defaultTagDescription = undefined, }: { - spec: OpenAPI.Document + spec: OpenAPIDocument defaultTag?: string defaultTagDescription?: string }) { diff --git a/src/composables/useSidebar.ts b/src/composables/useSidebar.ts index 6460f1d3..a3160007 100644 --- a/src/composables/useSidebar.ts +++ b/src/composables/useSidebar.ts @@ -1,5 +1,6 @@ -import type { OpenAPI, OpenAPIV3 } from '@scalar/openapi-types' +import type { OpenAPIV3 } from '@scalar/openapi-types' import type { DefaultTheme } from 'vitepress' +import type { OpenAPIDocument } from '../types' import { httpVerbs } from '../index' import { OpenApi } from '../lib/OpenApi' import { prepareOpenAPI } from '../lib/prepareOpenAPI/prepareOpenAPI' @@ -19,7 +20,7 @@ export type SidebarGroupTemplateFn = ( ) => string export interface SidebarConfig { - spec?: OpenAPI.Document | null + spec?: OpenAPIDocument | null linkPrefix?: string tagLinkPrefix?: string defaultTag?: string @@ -240,7 +241,7 @@ export function useSidebar({ linkPrefix: tagsLinkPrefix = tagLinkPrefix, }: SidebarGroupsConfig = {}): OASidebarItem[] { if (tags === undefined) { - tags = getOpenApi().getFilteredTags().map((tag: OpenAPIV3.TagObject) => tag.name || '') + tags = getOpenApi().getFilteredTags().map(tag => tag.name || '') } if (!getOpenApi().getPaths() || !tags) { diff --git a/src/lib/OpenApi.ts b/src/lib/OpenApi.ts index 198087e8..1e6bca43 100644 --- a/src/lib/OpenApi.ts +++ b/src/lib/OpenApi.ts @@ -1,5 +1,5 @@ -import type { OpenAPI, OpenAPIV3 } from '@scalar/openapi-types' -import type { ParsedOpenAPI } from '../types' +import type { OpenAPIV3 } from '@scalar/openapi-types' +import type { OpenAPIDocument, ParsedOpenAPI } from '../types' import { httpVerbs } from '../index' import { processOpenAPI } from './processOpenAPI/processOpenAPI' @@ -16,13 +16,13 @@ export function OpenApi({ transformedSpec: null, parsedSpec: null, }) { - let innerSpec: OpenAPI.Document | null = null + let innerSpec: OpenAPIDocument | null = null function setSpec(spec: any) { innerSpec = spec } - function getSpec(): OpenAPI.Document { + function getSpec(): OpenAPIDocument { if (!innerSpec) { setSpec(parsedSpec ?? transformedSpec ?? spec ?? {}) } @@ -232,22 +232,22 @@ export function OpenApi({ function getTags() { return (getSpec().tags ?? []) - .map((tag: OpenAPIV3.TagObject) => ({ + .map(tag => ({ name: tag.name ?? null, description: tag.description ?? null, })) } - function getFilteredTags(): OpenAPIV3.TagObject[] { + function getFilteredTags() { const operationsTags = getOperationsTags() const tags = getTags() - .filter((tag: OpenAPIV3.TagObject) => operationsTags.includes(tag.name ?? '')) + .filter(tag => operationsTags.includes(tag.name ?? '')) return tags .concat([ ...operationsTags - .filter(tag => !tags.map((tag: OpenAPIV3.TagObject) => tag.name).includes(tag)) + .filter(tag => !tags.map(tag => tag.name).includes(tag)) .map(tag => ({ name: tag, description: null, diff --git a/src/lib/createOpenApiInstance.ts b/src/lib/createOpenApiInstance.ts index 081dfdd6..ab14bb9e 100644 --- a/src/lib/createOpenApiInstance.ts +++ b/src/lib/createOpenApiInstance.ts @@ -1,4 +1,4 @@ -import type { OpenAPI } from '@scalar/openapi-types' +import type { OpenAPIDocument } from '../types' import { OpenApi } from './OpenApi' import { prepareOpenAPI } from './prepareOpenAPI/prepareOpenAPI' import { processOpenAPI } from './processOpenAPI/processOpenAPI' @@ -8,7 +8,7 @@ export function createOpenApiInstance({ defaultTag = undefined, defaultTagDescription = undefined, }: { - spec: OpenAPI.Document + spec: OpenAPIDocument defaultTag?: string defaultTagDescription?: string }) { diff --git a/src/lib/prepareOpenAPI/generateMissingOperationIds.ts b/src/lib/prepareOpenAPI/generateMissingOperationIds.ts index 0f3a6d1b..f100783e 100644 --- a/src/lib/prepareOpenAPI/generateMissingOperationIds.ts +++ b/src/lib/prepareOpenAPI/generateMissingOperationIds.ts @@ -1,6 +1,7 @@ -import type { OpenAPI, OpenAPIV3 } from '@scalar/openapi-types' +import type { OpenAPIV3 } from '@scalar/openapi-types' +import type { OpenAPIDocument } from '../../types' -export function generateMissingOperationIds(spec: OpenAPI.Document): OpenAPI.Document { +export function generateMissingOperationIds(spec: OpenAPIDocument): OpenAPIDocument { spec.paths = spec.paths || {} for (const path of Object.keys(spec.paths)) { diff --git a/src/lib/prepareOpenAPI/generateMissingSummary.ts b/src/lib/prepareOpenAPI/generateMissingSummary.ts index 0d143dde..edb31068 100644 --- a/src/lib/prepareOpenAPI/generateMissingSummary.ts +++ b/src/lib/prepareOpenAPI/generateMissingSummary.ts @@ -1,7 +1,7 @@ -import type { OpenAPI, OpenAPIV3 } from '@scalar/openapi-types' -import type { OperationObject } from '../../types' +import type { OpenAPIV3 } from '@scalar/openapi-types' +import type { OpenAPIDocument, OperationObject } from '../../types' -export function generateMissingSummary(spec: OpenAPI.Document): OpenAPI.Document { +export function generateMissingSummary(spec: OpenAPIDocument): OpenAPIDocument { spec.paths = spec.paths || {} for (const path of Object.keys(spec.paths)) { diff --git a/src/lib/prepareOpenAPI/generateMissingTags.ts b/src/lib/prepareOpenAPI/generateMissingTags.ts index d0142ef9..257c37a2 100644 --- a/src/lib/prepareOpenAPI/generateMissingTags.ts +++ b/src/lib/prepareOpenAPI/generateMissingTags.ts @@ -1,21 +1,26 @@ -import type { OpenAPI, OpenAPIV3 } from '@scalar/openapi-types' +import type { OpenAPIV3 } from '@scalar/openapi-types' +import type { OpenAPIDocument } from '../../types' export function generateMissingTags({ spec, defaultTag = 'Default', defaultTagDescription = '', }: { - spec: OpenAPI.Document + spec: OpenAPIDocument defaultTag?: string defaultTagDescription?: string -}): OpenAPI.Document { +}): OpenAPIDocument { const operationTags = new Set() spec.paths = spec.paths || {} - for (const path of Object.values(spec.paths)) { - for (const verb of Object.keys(path) as OpenAPIV3.HttpMethods[]) { - const operation = path[verb] + for (const [_, pathObject] of Object.entries(spec.paths)) { + for (const verb of Object.keys(pathObject as any) as OpenAPIV3.HttpMethods[]) { + if (!pathObject || !pathObject[verb]) { + continue + } + + const operation = pathObject[verb] const tags = operation.tags || [defaultTag] operation.tags = tags tags.forEach((tag: string) => operationTags.add(tag)) diff --git a/src/lib/prepareOpenAPI/prepareOpenAPI.ts b/src/lib/prepareOpenAPI/prepareOpenAPI.ts index f0d478a1..2db2760a 100644 --- a/src/lib/prepareOpenAPI/prepareOpenAPI.ts +++ b/src/lib/prepareOpenAPI/prepareOpenAPI.ts @@ -1,4 +1,4 @@ -import type { OpenAPI } from '@scalar/openapi-types' +import type { OpenAPIDocument } from '../../types' import { generateMissingOperationIds } from './generateMissingOperationIds' import { generateMissingSummary } from './generateMissingSummary' import { generateMissingTags } from './generateMissingTags' @@ -8,10 +8,10 @@ export function prepareOpenAPI({ defaultTag = undefined, defaultTagDescription = undefined, }: { - spec: OpenAPI.Document + spec: OpenAPIDocument defaultTag?: string defaultTagDescription?: string -}): OpenAPI.Document { +}): OpenAPIDocument { if (import.meta.env.VITE_DEBUG) { console.warn('Transforming OpenAPI spec:', spec) } @@ -20,7 +20,7 @@ export function prepareOpenAPI({ return {} } - if (!spec.openapi || !spec.openapi.startsWith('3.')) { + if (!spec.openapi || !String(spec.openapi).startsWith('3.')) { console.warn('Only OpenAPI 3.x is supported') return {} } diff --git a/src/lib/processOpenAPI/getCodeSamples.ts b/src/lib/processOpenAPI/getCodeSamples.ts index 5aa05fbe..3e042ee1 100644 --- a/src/lib/processOpenAPI/getCodeSamples.ts +++ b/src/lib/processOpenAPI/getCodeSamples.ts @@ -10,7 +10,7 @@ export async function getCodeSamples(spec: ParsedOpenAPI): Promise