From 8c4634ad0783e6a118f2ab057123e188b1c94301 Mon Sep 17 00:00:00 2001 From: saltyaom Date: Wed, 9 Oct 2024 02:00:59 +0700 Subject: [PATCH] :wrench: fix: duplicate object reference --- CHANGELOG.md | 4 +++ bun.lockb | Bin 92772 -> 93212 bytes package.json | 4 +-- src/utils.ts | 71 +++++++++++++++++++++++++++++---------------------- 4 files changed, 46 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c571d13..4155cd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.1.14 - 9 Oct 2024 +Bug fix: +- Fix duplicate object reference + # 1.1.2 - 5 Sep 2024 Feature: - add provenance publish diff --git a/bun.lockb b/bun.lockb index 6fd79990d31945755cf65f86d0a825050370de2c..fbb6b378e4b96618afcd4ffbf9d95a1a957f603f 100755 GIT binary patch delta 8241 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 delta 8101 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 diff --git a/package.json b/package.json index 13afdcb..12d84bb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@elysiajs/swagger", - "version": "1.1.3", + "version": "1.1.4", "description": "Plugin for Elysia to auto-generate Swagger page", "author": { "name": "saltyAom", @@ -62,7 +62,7 @@ "devDependencies": { "@apidevtools/swagger-parser": "^10.1.0", "@types/bun": "1.1.6", - "elysia": ">= 1.1.0-rc.2", + "elysia": "1.1.18", "eslint": "9.6.0", "tsup": "^8.1.0", "typescript": "^5.5.3" diff --git a/src/utils.ts b/src/utils.ts index 395d825..b0a24a6 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -69,7 +69,9 @@ const mapTypesResponse = ( const responses: Record = {} - for (const type of types) + for (const type of types) { + // console.log(schema) + responses[type] = { schema: typeof schema === 'string' @@ -78,6 +80,7 @@ const mapTypesResponse = ( } : { ...(schema as any) } } + } return responses } @@ -101,6 +104,12 @@ export const generateOperationId = (method: string, paths: string) => { return operationId } +const cloneHook = (hook: T) => { + if (!hook) return + + return { ...hook } +} + export const registerSchemaPath = ({ schema, path, @@ -114,7 +123,7 @@ export const registerSchemaPath = ({ method: HTTPMethod hook?: LocalHook models: Record -}) => { +}) => { const contentType = hook?.type ?? [ 'application/json', 'multipart/form-data', @@ -126,13 +135,13 @@ export const registerSchemaPath = ({ const contentTypes = typeof contentType === 'string' ? [contentType] - : contentType ?? ['application/json'] + : (contentType ?? ['application/json']) - const bodySchema = hook?.body - const paramsSchema = hook?.params - const headerSchema = hook?.headers - const querySchema = hook?.query - let responseSchema = hook?.response as unknown as OpenAPIV3.ResponsesObject + const bodySchema = cloneHook(hook?.body) + const paramsSchema = cloneHook(hook?.params) + const headerSchema = cloneHook(hook?.headers) + const querySchema = cloneHook(hook?.query) + let responseSchema: OpenAPIV3.ResponsesObject = cloneHook(hook?.response) if (typeof responseSchema === 'object') { if (Kind in responseSchema) { @@ -292,36 +301,36 @@ export const registerSchemaPath = ({ } export const filterPaths = ( - paths: Record, - docsPath: string, - { - excludeStaticFile = true, - exclude = [] - }: { - excludeStaticFile: boolean - exclude: (string | RegExp)[] - } + paths: Record, + docsPath: string, + { + excludeStaticFile = true, + exclude = [] + }: { + excludeStaticFile: boolean + exclude: (string | RegExp)[] + } ) => { const newPaths: Record = {} - // exclude docs path and OpenAPI json path - const excludePaths = [`/${docsPath}`, `/${docsPath}/json`].map((p) => + // exclude docs path and OpenAPI json path + const excludePaths = [`/${docsPath}`, `/${docsPath}/json`].map((p) => normalize(p) ) - for (const [key, value] of Object.entries(paths)) - if ( - !exclude.some((x) => { - if (typeof x === 'string') return key === x + for (const [key, value] of Object.entries(paths)) + if ( + !exclude.some((x) => { + if (typeof x === 'string') return key === x - return x.test(key) - }) && - !excludePaths.includes(key) && - !key.includes('*') && - (excludeStaticFile ? !key.includes('.') : true) - ) { - Object.keys(value).forEach((method) => { - const schema = value[method] + return x.test(key) + }) && + !excludePaths.includes(key) && + !key.includes('*') && + (excludeStaticFile ? !key.includes('.') : true) + ) { + Object.keys(value).forEach((method) => { + const schema = value[method] if (key.includes('{')) { if (!schema.parameters) schema.parameters = []