benchmark test (#2830)

* ci: test

* ci: add script

* ci: change to js

* ci: test

* ci: fix error

* ci: fix script

* chore: add benchmark

* ci: fix need input

* fix: read file with dir

* ci: change push to trigger on main only

* ci: try new method

* ci: fix "true"

* chore: fix set output

* fix: set output

* ci: increase number of try

* chore: clean up dir

* fix needs

* bench: add memory bench

* bench: import memory bench

* bench: fix v19 syntax

* bench: more fix

* bench: add filter

* bench: minor fix

* ci: read file in sync

* chore: yarn install

* chore: add db to ignore

* refactor(bench): use loader

* bench: only bench on one event

* bench: add type to db event

* chore(bench): better type

* bench: add rest simplifyUrl bench

* chore: add microtime

* refactor: add fall back

* Revert "ci: change push to trigger on main only"

This reverts commit 04df971025.

* chore: yarn install

* ci: trigger push event only on main branch

* chore(bench): use node-fetch

* refactor(bench): make it work with other function and event

* chore(bench): better name
This commit is contained in:
Jonathan Ho
2023-03-31 07:57:53 +00:00
committed by GitHub
parent 2578beaca7
commit aba7de6e3b
16 changed files with 834 additions and 14 deletions
+51
View File
@@ -0,0 +1,51 @@
name: Benchmark
on:
workflow_call:
outputs:
cpuMatch:
value: ${{ jobs.benchmark.outputs.cpuMatch }}
jobs:
benchmark:
name: Benchmark
runs-on: ubuntu-latest
outputs:
cpuMatch: ${{ steps.cpuCheck.outputs.match }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- name: Check cpu model
id: cpuCheck
run: node ./scripts/checkCpuModel.js
- name: Get yarn cache directory path
if: ${{ steps.cpuCheck.outputs.match == 'true' }}
id: yarn-cache-dir-path
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
if: ${{ steps.cpuCheck.outputs.match == 'true' }}
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- run: yarn install --immutable
if: ${{ steps.cpuCheck.outputs.match == 'true' }}
- name: Build
if: ${{ steps.cpuCheck.outputs.match == 'true' }}
run: yarn build
#
- name: Download db from benchmark repo
if: ${{ steps.cpuCheck.outputs.match == 'true' }}
run: wget https://github.com/discordeno/benchmarks/raw/main/db.tar.gz
- name: Decompress db
if: ${{ steps.cpuCheck.outputs.match == 'true' }}
run: tar -xzvf db.tar.gz
- name: Benchmark
if: ${{ steps.cpuCheck.outputs.match == 'true' }}
run: node --expose-gc ./packages/benchmark/dist/index.js
+56
View File
@@ -0,0 +1,56 @@
name: Benchmark with retry
on:
pull_request:
push:
branches:
- main
jobs:
benchmark-try-1:
uses: ./.github/workflows/benchmark.yml
benchmark-try-2:
needs: benchmark-try-1
if: ${{ needs.benchmark-try-1.outputs.cpuMatch == 'false' }}
uses: ./.github/workflows/benchmark.yml
benchmark-try-3:
needs: benchmark-try-2
if: ${{ needs.benchmark-try-2.outputs.cpuMatch == 'false' }}
uses: ./.github/workflows/benchmark.yml
benchmark-try-4:
needs: benchmark-try-3
if: ${{ needs.benchmark-try-3.outputs.cpuMatch == 'false' }}
uses: ./.github/workflows/benchmark.yml
benchmark-try-5:
needs: benchmark-try-4
if: ${{ needs.benchmark-try-4.outputs.cpuMatch == 'false' }}
uses: ./.github/workflows/benchmark.yml
benchmark-try-6:
needs: benchmark-try-5
if: ${{ needs.benchmark-try-5.outputs.cpuMatch == 'false' }}
uses: ./.github/workflows/benchmark.yml
benchmark-try-7:
needs: benchmark-try-6
if: ${{ needs.benchmark-try-6.outputs.cpuMatch == 'false' }}
uses: ./.github/workflows/benchmark.yml
benchmark-try-8:
needs: benchmark-try-7
if: ${{ needs.benchmark-try-7.outputs.cpuMatch == 'false' }}
uses: ./.github/workflows/benchmark.yml
benchmark-try-9:
needs: benchmark-try-8
if: ${{ needs.benchmark-try-8.outputs.cpuMatch == 'false' }}
uses: ./.github/workflows/benchmark.yml
benchmark-try-10:
needs: benchmark-try-9
if: ${{ needs.benchmark-try-9.outputs.cpuMatch == 'false' }}
uses: ./.github/workflows/benchmark.yml
+1
View File
@@ -33,6 +33,7 @@ out
build build
.docusaurus .docusaurus
.cache-loader .cache-loader
/db
# misc # misc
.DS_Store .DS_Store
+24
View File
@@ -0,0 +1,24 @@
{
"jsc": {
"parser": {
"syntax": "typescript",
"decorators": true,
"dynamicImport": true
},
"transform": {
"legacyDecorator": true,
"decoratorMetadata": true
},
"target": "es2022",
"keepClassNames": true,
"loose": true
},
"module": {
"type": "es6",
"strict": false,
"strictMode": true,
"lazy": false,
"noInterop": false
},
"sourceMaps": true
}
+41
View File
@@ -0,0 +1,41 @@
{
"name": "benchmark",
"version": "0.0.0",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"type": "module",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "https://github.com/discordeno/discordeno.git"
},
"scripts": {
"build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist",
"release-build": "yarn build && yarn build:type",
"fmt": "eslint --fix \"src/**/*.ts*\"",
"lint": "eslint \"src/**/*.ts*\"",
"build": "swc src --delete-dir-on-start --out-dir dist && node ../../scripts/fixBenchExtension.js",
"bench": "node dist/index.js"
},
"dependencies": {
"@discordeno/bot": "latest",
"@discordeno/gateway": "19.0.0-alpha.1",
"@discordeno/rest": "19.0.0-alpha.1",
"@discordeno/types": "19.0.0-alpha.1",
"@discordeno/utils": "19.0.0-alpha.1",
"benchmark": "^2.1.4",
"microtime": "^3.1.1",
"node-fetch": "^3.3.1"
},
"devDependencies": {
"@swc/cli": "^0.1.57",
"@swc/core": "^1.3.21",
"@types/benchmark": "^2",
"@types/node": "^18.11.9",
"eslint": "^8.0.1",
"eslint-config-discordeno": "*",
"ts-node": "^10.9.1",
"tsconfig": "*",
"typescript": "^4.9.3"
}
}
+3
View File
@@ -0,0 +1,3 @@
import Benchmark from 'benchmark'
export const suite = new Benchmark.Suite()
@@ -0,0 +1,17 @@
import { camelize, snakelize } from '@discordeno/utils'
import { suite } from '../benchmarkSuite.js'
import { events } from '../utils/db.js'
const camelizedEvents: any[] = []
events.forEach((event) => {
camelizedEvents.push(camelize(event))
})
suite.add(`Camelize 1 event`, () => {
snakelize(events[1])
})
suite.add(`Snakelize 1 event`, () => {
snakelize(camelizedEvents[1])
})
@@ -0,0 +1,37 @@
import { createBot, type Bot } from '@discordeno/bot'
import { events as dbEvents } from '../utils/db.js'
import { memoryBenchmark } from '../utils/memoryBenchmark.js'
/* Example Usage
deno run --v8-flags="--expose-gc" -A .\index.ts
*/
/*
import { createBot } from "https://deno.land/x/discordeno@17.1.0/mod.ts";
import { enableCachePlugin } from "https://deno.land/x/discordeno@17.1.0/plugins/mod.ts";
memoryBenchmark(() => enableCachePlugin(createBot({
token: " ",
botId: 0n,
})))
*/
const enableCachePlugin = (bot: Bot): Bot => bot
await memoryBenchmark(
'[Cache Plugin]',
() =>
enableCachePlugin(
createBot({
token: ' ',
events: {},
}),
),
(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, {})
},
dbEvents.filter((event) => event.payload.t),
)
+19
View File
@@ -0,0 +1,19 @@
import { createRestManager } from '@discordeno/rest'
import { suite } from '../benchmarkSuite.js'
const rest = createRestManager({ token: ' ' })
suite.add(`rest.simplifyUrl`, () => {
rest.simplifyUrl('/messages/555555555555555555', 'PUT')
rest.simplifyUrl('/users/555555555555555555', 'PUT')
rest.simplifyUrl('/webhooks/555555555555555555', 'PUT')
rest.simplifyUrl('/channel/555555555555555555', 'PUT')
rest.simplifyUrl('/guild/555555555555555555', 'PUT')
rest.simplifyUrl('/channels/555555555555555555', 'PUT')
rest.simplifyUrl('/guilds/555555555555555555', 'PUT')
rest.simplifyUrl('/channels/555555555555555555/reactions/555555555555555555/wdiubaibfwuabfobaowbfoibnion', 'PUT')
rest.simplifyUrl('/channels/555555555555555555/messages/555555555555555555', 'DELETE')
rest.simplifyUrl('/channels/555555555555555555/messages/555555555555555555', 'POST')
rest.simplifyUrl('/channels/555555555555555555/messages/555555555555555555', 'GET')
rest.simplifyUrl('/channels/555555555555555555/messages/555555555555555555', 'PUT')
})
+12
View File
@@ -0,0 +1,12 @@
import fs from 'node:fs/promises'
import { suite } from './benchmarkSuite.js'
const benchmarks = await fs.readdir('packages/benchmark/dist/benchmarks').then((files) => files.filter((file) => file.endsWith('.js')))
await Promise.all(benchmarks.map(async (file) => await import(`./benchmarks/${file}`)))
suite
.on('cycle', function (event: any) {
console.log(String(event.target))
})
.run()
+33
View File
@@ -0,0 +1,33 @@
import type { DiscordGatewayPayload } from '@discordeno/types'
import fetch from 'node-fetch'
import fs from 'node:fs/promises'
export const events: Array<{
shardId: number
payload: DiscordGatewayPayload
}> = []
try {
const files = await fs.readdir('db/events')
for await (const file of files) {
const eventsInFile: Array<
| {
shardId: number
payload: DiscordGatewayPayload
}
| string
> = Object.values(await fs.readFile(`db/events/${file}`, 'utf8').then((text) => JSON.parse(text)))
eventsInFile.forEach((eventInFile) => {
if (typeof eventInFile === 'string') return
events.push(eventInFile)
})
}
} catch {
const event = await fetch('https://raw.githubusercontent.com/discordeno/benchmarks/main/db/events/10.json')
.then(async (res) => await res.json())
.then((eventsInFile: any) => eventsInFile['0'])
for (let i = 0; i < 10; i++) {
events.push(event)
}
}
@@ -0,0 +1,157 @@
export async function memoryBenchmark<O, E>(
name: string,
objectCreator: () => O,
objectFeeder: (object: O, event: E) => void,
events: E[],
options: { times: number; log: boolean; table: boolean } = {
times: 3,
log: false,
table: false,
},
): Promise<void> {
const garbageCollect = global.gc ?? (() => {})
const stages = ['start', 'loaded', 'end', 'cached'] as const
const typesOfMemUsages = ['rss', 'heapUsed', 'heapTotal'] as const
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
async function runTest(object: O) {
// Determine memory stats now before touching anything
const results: {
start: NodeJS.MemoryUsage
loaded?: NodeJS.MemoryUsage
end?: NodeJS.MemoryUsage
cached?: NodeJS.MemoryUsage
} = {
start: process.memoryUsage(),
}
garbageCollect()
results.start = process.memoryUsage()
if (options.log) console.log(`[INFO] Loading json files.`)
if (options.log) {
console.log(`[INFO] DB files loaded into memory.`, events.length)
}
// Set the memory stats for when files are loaded in.
results.loaded = process.memoryUsage()
events.forEach((event) => {
objectFeeder(object, event)
})
if (options.log) {
console.log(`[INFO] Processed ${events.length} events.`)
}
// Set results for data once all events are processed
results.end = process.memoryUsage()
// @ts-expect-error init the object
results.cached = {}
for (const typeOfMemUsage of typesOfMemUsages) {
results.cached![typeOfMemUsage] = results.end[typeOfMemUsage] - results.loaded[typeOfMemUsage]
}
return results
}
const allResults = {
start: {
rss: [] as number[],
heapUsed: [] as number[],
heapTotal: [] as number[],
},
loaded: {
rss: [] as number[],
heapUsed: [] as number[],
heapTotal: [] as number[],
},
end: {
rss: [] as number[],
heapUsed: [] as number[],
heapTotal: [] as number[],
},
cached: {
rss: [] as number[],
heapUsed: [] as number[],
heapTotal: [] as number[],
},
}
const BYTES = 1000000
for (let index = 0; index < options.times; index++) {
if (options.log) console.log('running the', index + 1, 'time')
const currentResult = await runTest(objectCreator())
for (const typeOfMemUsage of typesOfMemUsages) {
for (const stage of stages) {
allResults[stage][typeOfMemUsage].push(currentResult[stage]![typeOfMemUsage])
}
}
}
type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends ReadonlyArray<infer ElementType> ? ElementType : never
const tableRows = ['Starting', 'Loaded', 'End', 'Cached'] as const
const tableFields = ['RSS', 'Heap Used', 'Heap Total'] as const
const preprocessedResults: {
[K in ArrayElement<typeof tableRows>]?: {
[K in ArrayElement<typeof tableFields>]?: {
value: number
min: number
max: number
}
}
} = {}
for (const [index, tableRow] of tableRows.entries()) {
for (const [index2, tableField] of tableFields.entries()) {
if (index2 === 0) preprocessedResults[tableRow] = {}
preprocessedResults[tableRow]![tableField] = {
value:
Math.round(
(allResults[stages[index]][typesOfMemUsages[index2]].reduce((acc, c) => acc + c, 0) / allResults.start.rss.length / BYTES) * 100,
) / 100,
min: Math.round((Math.min(...allResults[stages[index]][typesOfMemUsages[index2]]) / BYTES) * 100) / 100,
max: Math.round((Math.max(...allResults[stages[index]][typesOfMemUsages[index2]]) / BYTES) * 100) / 100,
}
}
}
const processedResults = preprocessedResults as {
[K in ArrayElement<typeof tableRows>]: {
[K in ArrayElement<typeof tableFields>]: {
value: number
min: number
max: number
}
}
}
const humanReadable: {
[K in ArrayElement<typeof tableRows>]?: {
[K in ArrayElement<typeof tableFields>]?: string
}
} = {}
for (const tableRow of tableRows) {
for (const [index, tableField] of tableFields.entries()) {
if (index === 0) humanReadable[tableRow] = {}
humanReadable[tableRow]![
tableField
] = `${processedResults[tableRow][tableField].value} MB (${processedResults[tableRow][tableField].min} MB … ${processedResults[tableRow][tableField].max} MB)`
}
}
if (options.table) console.table(humanReadable)
for (const resultKey of Object.keys(processedResults.Cached) as Array<keyof typeof processedResults.Cached>) {
const range = Math.max(
Math.round((processedResults.Cached[resultKey].min / processedResults.Cached[resultKey].value) * 100) / 100,
Math.round((processedResults.Cached[resultKey].max / processedResults.Cached[resultKey].value) * 100) / 100,
)
console.log(`${name} ${resultKey.toString()} x ${processedResults.Cached[resultKey].value} MB ±${isFinite(range) ? range : 0}% (3 runs sampled)`)
}
}
+16
View File
@@ -0,0 +1,16 @@
{
"extends": "tsconfig/base.json",
"compilerOptions": {
"outDir": "./dist",
},
"include": [
"./src/**/*.ts",
"./src/**/*.tsx"
],
"exclude": [
"node_modules",
"dist",
"test",
"tests"
]
}
+12
View File
@@ -0,0 +1,12 @@
import fs from 'node:fs'
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((text) => text.slice(0, -1))
console.dir(`host cpu: ${hostCpu} target cpu: ${targetCpu}`)
let outputFile = fs.readFileSync(process.env.GITHUB_OUTPUT, 'utf8')
outputFile += `\nmatch=${hostCpu === targetCpu}`
fs.writeFileSync(process.env.GITHUB_OUTPUT, outputFile, 'utf8')
+5 -11
View File
@@ -3,19 +3,13 @@ import fs from 'node:fs'
const dirs = [''] const dirs = ['']
for await (const dir of dirs) { for await (const dir of dirs) {
await Promise.all( await Promise.all(
fs.readdirSync(`benchDist${dir}`).map(async (file) => { fs.readdirSync(`dist${dir}`).map(async (file) => {
if (!file.endsWith('.js')) { if (!file.endsWith('.js') && !file.endsWith('.map') && !file.endsWith('.ts')) {
dirs.push(`${dir}/${file}`) dirs.push(`${dir}/${file}`)
return return
} }
const content = await fs.promises.readFile( const content = await fs.promises.readFile(`dist${dir}/${file}`, 'utf-8')
`benchDist${dir}/${file}`, fs.promises.writeFile(`dist${dir}/${file}`, content.replace(/src\//g, 'dist/').replace(/\.ts/g, '.js'))
'utf-8' }),
)
fs.promises.writeFile(
`benchDist${dir}/${file}`,
content.replace(/src\//g, 'dist/').replace(/\.ts/g, '.js')
)
})
) )
} }
+350 -3
View File
@@ -47,6 +47,18 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@discordeno/bot@npm:latest":
version: 19.0.0-next.abe8c0f
resolution: "@discordeno/bot@npm:19.0.0-next.abe8c0f"
dependencies:
"@discordeno/gateway": 19.0.0-next.abe8c0f
"@discordeno/rest": 19.0.0-next.abe8c0f
"@discordeno/types": 19.0.0-next.abe8c0f
"@discordeno/utils": 19.0.0-next.abe8c0f
checksum: 12091b3d06c89f6cf7c5ae93cef6af28922665cddbbdf4b07804795214833092f3292cb7a150c74ada1eddfa4cd2f958f888c582df7be794ab6dc1b0296cbf3f
languageName: node
linkType: hard
"@discordeno/gateway@19.0.0-alpha.1, @discordeno/gateway@workspace:packages/gateway": "@discordeno/gateway@19.0.0-alpha.1, @discordeno/gateway@workspace:packages/gateway":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@discordeno/gateway@workspace:packages/gateway" resolution: "@discordeno/gateway@workspace:packages/gateway"
@@ -74,6 +86,17 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@discordeno/gateway@npm:19.0.0-next.abe8c0f":
version: 19.0.0-next.abe8c0f
resolution: "@discordeno/gateway@npm:19.0.0-next.abe8c0f"
dependencies:
"@discordeno/types": 19.0.0-next.abe8c0f
"@discordeno/utils": 19.0.0-next.abe8c0f
ws: ^8.13.0
checksum: bf75ea743cd0d78e6bce8a2e450310eb7e5495429eeaa4a3e79de7178bc75239f100bfbe0c793df0415587713d2f89919b2a661e3526ac5999bcd7fdd52e8f45
languageName: node
linkType: hard
"@discordeno/rest@19.0.0-alpha.1, @discordeno/rest@workspace:packages/rest": "@discordeno/rest@19.0.0-alpha.1, @discordeno/rest@workspace:packages/rest":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@discordeno/rest@workspace:packages/rest" resolution: "@discordeno/rest@workspace:packages/rest"
@@ -103,6 +126,18 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@discordeno/rest@npm:19.0.0-next.abe8c0f":
version: 19.0.0-next.abe8c0f
resolution: "@discordeno/rest@npm:19.0.0-next.abe8c0f"
dependencies:
"@discordeno/types": 19.0.0-next.abe8c0f
"@discordeno/utils": 19.0.0-next.abe8c0f
dotenv: ^16.0.3
node-fetch: ^3.3.1
checksum: 34002f0d07e73fb8e309a62379489b6a134ac31d29d4a991d1641e5f8740c6ed95df0ea4bba976ea5e9c5a358db6d5755a0daecc1357325eb604340835af7889
languageName: node
linkType: hard
"@discordeno/types@19.0.0-alpha.1, @discordeno/types@workspace:packages/types": "@discordeno/types@19.0.0-alpha.1, @discordeno/types@workspace:packages/types":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@discordeno/types@workspace:packages/types" resolution: "@discordeno/types@workspace:packages/types"
@@ -124,6 +159,13 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@discordeno/types@npm:19.0.0-next.abe8c0f":
version: 19.0.0-next.abe8c0f
resolution: "@discordeno/types@npm:19.0.0-next.abe8c0f"
checksum: 1d71386b6b05d2d4c584519b8a2baf21d9a8ef51cca950e8811a88bbf7c1edc4ed636d53bd41492b10c5a12f5d719b0a4df6a4f64a3034594c6f71506de064a2
languageName: node
linkType: hard
"@discordeno/utils@19.0.0-alpha.1, @discordeno/utils@workspace:packages/utils": "@discordeno/utils@19.0.0-alpha.1, @discordeno/utils@workspace:packages/utils":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@discordeno/utils@workspace:packages/utils" resolution: "@discordeno/utils@workspace:packages/utils"
@@ -149,6 +191,17 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@discordeno/utils@npm:19.0.0-next.abe8c0f":
version: 19.0.0-next.abe8c0f
resolution: "@discordeno/utils@npm:19.0.0-next.abe8c0f"
dependencies:
"@discordeno/types": 19.0.0-next.abe8c0f
node-fetch: ^3.3.1
tweetnacl: ^1.0.3
checksum: 23f6889998725dee0fc414e739fcf6baf6ec03c84e7768863244b9201783046b8744c6fe64c5799d3ebfd2ab613cfd9de026e851230386ce31f1dfd426dea064
languageName: node
linkType: hard
"@eslint-community/eslint-utils@npm:^4.2.0": "@eslint-community/eslint-utils@npm:^4.2.0":
version: 4.2.0 version: 4.2.0
resolution: "@eslint-community/eslint-utils@npm:4.2.0" resolution: "@eslint-community/eslint-utils@npm:4.2.0"
@@ -184,6 +237,23 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@eslint/eslintrc@npm:^2.0.2":
version: 2.0.2
resolution: "@eslint/eslintrc@npm:2.0.2"
dependencies:
ajv: ^6.12.4
debug: ^4.3.2
espree: ^9.5.1
globals: ^13.19.0
ignore: ^5.2.0
import-fresh: ^3.2.1
js-yaml: ^4.1.0
minimatch: ^3.1.2
strip-json-comments: ^3.1.1
checksum: cfcf5e12c7b2c4476482e7f12434e76eae16fcd163ee627309adb10b761e5caa4a4e52ed7be464423320ff3d11eca5b50de5bf8be3e25834222470835dd5c801
languageName: node
linkType: hard
"@eslint/js@npm:8.36.0": "@eslint/js@npm:8.36.0":
version: 8.36.0 version: 8.36.0
resolution: "@eslint/js@npm:8.36.0" resolution: "@eslint/js@npm:8.36.0"
@@ -191,6 +261,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@eslint/js@npm:8.37.0":
version: 8.37.0
resolution: "@eslint/js@npm:8.37.0"
checksum: 7a07fb085c94ce1538949012c292fd3a6cd734f149bc03af6157dfbd8a7477678899ef57b4a27e15b36470a997389ad79a0533d5880c71e67720ae1a7de7c62d
languageName: node
linkType: hard
"@gar/promisify@npm:^1.1.3": "@gar/promisify@npm:^1.1.3":
version: 1.1.3 version: 1.1.3
resolution: "@gar/promisify@npm:1.1.3" resolution: "@gar/promisify@npm:1.1.3"
@@ -379,7 +456,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/cli@npm:^0.1.62": "@swc/cli@npm:^0.1.57, @swc/cli@npm:^0.1.62":
version: 0.1.62 version: 0.1.62
resolution: "@swc/cli@npm:0.1.62" resolution: "@swc/cli@npm:0.1.62"
dependencies: dependencies:
@@ -410,6 +487,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/core-darwin-arm64@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-darwin-arm64@npm:1.3.42"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-x64@npm:1.3.40": "@swc/core-darwin-x64@npm:1.3.40":
version: 1.3.40 version: 1.3.40
resolution: "@swc/core-darwin-x64@npm:1.3.40" resolution: "@swc/core-darwin-x64@npm:1.3.40"
@@ -417,6 +501,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/core-darwin-x64@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-darwin-x64@npm:1.3.42"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@swc/core-linux-arm-gnueabihf@npm:1.3.40": "@swc/core-linux-arm-gnueabihf@npm:1.3.40":
version: 1.3.40 version: 1.3.40
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.40" resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.40"
@@ -424,6 +515,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/core-linux-arm-gnueabihf@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.42"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@swc/core-linux-arm64-gnu@npm:1.3.40": "@swc/core-linux-arm64-gnu@npm:1.3.40":
version: 1.3.40 version: 1.3.40
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.40" resolution: "@swc/core-linux-arm64-gnu@npm:1.3.40"
@@ -431,6 +529,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/core-linux-arm64-gnu@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.42"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-arm64-musl@npm:1.3.40": "@swc/core-linux-arm64-musl@npm:1.3.40":
version: 1.3.40 version: 1.3.40
resolution: "@swc/core-linux-arm64-musl@npm:1.3.40" resolution: "@swc/core-linux-arm64-musl@npm:1.3.40"
@@ -438,6 +543,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/core-linux-arm64-musl@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-linux-arm64-musl@npm:1.3.42"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@swc/core-linux-x64-gnu@npm:1.3.40": "@swc/core-linux-x64-gnu@npm:1.3.40":
version: 1.3.40 version: 1.3.40
resolution: "@swc/core-linux-x64-gnu@npm:1.3.40" resolution: "@swc/core-linux-x64-gnu@npm:1.3.40"
@@ -445,6 +557,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/core-linux-x64-gnu@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-linux-x64-gnu@npm:1.3.42"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-x64-musl@npm:1.3.40": "@swc/core-linux-x64-musl@npm:1.3.40":
version: 1.3.40 version: 1.3.40
resolution: "@swc/core-linux-x64-musl@npm:1.3.40" resolution: "@swc/core-linux-x64-musl@npm:1.3.40"
@@ -452,6 +571,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/core-linux-x64-musl@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-linux-x64-musl@npm:1.3.42"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@swc/core-win32-arm64-msvc@npm:1.3.40": "@swc/core-win32-arm64-msvc@npm:1.3.40":
version: 1.3.40 version: 1.3.40
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.40" resolution: "@swc/core-win32-arm64-msvc@npm:1.3.40"
@@ -459,6 +585,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/core-win32-arm64-msvc@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.42"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@swc/core-win32-ia32-msvc@npm:1.3.40": "@swc/core-win32-ia32-msvc@npm:1.3.40":
version: 1.3.40 version: 1.3.40
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.40" resolution: "@swc/core-win32-ia32-msvc@npm:1.3.40"
@@ -466,6 +599,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/core-win32-ia32-msvc@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.42"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@swc/core-win32-x64-msvc@npm:1.3.40": "@swc/core-win32-x64-msvc@npm:1.3.40":
version: 1.3.40 version: 1.3.40
resolution: "@swc/core-win32-x64-msvc@npm:1.3.40" resolution: "@swc/core-win32-x64-msvc@npm:1.3.40"
@@ -473,6 +613,52 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/core-win32-x64-msvc@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-win32-x64-msvc@npm:1.3.42"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@swc/core@npm:^1.3.21":
version: 1.3.42
resolution: "@swc/core@npm:1.3.42"
dependencies:
"@swc/core-darwin-arm64": 1.3.42
"@swc/core-darwin-x64": 1.3.42
"@swc/core-linux-arm-gnueabihf": 1.3.42
"@swc/core-linux-arm64-gnu": 1.3.42
"@swc/core-linux-arm64-musl": 1.3.42
"@swc/core-linux-x64-gnu": 1.3.42
"@swc/core-linux-x64-musl": 1.3.42
"@swc/core-win32-arm64-msvc": 1.3.42
"@swc/core-win32-ia32-msvc": 1.3.42
"@swc/core-win32-x64-msvc": 1.3.42
dependenciesMeta:
"@swc/core-darwin-arm64":
optional: true
"@swc/core-darwin-x64":
optional: true
"@swc/core-linux-arm-gnueabihf":
optional: true
"@swc/core-linux-arm64-gnu":
optional: true
"@swc/core-linux-arm64-musl":
optional: true
"@swc/core-linux-x64-gnu":
optional: true
"@swc/core-linux-x64-musl":
optional: true
"@swc/core-win32-arm64-msvc":
optional: true
"@swc/core-win32-ia32-msvc":
optional: true
"@swc/core-win32-x64-msvc":
optional: true
checksum: 5c28c03ee6a4e1f630c4a519b56d7e23a0102f70fad977a3ab144a3da96231cf4849e473cdc9ee7be6b9266ba0838d0bc0b6b3575a75540f302befe96cc9606e
languageName: node
linkType: hard
"@swc/core@npm:^1.3.40": "@swc/core@npm:^1.3.40":
version: 1.3.40 version: 1.3.40
resolution: "@swc/core@npm:1.3.40" resolution: "@swc/core@npm:1.3.40"
@@ -563,6 +749,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/benchmark@npm:^2":
version: 2.1.2
resolution: "@types/benchmark@npm:2.1.2"
checksum: dc5e544ffca59bdc61008d89f007c14c281c17e80d50385da81eb9182e4466a9208ceb7af72ddfb4df1e2445ea35f2af36854168f698edd4c015a4262232462d
languageName: node
linkType: hard
"@types/cacheable-request@npm:^6.0.1": "@types/cacheable-request@npm:^6.0.1":
version: 6.0.3 version: 6.0.3
resolution: "@types/cacheable-request@npm:6.0.3" resolution: "@types/cacheable-request@npm:6.0.3"
@@ -642,6 +835,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/node@npm:^18.11.9":
version: 18.15.11
resolution: "@types/node@npm:18.15.11"
checksum: 977b4ad04708897ff0eb049ecf82246d210939c82461922d20f7d2dcfd81bbc661582ba3af28869210f7e8b1934529dcd46bff7d448551400f9d48b9d3bddec3
languageName: node
linkType: hard
"@types/node@npm:^18.15.3": "@types/node@npm:^18.15.3":
version: 18.15.3 version: 18.15.3
resolution: "@types/node@npm:18.15.3" resolution: "@types/node@npm:18.15.3"
@@ -1051,6 +1251,40 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"benchmark@npm:^2.1.4":
version: 2.1.4
resolution: "benchmark@npm:2.1.4"
dependencies:
lodash: ^4.17.4
platform: ^1.3.3
checksum: aa466561d4f2b0a2419a3069b8f90fd35ffacf26849697eea9de525ecfbd10b44da11070cc51c88d772076db8cb2415641b493de7d6c024fdf8551019c6fcf1c
languageName: node
linkType: hard
"benchmark@workspace:packages/benchmark":
version: 0.0.0-use.local
resolution: "benchmark@workspace:packages/benchmark"
dependencies:
"@discordeno/bot": latest
"@discordeno/gateway": 19.0.0-alpha.1
"@discordeno/rest": 19.0.0-alpha.1
"@discordeno/types": 19.0.0-alpha.1
"@discordeno/utils": 19.0.0-alpha.1
"@swc/cli": ^0.1.57
"@swc/core": ^1.3.21
"@types/benchmark": ^2
"@types/node": ^18.11.9
benchmark: ^2.1.4
eslint: ^8.0.1
eslint-config-discordeno: "*"
microtime: ^3.1.1
node-fetch: ^3.3.1
ts-node: ^10.9.1
tsconfig: "*"
typescript: ^4.9.3
languageName: unknown
linkType: soft
"bin-check@npm:^4.1.0": "bin-check@npm:^4.1.0":
version: 4.1.0 version: 4.1.0
resolution: "bin-check@npm:4.1.0" resolution: "bin-check@npm:4.1.0"
@@ -1995,6 +2229,63 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"eslint-visitor-keys@npm:^3.4.0":
version: 3.4.0
resolution: "eslint-visitor-keys@npm:3.4.0"
checksum: 33159169462d3989321a1ec1e9aaaf6a24cc403d5d347e9886d1b5bfe18ffa1be73bdc6203143a28a606b142b1af49787f33cff0d6d0813eb5f2e8d2e1a6043c
languageName: node
linkType: hard
"eslint@npm:^8.0.1":
version: 8.37.0
resolution: "eslint@npm:8.37.0"
dependencies:
"@eslint-community/eslint-utils": ^4.2.0
"@eslint-community/regexpp": ^4.4.0
"@eslint/eslintrc": ^2.0.2
"@eslint/js": 8.37.0
"@humanwhocodes/config-array": ^0.11.8
"@humanwhocodes/module-importer": ^1.0.1
"@nodelib/fs.walk": ^1.2.8
ajv: ^6.10.0
chalk: ^4.0.0
cross-spawn: ^7.0.2
debug: ^4.3.2
doctrine: ^3.0.0
escape-string-regexp: ^4.0.0
eslint-scope: ^7.1.1
eslint-visitor-keys: ^3.4.0
espree: ^9.5.1
esquery: ^1.4.2
esutils: ^2.0.2
fast-deep-equal: ^3.1.3
file-entry-cache: ^6.0.1
find-up: ^5.0.0
glob-parent: ^6.0.2
globals: ^13.19.0
grapheme-splitter: ^1.0.4
ignore: ^5.2.0
import-fresh: ^3.0.0
imurmurhash: ^0.1.4
is-glob: ^4.0.0
is-path-inside: ^3.0.3
js-sdsl: ^4.1.4
js-yaml: ^4.1.0
json-stable-stringify-without-jsonify: ^1.0.1
levn: ^0.4.1
lodash.merge: ^4.6.2
minimatch: ^3.1.2
natural-compare: ^1.4.0
optionator: ^0.9.1
strip-ansi: ^6.0.1
strip-json-comments: ^3.1.0
text-table: ^0.2.0
bin:
eslint: bin/eslint.js
checksum: 80f3d5cdce2d671f4794e392d234a78d039c347673defb0596268bd481e8f30a53d93c01ff4f66a546c87d97ab4122c0e9cafe1371f87cb03cee6b7d5aa97595
languageName: node
linkType: hard
"eslint@npm:^8.36.0": "eslint@npm:^8.36.0":
version: 8.36.0 version: 8.36.0
resolution: "eslint@npm:8.36.0" resolution: "eslint@npm:8.36.0"
@@ -2056,6 +2347,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"espree@npm:^9.5.1":
version: 9.5.1
resolution: "espree@npm:9.5.1"
dependencies:
acorn: ^8.8.0
acorn-jsx: ^5.3.2
eslint-visitor-keys: ^3.4.0
checksum: cdf6e43540433d917c4f2ee087c6e987b2063baa85a1d9cdaf51533d78275ebd5910c42154e7baf8e3e89804b386da0a2f7fad2264d8f04420e7506bf87b3b88
languageName: node
linkType: hard
"esquery@npm:^1.4.2": "esquery@npm:^1.4.2":
version: 1.5.0 version: 1.5.0
resolution: "esquery@npm:1.5.0" resolution: "esquery@npm:1.5.0"
@@ -3250,6 +3552,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"lodash@npm:^4.17.4":
version: 4.17.21
resolution: "lodash@npm:4.17.21"
checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
languageName: node
linkType: hard
"log-symbols@npm:4.1.0": "log-symbols@npm:4.1.0":
version: 4.1.0 version: 4.1.0
resolution: "log-symbols@npm:4.1.0" resolution: "log-symbols@npm:4.1.0"
@@ -3394,6 +3703,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"microtime@npm:^3.1.1":
version: 3.1.1
resolution: "microtime@npm:3.1.1"
dependencies:
node-addon-api: ^5.0.0
node-gyp: latest
node-gyp-build: ^4.4.0
checksum: 1161571d9c994070139d8dd65160bb5ebb87044cb0ea9828a65fde201fcf9b90da9c2897e352a26e852a7fa9dd7b6774128b50854462d117be1b019abff41887
languageName: node
linkType: hard
"mime-db@npm:^1.28.0": "mime-db@npm:^1.28.0":
version: 1.52.0 version: 1.52.0
resolution: "mime-db@npm:1.52.0" resolution: "mime-db@npm:1.52.0"
@@ -3656,6 +3976,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"node-addon-api@npm:^5.0.0":
version: 5.1.0
resolution: "node-addon-api@npm:5.1.0"
dependencies:
node-gyp: latest
checksum: 2508bd2d2981945406243a7bd31362fc7af8b70b8b4d65f869c61731800058fb818cc2fd36c8eac714ddd0e568cc85becf5e165cebbdf7b5024d5151bbc75ea1
languageName: node
linkType: hard
"node-domexception@npm:^1.0.0": "node-domexception@npm:^1.0.0":
version: 1.0.0 version: 1.0.0
resolution: "node-domexception@npm:1.0.0" resolution: "node-domexception@npm:1.0.0"
@@ -3674,6 +4003,17 @@ __metadata:
languageName: node languageName: node
linkType: hard 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: 25d78c5ef1f8c24291f4a370c47ba52fcea14f39272041a90a7894cd50d766f7c8cb8fb06c0f42bf6f69b204b49d9be3c8fc344aac09714d5bdb95965499eb15
languageName: node
linkType: hard
"node-gyp@npm:latest": "node-gyp@npm:latest":
version: 9.3.1 version: 9.3.1
resolution: "node-gyp@npm:9.3.1" resolution: "node-gyp@npm:9.3.1"
@@ -3997,6 +4337,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"platform@npm:^1.3.3":
version: 1.3.6
resolution: "platform@npm:1.3.6"
checksum: 6f472a09c61d418c7e26c1c16d0bdc029549d512dbec6526216a1e59ec68100d07007d0097dcba69dddad883d6f2a83361b4bdfe0094a3d9a2af24158643d85e
languageName: node
linkType: hard
"prelude-ls@npm:^1.2.1": "prelude-ls@npm:^1.2.1":
version: 1.2.1 version: 1.2.1
resolution: "prelude-ls@npm:1.2.1" resolution: "prelude-ls@npm:1.2.1"
@@ -4962,7 +5309,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"typescript@npm:^4.9.5": "typescript@npm:^4.9.3, typescript@npm:^4.9.5":
version: 4.9.5 version: 4.9.5
resolution: "typescript@npm:4.9.5" resolution: "typescript@npm:4.9.5"
bin: bin:
@@ -4972,7 +5319,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"typescript@patch:typescript@^4.9.5#~builtin<compat/typescript>": "typescript@patch:typescript@^4.9.3#~builtin<compat/typescript>, typescript@patch:typescript@^4.9.5#~builtin<compat/typescript>":
version: 4.9.5 version: 4.9.5
resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin<compat/typescript>::version=4.9.5&hash=d73830" resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin<compat/typescript>::version=4.9.5&hash=d73830"
bin: bin: