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 ? (
-
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==}