diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a9144e32b..c16cae25e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -25,7 +25,7 @@ // "forwardPorts": [], // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "yarn install", + "postCreateCommand": "yarn install", // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. "remoteUser": "node" diff --git a/.eslintrc.json b/.eslintrc.json index f4c676fd3..981a785d4 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,5 +1,5 @@ { "root": true, - // This tells ESLint to load the config from the package `eslint-config-custom` + // This tells ESLint to load the config from the package `eslint-config-discordeno` "extends": ["discordeno"] } diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 7c78c148b..2129c8b64 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -55,7 +55,7 @@ jobs: - name: Benchmark if: ${{ steps.cpuCheck.outputs.match == 'true' }} - run: node --expose-gc ./packages/benchmark/dist/index.js | tee output.txt + run: node --expose-gc ./packages/benchmarks/dist/index.js | tee output.txt - name: Download previous benchmark data if: ${{ steps.cpuCheck.outputs.match == 'true' }} @@ -69,7 +69,7 @@ jobs: if: ${{ steps.cpuCheck.outputs.match == 'true' }} uses: benchmark-action/github-action-benchmark@v1 with: - tool: "benchmarkjs" + tool: 'benchmarkjs' output-file-path: output.txt external-data-json-path: benchmarksResult/data.json @@ -96,9 +96,9 @@ jobs: uses: benchmark-action/github-action-benchmark@v1 if: ${{ github.ref == 'refs/heads/main' && steps.cpuCheck.outputs.match == 'true' }} with: - tool: "benchmarkjs" + tool: 'benchmarkjs' output-file-path: output.txt - gh-pages-branch: "benchies" + gh-pages-branch: 'benchies' benchmark-data-dir-path: benchmarksResult github-token: ${{ secrets.GITHUB_TOKEN }} auto-push: true diff --git a/.github/workflows/commentBenchResult.yml b/.github/workflows/commentBenchResult.yml index 7000371c6..736ce0e1e 100644 --- a/.github/workflows/commentBenchResult.yml +++ b/.github/workflows/commentBenchResult.yml @@ -72,7 +72,7 @@ jobs: echo "$MESSAGE" >> $GITHUB_ENV echo "EOF" >> $GITHUB_ENV - - name: "Comment on PR" + - name: 'Comment on PR' uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/other-runtime-unit-test.yml b/.github/workflows/other-runtime-unit-test.yml index 3394fab69..71a987fee 100644 --- a/.github/workflows/other-runtime-unit-test.yml +++ b/.github/workflows/other-runtime-unit-test.yml @@ -62,7 +62,7 @@ jobs: node-version: 18 - uses: oven-sh/setup-bun@v2 with: - bun-version: "1.0.6" + bun-version: '1.0.6' - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 4828a5431..3784def06 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -7,25 +7,24 @@ name: Mark stale issues and pull requests on: schedule: - - cron: '0 0 * * 1' + - cron: '0 0 * * 1' jobs: stale: - runs-on: ubuntu-latest permissions: issues: write pull-requests: write steps: - - uses: actions/stale@v9 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-issue-message: 'This issue has gone stale for over a month. If this issue is useful, leave a comment below. Otherwise, it will be closed shortly.' - stale-pr-message: 'This pull request has gone stale for over a month. If this pull request is still useful, leave a comment below. Otherwise, it will be closed shortly.' - stale-issue-label: 'no-issue-activity' - stale-pr-label: 'no-pr-activity' - only-labels: 'w-unverified' - exempt-issue-labels: 'api-docs-commits,help-wanted,w-verified,w-pending' - exempt-pr-labels: 'w-verified' - close-issue-reason: 'not_planned' + - uses: actions/stale@v9 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + stale-issue-message: 'This issue has gone stale for over a month. If this issue is useful, leave a comment below. Otherwise, it will be closed shortly.' + stale-pr-message: 'This pull request has gone stale for over a month. If this pull request is still useful, leave a comment below. Otherwise, it will be closed shortly.' + stale-issue-label: 'no-issue-activity' + stale-pr-label: 'no-pr-activity' + only-labels: 'w-unverified' + exempt-issue-labels: 'api-docs-commits,help-wanted,w-verified,w-pending' + exempt-pr-labels: 'w-verified' + close-issue-reason: 'not_planned' diff --git a/.npmignore b/.npmignore index b92f730d8..d111ecf89 100644 --- a/.npmignore +++ b/.npmignore @@ -6,3 +6,6 @@ !README.md !dist/** !bin/** + +# ignore the tsbuildinfo file +dist/.tsbuildinfo diff --git a/.yarnrc.yml b/.yarnrc.yml index 0d24a38ba..1d49014b0 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -8,6 +8,6 @@ nodeLinker: node-modules plugins: - path: .yarn/plugins/@yarnpkg/plugin-after-install.cjs - spec: "https://raw.githubusercontent.com/mhassan1/yarn-plugin-after-install/v0.5.0/bundles/@yarnpkg/plugin-after-install.js" + spec: 'https://raw.githubusercontent.com/mhassan1/yarn-plugin-after-install/v0.5.0/bundles/@yarnpkg/plugin-after-install.js' yarnPath: .yarn/releases/yarn-4.0.2.cjs diff --git a/README.md b/README.md index bf553f868..eb3ece76e 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,9 @@ yarn test:unit-coverage # unit test with Deno yarn test:deno-unit +# unit test with Bun +yarn test:bun-unit + # integration test yarn test:integration diff --git a/denoImportMap.json b/denoImportMap.json index ed2bc186f..610822702 100644 --- a/denoImportMap.json +++ b/denoImportMap.json @@ -18,4 +18,4 @@ "@discordeno/gateway": "./packages/gateway/dist/esm/index.js", "@discordeno/bot": "./packages/bot/dist/esm/index.js" } -} \ No newline at end of file +} diff --git a/docker-apps/rest-passthrough/CHANGELOG.md b/docker-apps/rest-passthrough/CHANGELOG.md index ba8118892..6361e43e8 100644 --- a/docker-apps/rest-passthrough/CHANGELOG.md +++ b/docker-apps/rest-passthrough/CHANGELOG.md @@ -1,4 +1,3 @@ # Changelog All notable changes to this project will be documented in this file. - diff --git a/examples/bigbot/src/config.ts b/examples/bigbot/src/config.ts index 5d70ad6fc..e55b5beb4 100644 --- a/examples/bigbot/src/config.ts +++ b/examples/bigbot/src/config.ts @@ -63,7 +63,7 @@ export const GATEWAY_INTENTS = Intents.Guilds | Intents.GuildMessages // Helper functions function assertEnv(env: string): string { - if (process.env[env]) return process.env[env]! + if (process.env[env]) return process.env[env] throw new TypeError(`The '${env}' environment variable must be set`) } diff --git a/package.json b/package.json index f02753b7a..fb3189aad 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,9 @@ "fmt": "turbo run fmt --no-daemon", "format": "prettier --write \"**/*.{ts,tsx,md}\"", "lint": "turbo run lint --no-daemon", - "prepare": "husky install", + "prepare": "husky", "release-build": "turbo run release-build --no-daemon", - "setup-dd": "husky install", + "setup-dd": "husky", "test:bun-unit": "turbo run test:bun-unit --no-daemon", "test:deno-unit": "turbo run test:deno-unit --no-daemon", "test:e2e": "turbo run test:e2e --no-daemon", @@ -35,9 +35,9 @@ "lint-staged": "^15.2.7", "prettier": "^3.2.5", "turbo": "^1.11.3", - "typedoc": "0.25.11", + "typedoc": "^0.25.13", "typedoc-plugin-markdown": "3.17.1", - "typescript": "5.4.5" + "typescript": "^5.5.2" }, "engines": { "node": ">=18.0.0" diff --git a/packages/benchmark/tsconfig.json b/packages/benchmark/tsconfig.json deleted file mode 100644 index 6cc7ea9b5..000000000 --- a/packages/benchmark/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist" - }, - "include": ["./src/**/*.ts", "./src/**/*.tsx"], - "exclude": ["node_modules", "dist", "test", "tests"] -} diff --git a/packages/benchmark/.swcrc b/packages/benchmarks/.swcrc similarity index 99% rename from packages/benchmark/.swcrc rename to packages/benchmarks/.swcrc index fc7154a38..fa9d29651 100644 --- a/packages/benchmark/.swcrc +++ b/packages/benchmarks/.swcrc @@ -22,4 +22,4 @@ "noInterop": false }, "sourceMaps": "inline" -} \ No newline at end of file +} diff --git a/packages/benchmark/package.json b/packages/benchmarks/package.json similarity index 82% rename from packages/benchmark/package.json rename to packages/benchmarks/package.json index f299a2674..229d7ce07 100644 --- a/packages/benchmark/package.json +++ b/packages/benchmarks/package.json @@ -1,10 +1,9 @@ { - "name": "benchmark", + "name": "benchmarks", "version": "0.0.0", - "main": "./dist/esm/index.js", + "main": "./dist/index.js", "exports": { - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.cjs", + "import": "./dist/index.js", "types": "./dist/types/index.d.ts" }, "types": "./dist/types/index.d.ts", @@ -29,19 +28,17 @@ "@discordeno/rest": "19.0.0-alpha.1", "@discordeno/types": "19.0.0-beta.1", "@discordeno/utils": "19.0.0-beta.1", - "benchmark": "^2.1.4", - "microtime": "^3.1.1", - "node-fetch": "^3.3.2" + "benchmark": "^2.1.4" }, "devDependencies": { "@swc/cli": "^0.3.9", "@swc/core": "^1.4.2", "@types/benchmark": "^2.1.5", - "@types/node": "^20.11.25", + "@types/node": "^20.14.7", "eslint": "^8.57.0", "eslint-config-discordeno": "*", "ts-node": "^10.9.2", "tsconfig": "*", - "typescript": "5.4.5" + "typescript": "^5.5.2" } } diff --git a/packages/benchmark/src/benchmarkSuite.ts b/packages/benchmarks/src/benchmarkSuite.ts similarity index 100% rename from packages/benchmark/src/benchmarkSuite.ts rename to packages/benchmarks/src/benchmarkSuite.ts diff --git a/packages/benchmark/src/benchmarks/casting.ts b/packages/benchmarks/src/benchmarks/casting.ts similarity index 94% rename from packages/benchmark/src/benchmarks/casting.ts rename to packages/benchmarks/src/benchmarks/casting.ts index 96adcb90f..1aed32955 100644 --- a/packages/benchmark/src/benchmarks/casting.ts +++ b/packages/benchmarks/src/benchmarks/casting.ts @@ -9,7 +9,7 @@ events.forEach((event) => { }) suite.add(`Camelize 1 event`, () => { - snakelize(events[1]) + camelize(events[1]) }) suite.add(`Snakelize 1 event`, () => { diff --git a/packages/benchmark/src/benchmarks/memory.ts b/packages/benchmarks/src/benchmarks/memory.ts similarity index 75% rename from packages/benchmark/src/benchmarks/memory.ts rename to packages/benchmarks/src/benchmarks/memory.ts index 73a831032..f8ee13716 100644 --- a/packages/benchmark/src/benchmarks/memory.ts +++ b/packages/benchmarks/src/benchmarks/memory.ts @@ -1,4 +1,4 @@ -import { createBot, type Bot } from '@discordeno/bot' +import { createBot, snakeToCamelCase, type Bot } from '@discordeno/bot' import { events as dbEvents } from '../utils/db.js' import { memoryBenchmark } from '../utils/memoryBenchmark.js' @@ -27,12 +27,8 @@ await memoryBenchmark( }), ), (bot, event) => { - // @ts-expect-error it works - bot.events[ - event.payload.t!.toLowerCase().replace(/_([a-z])/g, (g) => { - return g[1].toUpperCase() - }) - ]?.(event.payload.d, {}) + const eventName = snakeToCamelCase(event.payload.t!) + bot.events[eventName as keyof typeof bot.events]?.(event.payload.d as never, {}) }, dbEvents.filter((event) => event.payload.t), ) diff --git a/packages/benchmark/src/benchmarks/rest.ts b/packages/benchmarks/src/benchmarks/rest.ts similarity index 100% rename from packages/benchmark/src/benchmarks/rest.ts rename to packages/benchmarks/src/benchmarks/rest.ts diff --git a/packages/benchmark/src/benchmarks/transformers.ts b/packages/benchmarks/src/benchmarks/transformers.ts similarity index 99% rename from packages/benchmark/src/benchmarks/transformers.ts rename to packages/benchmarks/src/benchmarks/transformers.ts index 197a40461..abadf3d71 100644 --- a/packages/benchmark/src/benchmarks/transformers.ts +++ b/packages/benchmarks/src/benchmarks/transformers.ts @@ -95,11 +95,11 @@ await memoryBenchmark( '[transformer] message cache check', () => ({ cache: [] as any[], - }), // function reutrn a new instance of object wanted to test with + }), // function returns a new instance of object wanted to test with (object, event: DiscordMessage) => object.cache.push(bot.transformers.message(bot, event)), // function specify how to add event to the object/ run the object [...new Array(MESSAGE_SIZE)].map( - (i) => + () => ({ activity: { party_id: 'party_id', diff --git a/packages/benchmark/src/generateMessage.ts b/packages/benchmarks/src/generateMessage.ts similarity index 95% rename from packages/benchmark/src/generateMessage.ts rename to packages/benchmarks/src/generateMessage.ts index a01f0d633..c01837a90 100644 --- a/packages/benchmark/src/generateMessage.ts +++ b/packages/benchmarks/src/generateMessage.ts @@ -4,8 +4,6 @@ const benchmarkData = await fetch(`https://raw.githubusercontent.com/discordeno/ .then(async (res) => await res.text()) .then((text) => JSON.parse(text.slice(24))) -// eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars -// const commitSha = await fs.readFile('./sha', 'utf-8') const results = JSON.parse(await fs.readFile('./data.json', 'utf-8')) interface BenchmarksData { diff --git a/packages/benchmark/src/index.ts b/packages/benchmarks/src/index.ts similarity index 100% rename from packages/benchmark/src/index.ts rename to packages/benchmarks/src/index.ts diff --git a/packages/benchmark/src/utils/db.ts b/packages/benchmarks/src/utils/db.ts similarity index 96% rename from packages/benchmark/src/utils/db.ts rename to packages/benchmarks/src/utils/db.ts index 674a3b92c..8a1a4ae46 100644 --- a/packages/benchmark/src/utils/db.ts +++ b/packages/benchmarks/src/utils/db.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ import type { DiscordGatewayPayload } from '@discordeno/types' -import fetch from 'node-fetch' import fs from 'node:fs/promises' export const events: Array<{ diff --git a/packages/benchmark/src/utils/memoryBenchmark.ts b/packages/benchmarks/src/utils/memoryBenchmark.ts similarity index 100% rename from packages/benchmark/src/utils/memoryBenchmark.ts rename to packages/benchmarks/src/utils/memoryBenchmark.ts diff --git a/packages/benchmarks/tsconfig.json b/packages/benchmarks/tsconfig.json new file mode 100644 index 000000000..6b7962de0 --- /dev/null +++ b/packages/benchmarks/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "tsconfig/base.json" +} diff --git a/packages/bot/.swcrc b/packages/bot/.swcrc index fc7154a38..fa9d29651 100644 --- a/packages/bot/.swcrc +++ b/packages/bot/.swcrc @@ -22,4 +22,4 @@ "noInterop": false }, "sourceMaps": "inline" -} \ No newline at end of file +} diff --git a/packages/bot/package.json b/packages/bot/package.json index 256cbe71b..7554c5d73 100644 --- a/packages/bot/package.json +++ b/packages/bot/package.json @@ -26,7 +26,7 @@ "test:e2e": "c8 --r lcov mocha --no-warnings --jobs 1 --t 30000 'tests/e2e/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js rest", "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/unit/**/*.spec.ts'", "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" + "test:test-type": "tsc --project tests/tsconfig.json" }, "dependencies": { "@discordeno/gateway": "19.0.0-alpha.1", @@ -49,6 +49,6 @@ "sinon": "^17.0.1", "ts-node": "^10.9.2", "tsconfig": "*", - "typescript": "5.4.5" + "typescript": "^5.5.2" } } diff --git a/packages/bot/tests/e2e/resetguilds.spec.ts b/packages/bot/tests/e2e/resetguilds.spec.ts index a51482f6e..eb9707162 100644 --- a/packages/bot/tests/e2e/resetguilds.spec.ts +++ b/packages/bot/tests/e2e/resetguilds.spec.ts @@ -1,5 +1,5 @@ import { Intents } from '@discordeno/types' -import { delay, logger } from '@discordeno/utils' +import { delay, logger, snakeToCamelCase } from '@discordeno/utils' import { use as chaiUse } from 'chai' import chaiAsPromised from 'chai-as-promised' import { describe, it } from 'mocha' @@ -23,12 +23,9 @@ describe('[Bot] Delete any guild owned guilds', () => { // RUN DISPATCH CHECK await bot.events.dispatchRequirements?.(data, shard.id) - bot.events[ - data.t.toLowerCase().replace(/_([a-z])/g, function (g) { - return g[1].toUpperCase() - }) as keyof EventHandlers - // @ts-expect-error as any gets removed by linter - ]?.(data.d, shard) + + const eventName = snakeToCamelCase(data.t) + bot.events[eventName as keyof EventHandlers]?.(data.d as never, shard as never) }, }, intents: Intents.Guilds, diff --git a/packages/bot/tests/tsconfig.json b/packages/bot/tests/tsconfig.json new file mode 100644 index 000000000..45c85f4ea --- /dev/null +++ b/packages/bot/tests/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "tsconfig/test.json" +} diff --git a/packages/bot/tsconfig.json b/packages/bot/tsconfig.json index 6cc7ea9b5..6b7962de0 100644 --- a/packages/bot/tsconfig.json +++ b/packages/bot/tsconfig.json @@ -1,8 +1,3 @@ { - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist" - }, - "include": ["./src/**/*.ts", "./src/**/*.tsx"], - "exclude": ["node_modules", "dist", "test", "tests"] + "extends": "tsconfig/base.json" } diff --git a/packages/bot/tsconfig.test.json b/packages/bot/tsconfig.test.json deleted file mode 100644 index c4916d55a..000000000 --- a/packages/bot/tsconfig.test.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": ["tests"], - "exclude": ["node_modules", "dist", "src"] -} diff --git a/packages/discordeno/.swcrc b/packages/discordeno/.swcrc index fc7154a38..fa9d29651 100644 --- a/packages/discordeno/.swcrc +++ b/packages/discordeno/.swcrc @@ -22,4 +22,4 @@ "noInterop": false }, "sourceMaps": "inline" -} \ No newline at end of file +} diff --git a/packages/discordeno/package.json b/packages/discordeno/package.json index 426357900..77fa0c1d9 100644 --- a/packages/discordeno/package.json +++ b/packages/discordeno/package.json @@ -26,7 +26,7 @@ "test:deno-unit": "swc --strip-leading-paths tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist", "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'", "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" + "test:test-type": "tsc --project tests/tsconfig.json" }, "dependencies": { "@discordeno/bot": "19.0.0-beta.1", @@ -51,6 +51,6 @@ "sinon": "^17.0.1", "ts-node": "^10.9.2", "tsconfig": "*", - "typescript": "5.4.5" + "typescript": "^5.5.2" } } diff --git a/packages/discordeno/tests/tsconfig.json b/packages/discordeno/tests/tsconfig.json new file mode 100644 index 000000000..45c85f4ea --- /dev/null +++ b/packages/discordeno/tests/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "tsconfig/test.json" +} diff --git a/packages/discordeno/tsconfig.json b/packages/discordeno/tsconfig.json index 6cc7ea9b5..6b7962de0 100644 --- a/packages/discordeno/tsconfig.json +++ b/packages/discordeno/tsconfig.json @@ -1,8 +1,3 @@ { - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist" - }, - "include": ["./src/**/*.ts", "./src/**/*.tsx"], - "exclude": ["node_modules", "dist", "test", "tests"] + "extends": "tsconfig/base.json" } diff --git a/packages/discordeno/tsconfig.test.json b/packages/discordeno/tsconfig.test.json deleted file mode 100644 index c4916d55a..000000000 --- a/packages/discordeno/tsconfig.test.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": ["tests"], - "exclude": ["node_modules", "dist", "src"] -} diff --git a/packages/eslint-config-discordeno/package.json b/packages/eslint-config-discordeno/package.json index 42ffa0e9e..c8e8dbd72 100644 --- a/packages/eslint-config-discordeno/package.json +++ b/packages/eslint-config-discordeno/package.json @@ -15,7 +15,7 @@ "eslint-plugin-promise": "^6.1.1", "eslint-plugin-require-extensions": "^0.1.3", "prettier": "^3.2.5", - "typescript": "5.4.5" + "typescript": "^5.5.2" }, "publishConfig": { "access": "public" diff --git a/packages/gateway/.swcrc b/packages/gateway/.swcrc index fc7154a38..fa9d29651 100644 --- a/packages/gateway/.swcrc +++ b/packages/gateway/.swcrc @@ -22,4 +22,4 @@ "noInterop": false }, "sourceMaps": "inline" -} \ No newline at end of file +} diff --git a/packages/gateway/package.json b/packages/gateway/package.json index 827049eba..75f68f6b6 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -26,7 +26,7 @@ "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/unit/**/*.spec.ts'", "test:integration": "c8 --r lcov mocha --no-warnings 'tests/integration/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js gateway", "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" + "test:test-type": "tsc --project tests/tsconfig.json" }, "dependencies": { "@discordeno/types": "19.0.0-beta.1", @@ -49,7 +49,7 @@ "sinon": "^17.0.1", "ts-node": "^10.9.2", "tsconfig": "*", - "typescript": "5.4.5", + "typescript": "^5.5.2", "uWebSockets.js": "https://github.com/uNetworking/uWebSockets.js.git#commit=42c9c0d5d31f46ca4115dc75672b0037ec970f28" } } diff --git a/packages/gateway/tests/integration/connection.spec.ts b/packages/gateway/tests/integration/connection.spec.ts index 6cb1719cf..bb3948d33 100644 --- a/packages/gateway/tests/integration/connection.spec.ts +++ b/packages/gateway/tests/integration/connection.spec.ts @@ -1,10 +1,17 @@ import { Intents } from '@discordeno/types' import uWS from 'uWebSockets.js' -import { createGatewayManager, ShardSocketCloseCodes } from '../../src/index.js' +import { ShardSocketCloseCodes, createGatewayManager, type GatewayManager } from '../../src/index.js' -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -const createGatewayManagerWithPort = (port: number) => - createGatewayManager({ +/** + * This value needs to be AT LEAST `1017` + * + * The reason for this is because the calculation in Shard.calculateSafeRequests will return 0 not allowing any sort of message to the websocket server. + * Discord uses a way higher number for this value, but during this test we lower it since it would be annoying and useless make the test last 40+ seconds to test the heartbeat, but to make this work it needs to be at least 1017 so that calculateSafeRequests return 2 allowing for the shard to send messages. + */ +const heartbeatInterval = 1050 + +function createGatewayManagerWithPort(port: number): GatewayManager { + return createGatewayManager({ connection: { url: `ws://localhost:${port}`, shards: 1, @@ -20,22 +27,22 @@ const createGatewayManagerWithPort = (port: number) => intents: Intents.Guilds, events: {}, }) +} -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -const createUws = async (options: { +async function createUws(options: { onOpen?: () => any onMessage?: (message: any) => any onClose?: (code: number, message: string) => any closing?: boolean -}) => { +}): Promise<{ port: number; uwsToken: uWS.us_listen_socket }> { options.onOpen ??= () => {} options.onMessage ??= (message: any) => {} options.onClose ??= (code: number, message: string) => {} options.closing ??= false - return await new Promise<{ port: number; uwsToken: any }>((resolve, reject) => { + return await new Promise<{ port: number; uwsToken: uWS.us_listen_socket }>((resolve, reject) => { let port = 0 - let uwsToken = 0 + uWS .App() .ws('/*', { @@ -51,7 +58,7 @@ const createUws = async (options: { JSON.stringify({ op: 10, d: { - heartbeat_interval: 1017, + heartbeat_interval: heartbeatInterval, }, }), ) @@ -118,10 +125,13 @@ const createUws = async (options: { if (!token) { reject(new Error()) } - // retrieve listening port - uwsToken = token - port = uWS.us_socket_local_port(token) - resolve({ port, uwsToken }) + + port = uWS.us_socket_local_port(token as uWS.us_listen_socket) + + resolve({ + port, + uwsToken: token, + }) }) }) } @@ -146,7 +156,7 @@ describe('gateway', () => { let resolveHeartbeat: () => void let resolveConnected: () => void const connected = new Promise((resolve) => (resolveConnected = resolve)) - const Heartbeated = new Promise((resolve) => (resolveHeartbeat = resolve)) + const heartbeated = new Promise((resolve) => (resolveHeartbeat = resolve)) const uwsOptions = { onOpen: resolveConnected!, onMessage: (message: any) => { @@ -159,10 +169,12 @@ describe('gateway', () => { const gateway = createGatewayManagerWithPort(port) await gateway.spawnShards() await connected + const timeout = setTimeout(() => { throw new Error('Not heartbeat in time') - }, 1017) - await Heartbeated + }, heartbeatInterval) + + await heartbeated clearTimeout(timeout) uwsOptions.closing = true await gateway.shutdown(ShardSocketCloseCodes.Shutdown, 'User requested bot stop') diff --git a/packages/gateway/tests/tsconfig.json b/packages/gateway/tests/tsconfig.json new file mode 100644 index 000000000..45c85f4ea --- /dev/null +++ b/packages/gateway/tests/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "tsconfig/test.json" +} diff --git a/packages/gateway/tests/unit/empty.spec.ts b/packages/gateway/tests/unit/empty.spec.ts deleted file mode 100644 index 336ce12bb..000000000 --- a/packages/gateway/tests/unit/empty.spec.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/packages/gateway/tsconfig.json b/packages/gateway/tsconfig.json index 6cc7ea9b5..6b7962de0 100644 --- a/packages/gateway/tsconfig.json +++ b/packages/gateway/tsconfig.json @@ -1,8 +1,3 @@ { - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist" - }, - "include": ["./src/**/*.ts", "./src/**/*.tsx"], - "exclude": ["node_modules", "dist", "test", "tests"] + "extends": "tsconfig/base.json" } diff --git a/packages/gateway/tsconfig.test.json b/packages/gateway/tsconfig.test.json deleted file mode 100644 index c4916d55a..000000000 --- a/packages/gateway/tsconfig.test.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": ["tests"], - "exclude": ["node_modules", "dist", "src"] -} diff --git a/packages/rest/.swcrc b/packages/rest/.swcrc index fc7154a38..fa9d29651 100644 --- a/packages/rest/.swcrc +++ b/packages/rest/.swcrc @@ -22,4 +22,4 @@ "noInterop": false }, "sourceMaps": "inline" -} \ No newline at end of file +} diff --git a/packages/rest/package.json b/packages/rest/package.json index 15321466e..5e2d10131 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -27,12 +27,11 @@ "test:e2e": "c8 --r lcov mocha --exit --no-warnings --jobs 1 --t 30000 'tests/e2e/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js rest", "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/unit/**/*.spec.ts'", "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" + "test:test-type": "tsc --project tests/tsconfig.json" }, "dependencies": { "@discordeno/types": "19.0.0-beta.1", - "@discordeno/utils": "19.0.0-beta.1", - "dotenv": "^16.4.5" + "@discordeno/utils": "19.0.0-beta.1" }, "devDependencies": { "@swc/cli": "^0.3.9", @@ -45,13 +44,13 @@ "c8": "^9.1.0", "chai": "^5.1.1", "chai-as-promised": "^7.1.1", + "dotenv": "^16.4.5", "eslint": "^8.57.0", "eslint-config-discordeno": "*", "mocha": "^10.5.1", "sinon": "^17.0.1", "ts-node": "^10.9.2", "tsconfig": "*", - "typescript": "5.4.5", - "why-is-node-running": "^2.2.2" + "typescript": "^5.5.2" } } diff --git a/packages/rest/tests/e2e/automod.spec.ts b/packages/rest/tests/e2e/automod.spec.ts index 4c4686f99..4247ead90 100644 --- a/packages/rest/tests/e2e/automod.spec.ts +++ b/packages/rest/tests/e2e/automod.spec.ts @@ -1,26 +1,26 @@ import type { Camelize, DiscordChannel } from '@discordeno/types' import { AutoModerationActionType, AutoModerationEventTypes, AutoModerationTriggerTypes } from '@discordeno/types' import { expect } from 'chai' -import { e2ecache, rest } from './utils.js' +import { e2eCache, rest } from './utils.js' before(async () => { - if (!e2ecache.guild) { - e2ecache.guild = await rest.createGuild({ + if (!e2eCache.guild) { + e2eCache.guild = await rest.createGuild({ name: 'Discordeno-test', }) } }) after(async () => { - if (e2ecache.guild.id && !e2ecache.deletedGuild) { - e2ecache.deletedGuild = true - await rest.deleteGuild(e2ecache.guild.id) + if (e2eCache.guild.id && !e2eCache.deletedGuild) { + e2eCache.deletedGuild = true + await rest.deleteGuild(e2eCache.guild.id) } }) describe('Run automod tests', async () => { it('Create a MessageSend rule for Keyword with BlockMessage action.', async () => { - const rule = await rest.createAutomodRule(e2ecache.guild.id, { + const rule = await rest.createAutomodRule(e2eCache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, triggerType: AutoModerationTriggerTypes.Keyword, @@ -36,7 +36,7 @@ describe('Run automod tests', async () => { expect(rule.id).to.be.exist - const fetchedRule = await rest.getAutomodRule(e2ecache.guild.id, rule.id) + const fetchedRule = await rest.getAutomodRule(e2eCache.guild.id, rule.id) expect(fetchedRule.id).to.be.exist expect(fetchedRule.name).to.equal(rule.name) @@ -47,11 +47,11 @@ describe('Run automod tests', async () => { expect(fetchedRule.actions[0]).to.be.exist expect(fetchedRule.actions[0].type).to.equal(AutoModerationActionType.BlockMessage) - await rest.deleteAutomodRule(e2ecache.guild.id, rule.id) + await rest.deleteAutomodRule(e2eCache.guild.id, rule.id) }) it('Create a MessageSend rule for Keyword with Timeout action.', async () => { - const rule = await rest.createAutomodRule(e2ecache.guild.id, { + const rule = await rest.createAutomodRule(e2eCache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, triggerType: AutoModerationTriggerTypes.Keyword, @@ -70,7 +70,7 @@ describe('Run automod tests', async () => { expect(rule.id).to.be.exist - const fetchedRule = await rest.getAutomodRule(e2ecache.guild.id, rule.id) + const fetchedRule = await rest.getAutomodRule(e2eCache.guild.id, rule.id) expect(fetchedRule.id).to.be.exist expect(fetchedRule.name).to.equal(rule.name) @@ -82,11 +82,11 @@ describe('Run automod tests', async () => { expect(fetchedRule.actions[0].type).to.equal(AutoModerationActionType.Timeout) expect(fetchedRule.actions[0].metadata?.durationSeconds).to.equal(10) - await rest.deleteAutomodRule(e2ecache.guild.id, rule.id) + await rest.deleteAutomodRule(e2eCache.guild.id, rule.id) }) it('Create a MessageSend rule for Keyword with BlockMessage & Timeout action.', async () => { - const rule = await rest.createAutomodRule(e2ecache.guild.id, { + const rule = await rest.createAutomodRule(e2eCache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, triggerType: AutoModerationTriggerTypes.Keyword, @@ -108,14 +108,14 @@ describe('Run automod tests', async () => { expect(rule.id).to.be.exist - await rest.deleteAutomodRule(e2ecache.guild.id, rule.id) + await rest.deleteAutomodRule(e2eCache.guild.id, rule.id) }) describe('with a channel', () => { let channel: Camelize beforeEach(async () => { - channel = await rest.createChannel(e2ecache.guild.id, { + channel = await rest.createChannel(e2eCache.guild.id, { name: 'test', }) }) @@ -125,7 +125,7 @@ describe('Run automod tests', async () => { }) it('Create a MessageSend rule for Keyword with SendAlertMessage action.', async () => { - const rule = await rest.createAutomodRule(e2ecache.guild.id, { + const rule = await rest.createAutomodRule(e2eCache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, triggerType: AutoModerationTriggerTypes.Keyword, @@ -144,7 +144,7 @@ describe('Run automod tests', async () => { expect(rule.id).to.be.exist - const fetchedRule = await rest.getAutomodRule(e2ecache.guild.id, rule.id) + const fetchedRule = await rest.getAutomodRule(e2eCache.guild.id, rule.id) expect(fetchedRule.id).to.be.exist expect(fetchedRule.name).to.equal(rule.name) @@ -156,11 +156,11 @@ describe('Run automod tests', async () => { expect(fetchedRule.actions[0].type).to.equal(AutoModerationActionType.SendAlertMessage) expect(fetchedRule.actions[0].metadata?.channelId).to.equal(channel.id) - await rest.deleteAutomodRule(e2ecache.guild.id, rule.id) + await rest.deleteAutomodRule(e2eCache.guild.id, rule.id) }) it('Create a MessageSend rule for Keyword with SendAlertMessage & Timeout action.', async () => { - const rule = await rest.createAutomodRule(e2ecache.guild.id, { + const rule = await rest.createAutomodRule(e2eCache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, triggerType: AutoModerationTriggerTypes.Keyword, @@ -185,11 +185,11 @@ describe('Run automod tests', async () => { expect(rule.id).to.be.exist - await rest.deleteAutomodRule(e2ecache.guild.id, rule.id) + await rest.deleteAutomodRule(e2eCache.guild.id, rule.id) }) it('Create a MessageSend rule for Keyword with BlockMessage & SendAlertMessage & Timeout action.', async () => { - const rule = await rest.createAutomodRule(e2ecache.guild.id, { + const rule = await rest.createAutomodRule(e2eCache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, triggerType: AutoModerationTriggerTypes.Keyword, @@ -218,7 +218,7 @@ describe('Run automod tests', async () => { expect(rule.id).to.be.exist // Get the rule again to make sure it was created correctly - const fetchedRule = await rest.getAutomodRule(e2ecache.guild.id, rule.id) + const fetchedRule = await rest.getAutomodRule(e2eCache.guild.id, rule.id) expect(fetchedRule.id).to.be.exist expect(fetchedRule.name).to.equal(rule.name) expect(fetchedRule.eventType).to.equal(AutoModerationEventTypes.MessageSend) @@ -234,7 +234,7 @@ describe('Run automod tests', async () => { expect(fetchedRule.actions[1].type).to.equal(AutoModerationActionType.SendAlertMessage) expect(fetchedRule.actions[2].type).to.equal(AutoModerationActionType.Timeout) - await rest.deleteAutomodRule(e2ecache.guild.id, rule.id) + await rest.deleteAutomodRule(e2eCache.guild.id, rule.id) }) }) }) diff --git a/packages/rest/tests/e2e/emoji.spec.ts b/packages/rest/tests/e2e/emoji.spec.ts index e22dd3e88..ae70e64d9 100644 --- a/packages/rest/tests/e2e/emoji.spec.ts +++ b/packages/rest/tests/e2e/emoji.spec.ts @@ -3,28 +3,28 @@ import { urlToBase64 } from '@discordeno/utils' import { use as chaiUse, expect } from 'chai' import chaiAsPromised from 'chai-as-promised' import { after, afterEach, before, beforeEach, describe, it } from 'mocha' -import { e2ecache, rest } from './utils.js' +import { e2eCache, rest } from './utils.js' chaiUse(chaiAsPromised) before(async () => { - if (!e2ecache.guild) { - e2ecache.guild = await rest.createGuild({ + if (!e2eCache.guild) { + e2eCache.guild = await rest.createGuild({ name: 'Discordeno-test', }) } }) after(async () => { - if (e2ecache.guild.id && !e2ecache.deletedGuild) { - e2ecache.deletedGuild = true - await rest.deleteGuild(e2ecache.guild.id) + if (e2eCache.guild.id && !e2eCache.deletedGuild) { + e2eCache.deletedGuild = true + await rest.deleteGuild(e2eCache.guild.id) } }) describe('Create and delete emojis', () => { it('create an emoji', async () => { - const emoji = await rest.createEmoji(e2ecache.guild.id, { + const emoji = await rest.createEmoji(e2eCache.guild.id, { name: 'blamewolf', image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), roles: [], @@ -32,12 +32,12 @@ describe('Create and delete emojis', () => { // Assertions expect(emoji.id).to.be.exist - await rest.deleteEmoji(e2ecache.guild.id, emoji.id!) + await rest.deleteEmoji(e2eCache.guild.id, emoji.id!) }) // delete an emoji without a reason it('delete an emoji without a reason', async () => { - const emoji = await rest.createEmoji(e2ecache.guild.id, { + const emoji = await rest.createEmoji(e2eCache.guild.id, { name: 'blamewolf', image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), roles: [], @@ -46,14 +46,14 @@ describe('Create and delete emojis', () => { // Assertions expect(emoji.id).to.be.exist - await rest.deleteEmoji(e2ecache.guild.id, emoji.id!) + await rest.deleteEmoji(e2eCache.guild.id, emoji.id!) - await expect(rest.getEmoji(e2ecache.guild.id, emoji.id!)).to.eventually.rejected + await expect(rest.getEmoji(e2eCache.guild.id, emoji.id!)).to.eventually.rejected }) // delete an emoji with a reason it('delete an emoji with a reason', async () => { - const emoji = await rest.createEmoji(e2ecache.guild.id, { + const emoji = await rest.createEmoji(e2eCache.guild.id, { name: 'blamewolf', image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), roles: [], @@ -62,9 +62,9 @@ describe('Create and delete emojis', () => { // Assertions expect(emoji.id).to.be.exist - await rest.deleteEmoji(e2ecache.guild.id, emoji.id!, 'with a reason') + await rest.deleteEmoji(e2eCache.guild.id, emoji.id!, 'with a reason') - await expect(rest.getEmoji(e2ecache.guild.id, emoji.id!)).to.eventually.rejected + await expect(rest.getEmoji(e2eCache.guild.id, emoji.id!)).to.eventually.rejected }) }) @@ -72,7 +72,7 @@ describe('Edit and get emojis', () => { let emoji: Camelize & { id: string } beforeEach(async () => { - emoji = (await rest.createEmoji(e2ecache.guild.id, { + emoji = (await rest.createEmoji(e2eCache.guild.id, { name: 'blamewolf', image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), roles: [], @@ -80,49 +80,49 @@ describe('Edit and get emojis', () => { }) afterEach(async () => { - await rest.deleteEmoji(e2ecache.guild.id, emoji.id) + await rest.deleteEmoji(e2eCache.guild.id, emoji.id) }) // edit an emoji name it('Edit an emoji name', async () => { - await rest.editEmoji(e2ecache.guild.id, emoji.id, { + await rest.editEmoji(e2eCache.guild.id, emoji.id, { name: 'edited', }) - const edited = await rest.getEmoji(e2ecache.guild.id, emoji.id) + const edited = await rest.getEmoji(e2eCache.guild.id, emoji.id) expect(edited.name).to.equal('edited') }) // edit an emoji roles it("Edit an emoji's roles", async () => { - const role = await rest.createRole(e2ecache.guild.id, { + const role = await rest.createRole(e2eCache.guild.id, { name: 'dd-test-emoji', }) - await rest.editEmoji(e2ecache.guild.id, emoji.id, { + await rest.editEmoji(e2eCache.guild.id, emoji.id, { roles: [role.id], }) - const edited = await rest.getEmoji(e2ecache.guild.id, emoji.id) + const edited = await rest.getEmoji(e2eCache.guild.id, emoji.id) expect(edited.roles?.length).to.equal(1) }) // get an emoji it('get an emoji', async () => { - const exists = await rest.getEmoji(e2ecache.guild.id, emoji.id) + const exists = await rest.getEmoji(e2eCache.guild.id, emoji.id) expect(exists.id).to.be.exist expect(emoji.id).to.equal(exists.id) }) it('get all guild emojis', async () => { - await rest.createEmoji(e2ecache.guild.id, { + await rest.createEmoji(e2eCache.guild.id, { name: 'blamewolf2', image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), roles: [], }) - const exists = await rest.getEmojis(e2ecache.guild.id) + const exists = await rest.getEmojis(e2eCache.guild.id) expect(exists.length).to.greaterThan(1) }) }) diff --git a/packages/rest/tests/e2e/guild.spec.ts b/packages/rest/tests/e2e/guild.spec.ts index cc34ca732..d0f066f23 100644 --- a/packages/rest/tests/e2e/guild.spec.ts +++ b/packages/rest/tests/e2e/guild.spec.ts @@ -2,21 +2,21 @@ import { ChannelTypes } from '@discordeno/types' import { use as chaiUse, expect } from 'chai' import chaiAsPromised from 'chai-as-promised' import { describe, it } from 'mocha' -import { e2ecache, rest } from './utils.js' +import { e2eCache, rest } from './utils.js' chaiUse(chaiAsPromised) before(async () => { - if (!e2ecache.guild) { - e2ecache.guild = await rest.createGuild({ + if (!e2eCache.guild) { + e2eCache.guild = await rest.createGuild({ name: 'Discordeno-test', }) } }) after(async () => { - if (e2ecache.guild.id && !e2ecache.deletedGuild) { - e2ecache.deletedGuild = true - await rest.deleteGuild(e2ecache.guild.id) + if (e2eCache.guild.id && !e2eCache.deletedGuild) { + e2eCache.deletedGuild = true + await rest.deleteGuild(e2eCache.guild.id) } }) @@ -25,7 +25,7 @@ describe('Manage Guilds', async () => { const guild = await rest.createGuild({ name: 'Discordeno-test', }) - expect(e2ecache.guild.id).to.be.exist + expect(e2eCache.guild.id).to.be.exist await rest.deleteGuild(guild.id) // Make sure the guild was deleted const deleted = await rest.getGuild(guild.id).catch(() => undefined) @@ -33,31 +33,31 @@ describe('Manage Guilds', async () => { }) it('Get a guild', async () => { - const exists = await rest.getGuild(e2ecache.guild.id) + const exists = await rest.getGuild(e2eCache.guild.id) expect(exists).to.be.exist expect(exists.id).to.be.exist - expect(exists.name).to.equal(e2ecache.guild.name) + expect(exists.name).to.equal(e2eCache.guild.name) }) it('AFK channel', async () => { - const voiceChannel = await rest.createChannel(e2ecache.guild.id, { + const voiceChannel = await rest.createChannel(e2eCache.guild.id, { name: 'edit-guild-test', type: ChannelTypes.GuildVoice, }) expect(voiceChannel.id).to.be.exist - const edited = await rest.editGuild(e2ecache.guild.id, { + const edited = await rest.editGuild(e2eCache.guild.id, { name: 'Discordeno-test-edited', afkChannelId: voiceChannel.id, // afkTimeout: 5, }) expect(edited.name).to.equal('Discordeno-test-edited') - expect(e2ecache.guild.afkChannelId).to.not.equal(voiceChannel.id) + expect(e2eCache.guild.afkChannelId).to.not.equal(voiceChannel.id) expect(edited.afkChannelId).to.equal(voiceChannel.id) // expect(guild.afkTimeout).to.equal(0); // expect(edited.afkTimeout).to.equal(5); - const edited2 = await rest.editGuild(e2ecache.guild.id, { afkChannelId: null }) + const edited2 = await rest.editGuild(e2eCache.guild.id, { afkChannelId: null }) expect(edited.afkChannelId).to.not.equal(edited2.afkChannelId) // Use boolean to check both undefined or null expect(!!edited2.afkChannelId).to.equal(false) @@ -70,48 +70,48 @@ describe('Manage Guilds', async () => { // }); it('Get audit logs', async () => { - const auditLogs = await rest.getAuditLog(e2ecache.guild.id, { limit: 1 }) + const auditLogs = await rest.getAuditLog(e2eCache.guild.id, { limit: 1 }) expect(auditLogs.auditLogEntries.length).to.be.exist }) // Get available voice regions it('Get available voice regions', async () => { - const regions = await rest.getVoiceRegions(e2ecache.guild.id) + const regions = await rest.getVoiceRegions(e2eCache.guild.id) expect(regions.length).to.be.exist }) it('Banning members', async () => { await rest.banMember( - e2ecache.guild.id, + e2eCache.guild.id, '379643682984296448', { deleteMessageSeconds: 604800, }, 'Blame Wolf', ) - const fetchedBan = await rest.getBan(e2ecache.guild.id, '379643682984296448') + const fetchedBan = await rest.getBan(e2eCache.guild.id, '379643682984296448') // Assertions expect(fetchedBan).to.be.exist expect(fetchedBan.user.id).to.equal('379643682984296448') - await rest.banMember(e2ecache.guild.id, '416477607966670869') - const fetchedBans = await rest.getBans(e2ecache.guild.id) + await rest.banMember(e2eCache.guild.id, '416477607966670869') + const fetchedBans = await rest.getBans(e2eCache.guild.id) // Assertions expect(fetchedBans).to.be.exist expect(fetchedBans.length).to.greaterThanOrEqual(2) - await rest.unbanMember(e2ecache.guild.id, '416477607966670869') - await rest.unbanMember(e2ecache.guild.id, '379643682984296448') + await rest.unbanMember(e2eCache.guild.id, '416477607966670869') + await rest.unbanMember(e2eCache.guild.id, '379643682984296448') - const unbanned = await rest.getBans(e2ecache.guild.id) + const unbanned = await rest.getBans(e2eCache.guild.id) expect(unbanned.length).to.equal(0) }) // Get vanity URL it('Get vanity URL', async () => { - await expect(rest.getVanityUrl(e2ecache.guild.id)).to.eventually.rejected + await expect(rest.getVanityUrl(e2eCache.guild.id)).to.eventually.rejected }) // Get a welcome screen diff --git a/packages/rest/tests/e2e/member.spec.ts b/packages/rest/tests/e2e/member.spec.ts index 8fa8ba840..5d1a88dd5 100644 --- a/packages/rest/tests/e2e/member.spec.ts +++ b/packages/rest/tests/e2e/member.spec.ts @@ -1,33 +1,33 @@ import { use as chaiUse, expect } from 'chai' import chaiAsPromised from 'chai-as-promised' import { describe, it } from 'mocha' -import { e2ecache, rest } from './utils.js' +import { e2eCache, rest } from './utils.js' chaiUse(chaiAsPromised) before(async () => { - if (!e2ecache.guild) { - e2ecache.guild = await rest.createGuild({ + if (!e2eCache.guild) { + e2eCache.guild = await rest.createGuild({ name: 'Discordeno-test', }) } }) after(async () => { - if (e2ecache.guild.id && !e2ecache.deletedGuild) { - e2ecache.deletedGuild = true - await rest.deleteGuild(e2ecache.guild.id) + if (e2eCache.guild.id && !e2eCache.deletedGuild) { + e2eCache.deletedGuild = true + await rest.deleteGuild(e2eCache.guild.id) } }) describe('Member tests', () => { it("Fetches the bot and compares the bot's id with the fetched member's id", async () => { - const member = await rest.getMember(e2ecache.communityGuildId, rest.applicationId) + const member = await rest.getMember(e2eCache.communityGuildId, rest.applicationId) expect(member?.user.id).to.exist expect(member?.user.id).to.equal(rest.applicationId.toString()) }) it('Gets a member list and checks if the bot is in the member list', async () => { - const members = await rest.getMembers(e2ecache.communityGuildId, { + const members = await rest.getMembers(e2eCache.communityGuildId, { limit: 10, }) expect(members.some((m) => m.user.id === rest.applicationId.toString())).to.equal(true) @@ -35,20 +35,20 @@ describe('Member tests', () => { // fetch a single member by id it('Fetch a single member by id', async () => { - const member = await rest.getMember(e2ecache.communityGuildId, rest.applicationId) + const member = await rest.getMember(e2eCache.communityGuildId, rest.applicationId) expect(member?.user.id).to.exist }) it("Edit a bot's nickname", async () => { const nick = 'lts20050703' - const member = await rest.editBotMember(e2ecache.communityGuildId, { + const member = await rest.editBotMember(e2eCache.communityGuildId, { nick, }) expect(member.nick).to.equal(nick) // Change nickname back - const member2 = await rest.editBotMember(e2ecache.communityGuildId, { + const member2 = await rest.editBotMember(e2eCache.communityGuildId, { nick: null, }) expect(member2.nick).to.null diff --git a/packages/rest/tests/e2e/message.spec.ts b/packages/rest/tests/e2e/message.spec.ts index 2eb624647..c74e50c56 100644 --- a/packages/rest/tests/e2e/message.spec.ts +++ b/packages/rest/tests/e2e/message.spec.ts @@ -1,26 +1,26 @@ import { processReactionString, urlToBase64 } from '@discordeno/utils' import { expect } from 'chai' import { describe, it } from 'mocha' -import { e2ecache, rest } from './utils.js' +import { e2eCache, rest } from './utils.js' before(async () => { - if (!e2ecache.guild) { - e2ecache.guild = await rest.createGuild({ + if (!e2eCache.guild) { + e2eCache.guild = await rest.createGuild({ name: 'Discordeno-test', }) } }) after(async () => { - if (e2ecache.guild.id && !e2ecache.deletedGuild) { - e2ecache.deletedGuild = true - await rest.deleteGuild(e2ecache.guild.id) + if (e2eCache.guild.id && !e2eCache.deletedGuild) { + e2eCache.deletedGuild = true + await rest.deleteGuild(e2eCache.guild.id) } }) describe('Send a message', () => { it('With content', async () => { - const message = await rest.sendMessage(e2ecache.channel.id, { content: 'testing rate limit manager' }) + const message = await rest.sendMessage(e2eCache.channel.id, { content: 'testing rate limit manager' }) expect(message.content).to.be.equal('testing rate limit manager') const edited = await rest.editMessage(message.channelId, message.id, { content: 'testing rate limit manager edited' }) @@ -36,7 +36,7 @@ describe('Send a message', () => { expect(image).to.not.be.undefined if (!image) throw new Error('Was not able to fetch the image.') - const message = await rest.sendMessage(e2ecache.channel.id, { files: [{ blob: image, name: 'gamer' }] }) + const message = await rest.sendMessage(e2eCache.channel.id, { files: [{ blob: image, name: 'gamer' }] }) expect(message.attachments.length).to.be.greaterThan(0) const [attachment] = message.attachments @@ -46,7 +46,7 @@ describe('Send a message', () => { it('With a file attachment', async () => { const txtFile = new Blob(['hello world'], { type: 'text/plain' }) - const fileMsg = await rest.sendMessage(e2ecache.channel.id, { + const fileMsg = await rest.sendMessage(e2eCache.channel.id, { content: '222', files: [ { @@ -64,7 +64,7 @@ describe('Send a message', () => { const txtFile2 = new Blob(['hello world edit'], { type: 'text/plain' }) - const edited = await rest.editMessage(e2ecache.channel.id, fileMsg.id, { + const edited = await rest.editMessage(e2eCache.channel.id, fileMsg.id, { content: '222 edit', files: [ { @@ -84,7 +84,7 @@ describe('Send a message', () => { describe('Manage reactions', async () => { it('Add and delete a unicode reaction', async () => { - const reactionChannel = await rest.createChannel(e2ecache.guild.id, { name: 'reactions' }) + const reactionChannel = await rest.createChannel(e2eCache.guild.id, { name: 'reactions' }) const message = await rest.sendMessage(reactionChannel.id, { content: 'add reaction test' }) await rest.addReaction(message.channelId, message.id, '📙') @@ -98,13 +98,13 @@ describe('Manage reactions', async () => { }) it('Add and delete a custom reaction', async () => { - const emoji = await rest.createEmoji(e2ecache.guild.id, { + const emoji = await rest.createEmoji(e2eCache.guild.id, { name: 'discordeno', image: await urlToBase64('https://cdn.discordapp.com/emojis/785403373817823272.webp?size=96'), }) const emojiCode = `<:${emoji.name!}:${emoji.id!}>` - const reactionChannel = await rest.createChannel(e2ecache.guild.id, { name: 'reactions' }) + const reactionChannel = await rest.createChannel(e2eCache.guild.id, { name: 'reactions' }) const message = await rest.sendMessage(reactionChannel.id, { content: 'add reaction test' }) await rest.addReaction(message.channelId, message.id, emojiCode) @@ -121,13 +121,13 @@ describe('Manage reactions', async () => { }) it('Add several reactions with random order and delete all of them', async () => { - const emoji = await rest.createEmoji(e2ecache.guild.id, { + const emoji = await rest.createEmoji(e2eCache.guild.id, { name: 'discordeno', image: await urlToBase64('https://cdn.discordapp.com/emojis/785403373817823272.webp?size=96'), }) const emojiCode = `<:${emoji.name!}:${emoji.id!}>` - const reactionChannel = await rest.createChannel(e2ecache.guild.id, { name: 'reactions' }) + const reactionChannel = await rest.createChannel(e2eCache.guild.id, { name: 'reactions' }) const message = await rest.sendMessage(reactionChannel.id, { content: 'add reaction test' }) await rest.addReactions(message.channelId, message.id, [emojiCode, '📙']) @@ -141,13 +141,13 @@ describe('Manage reactions', async () => { }) it('Add several reactions in an order and delete emoji reaction', async () => { - const emoji = await rest.createEmoji(e2ecache.guild.id, { + const emoji = await rest.createEmoji(e2eCache.guild.id, { name: 'discordeno', image: await urlToBase64('https://cdn.discordapp.com/emojis/785403373817823272.webp?size=96'), }) const emojiCode = `<:${emoji.name!}:${emoji.id!}>` - const reactionChannel = await rest.createChannel(e2ecache.guild.id, { name: 'reactions' }) + const reactionChannel = await rest.createChannel(e2eCache.guild.id, { name: 'reactions' }) const message = await rest.sendMessage(reactionChannel.id, { content: 'add reaction test' }) await rest.addReactions(message.channelId, message.id, [emojiCode, '📙'], true) @@ -167,7 +167,7 @@ describe('Manage reactions', async () => { describe('Manage pins', () => { it('Pin, get, and unpin messages', async () => { - const channel = await rest.createChannel(e2ecache.guild.id, { name: 'pinning' }) + const channel = await rest.createChannel(e2eCache.guild.id, { name: 'pinning' }) const message = await rest.sendMessage(channel.id, { content: 'pin me' }) const message2 = await rest.sendMessage(channel.id, { content: 'pin me 2' }) @@ -188,7 +188,7 @@ describe('Manage pins', () => { describe('Rate limit manager testing', () => { it('Send 10 messages to 1 channel', async () => { - const channel = await rest.createChannel(e2ecache.guild.id, { name: 'rate-limit-1' }) + const channel = await rest.createChannel(e2eCache.guild.id, { name: 'rate-limit-1' }) await Promise.all( [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map(async (i) => { await rest.sendMessage(channel.id, { content: `10 messages to 1 channel testing rate limit manager ${i}` }) @@ -199,7 +199,7 @@ describe('Rate limit manager testing', () => { it('Send 10 messages to 10 channels', async () => { await Promise.all( [...Array(10).keys()].map(async () => { - const channel = await rest.createChannel(e2ecache.guild.id, { name: 'rate-limit-x' }) + const channel = await rest.createChannel(e2eCache.guild.id, { name: 'rate-limit-x' }) await Promise.all( [...Array(10).keys()].map(async (_, index) => { diff --git a/packages/rest/tests/e2e/misc.spec.ts b/packages/rest/tests/e2e/misc.spec.ts index c76c10c59..961468257 100644 --- a/packages/rest/tests/e2e/misc.spec.ts +++ b/packages/rest/tests/e2e/misc.spec.ts @@ -1,9 +1,9 @@ import { describe } from 'mocha' -import { e2ecache, rest } from './utils.js' +import { e2eCache, rest } from './utils.js' describe('Typings', () => { it('Trigger Typing Indication', async () => { - const channel = await rest.createChannel(e2ecache.guild.id, { name: 'typing' }) + const channel = await rest.createChannel(e2eCache.guild.id, { name: 'typing' }) await rest.triggerTypingIndicator(channel.id) }) }) diff --git a/packages/rest/tests/e2e/role.spec.ts b/packages/rest/tests/e2e/role.spec.ts index d845bfbf5..321a2aea7 100644 --- a/packages/rest/tests/e2e/role.spec.ts +++ b/packages/rest/tests/e2e/role.spec.ts @@ -1,19 +1,19 @@ import { calculateBits } from '@discordeno/utils' import { expect } from 'chai' import { before, describe, it } from 'mocha' -import { e2ecache, rest } from './utils.js' +import { e2eCache, rest } from './utils.js' before(async () => { - if (!e2ecache.guild) { - e2ecache.guild = await rest.createGuild({ + if (!e2eCache.guild) { + e2eCache.guild = await rest.createGuild({ name: 'Discordeno-test', }) } }) after(async () => { - if (e2ecache.guild.id && !e2ecache.deletedGuild) { - await rest.deleteGuild(e2ecache.guild.id) + if (e2eCache.guild.id && !e2eCache.deletedGuild) { + await rest.deleteGuild(e2eCache.guild.id) } }) @@ -21,7 +21,7 @@ describe('Role tests', async () => { // Create a role with a reason it('Create a role with a reason', async () => { const role = await rest.createRole( - e2ecache.guild?.id, + e2eCache.guild?.id, { name: `test role ${Date.now()}`, }, @@ -32,7 +32,7 @@ describe('Role tests', async () => { // Create a role without a reason it('Create a role without a reason', async () => { - const role = await rest.createRole(e2ecache.guild.id, { + const role = await rest.createRole(e2eCache.guild.id, { name: `test role ${Date.now()}`, }) expect(role.id).to.exist @@ -40,21 +40,21 @@ describe('Role tests', async () => { // Delete a role it('Delete a role', async () => { - const role = await rest.createRole(e2ecache.guild.id, { + const role = await rest.createRole(e2eCache.guild.id, { name: `test role ${Date.now()}`, }) - await rest.deleteRole(e2ecache.guild.id, role.id) - const deletedRoles = await rest.getRoles(e2ecache.guild.id) + await rest.deleteRole(e2eCache.guild.id, role.id) + const deletedRoles = await rest.getRoles(e2eCache.guild.id) expect(deletedRoles.some((r) => r.id === role.id)).to.equal(false) }) // Edit a role it('Edit a role', async () => { - const role = await rest.createRole(e2ecache.guild.id, { + const role = await rest.createRole(e2eCache.guild.id, { name: `test role ${Date.now()}`, }) - const edited = await rest.editRole(e2ecache.guild.id, role.id, { + const edited = await rest.editRole(e2eCache.guild.id, role.id, { name: 'test role 4', color: 0x0000ff, hoist: true, @@ -67,11 +67,11 @@ describe('Role tests', async () => { expect(edited.mentionable).to.equal(true) expect(edited.permissions.toString()).to.equal(calculateBits(['SEND_MESSAGES', 'VIEW_CHANNEL'])) - await rest.editRole(e2ecache.guild.id, role.id, { + await rest.editRole(e2eCache.guild.id, role.id, { hoist: false, mentionable: false, }) - const roles = await rest.getRoles(e2ecache.guild.id) + const roles = await rest.getRoles(e2eCache.guild.id) const unedited = roles.find((r) => r.id === role.id) expect(unedited?.hoist).to.equal(false) @@ -79,27 +79,27 @@ describe('Role tests', async () => { }) it('Add and remove role from user', async () => { - const role = await rest.createRole(e2ecache.guild.id, { + const role = await rest.createRole(e2eCache.guild.id, { name: `test role ${Date.now()}`, }) // Assign the role to the user - await rest.addRole(e2ecache.guild.id, rest.applicationId, role.id) - const member = await rest.getMember(e2ecache.guild.id, rest.applicationId) + await rest.addRole(e2eCache.guild.id, rest.applicationId, role.id) + const member = await rest.getMember(e2eCache.guild.id, rest.applicationId) expect(member?.roles.includes(role.id)).to.equal(true) - await rest.removeRole(e2ecache.guild.id, rest.applicationId, role.id) - const removed = await rest.getMember(e2ecache.guild.id, rest.applicationId) + await rest.removeRole(e2eCache.guild.id, rest.applicationId, role.id) + const removed = await rest.getMember(e2eCache.guild.id, rest.applicationId) // console.log('member', member.errors.userId.Errors) expect(removed?.roles.includes(role.id)).to.equal(false) // With a reason - await rest.addRole(e2ecache.guild.id, rest.applicationId, role.id, 'test reason') - const member2 = await rest.getMember(e2ecache.guild.id, rest.applicationId) + await rest.addRole(e2eCache.guild.id, rest.applicationId, role.id, 'test reason') + const member2 = await rest.getMember(e2eCache.guild.id, rest.applicationId) expect(member2?.roles.includes(role.id)).to.equal(true) - await rest.removeRole(e2ecache.guild.id, rest.applicationId, role.id, 'test reason') - const member3 = await rest.getMember(e2ecache.guild.id, rest.applicationId) + await rest.removeRole(e2eCache.guild.id, rest.applicationId, role.id, 'test reason') + const member3 = await rest.getMember(e2eCache.guild.id, rest.applicationId) expect(member3?.roles.includes(role.id)).to.equal(false) }) }) diff --git a/packages/rest/tests/e2e/stickers.spec.ts b/packages/rest/tests/e2e/stickers.spec.ts index 9a0df8614..1c054ac3c 100644 --- a/packages/rest/tests/e2e/stickers.spec.ts +++ b/packages/rest/tests/e2e/stickers.spec.ts @@ -2,21 +2,21 @@ import { StickerFormatTypes } from '@discordeno/types' import { use as chaiUse, expect } from 'chai' import chaiAsPromised from 'chai-as-promised' import { describe, it } from 'mocha' -import { e2ecache, rest } from './utils.js' +import { e2eCache, rest } from './utils.js' chaiUse(chaiAsPromised) before(async () => { - if (!e2ecache.guild) { - e2ecache.guild = await rest.createGuild({ + if (!e2eCache.guild) { + e2eCache.guild = await rest.createGuild({ name: 'Discordeno-test', }) } }) after(async () => { - if (e2ecache.guild.id && !e2ecache.deletedGuild) { - e2ecache.deletedGuild = true - await rest.deleteGuild(e2ecache.guild.id) + if (e2eCache.guild.id && !e2eCache.deletedGuild) { + e2eCache.deletedGuild = true + await rest.deleteGuild(e2eCache.guild.id) } }) @@ -28,7 +28,7 @@ describe('Sticker tests', async () => { }) it('Create, edit, get, and delete guild sticker', async () => { - const sticker = await rest.createGuildSticker(e2ecache.guild.id, { + const sticker = await rest.createGuildSticker(e2eCache.guild.id, { name: 'sticker name', description: 'sticker description', tags: 'sticker tags', @@ -42,7 +42,7 @@ describe('Sticker tests', async () => { expect(sticker.description).to.equal('sticker description') expect(sticker.tags).to.equal('sticker tags') - const channel = await rest.createChannel(e2ecache.guild.id, { + const channel = await rest.createChannel(e2eCache.guild.id, { name: 'test', }) const message = await rest.sendMessage(channel.id, { @@ -53,13 +53,13 @@ describe('Sticker tests', async () => { expect(message.stickerItems?.[0].id).to.equal(sticker.id) expect(message.stickerItems?.[0].name).to.equal(sticker.name) - const getSticker = await rest.getGuildSticker(e2ecache.guild.id, sticker.id) + const getSticker = await rest.getGuildSticker(e2eCache.guild.id, sticker.id) expect(getSticker.name).to.equal('sticker name') expect(getSticker.description).to.equal('sticker description') expect(getSticker.tags).to.equal('sticker tags') - const editSticker = await rest.editGuildSticker(e2ecache.guild.id, sticker.id, { + const editSticker = await rest.editGuildSticker(e2eCache.guild.id, sticker.id, { name: 'sticker name', description: 'sticker description', tags: 'sticker tags', @@ -69,7 +69,7 @@ describe('Sticker tests', async () => { expect(editSticker.description).to.equal('sticker description') expect(editSticker.tags).to.equal('sticker tags') - await rest.createGuildSticker(e2ecache.guild.id, { + await rest.createGuildSticker(e2eCache.guild.id, { name: 'sticker 2', description: 'sticker 2', tags: 'sticker tags 2', @@ -78,10 +78,10 @@ describe('Sticker tests', async () => { name: 'ddlogo.png', }, }) - const stickers = await rest.getGuildStickers(e2ecache.guild.id) + const stickers = await rest.getGuildStickers(e2eCache.guild.id) expect(stickers.length).to.greaterThan(1) - await rest.deleteGuildSticker(e2ecache.guild.id, sticker.id) - await expect(rest.getGuildSticker(e2ecache.guild.id, sticker.id)).to.eventually.rejected + await rest.deleteGuildSticker(e2eCache.guild.id, sticker.id) + await expect(rest.getGuildSticker(e2eCache.guild.id, sticker.id)).to.eventually.rejected }) }) diff --git a/packages/rest/tests/e2e/user.spec.ts b/packages/rest/tests/e2e/user.spec.ts index f814e545f..a65deac7b 100644 --- a/packages/rest/tests/e2e/user.spec.ts +++ b/packages/rest/tests/e2e/user.spec.ts @@ -1,20 +1,20 @@ import { use as chaiUse, expect } from 'chai' import chaiAsPromised from 'chai-as-promised' import { describe, it } from 'mocha' -import { e2ecache, rest } from './utils.js' +import { e2eCache, rest } from './utils.js' chaiUse(chaiAsPromised) before(async () => { - if (!e2ecache.guild) { - e2ecache.guild = await rest.createGuild({ + if (!e2eCache.guild) { + e2eCache.guild = await rest.createGuild({ name: 'Discordeno-test', }) } }) after(async () => { - if (e2ecache.guild.id && !e2ecache.deletedGuild) { - await rest.deleteGuild(e2ecache.guild.id) + if (e2eCache.guild.id && !e2eCache.deletedGuild) { + await rest.deleteGuild(e2eCache.guild.id) } }) diff --git a/packages/rest/tests/e2e/utils.ts b/packages/rest/tests/e2e/utils.ts index 026ca34d9..5e6dbce89 100644 --- a/packages/rest/tests/e2e/utils.ts +++ b/packages/rest/tests/e2e/utils.ts @@ -12,7 +12,7 @@ rest.deleteQueueDelay = 10000 const guild = await rest.createGuild({ name: 'ddenotester' }) const channel = await rest.createChannel(guild.id, { name: 'ddenotestchannel' }) -export const e2ecache = { +export const e2eCache = { guild, channel, deletedGuild: false, diff --git a/packages/rest/tests/e2e/webhook.spec.ts b/packages/rest/tests/e2e/webhook.spec.ts index fdf8fa826..a0e610e41 100644 --- a/packages/rest/tests/e2e/webhook.spec.ts +++ b/packages/rest/tests/e2e/webhook.spec.ts @@ -1,27 +1,27 @@ import { use as chaiUse, expect } from 'chai' import chaiAsPromised from 'chai-as-promised' import { describe, it } from 'mocha' -import { e2ecache, rest } from './utils.js' +import { e2eCache, rest } from './utils.js' chaiUse(chaiAsPromised) before(async () => { - if (!e2ecache.guild) { - e2ecache.guild = await rest.createGuild({ + if (!e2eCache.guild) { + e2eCache.guild = await rest.createGuild({ name: 'Discordeno-test', }) } }) after(async () => { - if (e2ecache.guild.id && !e2ecache.deletedGuild) { - e2ecache.deletedGuild = true - await rest.deleteGuild(e2ecache.guild.id) + if (e2eCache.guild.id && !e2eCache.deletedGuild) { + e2eCache.deletedGuild = true + await rest.deleteGuild(e2eCache.guild.id) } }) describe('Webhook helpers', async () => { it('Manage webhooks', async () => { - const channel = await rest.createChannel(e2ecache.guild.id, { + const channel = await rest.createChannel(e2eCache.guild.id, { name: 'wbhook', }) @@ -76,7 +76,7 @@ describe('Webhook helpers', async () => { }) it('Manage webhook messages', async () => { - const channel = await rest.createChannel(e2ecache.guild.id, { + const channel = await rest.createChannel(e2eCache.guild.id, { name: 'wbhook', }) const webhook = await rest.createWebhook(channel.id, { diff --git a/packages/rest/tests/tsconfig.json b/packages/rest/tests/tsconfig.json new file mode 100644 index 000000000..45c85f4ea --- /dev/null +++ b/packages/rest/tests/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "tsconfig/test.json" +} diff --git a/packages/rest/tsconfig.json b/packages/rest/tsconfig.json index 6cc7ea9b5..6b7962de0 100644 --- a/packages/rest/tsconfig.json +++ b/packages/rest/tsconfig.json @@ -1,8 +1,3 @@ { - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist" - }, - "include": ["./src/**/*.ts", "./src/**/*.tsx"], - "exclude": ["node_modules", "dist", "test", "tests"] + "extends": "tsconfig/base.json" } diff --git a/packages/rest/tsconfig.test.json b/packages/rest/tsconfig.test.json deleted file mode 100644 index c4916d55a..000000000 --- a/packages/rest/tsconfig.test.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": ["tests"], - "exclude": ["node_modules", "dist", "src"] -} diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index 8d4a78811..23dc3f1d7 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -4,6 +4,9 @@ "compilerOptions": { "target": "es2022", "module": "es2022", + "rootDir": "${configDir}/src", + "outDir": "${configDir}/dist", + "tsBuildInfoFile": "${configDir}/dist/.tsbuildinfo", "composite": false, "declaration": true, "declarationMap": true, @@ -16,11 +19,12 @@ "noUnusedParameters": false, "preserveWatchOutput": true, "skipLibCheck": true, + "skipDefaultLibCheck": true, "strict": true, "incremental": true, "resolveJsonModule": true }, - "exclude": ["node_modules", "dist", "tests", "test"], + "include": ["${configDir}/src"], "ts-node": { "swc": true, "esm": true diff --git a/packages/tsconfig/test.json b/packages/tsconfig/test.json index 8a8c4804c..00b11cc2a 100644 --- a/packages/tsconfig/test.json +++ b/packages/tsconfig/test.json @@ -1,7 +1,12 @@ { + "$schema": "https://json.schemastore.org/tsconfig", "extends": "./base.json", "compilerOptions": { "noEmit": true, - "incremental": false - } + "incremental": false, + "tsBuildInfoFile": null, + "rootDir": null, + "outDir": null, + }, + "include": ["${configDir}"], } diff --git a/packages/types/.swcrc b/packages/types/.swcrc index fc7154a38..fa9d29651 100644 --- a/packages/types/.swcrc +++ b/packages/types/.swcrc @@ -22,4 +22,4 @@ "noInterop": false }, "sourceMaps": "inline" -} \ No newline at end of file +} diff --git a/packages/types/package.json b/packages/types/package.json index b27ae45f8..45696ec45 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -29,17 +29,14 @@ "devDependencies": { "@swc/cli": "^0.3.9", "@swc/core": "^1.4.2", - "@types/chai": "^4.3.11", "@types/mocha": "^10.0.7", "@types/node": "^20.11.25", - "@types/sinon": "^17.0.3", "c8": "^9.1.0", - "chai": "^5.1.1", "eslint": "^8.57.0", "eslint-config-discordeno": "*", "mocha": "^10.5.1", "ts-node": "^10.9.2", "tsconfig": "*", - "typescript": "5.4.5" + "typescript": "^5.5.2" } } diff --git a/packages/types/tests/tsconfig.json b/packages/types/tests/tsconfig.json new file mode 100644 index 000000000..45c85f4ea --- /dev/null +++ b/packages/types/tests/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "tsconfig/test.json" +} diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json index 6cc7ea9b5..6b7962de0 100644 --- a/packages/types/tsconfig.json +++ b/packages/types/tsconfig.json @@ -1,8 +1,3 @@ { - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist" - }, - "include": ["./src/**/*.ts", "./src/**/*.tsx"], - "exclude": ["node_modules", "dist", "test", "tests"] + "extends": "tsconfig/base.json" } diff --git a/packages/types/tsconfig.test.json b/packages/types/tsconfig.test.json deleted file mode 100644 index c4916d55a..000000000 --- a/packages/types/tsconfig.test.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": ["tests"], - "exclude": ["node_modules", "dist", "src"] -} diff --git a/packages/utils/.swcrc b/packages/utils/.swcrc index fc7154a38..fa9d29651 100644 --- a/packages/utils/.swcrc +++ b/packages/utils/.swcrc @@ -22,4 +22,4 @@ "noInterop": false }, "sourceMaps": "inline" -} \ No newline at end of file +} diff --git a/packages/utils/package.json b/packages/utils/package.json index 7150f8f84..403ab9d86 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -26,11 +26,10 @@ "test:bun-unit": "node ../../scripts/fixBunTestExtension.js && bun test bunTestsDist", "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'", "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" + "test:test-type": "tsc --project tests/tsconfig.json" }, "dependencies": { - "@discordeno/types": "19.0.0-beta.1", - "tweetnacl": "^1.0.3" + "@discordeno/types": "19.0.0-beta.1" }, "devDependencies": { "@swc/cli": "^0.3.9", @@ -47,6 +46,6 @@ "sinon": "^17.0.1", "ts-node": "^10.9.2", "tsconfig": "*", - "typescript": "5.4.5" + "typescript": "^5.5.2" } } diff --git a/packages/utils/tests/tsconfig.json b/packages/utils/tests/tsconfig.json new file mode 100644 index 000000000..45c85f4ea --- /dev/null +++ b/packages/utils/tests/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "tsconfig/test.json" +} diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json index 6cc7ea9b5..6b7962de0 100644 --- a/packages/utils/tsconfig.json +++ b/packages/utils/tsconfig.json @@ -1,8 +1,3 @@ { - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist" - }, - "include": ["./src/**/*.ts", "./src/**/*.tsx"], - "exclude": ["node_modules", "dist", "test", "tests"] + "extends": "tsconfig/base.json" } diff --git a/packages/utils/tsconfig.test.json b/packages/utils/tsconfig.test.json deleted file mode 100644 index c4916d55a..000000000 --- a/packages/utils/tsconfig.test.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": ["tests"], - "exclude": ["node_modules", "dist", "src"] -} diff --git a/scripts/checkCpuModel.js b/scripts/checkCpuModel.js index 3126c773c..8557387b6 100644 --- a/scripts/checkCpuModel.js +++ b/scripts/checkCpuModel.js @@ -3,7 +3,7 @@ import os from 'node:os' const hostCpu = os.cpus()[0].model.trim() const targetCpu = await fetch('https://raw.githubusercontent.com/discordeno/discordeno/benchies/cpu') - .then((res) => res.text()) + .then(async (res) => await res.text()) .then((text) => text.slice(0, -1)) console.dir(`host cpu: ${hostCpu} target cpu: ${targetCpu}`) diff --git a/scripts/finalizeTypedocs.js b/scripts/finalizeTypedocs.js index 3bc29600e..0d7ccffd6 100644 --- a/scripts/finalizeTypedocs.js +++ b/scripts/finalizeTypedocs.js @@ -5,7 +5,7 @@ import fs from 'node:fs' import path from 'node:path' // these two paths may vary depending on where you place this script, and your project structure including where typedoc generates its output files. -const typedocOutPath = await import('../typedoc.json', { assert: { type: 'json' } }).then((module) => module.default.out) +const typedocOutPath = await import('../typedoc.json', { with: { type: 'json' } }).then((module) => module.default.out) async function* walk(dir) { for await (const d of await fs.promises.opendir(dir)) { diff --git a/scripts/openApiSchema.js b/scripts/openApiSchema.js index af408133f..23e29f8eb 100644 --- a/scripts/openApiSchema.js +++ b/scripts/openApiSchema.js @@ -1,10 +1,13 @@ +/* eslint-disable @typescript-eslint/explicit-function-return-type */ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ + import fs from 'fs' // TODO: replace with fetch of live spec const DISCORD_SPEC = {} function schemaRefToName(ref) { - if (!ref) return "" + if (!ref) return '' return `Discord${ref?.substring(ref.lastIndexOf('/') + 1)}` } @@ -60,12 +63,12 @@ function generateFromSpec() { type === 'integer' ? 'number' : type === 'array' - ? property.items.$ref - ? `${schemaRefToName(property.items.$ref)}[]` - : Array.isArray(property.items.oneOf) - ? `${property.items.oneOf.map((o) => `${schemaRefToName(o.$ref)}[]`).join(' | ')}` - : `unknown[]` - : type, + ? property.items.$ref + ? `${schemaRefToName(property.items.$ref)}[]` + : Array.isArray(property.items.oneOf) + ? `${property.items.oneOf.map((o) => `${schemaRefToName(o.$ref)}[]`).join(' | ')}` + : `unknown[]` + : type, ) .join(' | ') ?? property.oneOf diff --git a/tsconfig.json b/tsconfig.json index 2323e160e..8ff23b94d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,4 @@ { "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist" - }, - "include": ["."], - "exclude": ["dist", "build", "node_modules"] + "include": ["."] } diff --git a/turbo.json b/turbo.json index a712ff0fe..66a1d116d 100644 --- a/turbo.json +++ b/turbo.json @@ -33,12 +33,8 @@ "outputs": ["denoTestsDist/**"] }, "test:bun-unit": { - "dependsOn": [ - "^build" - ], - "outputs": [ - "bunTestsDist/**" - ] + "dependsOn": ["^build"], + "outputs": ["bunTestsDist/**"] }, "test:e2e": { "dependsOn": ["^build"], diff --git a/website/.prettierrc b/website/.prettierrc index d4ab7c38f..759232e7c 100644 --- a/website/.prettierrc +++ b/website/.prettierrc @@ -1,5 +1,5 @@ { - "semi": false, + "semi": false, "singleQuote": true, - "arrowParens": "avoid" + "arrowParens": "avoid" } diff --git a/website/docs/architecture.mdx b/website/docs/architecture.mdx index e3745e4c9..2042cf7ef 100644 --- a/website/docs/architecture.mdx +++ b/website/docs/architecture.mdx @@ -1,25 +1,24 @@ --- sidebar_position: 2 --- -import BrowserOnly from '@docusaurus/BrowserOnly'; + +import BrowserOnly from '@docusaurus/BrowserOnly' # Architecture + ## Overview import FlowChart from '@site/src/components/architecture/FlowChart' - - {() => } - +{() => } Discordeno have three main components/process, gateway, bot and rest. Websocket events from Discord, such as connecting, restarting, heartbeating, and transmitting websocket messages to Discord, are handled and maintained by the Gateway process. All Discord events are handled and converted by the Bot process, which also activates your code, such as the execute function upon message creation. All http requests to Discord, including proxying and ratelimiting, are handled by the Rest process. ## Gateway Process + import FlowChart2 from '@site/src/components/architecture/FlowChart2' - - {() => } - +{() => } The Gateway process have two part the gateway manager and the gateway [shard](https://discord.com/developers/docs/topics/gateway#sharding), the gateway manager oversees the gateway shard. @@ -32,10 +31,15 @@ The gateway manager spawns the right amount of shard acording to data from disco Any event is passed to the handleMessage method by the gateway shard, which also establishes a websocket connection to Discord. The handleMessage method will examine the event and only deliver genuine events to the bot by intercepting and processing websocket-related events like hello, resume, heartbeat, and ready. You can modify the handleMessage to suit your needs, but it is not advised unless you are certain of your actions because the connection depends on it. After the function has finished processing the event, it will either pass the event directly (in the same process), via the rest api, a message queue, or another mechanism depending on the user's customization. ## Bot Process + import FlowChart3 from '@site/src/components/architecture/FlowChart3' - {() => handler.startsWith('handleChannel')}/>} + {() => ( + handler.startsWith('handleChannel')} + /> + )} A simplified version of function used inside of the bot process, showing only the handlers, transformers and event related to channel event @@ -46,4 +50,4 @@ When an event arrives from the gateway, the bot process receives it and passes i ## Rest Process -TBC \ No newline at end of file +TBC diff --git a/website/old_docs/benchmark.mdx b/website/old_docs/benchmark.mdx index 72f7484aa..83c9382f8 100644 --- a/website/old_docs/benchmark.mdx +++ b/website/old_docs/benchmark.mdx @@ -9,4 +9,3 @@ Benchmark runs on every commit pushed on the Discordeno's main branch import Benchmark from '@site/src/components/Benchmark' - diff --git a/website/src/components/bigbotguide/GatewayFlowChart.tsx b/website/src/components/bigbotguide/GatewayFlowChart.tsx index 17ec411b6..5b32fb2e8 100644 --- a/website/src/components/bigbotguide/GatewayFlowChart.tsx +++ b/website/src/components/bigbotguide/GatewayFlowChart.tsx @@ -1,8 +1,8 @@ import ReactFlow, { Background, Controls, - Edge, - Node, + type Edge, + type Node, Position, } from 'reactflow' import 'reactflow/dist/style.css' @@ -15,7 +15,7 @@ export const defaultNodeOptions = { } const genServer = (x: number, id: number) => { - const server: Node[] = [ + const server: Array> = [ { id: `s${id + 1}`, data: { label: `Server ${id + 1}` }, @@ -24,7 +24,7 @@ const genServer = (x: number, id: number) => { ] for (let i = 0; i < 4; i++) { - if (i == 2) { + if (i === 2) { server.push( { id: `baseLineNodeText-${id}-${i}`, @@ -48,17 +48,17 @@ const genServer = (x: number, id: number) => { server.push( ...[ { - id: `w${id * 50 + (i == 3 ? 49 : i) + 1}`, - data: { label: `Worker ${id * 50 + (i == 3 ? 49 : i)}` }, + id: `w${id * 50 + (i === 3 ? 49 : i) + 1}`, + data: { label: `Worker ${id * 50 + (i === 3 ? 49 : i)}` }, position: { x: x - 112.5 + 75 * i, y: 200 }, ...defaultNodeOptions, ...{ style: { ...defaultNodeOptions.style, padding: '5px 10px' } }, }, { - id: `w${id * 50 + (i == 3 ? 49 : i) + 1}s`, + id: `w${id * 50 + (i === 3 ? 49 : i) + 1}s`, data: { - label: `Shard ${id * 500 + (i == 3 ? 49 : i) * 10}-${ - id * 500 + (i == 3 ? 49 : i) * 10 + 9 + label: `Shard ${id * 500 + (i === 3 ? 49 : i) * 10}-${ + id * 500 + (i === 3 ? 49 : i) * 10 + 9 }`, }, position: { x: x - 112.5 + 75 * i, y: 300 }, @@ -67,10 +67,10 @@ const genServer = (x: number, id: number) => { ...{ style: { ...defaultNodeOptions.style, - ...(id == 1 || (id == 0 && i == 3) + ...(id === 1 || (id === 0 && i === 3) ? { padding: '5px 10px' } : { padding: `5px 5px` }), - ...(id == 0 && i != 3 ? { padding: '5px 15px' } : {}), + ...(id === 0 && i !== 3 ? { padding: '5px 15px' } : {}), }, }, }, @@ -101,7 +101,7 @@ const nodes = [ }, ] -const edges: Edge[] = [ +const edges: Array> = [ { id: 'gwm-s1', source: 'gwm', target: 's1', type: 'step' }, { id: 'gwm-s2', source: 'gwm', target: 's2', type: 'step' }, { id: 'gwm-s10', source: 'gwm', target: 's10', type: 'step' }, diff --git a/yarn.lock b/yarn.lock index 6dca02597..62518edfe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -50,7 +50,7 @@ __metadata: sinon: "npm:^17.0.1" ts-node: "npm:^10.9.2" tsconfig: "npm:*" - typescript: "npm:5.4.5" + typescript: "npm:^5.5.2" languageName: unknown linkType: soft @@ -75,7 +75,7 @@ __metadata: sinon: "npm:^17.0.1" ts-node: "npm:^10.9.2" tsconfig: "npm:*" - typescript: "npm:5.4.5" + typescript: "npm:^5.5.2" uWebSockets.js: "https://github.com/uNetworking/uWebSockets.js.git#commit=42c9c0d5d31f46ca4115dc75672b0037ec970f28" ws: "npm:^8.18.0" languageName: unknown @@ -104,8 +104,7 @@ __metadata: sinon: "npm:^17.0.1" ts-node: "npm:^10.9.2" tsconfig: "npm:*" - typescript: "npm:5.4.5" - why-is-node-running: "npm:^2.2.2" + typescript: "npm:^5.5.2" languageName: unknown linkType: soft @@ -115,18 +114,15 @@ __metadata: dependencies: "@swc/cli": "npm:^0.3.9" "@swc/core": "npm:^1.4.2" - "@types/chai": "npm:^4.3.11" "@types/mocha": "npm:^10.0.7" "@types/node": "npm:^20.11.25" - "@types/sinon": "npm:^17.0.3" c8: "npm:^9.1.0" - chai: "npm:^5.1.1" eslint: "npm:^8.57.0" eslint-config-discordeno: "npm:*" mocha: "npm:^10.5.1" ts-node: "npm:^10.9.2" tsconfig: "npm:*" - typescript: "npm:5.4.5" + typescript: "npm:^5.5.2" languageName: unknown linkType: soft @@ -149,8 +145,7 @@ __metadata: sinon: "npm:^17.0.1" ts-node: "npm:^10.9.2" tsconfig: "npm:*" - tweetnacl: "npm:^1.0.3" - typescript: "npm:5.4.5" + typescript: "npm:^5.5.2" languageName: unknown linkType: soft @@ -717,6 +712,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^20.14.7": + version: 20.14.7 + resolution: "@types/node@npm:20.14.7" + dependencies: + undici-types: "npm:~5.26.4" + checksum: f2cb458126a136719d9da6febdbc7afc9bb622047a30c5e6163db4206ff8c8002ec56b340d722fe1ad6280ebe7a505e0a5a10a39a3b5718837200201b94d5d07 + languageName: node + linkType: hard + "@types/responselike@npm:^1.0.0": version: 1.0.0 resolution: "@types/responselike@npm:1.0.0" @@ -1310,9 +1314,9 @@ __metadata: languageName: node linkType: hard -"benchmark@workspace:packages/benchmark": +"benchmarks@workspace:packages/benchmarks": version: 0.0.0-use.local - resolution: "benchmark@workspace:packages/benchmark" + resolution: "benchmarks@workspace:packages/benchmarks" dependencies: "@discordeno/bot": "npm:19.0.0-beta.1" "@discordeno/gateway": "npm:19.0.0-alpha.1" @@ -1322,15 +1326,13 @@ __metadata: "@swc/cli": "npm:^0.3.9" "@swc/core": "npm:^1.4.2" "@types/benchmark": "npm:^2.1.5" - "@types/node": "npm:^20.11.25" + "@types/node": "npm:^20.14.7" benchmark: "npm:^2.1.4" eslint: "npm:^8.57.0" eslint-config-discordeno: "npm:*" - microtime: "npm:^3.1.1" - node-fetch: "npm:^3.3.2" ts-node: "npm:^10.9.2" tsconfig: "npm:*" - typescript: "npm:5.4.5" + typescript: "npm:^5.5.2" languageName: unknown linkType: soft @@ -1869,13 +1871,6 @@ __metadata: languageName: node linkType: hard -"data-uri-to-buffer@npm:^4.0.0": - version: 4.0.1 - resolution: "data-uri-to-buffer@npm:4.0.1" - checksum: 0d0790b67ffec5302f204c2ccca4494f70b4e2d940fea3d36b09f0bb2b8539c2e86690429eb1f1dc4bcc9e4df0644193073e63d9ee48ac9fce79ec1506e4aa4c - languageName: node - linkType: hard - "debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" @@ -2069,9 +2064,9 @@ __metadata: lint-staged: "npm:^15.2.7" prettier: "npm:^3.2.5" turbo: "npm:^1.11.3" - typedoc: "npm:0.25.11" + typedoc: "npm:^0.25.13" typedoc-plugin-markdown: "npm:3.17.1" - typescript: "npm:5.4.5" + typescript: "npm:^5.5.2" languageName: unknown linkType: soft @@ -2099,7 +2094,7 @@ __metadata: sinon: "npm:^17.0.1" ts-node: "npm:^10.9.2" tsconfig: "npm:*" - typescript: "npm:5.4.5" + typescript: "npm:^5.5.2" bin: discordeno: ./bin/disocrdeno.js languageName: unknown @@ -2306,7 +2301,7 @@ __metadata: eslint-plugin-promise: "npm:^6.1.1" eslint-plugin-require-extensions: "npm:^0.1.3" prettier: "npm:^3.2.5" - typescript: "npm:5.4.5" + typescript: "npm:^5.5.2" languageName: unknown linkType: soft @@ -2751,16 +2746,6 @@ __metadata: languageName: node linkType: hard -"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": - version: 3.2.0 - resolution: "fetch-blob@npm:3.2.0" - dependencies: - node-domexception: "npm:^1.0.0" - web-streams-polyfill: "npm:^3.0.3" - checksum: 5264ecceb5fdc19eb51d1d0359921f12730941e333019e673e71eb73921146dceabcb0b8f534582be4497312d656508a439ad0f5edeec2b29ab2e10c72a1f86b - languageName: node - linkType: hard - "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -2881,15 +2866,6 @@ __metadata: languageName: node linkType: hard -"formdata-polyfill@npm:^4.0.10": - version: 4.0.10 - resolution: "formdata-polyfill@npm:4.0.10" - dependencies: - fetch-blob: "npm:^3.1.2" - checksum: 9b5001d2edef3c9449ac3f48bd4f8cc92e7d0f2e7c1a5c8ba555ad4e77535cc5cf621fabe49e97f304067037282dd9093b9160a3cb533e46420b446c4e6bc06f - languageName: node - linkType: hard - "fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -4172,17 +4148,6 @@ __metadata: languageName: node linkType: hard -"microtime@npm:^3.1.1": - version: 3.1.1 - resolution: "microtime@npm:3.1.1" - dependencies: - node-addon-api: "npm:^5.0.0" - node-gyp: "npm:latest" - node-gyp-build: "npm:^4.4.0" - checksum: 62c29ac611a10e5ce9696c6f1167ba9f7b7955db166828fafccec16f3b8121b358a5066dec160ae7c54187c85ef75253df589e44454685f1aaff4d85cb3a4e53 - languageName: node - linkType: hard - "mime-db@npm:^1.28.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -4455,33 +4420,6 @@ __metadata: languageName: node linkType: hard -"node-addon-api@npm:^5.0.0": - version: 5.1.0 - resolution: "node-addon-api@npm:5.1.0" - dependencies: - node-gyp: "npm:latest" - checksum: 595f59ffb4630564f587c502119cbd980d302e482781021f3b479f5fc7e41cf8f2f7280fdc2795f32d148e4f3259bd15043c52d4a3442796aa6f1ae97b959636 - languageName: node - linkType: hard - -"node-domexception@npm:^1.0.0": - version: 1.0.0 - resolution: "node-domexception@npm:1.0.0" - checksum: e332522f242348c511640c25a6fc7da4f30e09e580c70c6b13cb0be83c78c3e71c8d4665af2527e869fc96848924a4316ae7ec9014c091e2156f41739d4fa233 - languageName: node - linkType: hard - -"node-fetch@npm:^3.3.2": - version: 3.3.2 - resolution: "node-fetch@npm:3.3.2" - dependencies: - data-uri-to-buffer: "npm:^4.0.0" - fetch-blob: "npm:^3.1.4" - formdata-polyfill: "npm:^4.0.10" - checksum: 24207ca8c81231c7c59151840e3fded461d67a31cf3e3b3968e12201a42f89ce4a0b5fb7079b1fa0a4655957b1ca9257553200f03a9f668b45ebad265ca5593d - languageName: node - linkType: hard - "node-gyp-build@npm:^4.2.2": version: 4.8.0 resolution: "node-gyp-build@npm:4.8.0" @@ -4493,17 +4431,6 @@ __metadata: languageName: node linkType: hard -"node-gyp-build@npm:^4.4.0": - version: 4.6.0 - resolution: "node-gyp-build@npm:4.6.0" - bin: - node-gyp-build: bin.js - node-gyp-build-optional: optional.js - node-gyp-build-test: build-test.js - checksum: c8b57abe5e6e4a28dce450e3c0136bcce88d15602c33f1258ed9c9a52f156d34a00dd8864271b2f2acfd6ef4de0af3e75e5e76e771c4bc4f38dd0ee06ad178d8 - languageName: node - linkType: hard - "node-gyp@npm:latest": version: 9.3.1 resolution: "node-gyp@npm:9.3.1" @@ -5366,13 +5293,6 @@ __metadata: languageName: node linkType: hard -"siginfo@npm:^2.0.0": - version: 2.0.0 - resolution: "siginfo@npm:2.0.0" - checksum: e93ff66c6531a079af8fb217240df01f980155b5dc408d2d7bebc398dd284e383eb318153bf8acd4db3c4fe799aa5b9a641e38b0ba3b1975700b1c89547ea4e7 - languageName: node - linkType: hard - "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -5497,13 +5417,6 @@ __metadata: languageName: node linkType: hard -"stackback@npm:0.0.2": - version: 0.0.2 - resolution: "stackback@npm:0.0.2" - checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 - languageName: node - linkType: hard - "string-argv@npm:~0.3.2": version: 0.3.2 resolution: "string-argv@npm:0.3.2" @@ -5919,13 +5832,6 @@ __metadata: languageName: node linkType: hard -"tweetnacl@npm:^1.0.3": - version: 1.0.3 - resolution: "tweetnacl@npm:1.0.3" - checksum: ca122c2f86631f3c0f6d28efb44af2a301d4a557a62a3e2460286b08e97567b258c2212e4ad1cfa22bd6a57edcdc54ba76ebe946847450ab0999e6d48ccae332 - languageName: node - linkType: hard - "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -6014,39 +5920,39 @@ __metadata: languageName: node linkType: hard -"typedoc@npm:0.25.11": - version: 0.25.11 - resolution: "typedoc@npm:0.25.11" +"typedoc@npm:^0.25.13": + version: 0.25.13 + resolution: "typedoc@npm:0.25.13" dependencies: lunr: "npm:^2.3.9" marked: "npm:^4.3.0" minimatch: "npm:^9.0.3" shiki: "npm:^0.14.7" peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x bin: typedoc: bin/typedoc - checksum: ec1f617c16b5fca455853c329a9958fe41b247d0c1a72dc153654fd5ce323f2ccdfd10ef1f3349d340398e3770a036381d856b90fda4aafe554640b53f5b2a1c + checksum: 3c82603894b5830c4b027b4f4f9ca70f770b6752c6512a42e780c40cb67fe4c9a144e34a837bb35aab14a125e00a5893e1e6feac1ec86a2add80f46833b279d4 languageName: node linkType: hard -"typescript@npm:5.4.5": - version: 5.4.5 - resolution: "typescript@npm:5.4.5" +"typescript@npm:^5.5.2": + version: 5.5.2 + resolution: "typescript@npm:5.5.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: d04a9e27e6d83861f2126665aa8d84847e8ebabcea9125b9ebc30370b98cb38b5dff2508d74e2326a744938191a83a69aa9fddab41f193ffa43eabfdf3f190a5 + checksum: 9118b20f248e76b0dbff8737fef65dfa89d02668d4e633d2c5ceac99033a0ca5e8a1c1a53bc94da68e8f67677a88f318663dde859c9e9a09c1e116415daec2ba languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.4.5#optional!builtin": - version: 5.4.5 - resolution: "typescript@patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=e012d7" +"typescript@patch:typescript@npm%3A^5.5.2#optional!builtin": + version: 5.5.2 + resolution: "typescript@patch:typescript@npm%3A5.5.2#optional!builtin::version=5.5.2&hash=e012d7" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 584be8bac7112ad49a9eb9992f71d542b1ff2fafb5bb315e1c196145e8feab589f1d7223cfb2d5df6770789582e6918f8287d1f2f89911b38eb80e29c560ad00 + checksum: 28b3de2ddaf63a7620e7ddbe5d377af71ce93ecc558c41bf0e3d88661d8e6e7aa6c7739164fef98055f69819e41faca49252938ef3633a3dff2734cca6a9042e languageName: node linkType: hard @@ -6158,13 +6064,6 @@ __metadata: languageName: node linkType: hard -"web-streams-polyfill@npm:^3.0.3": - version: 3.2.1 - resolution: "web-streams-polyfill@npm:3.2.1" - checksum: 08fcf97b7883c1511dd3da794f50e9bde75a660884783baaddb2163643c21a94086f394dc4bd20dff0f55c98d98d60c4bea05a5809ef5005bdf835b63ada8900 - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" @@ -6220,18 +6119,6 @@ __metadata: languageName: node linkType: hard -"why-is-node-running@npm:^2.2.2": - version: 2.2.2 - resolution: "why-is-node-running@npm:2.2.2" - dependencies: - siginfo: "npm:^2.0.0" - stackback: "npm:0.0.2" - bin: - why-is-node-running: cli.js - checksum: f3582e0337f4b25537d492b1d40f00b978ce04b1d1eeea8f310bfa8aae8a7d11d118d672e2f0760c164ce3753a620a70aa29ff3620e340197624940cf9c08615 - languageName: node - linkType: hard - "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5"