chore: Migrate ESLint and prettier to Biome (#3634)

* Migrate eslint and prettier to biomejs

This does NOT include examples/bigbot as it has its own formatter

* Update to biome 1.8.0

* Readd dotenv dev dependency to rest

During a merge it got lost
This commit is contained in:
Fleny
2024-07-13 13:05:02 -05:00
committed by GitHub
parent 7b3bd76c82
commit 919474069d
132 changed files with 722 additions and 4993 deletions
-29
View File
@@ -1,29 +0,0 @@
root: true
env:
browser: true
es2021: true
extends:
- standard-with-typescript
- plugin:react/recommended
- plugin:react/jsx-runtime
- plugin:prettier/recommended
overrides: []
parserOptions:
ecmaVersion: latest
sourceType: module
project: ['./tsconfig.json']
ignorePatterns:
- .docusaurus
- .yarn
- build
- node_modules
- api_reference
settings:
react:
version: 18.2.0
plugins:
- react
rules:
'@typescript-eslint/prefer-nullish-coalescing': off
'@typescript-eslint/strict-boolean-expressions': off
'@typescript-eslint/explicit-function-return-type': off
-5
View File
@@ -1,5 +0,0 @@
{
"semi": false,
"singleQuote": true,
"arrowParens": "avoid"
}
+1 -4
View File
@@ -83,7 +83,6 @@ To manage the multiple packages we use a combination of yarn workspaces and turb
The workspaces are setup for all the folders inside `packages`. A few of the package are for the configuration of this repository, such as:
- `eslint-config-discordeno` - Configures eslint (with the prettier plugin) for the entire turborepo project
- `tsconfig` - Configures the base `tsconfig.json` for every package inside the turborepo project
Other node projects outside `packages` are not managed by turborepo and they require their own setup, an example is the website in `website/` that requires you to install its dependencies manually outside from the main dependencies that are used with the packages.
@@ -97,9 +96,7 @@ The project is setup to have Husky to install after you run `yarn` in the root f
lint-staged is configured in the `/package.json` file and will run
- Prettier for any changes you make to a source file, markdown file, html file or css file
- Eslint with the "normal" configuration resolved based on `eslint-config-discordeno` for every file (outside `website/`)
- Eslint with the configuration for the website for any source file you edit in the `website/` directory
- [Biome](https://biomejs.dev) to format and lint the code
There will run automatically when `git` performs one of those actions (merge/commit), this might however slow down commit time as it requires some time to run `list-staged`
+3 -7
View File
@@ -1,10 +1,7 @@
// Note: type annotations allow type checking and IDEs autocompletion
import type { Options as PluginContentDocs } from '@docusaurus/plugin-content-docs'
import type {
Options as PresetClassicOptions,
ThemeConfig,
} from '@docusaurus/preset-classic'
import type { Options as PresetClassicOptions, ThemeConfig } from '@docusaurus/preset-classic'
import type { Config } from '@docusaurus/types'
import { themes } from 'prism-react-renderer'
@@ -27,7 +24,7 @@ const config: Config = {
trailingSlash: false,
webpack: {
jsLoader: isServer => ({
jsLoader: (isServer) => ({
loader: require.resolve('esbuild-loader'),
options: {
loader: 'tsx',
@@ -57,8 +54,7 @@ const config: Config = {
sidebarPath: require.resolve('./sidebars.ts'),
// Please change this to your repo.
// Remove this to remove the "edit this page" links.
editUrl:
'https://github.com/discordeno/discordeno/tree/main/website/',
editUrl: 'https://github.com/discordeno/discordeno/tree/main/website/',
},
blog: {
showReadingTime: true,
+5 -22
View File
@@ -13,8 +13,8 @@
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc",
"lint": "eslint . --ext js,ts,tsx",
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,md,mdx}\"",
"lint": "biome lint --write",
"format": "biome format --write",
"setup-dd": ""
},
"dependencies": {
@@ -33,37 +33,20 @@
"styled-components": "^6.1.6"
},
"devDependencies": {
"@biomejs/biome": "^1.7.3",
"@docusaurus/module-type-aliases": "3.0.1",
"@docusaurus/tsconfig": "3.0.1",
"@docusaurus/types": "3.0.1",
"@types/react": "^18.2.47",
"@typescript-eslint/eslint-plugin": "^6.18.0",
"@typescript-eslint/parser": "^6.18.0",
"esbuild": "^0.19.11",
"esbuild-loader": "^4.0.2",
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-standard-with-typescript": "^43.0.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-n": "^16.6.1",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-react": "^7.33.2",
"prettier": "^3.1.1",
"terser-webpack-plugin": "^5.3.10",
"typescript": "5.3.3",
"webpack": "^5.89.0"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
"production": [">0.5%", "not dead", "not op_mini all"],
"development": ["last 1 chrome version", "last 1 firefox version", "last 1 safari version"]
},
"engines": {
"node": ">=18.0"
+11 -53
View File
@@ -1,28 +1,8 @@
import {
CategoryScale,
Chart as ChartJS,
Legend,
LinearScale,
LineController,
LineElement,
PointElement,
Title,
Tooltip,
} from 'chart.js'
import { CategoryScale, Chart as ChartJS, Legend, LineController, LineElement, LinearScale, PointElement, Title, Tooltip } from 'chart.js'
import { useEffect, useState } from 'react'
import { Chart } from 'react-chartjs-2'
ChartJS.register(
CategoryScale,
LineController,
LinearScale,
PointElement,
LineElement,
Title,
Tooltip,
Legend,
)
ChartJS.register(CategoryScale, LineController, LinearScale, PointElement, LineElement, Title, Tooltip, Legend)
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
const BenchmarkResultChart = ({
name,
dataset,
@@ -59,11 +39,11 @@ const BenchmarkResultChart = ({
}>
}) => {
const data = {
labels: dataset.map(d => d.commit.id.slice(0, 7)),
labels: dataset.map((d) => d.commit.id.slice(0, 7)),
datasets: [
{
label: name,
data: dataset.map(d => d.bench.value),
data: dataset.map((d) => d.bench.value),
borderColor: '#ff3838',
backgroundColor: '#ff383860', // Add alpha for #rrggbbaa
},
@@ -94,20 +74,12 @@ const BenchmarkResultChart = ({
plugins: {
tooltip: {
callbacks: {
afterTitle: items => {
afterTitle: (items) => {
const index = items[0].dataIndex
const data = dataset[index]
return (
'\n' +
data.commit.message +
'\n\n' +
data.commit.timestamp +
' committed by @' +
data.commit.author.username +
'\n'
)
return '\n' + data.commit.message + '\n\n' + data.commit.timestamp + ' committed by @' + data.commit.author.username + '\n'
},
label: item => {
label: (item) => {
let label = item.formattedValue
const { range, unit } = dataset[item.datasetIndex].bench
label += ` ${unit}`
@@ -116,7 +88,7 @@ const BenchmarkResultChart = ({
}
return label
},
afterLabel: item => {
afterLabel: (item) => {
const { extra } = dataset[item.datasetIndex].bench
return extra ? `\n${extra}` : ''
},
@@ -145,20 +117,13 @@ export default function BenchmarkResultCharts(): JSX.Element {
void (async () => {
setData(
JSON.parse(
(
await (
await fetch(
'https://raw.githubusercontent.com/discordeno/discordeno/benchies/benchmarksResult/data.js',
)
).text()
).slice(24),
(await (await fetch('https://raw.githubusercontent.com/discordeno/discordeno/benchies/benchmarksResult/data.js')).text()).slice(24),
) as { entries: { Benchmark: [] } },
)
})()
}
}, [])
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
function collectBenchesPerTestCase(entries) {
const dataMap = new Map()
for (const entry of entries) {
@@ -179,15 +144,8 @@ export default function BenchmarkResultCharts(): JSX.Element {
return (
<div style={{ minHeight: '100vh' }}>
{data ? (
Array.from(
collectBenchesPerTestCase(data.entries.Benchmark),
([key, value]) => ({ benchName: key, benches: value }),
).map((bench, index) => (
<BenchmarkResultChart
key={index}
name={bench.benchName}
dataset={bench.benches}
/>
Array.from(collectBenchesPerTestCase(data.entries.Benchmark), ([key, value]) => ({ benchName: key, benches: value })).map((bench, index) => (
<BenchmarkResultChart key={index} name={bench.benchName} dataset={bench.benches} />
))
) : (
<></>
@@ -1,14 +1,5 @@
import { useEffect, useState } from 'react'
import ReactFlow, {
Background,
Controls,
Handle,
Position,
useEdgesState,
useNodesState,
type Edge,
type Node,
} from 'reactflow'
import ReactFlow, { Background, Controls, Handle, Position, useEdgesState, useNodesState, type Edge, type Node } from 'reactflow'
import 'reactflow/dist/style.css'
export const multiplier = 225
@@ -41,9 +32,7 @@ export default function BaseFlowChart({
}
}
const [windowDimensions, setWindowDimensions] = useState(
getWindowDimensions(),
)
const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions())
useEffect(() => {
function handleResize() {
@@ -67,11 +56,7 @@ export default function BaseFlowChart({
windowDimensions.width >= 997
? `${
(100 *
((windowDimensions.width -
300 -
(windowDimensions.width >= 1620
? (windowDimensions.width - 1620) * 0.5
: 0)) /
((windowDimensions.width - 300 - (windowDimensions.width >= 1620 ? (windowDimensions.width - 1620) * 0.5 : 0)) /
windowDimensions.width) -
2) *
widthMultiplier
@@ -105,7 +90,7 @@ export default function BaseFlowChart({
/>
</div>
),
baseLineNodeText: n => (
baseLineNodeText: (n) => (
<div
style={{
textAlign: 'center',
@@ -158,7 +158,5 @@ const initialEdges: Edge[] = [
]
export default function FlowChart() {
return (
<BaseFlowChart initialNodes={initialNodes} initialEdges={initialEdges} />
)
return <BaseFlowChart initialNodes={initialNodes} initialEdges={initialEdges} />
}
@@ -1,10 +1,6 @@
import { type Edge, type Node, Position } from 'reactflow'
import 'reactflow/dist/style.css'
import BaseFlowChart, {
defaultGroupOptions,
defaultNodeOptions,
multiplier,
} from './BaseFlowChart'
import BaseFlowChart, { defaultGroupOptions, defaultNodeOptions, multiplier } from './BaseFlowChart'
const initialNodes: Node[] = [
{
@@ -303,7 +299,5 @@ const initialEdges: Edge[] = [
]
export default function FlowChart2() {
return (
<BaseFlowChart initialNodes={initialNodes} initialEdges={initialEdges} />
)
return <BaseFlowChart initialNodes={initialNodes} initialEdges={initialEdges} />
}
@@ -1,22 +1,8 @@
import type React from 'react'
import { useEffect, useState } from 'react'
import ReactFlow, {
Background,
Controls,
Handle,
Position,
useEdgesState,
useNodesState,
type Edge,
type Node,
} from 'reactflow'
import ReactFlow, { Background, Controls, Handle, Position, useEdgesState, useNodesState, type Edge, type Node } from 'reactflow'
import 'reactflow/dist/style.css'
import {
defaultNodeOptions,
height,
multiplier,
widthMultiplier,
} from './BaseFlowChart'
import { defaultNodeOptions, height, multiplier, widthMultiplier } from './BaseFlowChart'
const handlers: Record<
string,
@@ -42,27 +28,15 @@ const handlers: Record<
event: 'events.channelUpdate',
},
handleStageInstanceCreate: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake'],
event: 'events.stageInstanceCreate',
},
handleStageInstanceDelete: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake'],
event: 'events.stageInstanceDelete',
},
handleStageInstanceUpdate: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake'],
event: 'events.stageInstanceUpdate',
},
handleThreadCreate: {
@@ -74,22 +48,11 @@ const handlers: Record<
event: 'events.threadDelete',
},
handleThreadListSync: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.channel',
'transformers.snowflake',
'transformers.snowflake',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.channel', 'transformers.snowflake', 'transformers.snowflake'],
event: undefined,
},
handleThreadMembersUpdate: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.threadMember',
'transformers.snowflake',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.threadMember', 'transformers.snowflake'],
event: 'events.threadMembersUpdate',
},
handleThreadMemberUpdate: {
@@ -157,19 +120,11 @@ const handlers: Record<
event: 'events.scheduledEventUpdate',
},
handleGuildScheduledEventUserAdd: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake'],
event: 'events.scheduledEventUserAdd',
},
handleGuildScheduledEventUserRemove: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake'],
event: 'events.scheduledEventUserRemove',
},
handleIntegrationCreate: {
@@ -177,11 +132,7 @@ const handlers: Record<
event: 'events.integrationCreate',
},
handleIntegrationDelete: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake'],
event: 'events.integrationDelete',
},
handleIntegrationUpdate: {
@@ -212,11 +163,7 @@ const handlers: Record<
event: undefined,
},
handleGuildMemberAdd: {
transformers: [
'transformers.snowflake',
'transformers.user',
'transformers.member',
],
transformers: ['transformers.snowflake', 'transformers.user', 'transformers.member'],
event: 'events.guildMemberAdd',
},
handleGuildMemberRemove: {
@@ -224,11 +171,7 @@ const handlers: Record<
event: 'events.guildMemberRemove',
},
handleGuildMemberUpdate: {
transformers: [
'transformers.user',
'transformers.member',
'transformers.snowflake',
],
transformers: ['transformers.user', 'transformers.member', 'transformers.snowflake'],
event: 'events.guildMemberUpdate',
},
handleMessageCreate: {
@@ -236,21 +179,11 @@ const handlers: Record<
event: 'events.messageCreate',
},
handleMessageDelete: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake'],
event: 'events.messageDelete',
},
handleMessageDeleteBulk: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake'],
event: 'events.messageDeleteBulk',
},
handleMessageReactionAdd: {
@@ -266,30 +199,15 @@ const handlers: Record<
event: 'events.reactionAdd',
},
handleMessageReactionRemove: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
'transformers.emoji',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake', 'transformers.emoji'],
event: 'events.reactionRemove',
},
handleMessageReactionRemoveAll: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake'],
event: 'events.reactionRemoveAll',
},
handleMessageReactionRemoveEmoji: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
'transformers.emoji',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake', 'transformers.emoji'],
event: 'events.reactionRemoveEmoji',
},
handleMessageUpdate: {
@@ -301,22 +219,11 @@ const handlers: Record<
event: 'events.presenceUpdate',
},
handleReady: {
transformers: [
'transformers.user',
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
],
transformers: ['transformers.user', 'transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake'],
event: 'events.ready',
},
handleTypingStart: {
transformers: [
'transformers.snowflake',
'transformers.snowflake',
'transformers.snowflake',
'transformers.member',
],
transformers: ['transformers.snowflake', 'transformers.snowflake', 'transformers.snowflake', 'transformers.member'],
event: 'events.typingStart',
},
handleUserUpdate: {
@@ -350,7 +257,7 @@ const handlers: Record<
}
export default function FlowChart({
handlerFilter = (handler: string) => true,
handlerFilter = (_handler: string) => true,
}: {
handlerFilter: (handler: string) => boolean
}) {
@@ -362,9 +269,7 @@ export default function FlowChart({
}
}
const [windowDimensions, setWindowDimensions] = useState(
getWindowDimensions(),
)
const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions())
useEffect(() => {
function handleResize() {
@@ -472,18 +377,12 @@ export default function FlowChart({
},
]
for (const [index, handler] of Object.keys(handlers)
.filter(handlerFilter)
.entries()) {
for (const [index, handler] of Object.keys(handlers).filter(handlerFilter).entries()) {
initialNodes.push({
id: handler,
position: {
x: 2 * multiplier,
y:
index * (height + 10) -
Object.keys(handlers).filter(handlerFilter).length *
((height + 10) / 2) +
height / 2,
y: index * (height + 10) - Object.keys(handlers).filter(handlerFilter).length * ((height + 10) / 2) + height / 2,
},
data: { label: handler.slice(6) },
...defaultNodeOptions,
@@ -493,10 +392,7 @@ export default function FlowChart({
source: 'baseNode-handleDiscordPayload',
target: handler,
})
if (
!events.find(e => e === handlers[handler].event) &&
handlers[handler].event
) {
if (!events.find((e) => e === handlers[handler].event) && handlers[handler].event) {
events.push(handlers[handler].event)
initialEdges.push({
id: `${handlers[handler].event}-yourCode`,
@@ -505,24 +401,15 @@ export default function FlowChart({
})
}
for (const transformer of handlers[handler].transformers) {
if (!transformers.find(t => t === transformer) && transformer)
transformers.push(transformer)
if (
!initialEdges.find(edge => edge.id === `${handler}-${transformer}`) &&
transformer
) {
if (!transformers.find((t) => t === transformer) && transformer) transformers.push(transformer)
if (!initialEdges.find((edge) => edge.id === `${handler}-${transformer}`) && transformer) {
initialEdges.push({
id: `${handler}-${transformer}`,
source: handler,
target: transformer,
})
}
if (
!initialEdges.find(
edge => edge.id === `${transformer}-${handlers[handler].event}`,
) &&
handlers[handler].event
) {
if (!initialEdges.find((edge) => edge.id === `${transformer}-${handlers[handler].event}`) && handlers[handler].event) {
initialEdges.push({
id: `${transformer}-${handlers[handler].event}`,
source: transformer,
@@ -537,10 +424,7 @@ export default function FlowChart({
id: transformer,
position: {
x: 3 * multiplier,
y:
index * (height + 10) -
transformers.length * ((height + 10) / 2) +
height / 2,
y: index * (height + 10) - transformers.length * ((height + 10) / 2) + height / 2,
},
data: { label: transformer.slice(13) },
...defaultNodeOptions,
@@ -552,10 +436,7 @@ export default function FlowChart({
id: event,
position: {
x: 4 * multiplier,
y:
index * (height + 10) -
events.length * ((height + 10) / 2) +
height / 2,
y: index * (height + 10) - events.length * ((height + 10) / 2) + height / 2,
},
data: { label: event.slice(7) },
...defaultNodeOptions,
@@ -568,17 +449,11 @@ export default function FlowChart({
type: 'group',
position: {
x: 1.925 * multiplier,
y:
-Object.keys(handlers).filter(handlerFilter).length *
((height + 10) / 2) -
45,
y: -Object.keys(handlers).filter(handlerFilter).length * ((height + 10) / 2) - 45,
},
data: { label: '' },
style: {
height: `${
Object.keys(handlers).filter(handlerFilter).length * (height + 10) +
75
}px`,
height: `${Object.keys(handlers).filter(handlerFilter).length * (height + 10) + 75}px`,
width: `${multiplier * 0.9}px`,
borderColor: 'rgba(0,0,0,0.25)',
},
@@ -589,10 +464,7 @@ export default function FlowChart({
type: 'baseLineNodeText',
position: {
x: 2 * multiplier,
y:
-Object.keys(handlers).filter(handlerFilter).length *
((height + 10) / 2) -
(height + 10) / 2,
y: -Object.keys(handlers).filter(handlerFilter).length * ((height + 10) / 2) - (height + 10) / 2,
},
data: { label: 'Handlers' },
draggable: false,
@@ -654,14 +526,10 @@ export default function FlowChart({
const [, setHandlerIndex] = useState(0)
const [userClick, setUserClick] = useState(false)
const nodeMouseHandler = (
_: React.MouseEvent,
node: Node,
userTrigger = true,
) => {
const nodeMouseHandler = (_: React.MouseEvent, node: Node, userTrigger = true) => {
if (userTrigger) setUserClick(true)
if (node.id.split('-')[0] === 'baseNode') {
edges.forEach(e => {
edges.forEach((e) => {
if (e.id.startsWith('baseLine')) return
e.animated = true
e.style = { stroke: 'blue' }
@@ -669,46 +537,32 @@ export default function FlowChart({
setEdges([...edges])
return
}
if (Object.keys(handlers).find(h => handlers[h].event === node.id)) {
const handlerName = Object.keys(handlers).find(
h => handlers[h].event === node.id,
)
if (Object.keys(handlers).find((h) => handlers[h].event === node.id)) {
const handlerName = Object.keys(handlers).find((h) => handlers[h].event === node.id)
const handler = handlers[handlerName]
edges.forEach(e => {
edges.forEach((e) => {
if (e.id.startsWith('baseLine')) return
if (e.id.split('-')[0] === 'baseEdge') {
e.animated = true
e.style = { stroke: 'blue' }
return
}
if (
e.id.split('-')[0] === 'handleDiscordPayload' &&
e.id.split('-')[1] === handlerName
) {
if (e.id.split('-')[0] === 'handleDiscordPayload' && e.id.split('-')[1] === handlerName) {
e.animated = true
e.style = { stroke: 'blue' }
return
}
if (
e.id.split('-')[0] === handlerName &&
handler.transformers.includes(e.id.split('-')[1])
) {
if (e.id.split('-')[0] === handlerName && handler.transformers.includes(e.id.split('-')[1])) {
e.animated = true
e.style = { stroke: 'blue' }
return
}
if (
handler.transformers.includes(e.id.split('-')[0]) &&
e.id.split('-')[1] === handler.event
) {
if (handler.transformers.includes(e.id.split('-')[0]) && e.id.split('-')[1] === handler.event) {
e.animated = true
e.style = { stroke: 'blue' }
return
}
if (
e.id.split('-')[0] === handler.event &&
e.id.split('-')[1] === 'yourCode'
) {
if (e.id.split('-')[0] === handler.event && e.id.split('-')[1] === 'yourCode') {
e.animated = true
e.style = { stroke: 'blue' }
return
@@ -719,12 +573,8 @@ export default function FlowChart({
setEdges([...edges])
return
}
if (
Object.keys(handlers).find(h =>
handlers[h].transformers.includes(node.id),
)
) {
edges.forEach(e => {
if (Object.keys(handlers).find((h) => handlers[h].transformers.includes(node.id))) {
edges.forEach((e) => {
if (e.id.startsWith('baseLine')) return
if (e.id.split('-')[0] === 'baseEdge') {
e.animated = true
@@ -734,7 +584,7 @@ export default function FlowChart({
if (
e.id.split('-')[0] === 'handleDiscordPayload' &&
Object.keys(handlers)
.filter(h => handlers[h].transformers.includes(node.id))
.filter((h) => handlers[h].transformers.includes(node.id))
.includes(e.id.split('-')[1])
) {
e.animated = true
@@ -743,7 +593,7 @@ export default function FlowChart({
}
if (
Object.keys(handlers)
.filter(h => handlers[h].transformers.includes(node.id))
.filter((h) => handlers[h].transformers.includes(node.id))
.includes(e.id.split('-')[0]) &&
e.id.split('-')[1] === node.id
) {
@@ -764,33 +614,24 @@ export default function FlowChart({
}
if (handlers[node.id]) {
const handler = handlers[node.id]
edges.forEach(e => {
edges.forEach((e) => {
if (e.id.startsWith('baseLine')) return
if (e.id.split('-')[0] === 'baseEdge') {
e.animated = true
e.style = { stroke: 'blue' }
return
}
if (
e.id.split('-')[0] === 'handleDiscordPayload' &&
e.id.split('-')[1] === node.id
) {
if (e.id.split('-')[0] === 'handleDiscordPayload' && e.id.split('-')[1] === node.id) {
e.animated = true
e.style = { stroke: 'blue' }
return
}
if (
e.id.split('-')[0] === node.id &&
handler.transformers.includes(e.id.split('-')[1])
) {
if (e.id.split('-')[0] === node.id && handler.transformers.includes(e.id.split('-')[1])) {
e.animated = true
e.style = { stroke: 'blue' }
return
}
if (
handler.transformers.includes(e.id.split('-')[0]) &&
e.id.split('-')[1] === handler.event
) {
if (handler.transformers.includes(e.id.split('-')[0]) && e.id.split('-')[1] === handler.event) {
e.animated = true
e.style = { stroke: 'blue' }
return
@@ -806,7 +647,7 @@ export default function FlowChart({
setEdges([...edges])
return
}
edges.forEach(e => {
edges.forEach((e) => {
if (e.id.startsWith('baseLine')) return
e.animated = false
e.style = {}
@@ -816,10 +657,7 @@ export default function FlowChart({
useEffect(() => {
const interval = setInterval(() => {
const randomIndex = Math.round(
(Object.keys(handlers).filter(handlerFilter).length - 1) *
Math.random(),
)
const randomIndex = Math.round((Object.keys(handlers).filter(handlerFilter).length - 1) * Math.random())
if (!userClick) {
nodeMouseHandler(
undefined,
@@ -857,11 +695,7 @@ export default function FlowChart({
windowDimensions.width >= 997
? `${
(100 *
((windowDimensions.width -
300 -
(windowDimensions.width >= 1620
? (windowDimensions.width - 1620) * 0.5
: 0)) /
((windowDimensions.width - 300 - (windowDimensions.width >= 1620 ? (windowDimensions.width - 1620) * 0.5 : 0)) /
windowDimensions.width) -
2) *
widthMultiplier
@@ -876,7 +710,7 @@ export default function FlowChart({
defaultEdgeOptions={{ focusable: false }}
onNodeDoubleClick={nodeMouseHandler}
onNodeClick={nodeMouseHandler}
onClick={e => {
onClick={(e) => {
const target = e.target as HTMLDivElement
if (target.className === 'react-flow__pane') {
@@ -908,7 +742,7 @@ export default function FlowChart({
/>
</div>
),
baseLineNodeText: n => (
baseLineNodeText: (n) => (
<div
style={{
textAlign: 'center',
@@ -1,10 +1,4 @@
import ReactFlow, {
Background,
Controls,
type Edge,
type Node,
Position,
} from 'reactflow'
import ReactFlow, { Background, Controls, type Edge, type Node, Position } from 'reactflow'
import 'reactflow/dist/style.css'
export const defaultNodeOptions = {
@@ -15,7 +9,7 @@ export const defaultNodeOptions = {
}
const genServer = (x: number, id: number) => {
const server: Array<Node<any, string>> = [
const server: Node<any, string>[] = [
{
id: `s${id + 1}`,
data: { label: `Server ${id + 1}` },
@@ -57,9 +51,7 @@ const genServer = (x: number, id: number) => {
{
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 },
type: 'output',
@@ -67,9 +59,7 @@ const genServer = (x: number, id: number) => {
...{
style: {
...defaultNodeOptions.style,
...(id === 1 || (id === 0 && i === 3)
? { padding: '5px 10px' }
: { padding: `5px 5px` }),
...(id === 1 || (id === 0 && i === 3) ? { padding: '5px 10px' } : { padding: `5px 5px` }),
...(id === 0 && i !== 3 ? { padding: '5px 15px' } : {}),
},
},
@@ -101,7 +91,7 @@ const nodes = [
},
]
const edges: Array<Edge<any>> = [
const edges: Edge<any>[] = [
{ 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' },
@@ -132,7 +122,7 @@ function Flow() {
nodes={nodes}
edges={edges}
nodeTypes={{
baseLineNodeText: n => (
baseLineNodeText: (n) => (
<div
style={{
textAlign: 'center',
+3 -14
View File
@@ -1,9 +1,4 @@
import {
FaqAnswer,
FaqContainer,
FaqQuestion,
FaqSection,
} from '@site/src/styling'
import { FaqAnswer, FaqContainer, FaqQuestion, FaqSection } from '@site/src/styling'
import { useState } from 'react'
const Faq = ({
@@ -44,8 +39,7 @@ const Faq = ({
const questions = [
{
question:
'Does Discordeno work on all JavaScript runtimes like Deno, Node.js, and Bun?',
question: 'Does Discordeno work on all JavaScript runtimes like Deno, Node.js, and Bun?',
answer:
"Yes! Discordeno is designed to work on any JavaScript runtime, including Deno, Node.js, and even in the Bun environment. This means that you can use Discordeno in your project no matter where you're running your code.",
defaultExpanded: true,
@@ -77,12 +71,7 @@ export default function DiscordenoFAQ() {
<div>
<h1>Frequently Asked Questions</h1>
{questions.map((question, index) => (
<Faq
key={index}
question={question.question}
answer={question.answer}
defaultExpanded={question.defaultExpanded}
/>
<Faq key={index} question={question.question} answer={question.answer} defaultExpanded={question.defaultExpanded} />
))}
</div>
</FaqSection>
+23 -83
View File
@@ -37,10 +37,8 @@ const reviewList: IReview[] = [
bot: {
username: 'Ai Image Generator',
discriminator: '8424',
avatar:
'https://cdn.discordapp.com/avatars/1032699319368814652/8abbc5911333d3df288ff962a2120d75.png',
invite_url:
'https://discord.com/oauth2/authorize?client_id=1032699319368814652&permissions=274877959232&scope=bot%20applications.commands',
avatar: 'https://cdn.discordapp.com/avatars/1032699319368814652/8abbc5911333d3df288ff962a2120d75.png',
invite_url: 'https://discord.com/oauth2/authorize?client_id=1032699319368814652&permissions=274877959232&scope=bot%20applications.commands',
guild_count: 163000,
},
developer: {
@@ -58,10 +56,8 @@ const reviewList: IReview[] = [
bot: {
username: 'Appy',
discriminator: '0756',
avatar:
'https://cdn.discordapp.com/avatars/853327905357561948/b1785ce8fad6e6b6b2a7ccaba11be25e.png',
invite_url:
'https://discord.com/oauth2/authorize?client_id=853327905357561948&scope=bot&permissions=534925798592',
avatar: 'https://cdn.discordapp.com/avatars/853327905357561948/b1785ce8fad6e6b6b2a7ccaba11be25e.png',
invite_url: 'https://discord.com/oauth2/authorize?client_id=853327905357561948&scope=bot&permissions=534925798592',
guild_count: 244000,
},
developer: {
@@ -79,10 +75,8 @@ const reviewList: IReview[] = [
bot: {
username: 'Fibo',
discriminator: '6503',
avatar:
'https://cdn.discordapp.com/avatars/735147814878969968/8b72f174c30276f4d48c1e66608df70c.webp',
invite_url:
'https://discord.com/api/oauth2/authorize?client_id=735147814878969968&permissions=805825744&scope=applications.commands%20bot',
avatar: 'https://cdn.discordapp.com/avatars/735147814878969968/8b72f174c30276f4d48c1e66608df70c.webp',
invite_url: 'https://discord.com/api/oauth2/authorize?client_id=735147814878969968&permissions=805825744&scope=applications.commands%20bot',
guild_count: 278000,
},
developer: {
@@ -101,8 +95,7 @@ const reviewList: IReview[] = [
username: 'CactusFire',
discriminator: '3759',
avatar: 'https://i.imgur.com/L7zadjU.png',
invite_url:
'https://discord.com/oauth2/authorize?client_id=543567770579894272&permissions=8&scope=bot%20applications.commands',
invite_url: 'https://discord.com/oauth2/authorize?client_id=543567770579894272&permissions=8&scope=bot%20applications.commands',
guild_count: 284000,
},
developer: {
@@ -129,7 +122,7 @@ export default function DiscordenoReviews() {
.sort((a, b) => {
return b.bot.guild_count - a.bot.guild_count
})
.map((review, idx) => (
.map((review) => (
<ReviewsElement key={review.bot.username}>
<ReviewsHeader>
<ReviewsLeft>
@@ -137,56 +130,30 @@ export default function DiscordenoReviews() {
<div>
<span>
<div id="username">{review.bot.username}</div>
<div id="discriminator">
#{review.bot.discriminator}
</div>
<div id="discriminator">#{review.bot.discriminator}</div>
<div id="badge">
<svg
xmlns="http://www.w3.org/2000/svg"
width="12"
height="16"
viewBox="0 0 12 16"
>
<path
fill="#fff"
fillRule="evenodd"
d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"
></path>
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16">
<path fill="#fff" fillRule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"></path>
</svg>
Bot
</div>
</span>
<div id="sub_header">
by{' '}
<div id="username">
{review.developer.usernames.join(', ')}
</div>
by <div id="username">{review.developer.usernames.join(', ')}</div>
</div>
</div>
</ReviewsLeft>
<ReviewsRight>
<StarContainer>
{([1, 2, 3, 4, 5] as const).map(star => (
<StarIcon
key={star}
active={star > review.stars}
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
aria-hidden="true"
>
{([1, 2, 3, 4, 5] as const).map((star) => (
<StarIcon key={star} active={star > review.stars} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" aria-hidden="true">
<title>{`Star ${star}`}</title>
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</StarIcon>
))}
</StarContainer>
<div>
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M12 2C9.38 2 7.25 4.13 7.25 6.75C7.25 9.32 9.26 11.4 11.88 11.49C11.96 11.48 12.04 11.48 12.1 11.49C12.12 11.49 12.13 11.49 12.15 11.49C12.16 11.49 12.16 11.49 12.17 11.49C14.73 11.4 16.74 9.32 16.75 6.75C16.75 4.13 14.62 2 12 2Z"
fill="currentColor"
@@ -196,28 +163,14 @@ export default function DiscordenoReviews() {
fill="currentColor"
/>
</svg>
{String(review.bot.guild_count).replace(
/\B(?=(\d{3})+(?!\d))/g,
',',
)}{' '}
guilds
{String(review.bot.guild_count).replace(/\B(?=(\d{3})+(?!\d))/g, ',')} guilds
</div>
</ReviewsRight>
</ReviewsHeader>
<ReviewsBox>{review.review}</ReviewsBox>
<ReviewsOtherContainer>
<a
href={review.bot.invite_url}
target="_blank"
rel="noopener noreferrer"
>
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<a href={review.bot.invite_url} target="_blank" rel="noopener noreferrer">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M12 2C6.49 2 2 6.49 2 12C2 17.51 6.49 22 12 22C17.51 22 22 17.51 22 12C22 6.49 17.51 2 12 2ZM16 12.75H12.75V16C12.75 16.41 12.41 16.75 12 16.75C11.59 16.75 11.25 16.41 11.25 16V12.75H8C7.59 12.75 7.25 12.41 7.25 12C7.25 11.59 7.59 11.25 8 11.25H11.25V8C11.25 7.59 11.59 7.25 12 7.25C12.41 7.25 12.75 7.59 12.75 8V11.25H16C16.41 11.25 16.75 11.59 16.75 12C16.75 12.41 16.41 12.75 16 12.75Z"
fill="currentColor"
@@ -227,13 +180,7 @@ export default function DiscordenoReviews() {
</a>
<div>
<div>
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M22 22.75H5C2.93 22.75 1.25 21.07 1.25 19V2C1.25 1.59 1.59 1.25 2 1.25C2.41 1.25 2.75 1.59 2.75 2V19C2.75 20.24 3.76 21.25 5 21.25H22C22.41 21.25 22.75 21.59 22.75 22C22.75 22.41 22.41 22.75 22 22.75Z"
fill="currentColor"
@@ -244,17 +191,13 @@ export default function DiscordenoReviews() {
/>
</svg>
{review.memory_improvement
? (review.memory_improvement.from / 1000)
.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ',') +
? (review.memory_improvement.from / 1000).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') +
'GB' +
` (${DiscordLibraries[review.previous_library]})`
: DiscordLibraries[review.previous_library]}
<div></div>
{review.memory_improvement
? (review.memory_improvement.to / 1000)
.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ',') + 'GB'
? (review.memory_improvement.to / 1000).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + 'GB'
: 'Discordeno'}
{review.memory_improvement && (
@@ -263,11 +206,8 @@ export default function DiscordenoReviews() {
{' '}
{' '}
<strong>
{(
((review.memory_improvement.from -
review.memory_improvement.to) /
review.memory_improvement.from) as any
).toFixed(2) * 100}
{(((review.memory_improvement.from - review.memory_improvement.to) / review.memory_improvement.from) as any).toFixed(2) *
100}
%
</strong>
RAM improvement
+1 -4
View File
@@ -62,10 +62,7 @@ export default function Home(): JSX.Element {
)
return (
<Layout
title={`Discordeno Documentation`}
description="An in-depth guide to using the Discordeno library for Deno."
>
<Layout title={`Discordeno Documentation`} description="An in-depth guide to using the Discordeno library for Deno.">
<DiscordenoHeader />
<MainPage>
<DiscordenoFeatures />
+3 -5
View File
@@ -86,8 +86,7 @@ export const Button = styled.button<{
border: transparent;
a {
background: ${({ variant }) =>
variant === 'primary' ? '#181818' : 'transparent'};
background: ${({ variant }) => (variant === 'primary' ? '#181818' : 'transparent')};
color: ${({ variant }) => (variant === 'primary' ? '#fff' : 'primary')};
animation: gradient 10s ease infinite;
-webkit-text-decoration-color: transparent;
@@ -115,8 +114,7 @@ export const Button = styled.button<{
}
:hover {
background: ${({ variant }) =>
variant === 'primary' ? '#0F0F0F' : 'transparent'};
background: ${({ variant }) => (variant === 'primary' ? '#0F0F0F' : 'transparent')};
color: ${({ variant }) => (variant === 'primary' ? '#fff' : 'primary')};
animation: gradient 10s ease infinite;
-webkit-text-decoration-color: transparent;
@@ -311,7 +309,7 @@ export const StarContainer = styled.div`
export const StarIcon = styled.svg<{ active: boolean }>`
width: 20px;
height: 20px;
fill: ${props => (props.active ? 'currentColor' : '#CBD5E0')};
fill: ${(props) => (props.active ? 'currentColor' : '#CBD5E0')};
`
export const ReviewsOther = styled.div`
+3 -5
View File
@@ -6,18 +6,16 @@
import type { LoadContext, Plugin } from '@docusaurus/types'
import TerserPlugin, { esbuildMinify } from 'terser-webpack-plugin'
export default function (context: LoadContext, options: unknown): Plugin {
export default function (_context: LoadContext, _options: unknown): Plugin {
return {
name: 'webpack-docusaurus-plugin',
configureWebpack(config, isServer, utils) {
configureWebpack(config, _isServer, _utils) {
const cacheOptions = { cache: process.env.CI !== 'true' }
const minimizer = new TerserPlugin({
minify: esbuildMinify,
})
const minimizers = config.optimization.minimizer?.map(m =>
m instanceof TerserPlugin ? minimizer : m,
)
const minimizers = config.optimization.minimizer?.map((m) => (m instanceof TerserPlugin ? minimizer : m))
return {
mergeStrategy: { 'optimization.minimizer': 'replace' },
+114 -1914
View File
File diff suppressed because it is too large Load Diff