diff --git a/apps/website/src/components/DocItem.tsx b/apps/website/src/components/DocItem.tsx index ce4d7b104..86b5de4c4 100644 --- a/apps/website/src/components/DocItem.tsx +++ b/apps/website/src/components/DocItem.tsx @@ -114,18 +114,18 @@ export function DocItem({ ) : null} - {node.members?.events?.length ? ( -
- -
- ) : null} - {node.members?.methods?.length ? (
) : null} + {node.members?.events?.length ? ( +
+ +
+ ) : null} + {node.members?.length ? : null} {node.unionMembers?.length ? : null} diff --git a/apps/website/src/components/Outline.tsx b/apps/website/src/components/Outline.tsx index 44fd1d710..92424185b 100644 --- a/apps/website/src/components/Outline.tsx +++ b/apps/website/src/components/Outline.tsx @@ -57,40 +57,6 @@ export async function Outline({ node }: { readonly node: any }) { ) : null} - {node.members?.events?.length ? ( - - -

- - Events -

- - -
- - -
- {node.members.events.map((event: any, idx: number) => { - return ( - -
-
- - {event.displayName} - -
-
-
- ); - })} -
-
-
- ) : null} - {node.members?.methods?.length ? ( @@ -124,6 +90,40 @@ export async function Outline({ node }: { readonly node: any }) { ) : null} + + {node.members?.events?.length ? ( + + +

+ + Events +

+ + +
+ + +
+ {node.members.events.map((event: any, idx: number) => { + return ( + +
+
+ + {event.displayName} + +
+
+
+ ); + })} +
+
+
+ ) : null}
diff --git a/packages/actions/package.json b/packages/actions/package.json index e76dc017d..2c2514af5 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -46,6 +46,7 @@ "@vercel/blob": "^0.22.1", "@vercel/postgres": "^0.7.2", "meilisearch": "^0.37.0", + "p-limit": "^5.0.0", "tslib": "^2.6.2", "undici": "6.6.2" }, diff --git a/packages/actions/src/uploadDocumentation/index.ts b/packages/actions/src/uploadDocumentation/index.ts index c2a25c49e..d69489398 100644 --- a/packages/actions/src/uploadDocumentation/index.ts +++ b/packages/actions/src/uploadDocumentation/index.ts @@ -4,6 +4,7 @@ import { getInput, setFailed } from '@actions/core'; import { create } from '@actions/glob'; import { put } from '@vercel/blob'; import { createPool } from '@vercel/postgres'; +import pLimit from 'p-limit'; if (!process.env.DATABASE_URL) { setFailed('DATABASE_URL is not set'); @@ -16,22 +17,36 @@ const pool = createPool({ connectionString: process.env.DATABASE_URL, }); +const limit = pLimit(10); +const promises = []; + const globber = await create(`packages/${pkg}/docs/docs.api.json`); for await (const file of globber.globGenerator()) { const data = await readFile(file, 'utf8'); try { - console.log(`Uploading ${file} with ${version}...`); - const json = JSON.parse(data); - const name = json.name ?? json.n; - const { url } = await put(`${name.replace('@discordjs/', '')}/${version}.json`, data, { - access: 'public', - addRandomSuffix: false, - }); - await pool.sql`insert into documentation (name, version, url) values (${name.replace( - '@discordjs/', - '', - )}, ${version}, ${url}) on conflict (name, version) do update set url = EXCLUDED.url`; + promises.push( + // eslint-disable-next-line @typescript-eslint/no-loop-func + limit(async () => { + console.log(`Uploading ${file} with ${version}...`); + const json = JSON.parse(data); + const name = json.name ?? json.n; + const { url } = await put(`${name.replace('@discordjs/', '')}/${version}.json`, data, { + access: 'public', + addRandomSuffix: false, + }); + await pool.sql`insert into documentation (name, version, url) values (${name.replace( + '@discordjs/', + '', + )}, ${version}, ${url}) on conflict (name, version) do update set url = EXCLUDED.url`; + }), + ); } catch (error) { console.log(error); } } + +try { + await Promise.all(promises); +} catch (error) { + console.log(error); +} diff --git a/packages/actions/src/uploadSearchIndices/index.ts b/packages/actions/src/uploadSearchIndices/index.ts index b4b727dd6..bdf5d3b90 100644 --- a/packages/actions/src/uploadSearchIndices/index.ts +++ b/packages/actions/src/uploadSearchIndices/index.ts @@ -3,6 +3,7 @@ import { setFailed } from '@actions/core'; import { generateAllIndices } from '@discordjs/scripts'; import { createPool } from '@vercel/postgres'; import { MeiliSearch } from 'meilisearch'; +import pLimit from 'p-limit'; import { fetch } from 'undici'; if (!process.env.DATABASE_URL) { @@ -26,6 +27,9 @@ const client = new MeiliSearch({ apiKey: process.env.SEARCH_API_KEY!, }); +const limit = pLimit(10); +let promises: Promise[] = []; + try { console.log('Generating all indices...'); const indices = await generateAllIndices({ @@ -49,8 +53,9 @@ try { console.log('Uploading indices...'); try { - await Promise.all( - indices.map(async (index) => { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + promises = indices.map(async (index) => + limit(async () => { console.log(`Uploading ${index.index}...`); let task; try { @@ -71,3 +76,9 @@ try { const err = error as Error; setFailed(err.message); } + +try { + await Promise.all(promises); +} catch (error) { + console.log(error); +} diff --git a/packages/actions/src/uploadSplitDocumentation/index.ts b/packages/actions/src/uploadSplitDocumentation/index.ts index d01d9f593..8da4abb53 100644 --- a/packages/actions/src/uploadSplitDocumentation/index.ts +++ b/packages/actions/src/uploadSplitDocumentation/index.ts @@ -3,21 +3,37 @@ import { basename } from 'node:path'; import { getInput } from '@actions/core'; import { create } from '@actions/glob'; import { put } from '@vercel/blob'; +import pLimit from 'p-limit'; const pkg = getInput('package') || '*'; const version = getInput('version') || 'main'; +const limit = pLimit(10); +const promises = []; + const globber = await create(`packages/${pkg}/docs/${pkg}/split/*.api.json`); for await (const file of globber.globGenerator()) { const data = await readFile(file, 'utf8'); try { - console.log(`Uploading ${file} with ${version}...`); - const name = basename(file).replace('main.', ''); - await put(`rewrite/${pkg}/${version}.${name}`, data, { - access: 'public', - addRandomSuffix: false, - }); + promises.push( + // eslint-disable-next-line @typescript-eslint/no-loop-func + limit(async () => { + console.log(`Uploading ${file} with ${version}...`); + const name = basename(file).replace('main.', ''); + + await put(`rewrite/${pkg}/${version}.${name}`, data, { + access: 'public', + addRandomSuffix: false, + }); + }), + ); } catch (error) { console.log(error); } } + +try { + await Promise.all(promises); +} catch (error) { + console.log(error); +} diff --git a/packages/scripts/src/generateSplitDocumentation.ts b/packages/scripts/src/generateSplitDocumentation.ts index d77548f86..12f3c81dc 100644 --- a/packages/scripts/src/generateSplitDocumentation.ts +++ b/packages/scripts/src/generateSplitDocumentation.ts @@ -270,7 +270,7 @@ function itemExcerptText(excerpt: Excerpt, apiPackage: ApiPackage) { displayName: resolved.item.displayName, containerKey: resolved.item.containerKey, uri: resolveItemURI(resolved.item), - packageName: resolved.package, + packageName: resolved.package?.replace('@discordjs/', ''), version: resolved.version, }, }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba71d0a33..3b2cd5938 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -410,6 +410,9 @@ importers: meilisearch: specifier: ^0.37.0 version: 0.37.0 + p-limit: + specifier: ^5.0.0 + version: 5.0.0 tslib: specifier: ^2.6.2 version: 2.6.2 @@ -3957,8 +3960,6 @@ packages: peerDependencies: markdown-wasm: 1.x peerDependenciesMeta: - esbuild: - optional: true markdown-wasm: optional: true dependencies: @@ -4017,10 +4018,6 @@ packages: peerDependencies: '@effect-ts/otel-node': '*' peerDependenciesMeta: - '@effect-ts/core': - optional: true - '@effect-ts/otel': - optional: true '@effect-ts/otel-node': optional: true dependencies: @@ -13566,9 +13563,6 @@ packages: /clipanion@3.2.1: resolution: {integrity: sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA==} - peerDependenciesMeta: - typanion: - optional: true dependencies: typanion: 3.14.0 dev: false @@ -14778,7 +14772,7 @@ packages: dependencies: semver: 7.5.4 shelljs: 0.8.5 - typescript: 5.5.0-dev.20240228 + typescript: 5.5.0-dev.20240302 dev: true /dts-critic@3.3.11(typescript@5.3.3): @@ -21840,7 +21834,6 @@ packages: engines: {node: '>=18'} dependencies: yocto-queue: 1.0.0 - dev: true /p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} @@ -25678,8 +25671,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - /typescript@5.5.0-dev.20240228: - resolution: {integrity: sha512-bdFIn0U4p7+PrnESpBPXDc6jRXynawwVQssEw2Pd2o/Mud34LwGgqHXOgIY5EEmZFPjzT3osXB7VKQP1cdHi3g==} + /typescript@5.5.0-dev.20240302: + resolution: {integrity: sha512-Cbr0okulu+L25e+Hg7miQGjy1iPM2jm1BkdFBYdf+JK7eCw8HF19Ud22FuZ15Nmcfxz9SU384MNQFFhwy+adrw==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -27420,7 +27413,6 @@ packages: /yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} - dev: true /yoga-wasm-web@0.3.3: resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==}