diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a684d2ad8..74e26b7e1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,6 +7,7 @@ jobs: env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} + NEXT_PUBLIC_LOCAL_DEV: true steps: - name: Checkout repository uses: actions/checkout@v3 diff --git a/packages/website/.env.local b/packages/website/.env.local new file mode 100644 index 000000000..0333ed821 --- /dev/null +++ b/packages/website/.env.local @@ -0,0 +1 @@ +NEXT_PUBLIC_LOCAL_DEV=true diff --git a/packages/website/package.json b/packages/website/package.json index 157309a07..b227fadb1 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -5,10 +5,12 @@ "private": true, "scripts": { "test": "vitest run", - "build": "yarn build:css && yarn build:next", + "build": "is-ci && yarn build:ci || yarn build:prod", + "build:ci": "yarn run --top-level docs && yarn build:prod", + "build:prod": "yarn build:css && yarn build:next", "build:next": "next build", "build:css": "yarn generate:css", - "dev": "concurrently 'yarn dev:css' 'yarn dev:next'", + "dev": "yarn run --top-level docs && concurrently 'yarn dev:css' 'yarn dev:next'", "dev:next": "next dev", "dev:css": "yarn generate:css --watch", "generate:css": "unocss 'src/**/*.tsx' --out-file ./src/styles/unocss.css", @@ -88,6 +90,7 @@ "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", "happy-dom": "^6.0.4", + "is-ci": "^3.0.1", "prettier": "^2.7.1", "typescript": "^4.7.4", "unocss": "^0.45.6", diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 5a0c62c2a..21e24a8f6 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -1,4 +1,6 @@ /* eslint-disable @typescript-eslint/no-throw-literal */ +import { readFile } from 'node:fs/promises'; +import { join } from 'node:path'; import { Box } from '@mantine/core'; import { ApiFunction } from '@microsoft/api-extractor-model'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; @@ -27,9 +29,19 @@ export const getStaticPaths: GetStaticPaths = async () => { await Promise.all( packages.map(async (packageName) => { try { - const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/main.api.json`); - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const data = await res.json(); + let data; + if (process.env.NEXT_PUBLIC_LOCAL_DEV) { + const res = await readFile( + join(__dirname, '..', '..', '..', '..', '..', packageName, 'docs', 'docs.api.json'), + 'utf-8', + ); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + data = JSON.parse(res); + } else { + const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/main.api.json`); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + data = await res.json(); + } const model = createApiModel(data); const pkg = findPackage(model, packageName); @@ -71,9 +83,19 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { const [memberName, overloadIndex] = member.split(':') as [string, string | undefined]; try { - const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${branchName}.api.json`); - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const data = await res.json(); + let data; + if (process.env.NEXT_PUBLIC_LOCAL_DEV) { + const res = await readFile( + join(__dirname, '..', '..', '..', '..', '..', packageName, 'docs', 'docs.api.json'), + 'utf-8', + ); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + data = JSON.parse(res); + } else { + const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${branchName}.api.json`); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + data = await res.json(); + } const model = createApiModel(data); const pkg = findPackage(model, packageName); diff --git a/yarn.lock b/yarn.lock index b95dda5b8..a69d2efcc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2007,6 +2007,7 @@ __metadata: eslint-plugin-react: ^7.30.1 eslint-plugin-react-hooks: ^4.6.0 happy-dom: ^6.0.4 + is-ci: ^3.0.1 next: ^12.2.5 prettier: ^2.7.1 react: ^18.2.0