fix linter warnings

This commit is contained in:
itsMapleLeaf
2023-09-27 23:01:44 -05:00
parent 0bab505994
commit 47b0645a90
14 changed files with 107 additions and 85 deletions

View File

@@ -8,7 +8,9 @@ export function pruneNullishValues<T>(input: T): PruneNullishValues<T> {
if (Array.isArray(input)) {
return input
.filter(Boolean)
.map((item) => pruneNullishValues(item)) as PruneNullishValues<T>
.map(
(item) => pruneNullishValues(item) as unknown,
) as PruneNullishValues<T>
}
const result: Record<string, unknown> = {}

View File

@@ -17,7 +17,7 @@ export function withLoggedMethodCalls<T extends object>(value: T) {
)
.join(", ")})`,
)
return value.apply(target, values)
return value.apply(target, values) as unknown
}
},
}) as T

View File

@@ -97,6 +97,6 @@ export interface UserInfo {
username: string
discriminator: string
tag: string
avatarUrl: string
avatarUrl: string | null
accentColor?: number
}

View File

@@ -11,6 +11,7 @@ import type {
import { Node } from "../../internal/node.js"
import type { ComponentEvent } from "../component-event"
import { OptionNode } from "./option-node"
import { omit } from "@reacord/helpers/omit.js"
/** @category Select */
export interface SelectProps {
@@ -102,12 +103,13 @@ class SelectNode extends Node<SelectProps> {
values,
minValues = 0,
maxValues = 25,
children,
onChange,
onChangeValue,
onChangeMultiple,
...props
} = this.props
} = omit(this.props, [
"children",
"onChange",
"onChangeValue",
"onChangeMultiple",
])
const item: ActionRowItem = {
...props,

View File

@@ -237,7 +237,7 @@ export class ReacordDiscordJs extends Reacord {
...pruneNullishValues(
pick(interaction.user, ["id", "username", "discriminator", "tag"]),
),
avatarUrl: interaction.user.avatarURL()!,
avatarUrl: interaction.user.avatarURL(),
accentColor: interaction.user.accentColor ?? undefined,
}

View File

@@ -38,13 +38,13 @@ export abstract class Reacord {
}
protected createInstance(renderer: Renderer, initialContent?: ReactNode) {
if (this.renderers.length > this.maxInstances) {
this.deactivate(this.renderers[0]!)
if (this.renderers.length > this.maxInstances && this.renderers[0]) {
this.deactivate(this.renderers[0])
}
this.renderers.push(renderer)
const container = reconciler.createContainer(
const container: unknown = reconciler.createContainer(
renderer,
0,
null,

View File

@@ -41,7 +41,7 @@ const config: HostConfig<
raise(`Missing createNode function`)
}
const node = props.createNode(props.props)
const node: unknown = props.createNode(props.props)
if (!(node instanceof Node)) {
raise(`createNode function did not return a Node`)
}

View File

@@ -1,3 +1,4 @@
import { raise } from "@reacord/helpers/raise.js"
import {
Button,
Link,
@@ -18,9 +19,13 @@ const reacord = new ReacordDiscordJs(client)
await client.login(process.env.TEST_BOT_TOKEN)
const guild = await client.guilds.fetch(process.env.TEST_GUILD_ID!)
const guild = await client.guilds.fetch(
process.env.TEST_GUILD_ID ?? raise("TEST_GUILD_ID not defined"),
)
const category = await guild.channels.fetch(process.env.TEST_CATEGORY_ID!)
const category = await guild.channels.fetch(
process.env.TEST_CATEGORY_ID ?? raise("TEST_CATEGORY_ID not defined"),
)
if (category?.type !== ChannelType.GuildCategory) {
throw new Error(
`channel ${process.env.TEST_CATEGORY_ID} is not a guild category. received ${category?.type}`,

View File

@@ -8,5 +8,5 @@ beforeAll(() => {
test("can require commonjs", () => {
const require = createRequire(import.meta.url)
expect(() => require("../dist/main.cjs")).not.toThrow()
expect(() => require("../dist/main.cjs") as unknown).not.toThrow()
})

View File

@@ -128,13 +128,17 @@ test("multiple select", async () => {
await tester.findSelectByPlaceholder("select").select("1", "3")
await assertSelect(expect.arrayContaining(["1", "3"]) as unknown as string[])
expect(onSelect).toHaveBeenCalledWith(
expect.objectContaining({ values: expect.arrayContaining(["1", "3"]) }),
expect.objectContaining({
values: expect.arrayContaining(["1", "3"]) as unknown,
}),
)
await tester.findSelectByPlaceholder("select").select("2")
await assertSelect(expect.arrayContaining(["2"]) as unknown as string[])
expect(onSelect).toHaveBeenCalledWith(
expect.objectContaining({ values: expect.arrayContaining(["2"]) }),
expect.objectContaining({
values: expect.arrayContaining(["2"]) as unknown,
}),
)
await tester.findSelectByPlaceholder("select").select()

View File

@@ -18,6 +18,7 @@
"@fontsource/jetbrains-mono": "^4.5.12",
"@fontsource/rubik": "^4.5.14",
"@heroicons/react": "^2.0.18",
"@reacord/helpers": "workspace:^",
"@tailwindcss/typography": "^0.5.10",
"astro": "^2.10.9",
"clsx": "^2.0.0",

View File

@@ -3,6 +3,7 @@ import { useEffect, useRef, useState } from "react"
import blobComfyUrl from "~/assets/blob-comfy.png"
import cursorIbeamUrl from "~/assets/cursor-ibeam.png"
import cursorUrl from "~/assets/cursor.png"
import { raise } from "@reacord/helpers/raise.ts"
const defaultState = {
chatInputText: "",
@@ -70,7 +71,7 @@ export function LandingAnimation() {
count: state.count + 1,
chatInputCursorVisible: false,
}))
animateClick(addRef.current!)
animateClick(addRef.current ?? raise("addRef is null"))
await delay(700)
}
@@ -82,7 +83,7 @@ export function LandingAnimation() {
}))
await delay(1000)
animateClick(deleteRef.current!)
animateClick(deleteRef.current ?? raise("deleteRef is null"))
setState((state) => ({ ...state, messageVisible: false }))
await delay(1000)
@@ -105,16 +106,19 @@ export function LandingAnimation() {
void (async () => {
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
while (running) {
const cursor = cursorRef.current ?? raise("cursorRef is null")
const chatInput = chatInputRef.current ?? raise("chatInputRef is null")
// check if the cursor is in the input
const cursorRect = cursorRef.current!.getBoundingClientRect()
const chatInputRect = chatInputRef.current!.getBoundingClientRect()
const cursorRect = cursor.getBoundingClientRect()
const chatInputRect = chatInput.getBoundingClientRect()
const isOverInput =
cursorRef.current &&
chatInputRef.current &&
cursorRect.top + cursorRect.height / 2 > chatInputRect.top
cursorRef.current!.src = isOverInput ? cursorIbeamUrl : cursorUrl
cursor.src = isOverInput ? cursorIbeamUrl : cursorUrl
await animationFrame()
}

View File

@@ -1,8 +1,8 @@
---
import {
ArrowTopRightOnSquareIcon,
CodeBracketIcon,
DocumentTextIcon,
ArrowTopRightOnSquareIcon,
CodeBracketIcon,
DocumentTextIcon,
} from "@heroicons/react/20/solid"
import { Bars3Icon } from "@heroicons/react/24/outline"
import { getCollection } from "astro:content"
@@ -12,69 +12,70 @@ import MenuItem from "./menu-item.astro"
import Menu from "./menu.astro"
const links = [
{
href: "/guides/getting-started",
label: "Guides",
icon: DocumentTextIcon,
component: "a",
prefetch: true,
},
{
href: "/api/",
label: "API Reference",
icon: CodeBracketIcon,
component: "a",
},
{
href: "https://github.com/itsMapleLeaf/reacord",
label: "GitHub",
icon: ArrowTopRightOnSquareIcon,
component: ExternalLink,
},
{
href: "/guides/getting-started",
label: "Guides",
icon: DocumentTextIcon,
component: "a",
prefetch: true,
},
{
href: "/api/",
label: "API Reference",
icon: CodeBracketIcon,
component: "a",
},
{
href: "https://github.com/itsMapleLeaf/reacord",
label: "GitHub",
icon: ArrowTopRightOnSquareIcon,
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
component: ExternalLink,
},
]
const guides = await getCollection("guides")
---
<nav class="flex justify-between items-center h-16">
<a href="/">
<AppLogo class="w-32" />
<span class="sr-only">Home</span>
</a>
<div class="hidden md:flex gap-4">
{
links.map((link) => (
<link.component
href={link.href}
class="link inline-flex gap-1 items-center"
rel={link.prefetch ? "prefetch" : undefined}
>
<link.icon className="inline-icon" />
{link.label}
</link.component>
))
}
</div>
<nav class="flex h-16 items-center justify-between">
<a href="/">
<AppLogo class="w-32" />
<span class="sr-only">Home</span>
</a>
<div class="hidden gap-4 md:flex">
{
links.map((link) => (
<link.component
href={link.href}
class="link inline-flex items-center gap-1"
rel={link.prefetch ? "prefetch" : undefined}
>
<link.icon className="inline-icon" />
{link.label}
</link.component>
))
}
</div>
<Menu>
<Fragment slot="button">
<Bars3Icon className="w-6" />
<span class="sr-only">Menu</span>
</Fragment>
{
links.map((link) => (
<link.component href={link.href}>
<MenuItem icon={link.icon} label={link.label} />
</link.component>
))
}
<hr class="border-black/25" />
{
guides.map((guide) => (
<a href={`/guides/${guide.slug}`} rel="prefetch">
<MenuItem icon={DocumentTextIcon} label={guide.data.title} />
</a>
))
}
</Menu>
<Menu>
<Fragment slot="button">
<Bars3Icon className="w-6" />
<span class="sr-only">Menu</span>
</Fragment>
{
links.map((link) => (
<link.component href={link.href}>
<MenuItem icon={link.icon} label={link.label} />
</link.component>
))
}
<hr class="border-black/25" />
{
guides.map((guide) => (
<a href={`/guides/${guide.slug}`} rel="prefetch">
<MenuItem icon={DocumentTextIcon} label={guide.data.title} />
</a>
))
}
</Menu>
</nav>

3
pnpm-lock.yaml generated
View File

@@ -129,6 +129,9 @@ importers:
'@heroicons/react':
specifier: ^2.0.18
version: 2.0.18(react@18.2.0)
'@reacord/helpers':
specifier: workspace:^
version: link:../helpers
'@tailwindcss/typography':
specifier: ^0.5.10
version: 0.5.10(tailwindcss@3.3.3)