diff --git a/.github/workflows/build-perf.yml b/.github/workflows/build-perf.yml index 9633b5f8..ebeeccb5 100644 --- a/.github/workflows/build-perf.yml +++ b/.github/workflows/build-perf.yml @@ -13,8 +13,8 @@ jobs: timeout-minutes: 30 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: "18" cache: yarn @@ -33,8 +33,8 @@ jobs: timeout-minutes: 30 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: cache: yarn - name: Installation diff --git a/.github/workflows/canary-beta-release.yml b/.github/workflows/canary-beta-release.yml index 6762f3e2..d90c34c4 100644 --- a/.github/workflows/canary-beta-release.yml +++ b/.github/workflows/canary-beta-release.yml @@ -17,11 +17,11 @@ jobs: if: ${{ github.repository == 'PaloAltoNetworks/docusaurus-openapi-docs' && github.ref == 'refs/heads/v2.0.0' && github.event_name == 'push' }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 # Needed to get the commit number with "git rev-list --count HEAD" - name: Set up Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "18" cache: yarn diff --git a/.github/workflows/canary-release.yml b/.github/workflows/canary-release.yml index 09b87ae6..c9b4d8fe 100644 --- a/.github/workflows/canary-release.yml +++ b/.github/workflows/canary-release.yml @@ -17,11 +17,11 @@ jobs: if: ${{ github.repository == 'PaloAltoNetworks/docusaurus-openapi-docs' && github.ref == 'refs/heads/main' && github.event_name == 'push' }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 # Needed to get the commit number with "git rev-list --count HEAD" - name: Set up Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "18" cache: yarn diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 8a42c4cf..12ae6dbd 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Initialize CodeQL uses: github/codeql-action/init@v2 diff --git a/.github/workflows/combine-dependabot-prs.yml b/.github/workflows/combine-dependabot-prs.yml index b872ad7c..724e0fd3 100644 --- a/.github/workflows/combine-dependabot-prs.yml +++ b/.github/workflows/combine-dependabot-prs.yml @@ -25,7 +25,7 @@ jobs: if: github.repository_owner == 'PaloAltoNetworks' runs-on: ubuntu-latest steps: - - uses: actions/github-script@v3 + - uses: actions/github-script@v4 id: fetch-branch-names name: Fetch dependabot branches with: @@ -122,7 +122,7 @@ jobs: APP_PEM: ${{ secrets.APP_PEM }} APP_ID: ${{ secrets.APP_ID }} - - uses: actions/github-script@v3 + - uses: actions/github-script@v4 name: Create Combined Pull Request env: PRS_STRING: ${{ steps.fetch-branch-names.outputs.prs-string }} diff --git a/.github/workflows/deploy-live.yml b/.github/workflows/deploy-live.yml index 0ccbd482..a23a73d2 100644 --- a/.github/workflows/deploy-live.yml +++ b/.github/workflows/deploy-live.yml @@ -12,10 +12,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "18" cache: "yarn" @@ -29,7 +29,7 @@ jobs: - name: Build site run: yarn build-demo && zip -r build.zip demo/build - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: build path: build.zip @@ -41,15 +41,15 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "18" cache: "yarn" - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: build diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index b0454c33..3f04703d 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -36,7 +36,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} @@ -65,7 +65,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} @@ -89,12 +89,12 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} - name: Setup node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "18" cache: "yarn" @@ -108,7 +108,7 @@ jobs: - name: Build site run: yarn build-demo && zip -r build.zip demo/build - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: build path: build.zip @@ -121,15 +121,15 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "18" cache: "yarn" - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: build diff --git a/.github/workflows/validate.yaml b/.github/workflows/validate.yaml index ea5fdf9b..cd18d6d5 100644 --- a/.github/workflows/validate.yaml +++ b/.github/workflows/validate.yaml @@ -18,7 +18,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: "18" - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | node_modules @@ -37,7 +37,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: "18" - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | node_modules @@ -59,7 +59,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: "18" - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | node_modules @@ -79,7 +79,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: "18" - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | node_modules diff --git a/demo/package.json b/demo/package.json index f00c9304..c959dccf 100644 --- a/demo/package.json +++ b/demo/package.json @@ -28,7 +28,7 @@ "@mxenabled/docusaurus-plugin-openapi-docs": "^2.0.3", "@mxenabled/docusaurus-theme-openapi-docs": "^2.0.3", "clsx": "^1.1.1", - "prism-react-renderer": "^2.1.0", + "prism-react-renderer": "^1.3.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/package.json b/package.json index 974fe761..f2e58215 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,9 @@ "ts-node": "^10.4.0", "typescript": "^4.4.4" }, + "resolutions": { + "convert-source-map": "^2.0.0" + }, "lint-staged": { "**/*": "prettier --write --ignore-unknown" }, diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createAuthentication.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createAuthentication.ts index 3fc5a3d9..03d27ba5 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createAuthentication.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createAuthentication.ts @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ -import { OAuthFlowObject, SecuritySchemeObject } from "../openapi/types"; import { createDescription } from "./createDescription"; import { create, guard } from "./utils"; +import { OAuthFlowObject, SecuritySchemeObject } from "../openapi/types"; export function createAuthentication(securitySchemes: SecuritySchemeObject) { if (!securitySchemes || !Object.keys(securitySchemes).length) return ""; diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createContactInfo.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createContactInfo.ts index 80fb0537..f64d1cf1 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createContactInfo.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createContactInfo.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ -import { ContactObject } from "../openapi/types"; import { create, guard } from "./utils"; +import { ContactObject } from "../openapi/types"; export function createContactInfo(contact: ContactObject) { if (!contact || !Object.keys(contact).length) return ""; diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createEndpoint.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createEndpoint.ts index dc181612..769f2184 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createEndpoint.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createEndpoint.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ -import { ApiPageMetadata } from "../types"; import { create } from "./utils"; +import { ApiPageMetadata } from "../types"; type Method = Pick["api"]["method"]; type Path = Pick["api"]["path"]; diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createLicense.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createLicense.ts index 59fcc116..24b49167 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createLicense.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createLicense.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ -import { LicenseObject } from "../openapi/types"; import { create, guard } from "./utils"; +import { LicenseObject } from "../openapi/types"; export function createLicense(license: LicenseObject) { if (!license || !Object.keys(license).length) return ""; diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createLogo.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createLogo.ts index 8e9006bb..09025598 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createLogo.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createLogo.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ -import { LogoObject } from "../openapi/types"; import { create, guard } from "./utils"; +import { LogoObject } from "../openapi/types"; export function createLogo( logo: LogoObject | undefined, diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createParamsDetails.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createParamsDetails.ts index 38388e4e..020bd51e 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createParamsDetails.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createParamsDetails.ts @@ -5,10 +5,10 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ +import { create } from "./utils"; import { ApiItem } from "../types"; // import { createDetails } from "./createDetails"; // import { createDetailsSummary } from "./createDetailsSummary"; -import { create } from "./utils"; interface Props { parameters: ApiItem["parameters"]; diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createRequestBodyDetails.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createRequestBodyDetails.ts index 47aa0b86..55cb8f56 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createRequestBodyDetails.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createRequestBodyDetails.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ -import { MediaTypeObject } from "../openapi/types"; import { createRequestSchema } from "./createRequestSchema"; +import { MediaTypeObject } from "../openapi/types"; interface Props { title: string; diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createRequestSchema.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createRequestSchema.ts index 07f5564b..661072e5 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createRequestSchema.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createRequestSchema.ts @@ -5,10 +5,10 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ -import { MediaTypeObject, SchemaObject } from "../openapi/types"; import { createDescription } from "./createDescription"; import { createNodes } from "./createSchema"; import { create } from "./utils"; +import { MediaTypeObject, SchemaObject } from "../openapi/types"; interface Props { style?: any; diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createResponseSchema.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createResponseSchema.ts index e81297d8..c2a5838c 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createResponseSchema.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createResponseSchema.ts @@ -5,7 +5,6 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ -import { MediaTypeObject } from "../openapi/types"; import { createDescription } from "./createDescription"; // import { createDetails } from "./createDetails"; // import { createDetailsSummary } from "./createDetailsSummary"; @@ -17,6 +16,7 @@ import { getRequestBody as getResponseBody } from "./createRequestSchema"; // createResponseExamples, // } from "./createStatusCodes"; import { create } from "./utils"; +import { MediaTypeObject } from "../openapi/types"; interface Props { style?: any; diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createSchema.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createSchema.ts index b44b2bb0..44f114ac 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createSchema.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createSchema.ts @@ -5,10 +5,10 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ -import { SchemaObject } from "../openapi/types"; import { createDescription } from "./createDescription"; import { getQualifierMessage, getSchemaName } from "./schema"; import { create } from "./utils"; +import { SchemaObject } from "../openapi/types"; const jsonSchemaMergeAllOf = require("json-schema-merge-allof"); diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createStatusCodes.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createStatusCodes.ts index 83c72570..e0ea77ff 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createStatusCodes.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createStatusCodes.ts @@ -7,14 +7,14 @@ import format from "xml-formatter"; -import { sampleResponseFromSchema } from "../openapi/createResponseExample"; -import { ApiItem } from "../types"; import { createDescription } from "./createDescription"; import { createDetails } from "./createDetails"; import { createDetailsSummary } from "./createDetailsSummary"; import { createResponseSchema } from "./createResponseSchema"; import { create } from "./utils"; import { guard } from "./utils"; +import { sampleResponseFromSchema } from "../openapi/createResponseExample"; +import { ApiItem } from "../types"; export default function json2xml(o: any, tab: any) { var toXml = function (v: any, name: string, ind: any) { diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/index.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/index.ts index e4082857..9825359c 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/index.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/index.ts @@ -5,13 +5,6 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ -import { - ContactObject, - LicenseObject, - // MediaTypeObject, - SecuritySchemeObject, -} from "../openapi/types"; -import { ApiPageMetadata, InfoPageMetadata, TagPageMetadata } from "../types"; import { createAuthentication } from "./createAuthentication"; import { createContactInfo } from "./createContactInfo"; // import { createDeprecationNotice } from "./createDeprecationNotice"; @@ -28,6 +21,13 @@ import { createTermsOfService } from "./createTermsOfService"; // import { createVendorExtensions } from "./createVendorExtensions"; import { createVersionBadge } from "./createVersionBadge"; import { greaterThan, lessThan, render } from "./utils"; +import { + ContactObject, + LicenseObject, + // MediaTypeObject, + SecuritySchemeObject, +} from "../openapi/types"; +import { ApiPageMetadata, InfoPageMetadata, TagPageMetadata } from "../types"; // interface Props { // title: string; diff --git a/packages/docusaurus-plugin-openapi-docs/src/openapi/createRequestExample.ts b/packages/docusaurus-plugin-openapi-docs/src/openapi/createRequestExample.ts index 8413cb8e..4ec42738 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/openapi/createRequestExample.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/openapi/createRequestExample.ts @@ -8,8 +8,8 @@ import chalk from "chalk"; import merge from "lodash/merge"; -import { mergeAllOf } from "../markdown/createSchema"; import { SchemaObject } from "./types"; +import { mergeAllOf } from "../markdown/createSchema"; interface OASTypeToTypeMap { string: string; diff --git a/packages/docusaurus-plugin-openapi-docs/src/openapi/createResponseExample.ts b/packages/docusaurus-plugin-openapi-docs/src/openapi/createResponseExample.ts index 11a287e8..7b0492da 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/openapi/createResponseExample.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/openapi/createResponseExample.ts @@ -8,8 +8,8 @@ import chalk from "chalk"; import merge from "lodash/merge"; -import { mergeAllOf } from "../markdown/createSchema"; import { SchemaObject } from "./types"; +import { mergeAllOf } from "../markdown/createSchema"; interface OASTypeToTypeMap { string: string; diff --git a/packages/docusaurus-plugin-openapi-docs/src/openapi/openapi.ts b/packages/docusaurus-plugin-openapi-docs/src/openapi/openapi.ts index 3b761975..cd8649e7 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/openapi/openapi.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/openapi/openapi.ts @@ -18,6 +18,9 @@ import kebabCase from "lodash/kebabCase"; import unionBy from "lodash/unionBy"; import uniq from "lodash/uniq"; +import { sampleRequestFromSchema } from "./createRequestExample"; +import { OpenApiObject, TagObject } from "./types"; +import { loadAndResolveSpec } from "./utils/loadAndResolveSpec"; import { isURL } from "../index"; import { ApiMetadata, @@ -27,9 +30,6 @@ import { SidebarOptions, TagPageMetadata, } from "../types"; -import { sampleRequestFromSchema } from "./createRequestExample"; -import { OpenApiObject, TagObject } from "./types"; -import { loadAndResolveSpec } from "./utils/loadAndResolveSpec"; /** * Convenience function for converting raw JSON to a Postman Collection object. diff --git a/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/loadAndResolveSpec.ts b/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/loadAndResolveSpec.ts index ee59054b..2b75c384 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/loadAndResolveSpec.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/loadAndResolveSpec.ts @@ -13,8 +13,8 @@ import chalk from "chalk"; // @ts-ignore import { convertObj } from "swagger2openapi"; -import { OpenApiObject } from "../types"; import { OpenAPIParser } from "./services/OpenAPIParser"; +import { OpenApiObject } from "../types"; function serializer(replacer: any, cycleReplacer: any) { var stack: any = [], diff --git a/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/services/OpenAPIParser.ts b/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/services/OpenAPIParser.ts index 8f18c8b3..3e90a75a 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/services/OpenAPIParser.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/services/OpenAPIParser.ts @@ -7,11 +7,11 @@ // @ts-nocheck +import { RedocNormalizedOptions } from "./RedocNormalizedOptions"; import { OpenAPIRef, OpenAPISchema, OpenAPISpec, Referenced } from "../types"; import { isArray, isBoolean } from "../utils/helpers"; import { JsonPointer } from "../utils/JsonPointer"; import { getDefinitionName, isNamedDefinition } from "../utils/openapi"; -import { RedocNormalizedOptions } from "./RedocNormalizedOptions"; export type MergedOpenAPISchema = OpenAPISchema & { parentRefs?: string[] }; diff --git a/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/utils/openapi.ts b/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/utils/openapi.ts index 2fbd16d0..24158148 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/utils/openapi.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/utils/openapi.ts @@ -9,6 +9,13 @@ import { dirname } from "path"; +import { + isNumeric, + removeQueryString, + resolveUrl, + isArray, + isBoolean, +} from "./helpers"; import { OpenAPIParser } from "../services/OpenAPIParser"; import { OpenAPIEncoding, @@ -21,13 +28,6 @@ import { OpenAPIServer, Referenced, } from "../types"; -import { - isNumeric, - removeQueryString, - resolveUrl, - isArray, - isBoolean, -} from "./helpers"; function isWildcardStatusCode( statusCode: string | number diff --git a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.tsx b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.tsx index 6c2d9def..4164e629 100644 --- a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.tsx +++ b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.tsx @@ -7,18 +7,25 @@ import React, { useCallback, useState, useRef, useEffect } from "react"; -import { CopyButtonProps } from "@docusaurus/theme-common/internal"; +import { CopyButtonProps as BaseCopyButtonProps } from "@docusaurus/theme-common/internal"; import { translate } from "@docusaurus/Translate"; import clsx from "clsx"; import copy from "copy-text-to-clipboard"; +interface CopyButtonProps extends BaseCopyButtonProps { + code: string; + className?: string; + showText?: boolean; +} + export default function CopyButton({ code, className, - showText, -}: CopyButtonProps & { showText?: boolean }): React.JSX.Element { + showText = false, +}: CopyButtonProps): React.ReactElement { const [isCopied, setIsCopied] = useState(false); const copyTimeout = useRef(undefined); + const handleCopyCode = useCallback(() => { copy(code); setIsCopied(true); @@ -27,7 +34,9 @@ export default function CopyButton({ }, 1000); }, [code]); - useEffect(() => () => window.clearTimeout(copyTimeout.current), []); + useEffect(() => { + return () => window.clearTimeout(copyTimeout.current); + }, []); return (